From 91241bb6605a021a02fbdadd774ae36ca5d95b83 Mon Sep 17 00:00:00 2001 From: hanpaopao <510423039@qq.com> Date: Thu, 7 Nov 2024 14:08:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B0=83=E6=95=B4=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 1 + .../Lion/AbpPro/Cli/AbpProCliCoreModule.cs | 14 +- .../Lion/AbpPro/Cli/Commands/NewCommand.cs | 4 +- docs/content/index.md | 4 +- .../Pages/Login.cshtml | 2 +- .../Pages/Monitor.cshtml | 2 +- .../bootstrap/css/bootstrap.min.css | 0 .../abp-vnext-pro-nuget-simplify/.gitignore | 285 - .../aspnet-core/Delete-BIN-OBJ-Folders.bat | 20 - .../aspnet-core/Directory.Build.Lion.targets | 41 - .../Directory.Build.Microsoft.targets | 25 - .../aspnet-core/Directory.Build.Volo.targets | 93 - .../aspnet-core/Directory.Build.targets | 95 - .../aspnet-core/Dockerfile | 21 - .../MyCompanyName.MyProjectName.sln | 140 - .../aspnet-core/NuGet.Config | 7 - .../aspnet-core/global.json | 6 - .../Controllers/HomeController.cs | 10 - .../Dockerfile | 23 - .../AutoDeleteAfterSuccessAttributer.cs | 21 - .../Extensions/Hangfire/CronType.cs | 78 - .../Hangfire/CustomHangfireAuthorizeFilter.cs | 11 - .../Extensions/Hangfire/JobRetryLastFilter.cs | 24 - .../Hangfire/RecurringJobsExtensions.cs | 15 - .../GlobalUsings.cs | 65 - ...panyName.MyProjectName.HttpApi.Host.csproj | 65 - .../MyProjectNameHttpApiHostConst.cs | 40 - .../MyProjectNameHttpApiHostModule.cs | 273 - .../Pages/Login.cshtml | 158 - .../Pages/Login.cshtml.cs | 69 - .../Pages/Monitor.cshtml | 171 - .../Pages/Monitor.cshtml.cs | 12 - .../Program.cs | 25 - .../Properties/launchSettings.json | 12 - .../Startup.cs | 15 - .../appsettings.Production.json | 56 - .../appsettings.json | 57 - .../tempkey.jwk | 1 - .../tempkey.rsa | 1 - .../wwwroot/images/cap.png | Bin 11113 -> 0 bytes .../wwwroot/images/hangfire.png | Bin 36278 -> 0 bytes .../wwwroot/images/miniprofiler.png | Bin 22147 -> 0 bytes .../wwwroot/images/more.png | Bin 20558 -> 0 bytes .../wwwroot/images/swagger.png | Bin 38571 -> 0 bytes .../wwwroot/images/xxx-job.png | Bin 25256 -> 0 bytes .../lib/bootstrap/css/bootstrap.min.css | 6 - .../GlobalUsings.cs | 16 - .../Jobs/IRecurringJob.cs | 11 - ...MyProjectName.Application.Contracts.csproj | 20 - ...MyProjectNameApplicationContractsModule.cs | 18 - .../MyProjectNameDtoExtensions.cs | 25 - ...ProjectNamePermissionDefinitionProvider.cs | 17 - .../Permissions/MyProjectNamePermissions.cs | 7 - .../GlobalUsings.cs | 20 - .../Jobs/TestJob.cs | 11 - ...mpanyName.MyProjectName.Application.csproj | 27 - .../MyProjectNameAppService.cs | 12 - ...ProjectNameApplicationAutoMapperProfile.cs | 10 - .../MyProjectNameApplicationModule.cs | 24 - .../Properties/AssemblyInfo.cs | 2 - .../DbMigratorHostedService.cs | 47 - .../Dockerfile | 19 - .../GlobalUsings.cs | 19 - ...ompanyName.MyProjectName.DbMigrator.csproj | 34 - .../MyProjectNameDbMigratorModule.cs | 39 - .../Program.cs | 45 - .../appsettings.json | 5 - .../tempkey.rsa | 13 - .../GlobalUsings.cs | 39 - .../Localization/MyProjectName/ar.json | 8 - .../Localization/MyProjectName/cs.json | 8 - .../Localization/MyProjectName/de-DE.json | 8 - .../Localization/MyProjectName/en-GB.json | 8 - .../Localization/MyProjectName/en.json | 29 - .../Localization/MyProjectName/es.json | 8 - .../Localization/MyProjectName/fr.json | 8 - .../Localization/MyProjectName/hu.json | 8 - .../Localization/MyProjectName/nl.json | 8 - .../Localization/MyProjectName/pl-PL.json | 8 - .../Localization/MyProjectName/pt-BR.json | 8 - .../Localization/MyProjectName/ru.json | 8 - .../Localization/MyProjectName/sl.json | 8 - .../Localization/MyProjectName/tr.json | 8 - .../Localization/MyProjectName/vi.json | 8 - .../Localization/MyProjectName/zh-Hans.json | 30 - .../Localization/MyProjectName/zh-Hant.json | 14 - .../Localization/MyProjectNameResource.cs | 8 - .../MultiTenancy/MultiTenancyConsts.cs | 11 - ...anyName.MyProjectName.Domain.Shared.csproj | 22 - .../MyProjectNameDomainErrorCodes.cs | 7 - .../MyProjectNameDomainSharedConsts.cs | 9 - .../MyProjectNameDomainSharedModule.cs | 44 - .../MyProjectNameGlobalFeatureConfigurator.cs | 21 - ...yProjectNameModuleExtensionConfigurator.cs | 67 - .../Users/Dto/UserOutput.cs | 7 - .../Data/IMyProjectNameDbSchemaMigrator.cs | 7 - .../Data/MyProjectNameDbMigrationService.cs | 204 - .../Data/NullMyProjectNameDbSchemaMigrator.cs | 13 - .../GlobalUsings.cs | 32 - .../MyCompanyName.MyProjectName.Domain.csproj | 19 - .../MyProjectNameConsts.cs | 9 - .../MyProjectNameDomainModule.cs | 18 - .../MyProjectNameDomainService.cs | 36 - .../Properties/AssemblyInfo.cs | 3 - .../MyProjectNameSettingDefinitionProvider.cs | 25 - .../Settings/MyProjectNameSettings.cs | 7 - ...meworkCoreMyProjectNameDbSchemaMigrator.cs | 27 - .../IMyProjectNameDbContext.cs | 8 - .../MyProjectNameDbContext.cs | 78 - ...ectNameDbContextModelCreatingExtensions.cs | 19 - ...rojectNameEfCoreEntityExtensionMappings.cs | 40 - .../MyProjectNameEntityFrameworkCoreModule.cs | 34 - ...MyProjectNameMigrationsDbContextFactory.cs | 39 - .../GlobalUsings.cs | 35 - .../20231220045158_Init.Designer.cs | 1991 -- .../Migrations/20231220045158_Init.cs | 1311 -- .../MyProjectNameDbContextModelSnapshot.cs | 1988 -- ...e.MyProjectName.EntityFrameworkCore.csproj | 27 - .../Properties/AssemblyInfo.cs | 2 - .../FreeSqlBasicRepository.cs | 14 - .../GlobalUsings.cs | 7 - ...ame.MyProjectName.FreeSqlRepository.csproj | 17 - .../MyProjectNameFreeSqlModule.cs | 15 - .../GlobalUsings.cs | 14 - ...nyName.MyProjectName.HttpApi.Client.csproj | 17 - .../MyProjectNameHttpApiClientModule.cs | 22 - .../Controllers/MyProjectNameController.cs | 12 - .../GlobalUsings.cs | 13 - ...MyCompanyName.MyProjectName.HttpApi.csproj | 23 - .../MyProjectNameHttpApiModule.cs | 29 - .../GlobalUsings.cs | 6 - ...ame.MyProjectName.Application.Tests.csproj | 19 - .../MyProjectNameApplicationTestBase.cs | 7 - .../MyProjectNameApplicationTestModule.cs | 13 - .../Samples/SampleAppServiceTests.cs | 28 - .../GlobalUsings.cs | 13 - .../Localizations/LocalizationHelper_Tests.cs | 40 - .../Localizations/TestType.cs | 9 - ...panyName.MyProjectName.Domain.Tests.csproj | 18 - .../MyProjectNameDomainTestBase.cs | 10 - .../MyProjectNameDomainTestModule.cs | 10 - .../Samples/SampleDomainTests.cs | 40 - ...yProjectNameEntityFrameworkCoreTestBase.cs | 7 - ...rojectNameEntityFrameworkCoreTestModule.cs | 52 - .../GlobalUsings.cs | 11 - ...ojectName.EntityFrameworkCore.Tests.csproj | 20 - .../ClientDemoService.cs | 21 - .../ConsoleTestAppHostedService.cs | 20 - .../GlobalUsings.cs | 14 - ...tName.HttpApi.Client.ConsoleTestApp.csproj | 31 - .../MyProjectNameConsoleApiClientModule.cs | 22 - .../Program.cs | 17 - .../appsettings.json | 18 - .../appsettings.secrets.json | 2 - .../GlobalUsings.cs | 22 - ...yCompanyName.MyProjectName.TestBase.csproj | 34 - .../MyProjectNameTestBase.cs | 53 - .../MyProjectNameTestBaseModule.cs | 41 - .../MyProjectNameTestDataSeedContributor.cs | 12 - .../Security/FakeCurrentPrincipalAccessor.cs | 38 - .../appsettings.json | 5 - .../vben28/.dockerignore | 3 - .../vben28/.editorconfig | 19 - .../abp-vnext-pro-nuget-simplify/vben28/.env | 8 - .../vben28/.env.development | 29 - .../vben28/.env.production | 42 - .../vben28/.env.test | 36 - .../vben28/.eslintignore | 15 - .../vben28/.eslintrc.js | 76 - .../vben28/.gitattributes | 2 - .../vben28/.gitignore | 33 - .../vben28/.gitpod.yml | 6 - .../vben28/.prettierignore | 9 - .../vben28/.stylelintignore | 3 - .../vben28/CHANGELOG.en_US.md | 1262 -- .../vben28/CHANGELOG.md | 1586 -- .../vben28/CHANGELOG.zh_CN.md | 1317 -- .../vben28/Dockerfile | 18 - .../vben28/LICENSE | 21 - .../vben28/README.md | 169 - .../vben28/README.zh-CN.md | 175 - .../vben28/_nginx/default.conf | 38 - .../vben28/_nginx/env.js | 15 - .../vben28/_nginx/nginx.conf | 46 - .../vben28/build/config/themeConfig.ts | 79 - .../vben28/build/constant.ts | 6 - .../build/generate/generateModifyVars.ts | 37 - .../vben28/build/generate/icon/index.ts | 72 - .../vben28/build/getConfigFileName.ts | 9 - .../vben28/build/script/buildConf.ts | 45 - .../vben28/build/script/postBuild.ts | 23 - .../vben28/build/utils.ts | 92 - .../vben28/build/vite/plugin/compress.ts | 35 - .../vben28/build/vite/plugin/html.ts | 40 - .../vben28/build/vite/plugin/imagemin.ts | 34 - .../vben28/build/vite/plugin/index.ts | 82 - .../vben28/build/vite/plugin/mock.ts | 19 - .../vben28/build/vite/plugin/pwa.ts | 33 - .../vben28/build/vite/plugin/styleImport.ts | 80 - .../vben28/build/vite/plugin/svgSprite.ts | 17 - .../vben28/build/vite/plugin/theme.ts | 89 - .../vben28/build/vite/plugin/visualizer.ts | 17 - .../vben28/build/vite/proxy.ts | 34 - .../vben28/commitlint.config.js | 33 - .../vben28/index.html | 159 - .../vben28/mock/_createProductionServer.ts | 18 - .../vben28/mock/_util.ts | 60 - .../vben28/mock/demo/account.ts | 71 - .../vben28/mock/demo/api-cascader.ts | 325 - .../vben28/mock/demo/select-demo.ts | 28 - .../vben28/mock/demo/system.ts | 202 - .../vben28/mock/demo/table-demo.ts | 52 - .../vben28/mock/demo/tree-demo.ts | 38 - .../vben28/mock/sys/menu.ts | 270 - .../vben28/mock/sys/user.ts | 122 - .../vben28/nswag/nswag.json | 74 - .../vben28/nswag/refresh.bat | 1 - .../vben28/nswag/templates/AxiosClient.liquid | 92 - .../vben28/nswag/templates/Class.liquid | 189 - .../vben28/nswag/templates/File.liquid | 160 - .../vben28/package.json | 190 - .../vben28/postcss.config.js | 5 - .../vben28/prettier.config.js | 10 - .../vben28/public/favicon.ico | Bin 16958 -> 0 bytes .../vben28/public/resource/img/logo.png | Bin 124431 -> 0 bytes .../public/resource/img/pwa-192x192.png | Bin 12205 -> 0 bytes .../public/resource/img/pwa-512x512.png | Bin 52656 -> 0 bytes .../public/resource/tinymce/langs/en.js | 419 - .../public/resource/tinymce/langs/zh_CN.js | 389 - .../ui/oxide-dark/content.inline.min.css | 239 - .../skins/ui/oxide-dark/content.min.css | 235 - .../ui/oxide-dark/content.mobile.min.css | 17 - .../tinymce/skins/ui/oxide-dark/skin.min.css | 875 - .../skins/ui/oxide-dark/skin.mobile.min.css | 239 - .../skins/ui/oxide/content.inline.min.css | 239 - .../tinymce/skins/ui/oxide/content.min.css | 235 - .../skins/ui/oxide/content.mobile.min.css | 17 - .../skins/ui/oxide/fonts/tinymce-mobile.woff | Bin 4624 -> 0 bytes .../tinymce/skins/ui/oxide/skin.min.css | 875 - .../skins/ui/oxide/skin.mobile.min.css | 239 - .../vben28/src/App.vue | 21 - .../vben28/src/api/demo/account.ts | 16 - .../vben28/src/api/demo/cascader.ts | 9 - .../vben28/src/api/demo/error.ts | 12 - .../vben28/src/api/demo/model/accountModel.ts | 7 - .../vben28/src/api/demo/model/areaModel.ts | 12 - .../vben28/src/api/demo/model/optionsModel.ts | 15 - .../vben28/src/api/demo/model/systemModel.ts | 74 - .../vben28/src/api/demo/model/tableModel.ts | 20 - .../vben28/src/api/demo/select.ts | 11 - .../vben28/src/api/demo/system.ts | 44 - .../vben28/src/api/demo/table.ts | 20 - .../vben28/src/api/demo/tree.ts | 11 - .../vben28/src/api/model/baseModel.ts | 9 - .../vben28/src/api/sys/menu.ts | 14 - .../vben28/src/api/sys/model/menuModel.ts | 16 - .../vben28/src/api/sys/model/uploadModel.ts | 5 - .../vben28/src/api/sys/model/userModel.ts | 38 - .../vben28/src/api/sys/upload.ts | 22 - .../vben28/src/api/sys/user.ts | 83 - .../src/assets/icons/download-count.svg | 1 - .../src/assets/icons/dynamic-avatar-1.svg | 1 - .../src/assets/icons/dynamic-avatar-2.svg | 1 - .../src/assets/icons/dynamic-avatar-3.svg | 1 - .../src/assets/icons/dynamic-avatar-4.svg | 1 - .../src/assets/icons/dynamic-avatar-5.svg | 1 - .../src/assets/icons/dynamic-avatar-6.svg | 1 - .../vben28/src/assets/icons/moon.svg | 16 - .../vben28/src/assets/icons/sun.svg | 42 - .../vben28/src/assets/icons/test.svg | 21 - .../vben28/src/assets/icons/total-sales.svg | 1 - .../vben28/src/assets/icons/transaction.svg | 1 - .../vben28/src/assets/icons/visit-count.svg | 1 - .../vben28/src/assets/images/demo.png | Bin 33342 -> 0 bytes .../vben28/src/assets/images/header.jpg | Bin 16880 -> 0 bytes .../vben28/src/assets/images/logo.png | Bin 124431 -> 0 bytes .../vben28/src/assets/svg/illustration.svg | 1 - .../vben28/src/assets/svg/login-bg-dark.svg | 19 - .../vben28/src/assets/svg/login-bg.svg | 17 - .../vben28/src/assets/svg/login-box-bg.svg | 1 - .../vben28/src/assets/svg/net-error.svg | 1 - .../vben28/src/assets/svg/no-data.svg | 1 - .../src/assets/svg/preview/p-rotate.svg | 1 - .../vben28/src/assets/svg/preview/resume.svg | 1 - .../vben28/src/assets/svg/preview/scale.svg | 1 - .../src/assets/svg/preview/unrotate.svg | 1 - .../vben28/src/assets/svg/preview/unscale.svg | 1 - .../src/components/Application/index.ts | 15 - .../Application/src/AppDarkModeToggle.vue | 76 - .../Application/src/AppLocalePicker.vue | 76 - .../components/Application/src/AppLogo.vue | 93 - .../Application/src/AppProvider.vue | 82 - .../Application/src/search/AppSearch.vue | 33 - .../src/search/AppSearchFooter.vue | 56 - .../src/search/AppSearchKeyItem.vue | 11 - .../Application/src/search/AppSearchModal.vue | 267 - .../Application/src/search/useMenuSearch.ts | 166 - .../Application/src/useAppContext.ts | 17 - .../vben28/src/components/Authority/index.ts | 4 - .../components/Authority/src/Authority.vue | 45 - .../vben28/src/components/Basic/index.ts | 8 - .../src/components/Basic/src/BasicArrow.vue | 84 - .../src/components/Basic/src/BasicHelp.vue | 114 - .../src/components/Basic/src/BasicTitle.vue | 76 - .../vben28/src/components/Button/index.ts | 9 - .../src/components/Button/src/BasicButton.vue | 40 - .../Button/src/PopConfirmButton.vue | 54 - .../vben28/src/components/Button/src/props.ts | 19 - .../vben28/src/components/CardList/index.ts | 4 - .../src/components/CardList/src/CardList.vue | 177 - .../src/components/CardList/src/data.ts | 25 - .../src/components/ClickOutSide/index.ts | 4 - .../ClickOutSide/src/ClickOutSide.vue | 19 - .../vben28/src/components/CodeEditor/index.ts | 8 - .../components/CodeEditor/src/CodeEditor.vue | 54 - .../CodeEditor/src/codemirror/CodeMirror.vue | 113 - .../CodeEditor/src/codemirror/codeMirror.ts | 21 - .../CodeEditor/src/codemirror/codemirror.css | 525 - .../src/json-preview/JsonPreview.vue | 12 - .../src/components/CodeEditor/src/typing.ts | 5 - .../vben28/src/components/Container/index.ts | 10 - .../Container/src/LazyContainer.vue | 145 - .../Container/src/ScrollContainer.vue | 93 - .../src/collapse/CollapseContainer.vue | 110 - .../Container/src/collapse/CollapseHeader.vue | 38 - .../src/components/Container/src/typing.ts | 17 - .../src/components/ContextMenu/index.ts | 3 - .../ContextMenu/src/ContextMenu.vue | 209 - .../ContextMenu/src/createContextMenu.ts | 75 - .../src/components/ContextMenu/src/typing.ts | 36 - .../vben28/src/components/CountDown/index.ts | 6 - .../components/CountDown/src/CountButton.vue | 62 - .../CountDown/src/CountdownInput.vue | 54 - .../components/CountDown/src/useCountdown.ts | 51 - .../vben28/src/components/CountTo/index.ts | 4 - .../src/components/CountTo/src/CountTo.vue | 110 - .../vben28/src/components/Cropper/index.ts | 7 - .../components/Cropper/src/CopperModal.vue | 283 - .../src/components/Cropper/src/Cropper.vue | 188 - .../components/Cropper/src/CropperAvatar.vue | 161 - .../src/components/Cropper/src/typing.ts | 8 - .../src/components/Description/index.ts | 6 - .../Description/src/Description.vue | 184 - .../src/components/Description/src/typing.ts | 50 - .../Description/src/useDescription.ts | 28 - .../vben28/src/components/Drawer/index.ts | 6 - .../src/components/Drawer/src/BasicDrawer.vue | 256 - .../Drawer/src/components/DrawerFooter.vue | 82 - .../Drawer/src/components/DrawerHeader.vue | 74 - .../vben28/src/components/Drawer/src/props.ts | 44 - .../src/components/Drawer/src/typing.ts | 193 - .../src/components/Drawer/src/useDrawer.ts | 161 - .../vben28/src/components/Dropdown/index.ts | 5 - .../src/components/Dropdown/src/Dropdown.vue | 96 - .../src/components/Dropdown/src/typing.ts | 9 - .../vben28/src/components/Excel/index.ts | 8 - .../src/components/Excel/src/Export2Excel.ts | 59 - .../components/Excel/src/ExportExcelModal.vue | 91 - .../src/components/Excel/src/ImportExcel.vue | 157 - .../vben28/src/components/Excel/src/typing.ts | 27 - .../vben28/src/components/FlowChart/index.ts | 4 - .../components/FlowChart/src/FlowChart.vue | 158 - .../FlowChart/src/FlowChartToolbar.vue | 162 - .../FlowChart/src/adpterForTurbo.ts | 75 - .../src/components/FlowChart/src/config.ts | 96 - .../src/components/FlowChart/src/enum.ts | 11 - .../src/components/FlowChart/src/types.ts | 14 - .../FlowChart/src/useFlowContext.ts | 17 - .../vben28/src/components/Form/index.ts | 16 - .../src/components/Form/src/BasicForm.vue | 353 - .../src/components/Form/src/componentMap.ts | 81 - .../Form/src/components/ApiCascader.vue | 198 - .../Form/src/components/ApiRadioGroup.vue | 130 - .../Form/src/components/ApiSelect.vue | 147 - .../Form/src/components/ApiTree.vue | 90 - .../Form/src/components/ApiTreeSelect.vue | 86 - .../Form/src/components/FormAction.vue | 135 - .../Form/src/components/FormItem.vue | 392 - .../Form/src/components/RadioButtonGroup.vue | 57 - .../vben28/src/components/Form/src/helper.ts | 74 - .../components/Form/src/hooks/useAdvanced.ts | 165 - .../components/Form/src/hooks/useAutoFocus.ts | 40 - .../Form/src/hooks/useComponentRegister.ts | 11 - .../src/components/Form/src/hooks/useForm.ts | 122 - .../Form/src/hooks/useFormContext.ts | 17 - .../Form/src/hooks/useFormEvents.ts | 314 - .../Form/src/hooks/useFormValues.ts | 131 - .../Form/src/hooks/useLabelWidth.ts | 42 - .../vben28/src/components/Form/src/props.ts | 103 - .../src/components/Form/src/types/form.ts | 223 - .../src/components/Form/src/types/formItem.ts | 91 - .../src/components/Form/src/types/hooks.ts | 6 - .../src/components/Form/src/types/index.ts | 116 - .../src/components/Icon/data/icons.data.ts | 793 - .../vben28/src/components/Icon/index.ts | 7 - .../vben28/src/components/Icon/src/Icon.vue | 121 - .../src/components/Icon/src/IconPicker.vue | 191 - .../src/components/Icon/src/SvgIcon.vue | 65 - .../vben28/src/components/Loading/index.ts | 5 - .../src/components/Loading/src/Loading.vue | 79 - .../components/Loading/src/createLoading.ts | 65 - .../src/components/Loading/src/typing.ts | 10 - .../src/components/Loading/src/useLoading.ts | 49 - .../vben28/src/components/Markdown/index.ts | 7 - .../src/components/Markdown/src/Markdown.vue | 147 - .../Markdown/src/MarkdownViewer.vue | 23 - .../src/components/Markdown/src/typing.ts | 4 - .../vben28/src/components/Menu/index.ts | 3 - .../src/components/Menu/src/BasicMenu.vue | 164 - .../Menu/src/components/BasicMenuItem.vue | 20 - .../Menu/src/components/BasicSubMenuItem.vue | 55 - .../Menu/src/components/MenuItemContent.vue | 34 - .../vben28/src/components/Menu/src/index.less | 74 - .../vben28/src/components/Menu/src/props.ts | 60 - .../vben28/src/components/Menu/src/types.ts | 25 - .../src/components/Menu/src/useOpenKeys.ts | 83 - .../vben28/src/components/Modal/index.ts | 8 - .../src/components/Modal/src/BasicModal.vue | 242 - .../components/Modal/src/components/Modal.tsx | 31 - .../Modal/src/components/ModalClose.vue | 106 - .../Modal/src/components/ModalFooter.vue | 40 - .../Modal/src/components/ModalHeader.vue | 22 - .../Modal/src/components/ModalWrapper.vue | 169 - .../components/Modal/src/hooks/useModal.ts | 163 - .../Modal/src/hooks/useModalContext.ts | 16 - .../Modal/src/hooks/useModalDrag.ts | 107 - .../Modal/src/hooks/useModalFullScreen.ts | 43 - .../src/components/Modal/src/index.less | 127 - .../vben28/src/components/Modal/src/props.ts | 83 - .../vben28/src/components/Modal/src/typing.ts | 209 - .../vben28/src/components/Page/index.ts | 7 - .../src/components/Page/src/PageFooter.vue | 50 - .../src/components/Page/src/PageWrapper.vue | 191 - .../vben28/src/components/Preview/index.ts | 2 - .../src/components/Preview/src/Functional.vue | 546 - .../src/components/Preview/src/Preview.vue | 94 - .../src/components/Preview/src/functional.ts | 17 - .../src/components/Preview/src/typing.ts | 49 - .../vben28/src/components/Qrcode/index.ts | 5 - .../src/components/Qrcode/src/Qrcode.vue | 112 - .../src/components/Qrcode/src/drawCanvas.ts | 37 - .../src/components/Qrcode/src/drawLogo.ts | 88 - .../src/components/Qrcode/src/qrcodePlus.ts | 4 - .../src/components/Qrcode/src/toCanvas.ts | 10 - .../src/components/Qrcode/src/typing.ts | 38 - .../vben28/src/components/Scrollbar/index.ts | 8 - .../components/Scrollbar/src/Scrollbar.vue | 206 - .../src/components/Scrollbar/src/bar.ts | 110 - .../src/components/Scrollbar/src/types.d.ts | 18 - .../src/components/Scrollbar/src/util.ts | 50 - .../vben28/src/components/SimpleMenu/index.ts | 2 - .../components/SimpleMenu/src/SimpleMenu.vue | 160 - .../SimpleMenu/src/SimpleMenuTag.vue | 68 - .../SimpleMenu/src/SimpleSubMenu.vue | 113 - .../SimpleMenu/src/components/Menu.vue | 158 - .../src/components/MenuCollapseTransition.vue | 78 - .../SimpleMenu/src/components/MenuItem.vue | 107 - .../SimpleMenu/src/components/SubMenuItem.vue | 334 - .../SimpleMenu/src/components/menu.less | 309 - .../SimpleMenu/src/components/types.ts | 25 - .../SimpleMenu/src/components/useMenu.ts | 84 - .../src/components/useSimpleMenuContext.ts | 18 - .../src/components/SimpleMenu/src/index.less | 77 - .../src/components/SimpleMenu/src/types.ts | 5 - .../components/SimpleMenu/src/useOpenKeys.ts | 50 - .../src/components/StrengthMeter/index.ts | 4 - .../StrengthMeter/src/StrengthMeter.vue | 142 - .../vben28/src/components/Table/index.ts | 11 - .../src/components/Table/src/BasicTable.vue | 456 - .../src/components/Table/src/componentMap.ts | 36 - .../src/components/EditTableHeaderIcon.vue | 16 - .../Table/src/components/HeaderCell.vue | 48 - .../Table/src/components/TableAction.vue | 202 - .../Table/src/components/TableFooter.vue | 94 - .../Table/src/components/TableHeader.vue | 81 - .../Table/src/components/TableImg.vue | 85 - .../Table/src/components/TableTitle.vue | 53 - .../src/components/editable/CellComponent.ts | 44 - .../src/components/editable/EditableCell.vue | 512 - .../Table/src/components/editable/helper.ts | 28 - .../Table/src/components/editable/index.ts | 68 - .../src/components/settings/ColumnSetting.vue | 482 - .../components/settings/FullScreenSetting.vue | 38 - .../src/components/settings/RedoSetting.vue | 33 - .../src/components/settings/SizeSetting.vue | 64 - .../Table/src/components/settings/index.vue | 76 - .../vben28/src/components/Table/src/const.ts | 38 - .../components/Table/src/hooks/useColumns.ts | 317 - .../Table/src/hooks/useCustomRow.ts | 100 - .../Table/src/hooks/useDataSource.ts | 374 - .../components/Table/src/hooks/useLoading.ts | 21 - .../Table/src/hooks/usePagination.tsx | 85 - .../Table/src/hooks/useRowSelection.ts | 122 - .../components/Table/src/hooks/useScrollTo.ts | 55 - .../components/Table/src/hooks/useTable.ts | 167 - .../Table/src/hooks/useTableContext.ts | 22 - .../Table/src/hooks/useTableExpand.ts | 65 - .../Table/src/hooks/useTableFooter.ts | 57 - .../Table/src/hooks/useTableForm.ts | 50 - .../Table/src/hooks/useTableHeader.ts | 54 - .../Table/src/hooks/useTableScroll.ts | 220 - .../Table/src/hooks/useTableStyle.ts | 20 - .../vben28/src/components/Table/src/props.ts | 151 - .../src/components/Table/src/types/column.ts | 198 - .../Table/src/types/componentType.ts | 11 - .../components/Table/src/types/pagination.ts | 115 - .../src/components/Table/src/types/table.ts | 476 - .../components/Table/src/types/tableAction.ts | 39 - .../vben28/src/components/Time/index.ts | 4 - .../vben28/src/components/Time/src/Time.vue | 108 - .../vben28/src/components/Tinymce/index.ts | 4 - .../src/components/Tinymce/src/Editor.vue | 346 - .../src/components/Tinymce/src/ImgUpload.vue | 96 - .../src/components/Tinymce/src/helper.ts | 81 - .../src/components/Tinymce/src/tinymce.ts | 13 - .../vben28/src/components/Transition/index.ts | 27 - .../Transition/src/CollapseTransition.vue | 78 - .../Transition/src/CreateTransition.tsx | 73 - .../Transition/src/ExpandTransition.ts | 89 - .../vben28/src/components/Tree/index.ts | 6 - .../src/components/Tree/src/BasicTree.vue | 457 - .../src/components/Tree/src/TreeIcon.ts | 13 - .../Tree/src/components/TreeHeader.vue | 170 - .../src/components/Tree/src/hooks/useTree.ts | 207 - .../src/components/Tree/src/types/tree.ts | 194 - .../src/components/Tree/style/index.less | 52 - .../vben28/src/components/Tree/style/index.ts | 1 - .../vben28/src/components/Upload/index.ts | 4 - .../src/components/Upload/src/BasicUpload.vue | 123 - .../src/components/Upload/src/FileList.vue | 104 - .../src/components/Upload/src/ThumbUrl.vue | 29 - .../src/components/Upload/src/UploadModal.vue | 322 - .../Upload/src/UploadPreviewModal.vue | 99 - .../vben28/src/components/Upload/src/data.tsx | 153 - .../src/components/Upload/src/helper.ts | 27 - .../vben28/src/components/Upload/src/props.ts | 83 - .../src/components/Upload/src/typing.ts | 55 - .../src/components/Upload/src/useUpload.ts | 60 - .../vben28/src/components/Verify/index.ts | 7 - .../src/components/Verify/src/DragVerify.vue | 371 - .../src/components/Verify/src/ImgRotate.vue | 220 - .../vben28/src/components/Verify/src/props.ts | 87 - .../src/components/Verify/src/typing.ts | 14 - .../src/components/VirtualScroll/index.ts | 4 - .../VirtualScroll/src/VirtualScroll.vue | 190 - .../vben28/src/components/registerGlobComp.ts | 7 - .../vben28/src/design/ant/btn.less | 285 - .../vben28/src/design/ant/index.less | 59 - .../vben28/src/design/ant/input.less | 24 - .../vben28/src/design/ant/pagination.less | 96 - .../vben28/src/design/ant/table.less | 76 - .../vben28/src/design/color.less | 138 - .../vben28/src/design/config.less | 2 - .../vben28/src/design/index.less | 44 - .../vben28/src/design/public.less | 51 - .../vben28/src/design/theme.less | 52 - .../vben28/src/design/transition/base.less | 18 - .../vben28/src/design/transition/fade.less | 93 - .../vben28/src/design/transition/index.less | 10 - .../vben28/src/design/transition/scale.less | 21 - .../vben28/src/design/transition/scroll.less | 67 - .../vben28/src/design/transition/slide.less | 39 - .../vben28/src/design/transition/zoom.less | 27 - .../vben28/src/design/var/breakpoint.less | 33 - .../vben28/src/design/var/easing.less | 18 - .../vben28/src/design/var/index.less | 39 - .../vben28/src/directives/clickOutside.ts | 86 - .../vben28/src/directives/index.ts | 11 - .../vben28/src/directives/loading.ts | 39 - .../vben28/src/directives/permission.ts | 32 - .../vben28/src/directives/repeatClick.ts | 31 - .../vben28/src/directives/ripple/index.less | 21 - .../vben28/src/directives/ripple/index.ts | 191 - .../vben28/src/enums/appEnum.ts | 52 - .../vben28/src/enums/breakpointEnum.ts | 28 - .../vben28/src/enums/cacheEnum.ts | 37 - .../vben28/src/enums/exceptionEnum.ts | 27 - .../vben28/src/enums/httpEnum.ts | 31 - .../vben28/src/enums/menuEnum.ts | 50 - .../vben28/src/enums/pageEnum.ts | 12 - .../vben28/src/enums/roleEnum.ts | 7 - .../vben28/src/enums/sizeEnum.ts | 19 - .../vben28/src/hooks/component/useFormItem.ts | 60 - .../src/hooks/component/usePageContext.ts | 18 - .../src/hooks/core/onMountedOrActivated.ts | 18 - .../vben28/src/hooks/core/useAttrs.ts | 40 - .../vben28/src/hooks/core/useContext.ts | 44 - .../vben28/src/hooks/core/useLockFn.ts | 17 - .../vben28/src/hooks/core/useRefs.ts | 16 - .../vben28/src/hooks/core/useTimeout.ts | 45 - .../vben28/src/hooks/event/useBreakpoint.ts | 89 - .../src/hooks/event/useEventListener.ts | 58 - .../hooks/event/useIntersectionObserver.ts | 48 - .../vben28/src/hooks/event/useScroll.ts | 65 - .../vben28/src/hooks/event/useScrollTo.ts | 59 - .../vben28/src/hooks/event/useWindowSizeFn.ts | 35 - .../vben28/src/hooks/setting/index.ts | 30 - .../src/hooks/setting/useHeaderSetting.ts | 105 - .../src/hooks/setting/useMenuSetting.ts | 170 - .../hooks/setting/useMultipleTabSetting.ts | 28 - .../src/hooks/setting/useRootSetting.ts | 95 - .../src/hooks/setting/useTransitionSetting.ts | 31 - .../vben28/src/hooks/web/useAppInject.ts | 10 - .../vben28/src/hooks/web/useContentHeight.ts | 191 - .../vben28/src/hooks/web/useContextMenu.ts | 12 - .../src/hooks/web/useCopyToClipboard.ts | 69 - .../vben28/src/hooks/web/useDesign.ts | 22 - .../vben28/src/hooks/web/useECharts.ts | 121 - .../vben28/src/hooks/web/useFullContent.ts | 28 - .../vben28/src/hooks/web/useI18n.ts | 55 - .../vben28/src/hooks/web/useLockPage.ts | 72 - .../vben28/src/hooks/web/useMessage.tsx | 123 - .../vben28/src/hooks/web/usePage.ts | 53 - .../vben28/src/hooks/web/usePagination.ts | 34 - .../vben28/src/hooks/web/usePermission.ts | 100 - .../vben28/src/hooks/web/useScript.ts | 46 - .../vben28/src/hooks/web/useSignalR.ts | 129 - .../vben28/src/hooks/web/useSortable.ts | 21 - .../vben28/src/hooks/web/useTabs.ts | 103 - .../vben28/src/hooks/web/useTitle.ts | 35 - .../vben28/src/hooks/web/useWatermark.ts | 100 - .../src/layouts/default/content/index.vue | 51 - .../default/content/useContentContext.ts | 17 - .../default/content/useContentViewHeight.ts | 42 - .../src/layouts/default/feature/index.vue | 83 - .../src/layouts/default/footer/index.vue | 95 - .../layouts/default/header/MultipleHeader.vue | 126 - .../default/header/components/Breadcrumb.vue | 204 - .../default/header/components/ErrorAction.vue | 48 - .../default/header/components/FullScreen.vue | 37 - .../default/header/components/index.ts | 14 - .../header/components/lock/LockModal.vue | 126 - .../header/components/notify/NoticeList.vue | 135 - .../default/header/components/notify/data.ts | 60 - .../header/components/notify/index.vue | 82 - .../user-dropdown/ChangePassword.vue | 94 - .../components/user-dropdown/DropMenuItem.vue | 32 - .../header/components/user-dropdown/index.vue | 182 - .../src/layouts/default/header/index.less | 196 - .../src/layouts/default/header/index.vue | 229 - .../vben28/src/layouts/default/index.vue | 92 - .../vben28/src/layouts/default/menu/index.vue | 197 - .../src/layouts/default/menu/useLayoutMenu.ts | 109 - .../layouts/default/setting/SettingDrawer.tsx | 427 - .../setting/components/InputNumberItem.vue | 56 - .../default/setting/components/SelectItem.vue | 75 - .../setting/components/SettingFooter.vue | 99 - .../default/setting/components/SwitchItem.vue | 66 - .../setting/components/ThemeColorPicker.vue | 88 - .../default/setting/components/TypePicker.vue | 178 - .../default/setting/components/index.ts | 8 - .../src/layouts/default/setting/enum.ts | 156 - .../src/layouts/default/setting/handler.ts | 174 - .../src/layouts/default/setting/index.vue | 26 - .../src/layouts/default/sider/DragBar.vue | 66 - .../src/layouts/default/sider/LayoutSider.vue | 185 - .../src/layouts/default/sider/MixSider.vue | 591 - .../src/layouts/default/sider/index.vue | 57 - .../layouts/default/sider/useLayoutSider.ts | 143 - .../default/tabs/components/FoldButton.vue | 42 - .../default/tabs/components/TabContent.vue | 76 - .../default/tabs/components/TabRedo.vue | 33 - .../src/layouts/default/tabs/index.less | 207 - .../vben28/src/layouts/default/tabs/index.vue | 144 - .../vben28/src/layouts/default/tabs/types.ts | 25 - .../layouts/default/tabs/useMultipleTabs.ts | 80 - .../layouts/default/tabs/useTabDropdown.ts | 140 - .../layouts/default/trigger/HeaderTrigger.vue | 25 - .../layouts/default/trigger/SiderTrigger.vue | 21 - .../src/layouts/default/trigger/index.vue | 22 - .../vben28/src/layouts/iframe/index.vue | 29 - .../src/layouts/iframe/useFrameKeepAlive.ts | 59 - .../vben28/src/layouts/page/index.vue | 70 - .../vben28/src/layouts/page/transition.ts | 33 - .../vben28/src/locales/helper.ts | 37 - .../vben28/src/locales/lang/en.ts | 12 - .../vben28/src/locales/lang/en/common.ts | 43 - .../vben28/src/locales/lang/en/component.ts | 129 - .../vben28/src/locales/lang/en/layout.ts | 115 - .../src/locales/lang/en/routes/admin.ts | 99 - .../src/locales/lang/en/routes/basic.ts | 4 - .../src/locales/lang/en/routes/dashboard.ts | 6 - .../src/locales/lang/en/routes/tenant.ts | 8 - .../vben28/src/locales/lang/en/sys.ts | 105 - .../vben28/src/locales/lang/zh-CN/common.ts | 46 - .../src/locales/lang/zh-CN/component.ts | 134 - .../vben28/src/locales/lang/zh-CN/layout.ts | 115 - .../src/locales/lang/zh-CN/routes/admin.ts | 99 - .../src/locales/lang/zh-CN/routes/basic.ts | 4 - .../locales/lang/zh-CN/routes/dashboard.ts | 6 - .../src/locales/lang/zh-CN/routes/tenant.ts | 8 - .../vben28/src/locales/lang/zh-CN/sys.ts | 99 - .../vben28/src/locales/lang/zh_CN.ts | 10 - .../vben28/src/locales/setupI18n.ts | 44 - .../vben28/src/locales/useLocale.ts | 69 - .../vben28/src/logics/error-handle/index.ts | 184 - .../vben28/src/logics/initAppConfig.ts | 84 - .../vben28/src/logics/mitt/routeChange.ts | 31 - .../vben28/src/logics/theme/dark.ts | 24 - .../vben28/src/logics/theme/index.ts | 17 - .../src/logics/theme/updateBackground.ts | 75 - .../src/logics/theme/updateColorWeak.ts | 9 - .../vben28/src/logics/theme/updateGrayMode.ts | 9 - .../vben28/src/logics/theme/util.ts | 11 - .../vben28/src/main.ts | 61 - .../vben28/src/router/constant.ts | 24 - .../vben28/src/router/guard/index.ts | 147 - .../vben28/src/router/guard/paramMenuGuard.ts | 47 - .../src/router/guard/permissionGuard.ts | 99 - .../vben28/src/router/guard/stateGuard.ts | 24 - .../vben28/src/router/helper/menuHelper.ts | 106 - .../vben28/src/router/helper/routeHelper.ts | 178 - .../vben28/src/router/index.ts | 42 - .../vben28/src/router/menus/index.ts | 126 - .../vben28/src/router/routes/basic.ts | 54 - .../vben28/src/router/routes/index.ts | 49 - .../vben28/src/router/routes/mainOut.ts | 40 - .../vben28/src/router/routes/modules/admin.ts | 110 - .../src/router/routes/modules/dashboard.ts | 31 - .../src/router/routes/modules/tenant.ts | 28 - .../vben28/src/router/types.ts | 58 - .../vben28/src/services/ServiceProxies.ts | 16518 ---------------- .../vben28/src/services/ServiceProxyBase.ts | 87 - .../vben28/src/settings/componentSetting.ts | 51 - .../vben28/src/settings/designSetting.ts | 48 - .../vben28/src/settings/encryptionSetting.ts | 13 - .../vben28/src/settings/localeSetting.ts | 29 - .../vben28/src/settings/projectSetting.ts | 182 - .../vben28/src/settings/siteSetting.ts | 8 - .../vben28/src/store/index.ts | 10 - .../vben28/src/store/modules/app.ts | 108 - .../vben28/src/store/modules/errorLog.ts | 77 - .../vben28/src/store/modules/locale.ts | 55 - .../vben28/src/store/modules/lock.ts | 59 - .../vben28/src/store/modules/multipleTab.ts | 359 - .../vben28/src/store/modules/permission.ts | 238 - .../vben28/src/store/modules/user.ts | 262 - .../vben28/src/utils/auth/index.ts | 26 - .../vben28/src/utils/bem.ts | 52 - .../vben28/src/utils/cache/index.ts | 32 - .../vben28/src/utils/cache/memory.ts | 107 - .../vben28/src/utils/cache/persistent.ts | 139 - .../vben28/src/utils/cache/storageCache.ts | 111 - .../vben28/src/utils/cipher.ts | 55 - .../vben28/src/utils/color.ts | 151 - .../vben28/src/utils/dateUtil.ts | 23 - .../vben28/src/utils/domUtils.ts | 180 - .../vben28/src/utils/env.ts | 83 - .../vben28/src/utils/event/index.ts | 42 - .../utils/factory/createAsyncComponent.tsx | 63 - .../vben28/src/utils/file/base64Conver.ts | 41 - .../vben28/src/utils/file/download.ts | 96 - .../vben28/src/utils/helper/treeHelper.ts | 216 - .../vben28/src/utils/helper/tsxHelper.tsx | 35 - .../vben28/src/utils/http/axios/Axios.ts | 237 - .../src/utils/http/axios/axiosCancel.ts | 60 - .../vben28/src/utils/http/axios/axiosRetry.ts | 28 - .../src/utils/http/axios/axiosTransform.ts | 52 - .../src/utils/http/axios/checkStatus.ts | 80 - .../vben28/src/utils/http/axios/helper.ts | 48 - .../vben28/src/utils/http/axios/index.ts | 266 - .../vben28/src/utils/index.ts | 92 - .../vben28/src/utils/is.ts | 99 - .../vben28/src/utils/lib/echarts.ts | 57 - .../vben28/src/utils/log.ts | 9 - .../vben28/src/utils/mitt.ts | 101 - .../vben28/src/utils/propTypes.ts | 34 - .../vben28/src/utils/props.ts | 185 - .../vben28/src/utils/types.ts | 42 - .../vben28/src/utils/uuid.ts | 28 - .../src/views/admin/auditLog/AuditLog.ts | 155 - .../src/views/admin/auditLog/AuditLog.vue | 96 - .../views/admin/auditLog/AuditLogDetail.vue | 23 - .../views/admin/dictionary/AbpDictionary.ts | 418 - .../views/admin/dictionary/AbpDictionary.vue | 272 - .../admin/dictionary/CreateAbpDictionary.vue | 77 - .../dictionary/CreateAbpDictionaryType.vue | 70 - .../admin/dictionary/EditAbpDictionary.vue | 74 - .../dictionary/EditAbpDictionaryType.vue | 73 - .../views/admin/identitySecurityLog/Index.ts | 80 - .../views/admin/identitySecurityLog/Index.vue | 46 - .../views/admin/language/CreateLanguage.vue | 65 - .../vben28/src/views/admin/language/Index.ts | 160 - .../vben28/src/views/admin/language/Index.vue | 132 - .../views/admin/language/UpdateLanguage.vue | 65 - .../admin/languageText/CreateLanguageText.vue | 65 - .../src/views/admin/languageText/Index.ts | 201 - .../src/views/admin/languageText/Index.vue | 106 - .../admin/languageText/UpdateLanguageText.vue | 63 - .../AddRoleToOrganizationUnit.vue | 103 - .../AddUserToOrganizationUnit.vue | 110 - .../CreateOrganizationUnit.vue | 89 - .../EditOrganizationUnit.vue | 75 - .../organizationUnits/OrganizationUnit.ts | 236 - .../organizationUnits/OrganizationUnit.vue | 363 - .../vben28/src/views/admin/roles/AbpRole.ts | 188 - .../vben28/src/views/admin/roles/AbpRole.vue | 167 - .../src/views/admin/roles/CreateAbpRole.vue | 68 - .../src/views/admin/roles/EditAbpRole.vue | 79 - .../views/admin/roles/PermissionAbpRole.vue | 144 - .../src/views/admin/settings/Setting.ts | 16 - .../src/views/admin/settings/Setting.vue | 116 - .../vben28/src/views/admin/users/AbpUser.ts | 331 - .../vben28/src/views/admin/users/AbpUser.vue | 181 - .../src/views/admin/users/CreateAbpUser.vue | 124 - .../src/views/admin/users/EditAbpUser.vue | 167 - .../analysis/components/GrowCard.vue | 34 - .../analysis/components/SalesProductPie.vue | 63 - .../analysis/components/SiteAnalysis.vue | 38 - .../analysis/components/VisitAnalysis.vue | 106 - .../analysis/components/VisitAnalysisBar.vue | 58 - .../analysis/components/VisitRadar.vue | 100 - .../analysis/components/VisitSource.vue | 80 - .../dashboard/analysis/components/props.ts | 16 - .../src/views/dashboard/analysis/data.ts | 43 - .../src/views/dashboard/analysis/index.vue | 25 - .../workbench/components/DynamicInfo.vue | 31 - .../workbench/components/ProjectCard.vue | 34 - .../workbench/components/QuickNav.vue | 19 - .../workbench/components/SaleRadar.vue | 100 - .../workbench/components/WorkbenchHeader.vue | 33 - .../dashboard/workbench/components/data.ts | 156 - .../src/views/dashboard/workbench/index.vue | 36 - .../vben28/src/views/sys/about/index.vue | 98 - .../src/views/sys/exception/Exception.vue | 148 - .../vben28/src/views/sys/exception/index.ts | 1 - .../src/views/sys/iframe/FrameBlank.vue | 9 - .../vben28/src/views/sys/iframe/index.vue | 90 - .../vben28/src/views/sys/lock/LockPage.vue | 250 - .../vben28/src/views/sys/lock/index.vue | 13 - .../vben28/src/views/sys/lock/useNow.ts | 60 - .../views/sys/login/ForgetPasswordForm.vue | 64 - .../src/views/sys/login/GithubOidcSignIn.vue | 46 - .../vben28/src/views/sys/login/Login.vue | 233 - .../vben28/src/views/sys/login/LoginForm.vue | 130 - .../src/views/sys/login/LoginFormTitle.vue | 26 - .../vben28/src/views/sys/login/MobileForm.vue | 71 - .../vben28/src/views/sys/login/OidcSignIn.vue | 47 - .../src/views/sys/login/OidcSignOut.vue | 39 - .../vben28/src/views/sys/login/QrCodeForm.vue | 31 - .../src/views/sys/login/RegisterForm.vue | 104 - .../views/sys/login/SessionTimeoutLogin.vue | 52 - .../src/views/sys/login/TenantLoginForm.vue | 106 - .../vben28/src/views/sys/login/useLogin.ts | 157 - .../vben28/src/views/sys/redirect/index.vue | 30 - .../vben28/src/views/tenants/CreateTenant.vue | 63 - .../views/tenants/EditConnectionString.vue | 76 - .../vben28/src/views/tenants/EditTenant.vue | 70 - .../vben28/src/views/tenants/Tenant.ts | 124 - .../vben28/src/views/tenants/Tenant.vue | 153 - .../vben28/stylelint.config.js | 100 - .../vben28/tests/server/README.md | 15 - .../tests/server/controller/FileController.ts | 18 - .../tests/server/controller/UserController.ts | 15 - .../vben28/tests/server/ecosystem.config.js | 18 - .../vben28/tests/server/index.ts | 63 - .../vben28/tests/server/nodemon.json | 8 - .../vben28/tests/server/package.json | 36 - .../vben28/tests/server/routes.ts | 23 - .../tests/server/service/FileService.ts | 54 - .../tests/server/service/UserService.ts | 25 - .../vben28/tests/server/tsconfig.json | 15 - .../vben28/tests/server/utils.ts | 9 - .../vben28/tests/server/yarn.lock | 2955 --- .../vben28/tsconfig.json | 44 - .../vben28/types/axios.d.ts | 53 - .../vben28/types/config.d.ts | 162 - .../vben28/types/global.d.ts | 101 - .../vben28/types/index.d.ts | 27 - .../vben28/types/module.d.ts | 16 - .../vben28/types/store.d.ts | 50 - .../vben28/types/utils.d.ts | 5 - .../vben28/types/vue-router.d.ts | 47 - .../vben28/vite.config.ts | 115 - .../vben28/windi.config.ts | 74 - 875 files changed, 14 insertions(+), 93143 deletions(-) rename templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/{lib => libs}/bootstrap/css/bootstrap.min.css (100%) delete mode 100644 templates/abp-vnext-pro-nuget-simplify/.gitignore delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/Delete-BIN-OBJ-Folders.bat delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.Lion.targets delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.Microsoft.targets delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.Volo.targets delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.targets delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/Dockerfile delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/MyCompanyName.MyProjectName.sln delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/NuGet.Config delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/global.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Controllers/HomeController.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Dockerfile delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/AutoDeleteAfterSuccessAttributer.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/CronType.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/CustomHangfireAuthorizeFilter.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/JobRetryLastFilter.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/RecurringJobsExtensions.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/GlobalUsings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostConst.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Properties/launchSettings.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Startup.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.Production.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/tempkey.jwk delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/tempkey.rsa delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/cap.png delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/hangfire.png delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/miniprofiler.png delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/more.png delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/swagger.png delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/xxx-job.png delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/lib/bootstrap/css/bootstrap.min.css delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/GlobalUsings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Jobs/IRecurringJob.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameApplicationContractsModule.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameDtoExtensions.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Permissions/MyProjectNamePermissionDefinitionProvider.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Permissions/MyProjectNamePermissions.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/GlobalUsings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/Jobs/TestJob.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameAppService.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationAutoMapperProfile.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationModule.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/Properties/AssemblyInfo.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/DbMigratorHostedService.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Dockerfile delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/GlobalUsings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/tempkey.rsa delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/GlobalUsings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ar.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/cs.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/de-DE.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en-GB.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/es.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/fr.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/hu.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/nl.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/pl-PL.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/pt-BR.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ru.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sl.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/vi.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hans.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hant.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectNameResource.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainErrorCodes.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedConsts.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedModule.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameGlobalFeatureConfigurator.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameModuleExtensionConfigurator.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Users/Dto/UserOutput.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/IMyProjectNameDbSchemaMigrator.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/NullMyProjectNameDbSchemaMigrator.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/GlobalUsings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameConsts.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainService.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Properties/AssemblyInfo.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Settings/MyProjectNameSettingDefinitionProvider.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Settings/MyProjectNameSettings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/EntityFrameworkCoreMyProjectNameDbSchemaMigrator.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/IMyProjectNameDbContext.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContextModelCreatingExtensions.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEfCoreEntityExtensionMappings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameMigrationsDbContextFactory.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/GlobalUsings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231220045158_Init.Designer.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231220045158_Init.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Properties/AssemblyInfo.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/FreeSqlBasicRepository.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/GlobalUsings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/MyCompanyName.MyProjectName.FreeSqlRepository.csproj delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/MyProjectNameFreeSqlModule.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/GlobalUsings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyProjectNameHttpApiClientModule.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/Controllers/MyProjectNameController.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/GlobalUsings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameHttpApiModule.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/GlobalUsings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestBase.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestModule.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppServiceTests.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/GlobalUsings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Localizations/LocalizationHelper_Tests.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Localizations/TestType.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyCompanyName.MyProjectName.Domain.Tests.csproj delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestBase.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleDomainTests.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestBase.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/GlobalUsings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/GlobalUsings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyProjectNameConsoleApiClientModule.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.secrets.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/GlobalUsings.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyCompanyName.MyProjectName.TestBase.csproj delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBase.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestDataSeedContributor.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/Security/FakeCurrentPrincipalAccessor.cs delete mode 100644 templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/appsettings.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/.dockerignore delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/.editorconfig delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/.env delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/.env.development delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/.env.production delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/.env.test delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/.eslintignore delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/.eslintrc.js delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/.gitattributes delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/.gitignore delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/.gitpod.yml delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/.prettierignore delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/.stylelintignore delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/CHANGELOG.en_US.md delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/CHANGELOG.md delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/CHANGELOG.zh_CN.md delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/Dockerfile delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/LICENSE delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/README.md delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/README.zh-CN.md delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/_nginx/default.conf delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/_nginx/env.js delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/_nginx/nginx.conf delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/config/themeConfig.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/constant.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/generate/generateModifyVars.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/generate/icon/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/getConfigFileName.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/script/buildConf.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/script/postBuild.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/utils.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/compress.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/html.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/imagemin.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/mock.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/pwa.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/styleImport.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/svgSprite.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/theme.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/visualizer.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/proxy.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/commitlint.config.js delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/index.html delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/mock/_createProductionServer.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/mock/_util.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/account.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/api-cascader.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/select-demo.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/system.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/table-demo.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/tree-demo.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/mock/sys/menu.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/mock/sys/user.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/nswag/nswag.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/nswag/refresh.bat delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/nswag/templates/AxiosClient.liquid delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/nswag/templates/Class.liquid delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/nswag/templates/File.liquid delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/package.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/postcss.config.js delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/prettier.config.js delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/favicon.ico delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/img/logo.png delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/img/pwa-192x192.png delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/img/pwa-512x512.png delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/langs/en.js delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/langs/zh_CN.js delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/content.inline.min.css delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/content.min.css delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/content.mobile.min.css delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/skin.min.css delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/skin.mobile.min.css delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/content.inline.min.css delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/content.min.css delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/content.mobile.min.css delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/skin.min.css delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/skin.mobile.min.css delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/App.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/account.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/cascader.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/error.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/accountModel.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/areaModel.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/optionsModel.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/systemModel.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/tableModel.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/select.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/system.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/table.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/tree.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/model/baseModel.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/menu.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/model/menuModel.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/model/uploadModel.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/model/userModel.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/upload.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/user.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/download-count.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-1.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-2.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-3.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-4.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-5.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-6.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/moon.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/sun.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/test.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/total-sales.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/transaction.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/visit-count.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/images/demo.png delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/images/header.jpg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/images/logo.png delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/illustration.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/login-bg-dark.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/login-bg.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/login-box-bg.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/net-error.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/no-data.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/p-rotate.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/resume.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/scale.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/unrotate.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/unscale.svg delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppDarkModeToggle.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppLocalePicker.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppLogo.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppProvider.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearch.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearchFooter.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearchKeyItem.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearchModal.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/useMenuSearch.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/useAppContext.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Authority/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Authority/src/Authority.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/src/BasicArrow.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/src/BasicHelp.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/src/BasicTitle.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/src/BasicButton.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/src/PopConfirmButton.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/src/props.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CardList/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CardList/src/CardList.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CardList/src/data.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ClickOutSide/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ClickOutSide/src/ClickOutSide.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/CodeEditor.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/codemirror/CodeMirror.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/codemirror/codeMirror.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/codemirror/codemirror.css delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/json-preview/JsonPreview.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/typing.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/LazyContainer.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/ScrollContainer.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/collapse/CollapseContainer.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/collapse/CollapseHeader.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/typing.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/src/ContextMenu.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/src/createContextMenu.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/src/typing.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/src/CountButton.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/src/CountdownInput.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/src/useCountdown.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountTo/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountTo/src/CountTo.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/CopperModal.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/Cropper.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/CropperAvatar.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/typing.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/src/Description.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/src/typing.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/src/useDescription.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/BasicDrawer.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/components/DrawerFooter.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/components/DrawerHeader.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/props.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/typing.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/useDrawer.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Dropdown/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Dropdown/src/Dropdown.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Dropdown/src/typing.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/Export2Excel.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/ExportExcelModal.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/ImportExcel.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/typing.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/FlowChart.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/FlowChartToolbar.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/adpterForTurbo.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/config.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/enum.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/types.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/useFlowContext.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/BasicForm.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/componentMap.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiCascader.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiRadioGroup.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiSelect.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiTree.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiTreeSelect.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/FormAction.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/FormItem.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/RadioButtonGroup.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/helper.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useAdvanced.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useAutoFocus.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useComponentRegister.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useForm.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useFormContext.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useFormEvents.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useFormValues.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useLabelWidth.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/props.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/form.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/formItem.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/hooks.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/data/icons.data.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/src/Icon.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/src/IconPicker.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/src/SvgIcon.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/Loading.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/createLoading.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/typing.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/useLoading.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/src/Markdown.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/src/MarkdownViewer.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/src/typing.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/BasicMenu.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/components/BasicMenuItem.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/components/BasicSubMenuItem.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/components/MenuItemContent.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/index.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/props.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/types.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/useOpenKeys.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/BasicModal.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/Modal.tsx delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalClose.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalFooter.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalHeader.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalWrapper.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModal.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModalContext.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModalDrag.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModalFullScreen.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/index.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/props.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/typing.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Page/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Page/src/PageFooter.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Page/src/PageWrapper.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/Functional.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/Preview.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/functional.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/typing.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/Qrcode.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/drawCanvas.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/drawLogo.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/qrcodePlus.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/toCanvas.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/typing.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/Scrollbar.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/bar.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/types.d.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/util.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/SimpleMenu.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/SimpleMenuTag.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/SimpleSubMenu.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/Menu.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/MenuCollapseTransition.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/MenuItem.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/SubMenuItem.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/menu.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/types.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/useMenu.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/useSimpleMenuContext.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/index.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/types.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/useOpenKeys.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/StrengthMeter/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/StrengthMeter/src/StrengthMeter.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/BasicTable.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/componentMap.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/EditTableHeaderIcon.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/HeaderCell.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableAction.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableFooter.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableHeader.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableImg.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableTitle.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/CellComponent.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/EditableCell.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/helper.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/ColumnSetting.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/FullScreenSetting.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/RedoSetting.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/SizeSetting.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/const.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useColumns.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useCustomRow.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useDataSource.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useLoading.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/usePagination.tsx delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useRowSelection.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useScrollTo.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTable.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableContext.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableExpand.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableFooter.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableForm.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableHeader.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableScroll.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableStyle.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/props.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/column.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/componentType.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/pagination.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/table.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/tableAction.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Time/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Time/src/Time.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/Editor.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/ImgUpload.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/helper.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/tinymce.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/src/CollapseTransition.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/src/CreateTransition.tsx delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/src/ExpandTransition.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/BasicTree.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/TreeIcon.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/components/TreeHeader.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/hooks/useTree.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/types/tree.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/style/index.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/style/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/BasicUpload.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/FileList.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/ThumbUrl.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/UploadModal.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/UploadPreviewModal.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/data.tsx delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/helper.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/props.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/typing.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/useUpload.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/DragVerify.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/ImgRotate.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/props.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/typing.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/VirtualScroll/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/VirtualScroll/src/VirtualScroll.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/components/registerGlobComp.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/btn.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/index.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/input.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/pagination.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/table.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/color.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/config.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/index.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/public.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/theme.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/base.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/fade.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/index.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/scale.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/scroll.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/slide.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/zoom.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/var/breakpoint.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/var/easing.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/design/var/index.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/clickOutside.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/loading.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/permission.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/repeatClick.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/ripple/index.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/ripple/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/appEnum.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/breakpointEnum.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/cacheEnum.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/exceptionEnum.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/httpEnum.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/menuEnum.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/pageEnum.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/roleEnum.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/sizeEnum.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/component/useFormItem.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/component/usePageContext.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/onMountedOrActivated.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useAttrs.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useContext.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useLockFn.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useRefs.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useTimeout.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useBreakpoint.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useEventListener.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useIntersectionObserver.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useScroll.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useScrollTo.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useWindowSizeFn.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useHeaderSetting.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useMenuSetting.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useMultipleTabSetting.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useRootSetting.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useTransitionSetting.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useAppInject.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useContentHeight.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useContextMenu.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useCopyToClipboard.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useDesign.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useECharts.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useFullContent.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useI18n.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useLockPage.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useMessage.tsx delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/usePage.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/usePagination.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/usePermission.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useScript.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useSignalR.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useSortable.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useTabs.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useTitle.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useWatermark.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/content/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/content/useContentContext.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/content/useContentViewHeight.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/feature/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/footer/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/MultipleHeader.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/Breadcrumb.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/ErrorAction.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/FullScreen.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/lock/LockModal.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/notify/NoticeList.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/notify/data.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/notify/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/user-dropdown/ChangePassword.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/user-dropdown/DropMenuItem.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/user-dropdown/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/index.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/menu/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/menu/useLayoutMenu.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/SettingDrawer.tsx delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/InputNumberItem.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/SelectItem.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/SettingFooter.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/SwitchItem.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/ThemeColorPicker.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/TypePicker.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/enum.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/handler.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/DragBar.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/LayoutSider.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/MixSider.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/useLayoutSider.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/components/FoldButton.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/components/TabContent.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/components/TabRedo.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/index.less delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/types.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/useMultipleTabs.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/useTabDropdown.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/trigger/HeaderTrigger.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/trigger/SiderTrigger.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/trigger/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/iframe/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/iframe/useFrameKeepAlive.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/page/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/page/transition.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/helper.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/common.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/component.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/layout.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/admin.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/basic.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/dashboard.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/tenant.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/sys.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/common.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/component.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/layout.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/admin.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/basic.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/dashboard.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/tenant.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/sys.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh_CN.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/setupI18n.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/useLocale.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/error-handle/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/initAppConfig.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/mitt/routeChange.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/dark.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/updateBackground.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/updateColorWeak.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/updateGrayMode.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/util.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/main.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/constant.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/paramMenuGuard.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/permissionGuard.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/stateGuard.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/helper/menuHelper.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/helper/routeHelper.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/menus/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/basic.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/mainOut.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/modules/admin.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/modules/dashboard.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/modules/tenant.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/router/types.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/services/ServiceProxies.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/services/ServiceProxyBase.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/componentSetting.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/designSetting.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/encryptionSetting.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/localeSetting.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/projectSetting.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/siteSetting.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/store/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/app.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/errorLog.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/locale.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/lock.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/multipleTab.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/permission.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/user.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/auth/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/bem.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/memory.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/persistent.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/storageCache.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cipher.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/color.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/dateUtil.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/domUtils.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/env.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/event/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/factory/createAsyncComponent.tsx delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/file/base64Conver.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/file/download.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/helper/treeHelper.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/helper/tsxHelper.tsx delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/Axios.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/axiosCancel.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/axiosRetry.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/axiosTransform.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/checkStatus.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/helper.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/is.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/lib/echarts.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/log.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/mitt.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/propTypes.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/props.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/types.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/uuid.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/auditLog/AuditLog.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/auditLog/AuditLog.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/auditLog/AuditLogDetail.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/AbpDictionary.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/AbpDictionary.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/CreateAbpDictionary.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/CreateAbpDictionaryType.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/EditAbpDictionary.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/EditAbpDictionaryType.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/identitySecurityLog/Index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/identitySecurityLog/Index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/CreateLanguage.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/Index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/Index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/UpdateLanguage.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/CreateLanguageText.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/Index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/Index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/UpdateLanguageText.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/AddRoleToOrganizationUnit.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/AddUserToOrganizationUnit.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/CreateOrganizationUnit.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/EditOrganizationUnit.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/OrganizationUnit.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/OrganizationUnit.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/AbpRole.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/AbpRole.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/CreateAbpRole.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/EditAbpRole.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/PermissionAbpRole.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/settings/Setting.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/settings/Setting.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/AbpUser.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/AbpUser.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/CreateAbpUser.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/EditAbpUser.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/GrowCard.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/SalesProductPie.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/SiteAnalysis.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitAnalysis.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitAnalysisBar.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitRadar.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitSource.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/props.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/data.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/DynamicInfo.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/ProjectCard.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/QuickNav.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/SaleRadar.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/WorkbenchHeader.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/data.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/about/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/exception/Exception.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/exception/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/iframe/FrameBlank.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/iframe/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/lock/LockPage.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/lock/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/lock/useNow.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/ForgetPasswordForm.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/GithubOidcSignIn.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/Login.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/LoginForm.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/LoginFormTitle.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/MobileForm.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/OidcSignIn.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/OidcSignOut.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/QrCodeForm.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/RegisterForm.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/SessionTimeoutLogin.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/TenantLoginForm.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/useLogin.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/redirect/index.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/CreateTenant.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/EditConnectionString.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/EditTenant.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/Tenant.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/Tenant.vue delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/stylelint.config.js delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/README.md delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/controller/FileController.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/controller/UserController.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/ecosystem.config.js delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/index.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/nodemon.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/package.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/routes.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/service/FileService.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/service/UserService.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/tsconfig.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/utils.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/yarn.lock delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/tsconfig.json delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/types/axios.d.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/types/config.d.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/types/global.d.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/types/index.d.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/types/module.d.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/types/store.d.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/types/utils.d.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/types/vue-router.d.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/vite.config.ts delete mode 100644 templates/abp-vnext-pro-nuget-simplify/vben28/windi.config.ts diff --git a/Readme.md b/Readme.md index 9286e0529..8aca1fc90 100644 --- a/Readme.md +++ b/Readme.md @@ -11,6 +11,7 @@ ## 🔗 链接 - [AbpPro预览](http://182.43.18.151:44318/) +- [代码生成器预览](http://182.43.18.151:44311/) - [代码生成器仓库地址](https://github.com/WangJunZzz/abp-vnext-pro-suite) - [文档地址](http://doc.cncore.club/) - [视频教程](https://www.bilibili.com/video/BV1pt4y1E7aZ) diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/AbpProCliCoreModule.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/AbpProCliCoreModule.cs index 152fd6a42..c485602d5 100644 --- a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/AbpProCliCoreModule.cs +++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/AbpProCliCoreModule.cs @@ -31,13 +31,13 @@ public override void ConfigureServices(ServiceConfigurationContext context) OldCompanyName = "MyCompanyName", OldProjectName = "MyProjectName" }, - new AbpProTemplateOptions("abp-vnext-pro-nuget-simplify", "pro.simplify", "Nuget简单版本") - { - //ExcludeFiles = "aspnet-core,vben28,abp-vnext-pro-nuget-module,abp-vnext-pro-nuget-all,docs,.github,LICENSE,Readme.md", - ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env,Directory.Build.Lion.targets", - OldCompanyName = "MyCompanyName", - OldProjectName = "MyProjectName" - }, + // new AbpProTemplateOptions("abp-vnext-pro-nuget-simplify", "pro.simplify", "Nuget简单版本") + // { + // //ExcludeFiles = "aspnet-core,vben28,abp-vnext-pro-nuget-module,abp-vnext-pro-nuget-all,docs,.github,LICENSE,Readme.md", + // ReplaceSuffix = ".sln,.csproj,.cs,.cshtml,.json,.ci,.yml,.yaml,.nswag,.DotSettings,.env,Directory.Build.Lion.targets", + // OldCompanyName = "MyCompanyName", + // OldProjectName = "MyProjectName" + // }, new AbpProTemplateOptions("abp-vnext-pro-nuget-module", "pro.module", "模块") { diff --git a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/NewCommand.cs b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/NewCommand.cs index b8f385351..9d776b1d7 100644 --- a/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/NewCommand.cs +++ b/aspnet-core/frameworks/src/Lion.AbpPro.Cli.Core/Lion/AbpPro/Cli/Commands/NewCommand.cs @@ -146,8 +146,8 @@ public string GetShortDescription() message += $" > lion.abp new -t pro -c 公司名称 -p 项目名称 -v 版本(默认LastRelease) -o 默认当前控制台执行目录"; message += Environment.NewLine; message += $" > lion.abp new -t pro.all -c 公司名称 -p 项目名称 -v 版本(默认LastRelease) -o 默认当前控制台执行目录"; - message += Environment.NewLine; - message += $" > lion.abp new -t pro.simplify -c 公司名称 -p 项目名称 -v 版本(默认LastRelease) -o 默认当前控制台执行目录"; + // message += Environment.NewLine; + // message += $" > lion.abp new -t pro.simplify -c 公司名称 -p 项目名称 -v 版本(默认LastRelease) -o 默认当前控制台执行目录"; message += Environment.NewLine; message += $" > lion.abp new -t pro.module-c 公司名称 -p 项目名称 -v 版本(默认LastRelease) -o 默认当前控制台执行目录"; return message; diff --git a/docs/content/index.md b/docs/content/index.md index 6149c4206..d44ddfec7 100644 --- a/docs/content/index.md +++ b/docs/content/index.md @@ -12,14 +12,14 @@ Abp vNext Pro 是一个基于 Vben Admin, Abp vNext 打造的一个开箱即用 ## Abp Vnext Pro -[演示 :fontawesome-solid-paper-plane:](http://182.43.18.151:44318/login){ .md-button } +[演示 :fontawesome-solid-paper-plane:](http://182.43.18.151:44318){ .md-button } [GitHub :fontawesome-solid-paper-plane:](https://github.com/WangJunZzz/abp-vnext-pro){ .md-button } ## Abp Vnext Pro Suite > 基于 Abp Vnext Pro 开发的代码生成器,可自动生成前后端 CURD 代码,提供生产力。 -[演示 :fontawesome-solid-paper-plane:](http://116.205.177.85:81/login){ .md-button } +[演示 :fontawesome-solid-paper-plane:](http://182.43.18.151:44311){ .md-button } [GitHub :fontawesome-solid-paper-plane:](https://github.com/WangJunZzz/abp-vnext-pro-suite){ .md-button } ## 视频教程 diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml index 7c4b08c56..2dc8b27c7 100644 --- a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml +++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml @@ -10,7 +10,7 @@ 后台服务登录 - +
diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml index ee20f416d..a145b4f36 100644 --- a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml +++ b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml @@ -14,7 +14,7 @@ - + 后端服务 diff --git a/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/lib/bootstrap/css/bootstrap.min.css b/templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/libs/bootstrap/css/bootstrap.min.css similarity index 100% rename from templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/lib/bootstrap/css/bootstrap.min.css rename to templates/abp-vnext-pro-nuget-all/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/libs/bootstrap/css/bootstrap.min.css diff --git a/templates/abp-vnext-pro-nuget-simplify/.gitignore b/templates/abp-vnext-pro-nuget-simplify/.gitignore deleted file mode 100644 index dd3b91d3a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/.gitignore +++ /dev/null @@ -1,285 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# DNX -project.lock.json -artifacts/ - -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.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 - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# 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 -# TODO: 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 -# The packages folder can be ignored because of Package Restore -**/packages/* -# except build/, which is used as an MSBuild target. -!**/packages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/packages/repositories.config -# NuGet v3's project.json files produces more ignoreable 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 - -# 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 -*.pfx -*.publishsettings -node_modules/ -orleans.codegen.cs - -# 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 - -# SQL Server files -*.mdf -*.ldf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# 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/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# Zzz -content/src/Zzz.Web/Logs/* -content/src/Zzz.Web.Host/Logs/* -content/src/Zzz.IdentityServer/Logs/* -content/src/Zzz.HttpApi.Host/Logs/* -content/src/Zzz.HttpApi.Host/Logs/* -content/src/Zzz.DbMigrator/Logs/* -/content/aspnetcore/src/Zzz.HttpApi.Host/App_Data -/aspnet-core/services/src/CompanyName.ProjectName.HttpApi.Host/Logs -/aspnet-core/services/src/CompanyName.ProjectName.IdentityServer/appsettings.Production.json -/aspnet-core/services/src/CompanyName.ProjectName.HttpApi.Host/appsettings.Production.json -/aspnet-core/services/host/CompanyName.ProjectName.HttpApi.Host/appsettings.Production.json -/aspnet-core/services/host/CompanyName.ProjectName.HttpApi.Host/Logs -/aspnet-core/services/host/CompanyName.ProjectName.IdentityServer/Logs -/vben271/dist.zip -/aspnet-core/services/host/CompanyName.ProjectName.HttpApi.Host/publish.zip -/aspnet-core/services/host/CompanyName.ProjectName.IdentityServer/appsettings.Production.json -/aspnet-core/services/host/CompanyName.ProjectName.IdentityServer/publish.zip -vben271/yarn.lock -/vben271/_nginx.zip -/aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/logs -/aspnet-core/services/host/Lion.AbpPro.IdentityServer/Logs -/aspnet-core/services/host/Lion.AbpPro.IdentityServer/Logs -/aspnet-core/gateways/Lion.AbpPro.WebGateway/appsettings.Production.json -/aspnet-core/services/host/Lion.AbpPro.IdentityServer/appsettings.Production.json -/aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/appsettings.Production.json -aspnet-core/services/host/Lion.AbpPro.Web.Blazor.Server/Logs/logs.txt -/nupkgs -/aspnet-core/Lion.AbpPro.sln.DotSettings -/aspnet-core/services/host/Lion.AbpPro.HttpApi.Host/logs -/vben271/package-lock.json -/docs/site diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Delete-BIN-OBJ-Folders.bat b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Delete-BIN-OBJ-Folders.bat deleted file mode 100644 index 02cfaa5e1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Delete-BIN-OBJ-Folders.bat +++ /dev/null @@ -1,20 +0,0 @@ -@ECHO off -cls - -ECHO Deleting all BIN and OBJ folders... -ECHO. - -FOR /d /r . %%d in (bin,obj) DO ( - IF EXIST "%%d" ( - ECHO %%d | FIND /I "\node_modules\" > Nul && ( - ECHO.Skipping: %%d - ) || ( - ECHO.Deleting: %%d - rd /s/q "%%d" - ) - ) -) - -ECHO. -ECHO.BIN and OBJ folders have been successfully deleted. Press any key to exit. -pause > nul \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.Lion.targets b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.Lion.targets deleted file mode 100644 index 4de3630c8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.Lion.targets +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.Microsoft.targets b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.Microsoft.targets deleted file mode 100644 index 54413dd36..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.Microsoft.targets +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.Volo.targets b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.Volo.targets deleted file mode 100644 index e02ea94da..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.Volo.targets +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.targets b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.targets deleted file mode 100644 index f773877de..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Directory.Build.targets +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - latest - 1.0.0 - Abp vNext Pro - $(NoWarn);CS1591;CS0436;NU1504 - app - true - WangJunZzz - true - https://github.com/WangJunZzz/abp-vnext-pro - icon.png - bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Dockerfile b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Dockerfile deleted file mode 100644 index d49e967ac..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base -WORKDIR /app -EXPOSE 8080 -EXPOSE 443 -ENV TZ=Asia/Shanghai -ENV ASPNETCORE_ENVIRONMENT=Production - -FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build -WORKDIR /src -COPY . . -WORKDIR "/src/host/MyCompanyName.MyProjectName.HttpApi.Host" -RUN dotnet build "MyCompanyName.MyProjectName.HttpApi.Host.csproj" -c Release -o /app/build - -FROM build AS publish -RUN dotnet publish "MyCompanyName.MyProjectName.HttpApi.Host.csproj" -c Release -o /app/publish /p:UseAppHost=false - -FROM base AS final -WORKDIR /app -COPY --from=publish /app/publish . -ENTRYPOINT ["dotnet", "MyCompanyName.MyProjectName.HttpApi.Host.dll"] - diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/MyCompanyName.MyProjectName.sln b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/MyCompanyName.MyProjectName.sln deleted file mode 100644 index e94186d83..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/MyCompanyName.MyProjectName.sln +++ /dev/null @@ -1,140 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31410.414 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.Domain", "src\MyCompanyName.MyProjectName.Domain\MyCompanyName.MyProjectName.Domain.csproj", "{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.Application", "src\MyCompanyName.MyProjectName.Application\MyCompanyName.MyProjectName.Application.csproj", "{1A94A50E-06DC-43C1-80B5-B662820EC3EB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.EntityFrameworkCore", "src\MyCompanyName.MyProjectName.EntityFrameworkCore\MyCompanyName.MyProjectName.EntityFrameworkCore.csproj", "{C956DD76-69C8-4A9C-83EA-D17DF83340FD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{CA9AC87F-097E-4F15-8393-4BC07735A5B0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{04DBDB01-70F4-4E06-B468-8F87850B22BE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.Application.Tests", "test\MyCompanyName.MyProjectName.Application.Tests\MyCompanyName.MyProjectName.Application.Tests.csproj", "{50B2631D-129C-47B3-A587-029CCD6099BC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.Domain.Shared", "src\MyCompanyName.MyProjectName.Domain.Shared\MyCompanyName.MyProjectName.Domain.Shared.csproj", "{42F719ED-8413-4895-B5B4-5AB56079BC66}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.Application.Contracts", "src\MyCompanyName.MyProjectName.Application.Contracts\MyCompanyName.MyProjectName.Application.Contracts.csproj", "{520659C8-C734-4298-A3DA-B539DB9DFC0B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.HttpApi", "src\MyCompanyName.MyProjectName.HttpApi\MyCompanyName.MyProjectName.HttpApi.csproj", "{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.HttpApi.Client", "src\MyCompanyName.MyProjectName.HttpApi.Client\MyCompanyName.MyProjectName.HttpApi.Client.csproj", "{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.EntityFrameworkCore.Tests", "test\MyCompanyName.MyProjectName.EntityFrameworkCore.Tests\MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj", "{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.TestBase", "test\MyCompanyName.MyProjectName.TestBase\MyCompanyName.MyProjectName.TestBase.csproj", "{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.Domain.Tests", "test\MyCompanyName.MyProjectName.Domain.Tests\MyCompanyName.MyProjectName.Domain.Tests.csproj", "{E512F4D9-9375-480F-A2F6-A46509F9D824}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.DbMigrator", "src\MyCompanyName.MyProjectName.DbMigrator\MyCompanyName.MyProjectName.DbMigrator.csproj", "{AA94D832-1CCC-4715-95A9-A483F23A1A5D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "0.Solution Items", "0.Solution Items", "{2C4A6DB8-8D9E-42E6-B7C3-1EDB7B3DE22E}" - ProjectSection(SolutionItems) = preProject - Directory.Build.Lion.targets = Directory.Build.Lion.targets - Directory.Build.Microsoft.targets = Directory.Build.Microsoft.targets - Directory.Build.targets = Directory.Build.targets - Directory.Build.Volo.targets = Directory.Build.Volo.targets - global.json = global.json - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{8C1B8C6C-C518-4290-B070-622CCA6004DA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.HttpApi.Host", "host\MyCompanyName.MyProjectName.HttpApi.Host\MyCompanyName.MyProjectName.HttpApi.Host.csproj", "{FB20372D-6C96-4733-9AAC-12522F15CAA6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyCompanyName.MyProjectName.FreeSqlRepository", "src\MyCompanyName.MyProjectName.FreeSqlRepository\MyCompanyName.MyProjectName.FreeSqlRepository.csproj", "{27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp", "test\MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp\MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj", "{A5E9AAA7-B3A2-44CC-83B8-7260057185E6}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Release|Any CPU.Build.0 = Release|Any CPU - {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Release|Any CPU.Build.0 = Release|Any CPU - {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Release|Any CPU.Build.0 = Release|Any CPU - {50B2631D-129C-47B3-A587-029CCD6099BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {50B2631D-129C-47B3-A587-029CCD6099BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {50B2631D-129C-47B3-A587-029CCD6099BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {50B2631D-129C-47B3-A587-029CCD6099BC}.Release|Any CPU.Build.0 = Release|Any CPU - {42F719ED-8413-4895-B5B4-5AB56079BC66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {42F719ED-8413-4895-B5B4-5AB56079BC66}.Debug|Any CPU.Build.0 = Debug|Any CPU - {42F719ED-8413-4895-B5B4-5AB56079BC66}.Release|Any CPU.ActiveCfg = Release|Any CPU - {42F719ED-8413-4895-B5B4-5AB56079BC66}.Release|Any CPU.Build.0 = Release|Any CPU - {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {520659C8-C734-4298-A3DA-B539DB9DFC0B}.Release|Any CPU.Build.0 = Release|Any CPU - {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Release|Any CPU.Build.0 = Release|Any CPU - {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Release|Any CPU.Build.0 = Release|Any CPU - {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Release|Any CPU.Build.0 = Release|Any CPU - {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Release|Any CPU.Build.0 = Release|Any CPU - {E512F4D9-9375-480F-A2F6-A46509F9D824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E512F4D9-9375-480F-A2F6-A46509F9D824}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E512F4D9-9375-480F-A2F6-A46509F9D824}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E512F4D9-9375-480F-A2F6-A46509F9D824}.Release|Any CPU.Build.0 = Release|Any CPU - {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Release|Any CPU.Build.0 = Release|Any CPU - {FB20372D-6C96-4733-9AAC-12522F15CAA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FB20372D-6C96-4733-9AAC-12522F15CAA6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FB20372D-6C96-4733-9AAC-12522F15CAA6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FB20372D-6C96-4733-9AAC-12522F15CAA6}.Release|Any CPU.Build.0 = Release|Any CPU - {27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18}.Debug|Any CPU.Build.0 = Debug|Any CPU - {27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18}.Release|Any CPU.ActiveCfg = Release|Any CPU - {27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18}.Release|Any CPU.Build.0 = Release|Any CPU - {A5E9AAA7-B3A2-44CC-83B8-7260057185E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A5E9AAA7-B3A2-44CC-83B8-7260057185E6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A5E9AAA7-B3A2-44CC-83B8-7260057185E6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A5E9AAA7-B3A2-44CC-83B8-7260057185E6}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {554AD327-6DBA-4F8F-96F8-81CE7A0C863F} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} - {1A94A50E-06DC-43C1-80B5-B662820EC3EB} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} - {C956DD76-69C8-4A9C-83EA-D17DF83340FD} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} - {50B2631D-129C-47B3-A587-029CCD6099BC} = {04DBDB01-70F4-4E06-B468-8F87850B22BE} - {42F719ED-8413-4895-B5B4-5AB56079BC66} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} - {520659C8-C734-4298-A3DA-B539DB9DFC0B} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} - {4164BDF7-F527-4E85-9CE6-E3C2D7426A27} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} - {3B5A0094-670D-4BB1-BFDD-61B88A8773DC} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} - {1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81} = {04DBDB01-70F4-4E06-B468-8F87850B22BE} - {91853F21-9CD9-4132-BC29-A7D5D84FFFE7} = {04DBDB01-70F4-4E06-B468-8F87850B22BE} - {E512F4D9-9375-480F-A2F6-A46509F9D824} = {04DBDB01-70F4-4E06-B468-8F87850B22BE} - {AA94D832-1CCC-4715-95A9-A483F23A1A5D} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} - {FB20372D-6C96-4733-9AAC-12522F15CAA6} = {8C1B8C6C-C518-4290-B070-622CCA6004DA} - {27C7A0E6-4C2E-4AFF-9DE7-1F526DDC0D18} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} - {A5E9AAA7-B3A2-44CC-83B8-7260057185E6} = {04DBDB01-70F4-4E06-B468-8F87850B22BE} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F} - EndGlobalSection -EndGlobal diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/NuGet.Config b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/NuGet.Config deleted file mode 100644 index 44f8e7fe8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/NuGet.Config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/global.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/global.json deleted file mode 100644 index 3fea262b1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/global.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "sdk": { - "version": "8.0.0", - "rollForward": "latestFeature" - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Controllers/HomeController.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Controllers/HomeController.cs deleted file mode 100644 index 49f160fda..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Controllers/HomeController.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace MyCompanyName.MyProjectName.Controllers -{ - public class HomeController : AbpController - { - public ActionResult Index() - { - return Redirect("/Login"); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Dockerfile b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Dockerfile deleted file mode 100644 index 09e62a2c6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -FROM mcr.microsoft.com/dotnet/aspnet:8.0 - -# 创建目录 -RUN mkdir /app - -COPY publish /app - - - -# 设置工作目录 -WORKDIR /app - -# 暴露80端口 -EXPOSE 80 -# 设置时区 .net6 才有这个问题 -ENV TZ=Asia/Shanghai - -# 设置环境变量 -ENV ASPNETCORE_ENVIRONMENT=Production - -ENTRYPOINT ["dotnet", "MyCompanyName.MyProjectName.HttpApi.Host.dll"] - - diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/AutoDeleteAfterSuccessAttributer.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/AutoDeleteAfterSuccessAttributer.cs deleted file mode 100644 index d1a7b8e5f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/AutoDeleteAfterSuccessAttributer.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace MyCompanyName.MyProjectName.Extensions.Hangfire; - -public class AutoDeleteAfterSuccessAttributer : JobFilterAttribute, IApplyStateFilter -{ - private readonly TimeSpan _deleteAfter; - - public AutoDeleteAfterSuccessAttributer(TimeSpan timeSpan) - { - _deleteAfter = timeSpan; - } - - public void OnStateApplied(ApplyStateContext context, IWriteOnlyTransaction transaction) - { - context.JobExpirationTimeout = _deleteAfter; - } - - public void OnStateUnapplied(ApplyStateContext context, IWriteOnlyTransaction transaction) - { - - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/CronType.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/CronType.cs deleted file mode 100644 index f51f8c56f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/CronType.cs +++ /dev/null @@ -1,78 +0,0 @@ -namespace MyCompanyName.MyProjectName.Extensions.Hangfire -{ - /// - /// Cron类型 - /// - public static class CronType - { - /// - /// 周期性为分钟的任务 - /// - /// 执行周期的间隔,默认为每分钟一次 - /// - public static string Minute(int interval = 1) - { - return "1 0/" + interval.ToString() + " * * * ? "; - } - - /// - /// 周期性为小时的任务 - /// - /// 第几分钟开始,默认为第一分钟 - /// 执行周期的间隔,默认为每小时一次 - /// - public static string Hour(int minute = 1, int interval = 1) - { - return "1 " + minute + " 0/" + interval.ToString() + " * * ? "; - } - - /// - /// 周期性为天的任务 - /// - /// 第几小时开始,默认从1点开始 - /// 第几分钟开始,默认从第1分钟开始 - /// 执行周期的间隔,默认为每天一次 - /// - public static string Day(int hour = 1, int minute = 1, int interval = 1) - { - return "1 " + minute.ToString() + " " + hour.ToString() + " 1/" + interval.ToString() + " * ? "; - } - - /// - /// 周期性为周的任务 - /// - /// 星期几开始,默认从星期一点开始 - /// 第几小时开始,默认从1点开始 - /// 第几分钟开始,默认从第1分钟开始 - /// - public static string Week(DayOfWeek dayOfWeek = DayOfWeek.Monday, int hour = 1, int minute = 1) - { - return Cron.Weekly(dayOfWeek, hour, minute); - } - - /// - /// 周期性为月的任务 - /// - /// 几号开始,默认从一号开始 - /// 第几小时开始,默认从1点开始 - /// 第几分钟开始,默认从第1分钟开始 - /// - public static string Month(int day = 1, int hour = 1, int minute = 1) - { - return Cron.Monthly(day, hour, minute); - } - - /// - /// 周期性为年的任务 - /// - /// 几月开始,默认从一月开始 - /// 几号开始,默认从一号开始 - /// 第几小时开始,默认从1点开始 - /// 第几分钟开始,默认从第1分钟开始 - /// - public static string Year(int month = 1, int day = 1, int hour = 1, int minute = 1) - { - return Cron.Yearly(month, day, hour, minute); - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/CustomHangfireAuthorizeFilter.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/CustomHangfireAuthorizeFilter.cs deleted file mode 100644 index e2f1ee6c5..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/CustomHangfireAuthorizeFilter.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace MyCompanyName.MyProjectName.Extensions.Hangfire -{ - public class CustomHangfireAuthorizeFilter : IDashboardAuthorizationFilter - { - public bool Authorize(DashboardContext context) - { - var _currentUser = context.GetHttpContext().RequestServices.GetRequiredService(); - return _currentUser.IsAuthenticated; - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/JobRetryLastFilter.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/JobRetryLastFilter.cs deleted file mode 100644 index bb2d05539..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/JobRetryLastFilter.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace MyCompanyName.MyProjectName.Extensions.Hangfire; - -/// -/// 重试最后一次 -/// -public class JobRetryLastFilter : JobFilterAttribute, IElectStateFilter -{ - private int RetryCount { get; } - - public JobRetryLastFilter(int retryCount) - { - RetryCount = retryCount; - } - - - public void OnStateElection(ElectStateContext context) - { - var retryAttempt = context.GetJobParameter("RetryCount"); - if (RetryCount == retryAttempt) - { - Log.Error("最后一次重试"); - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/RecurringJobsExtensions.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/RecurringJobsExtensions.cs deleted file mode 100644 index 31a9ffabd..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Extensions/Hangfire/RecurringJobsExtensions.cs +++ /dev/null @@ -1,15 +0,0 @@ -using MyCompanyName.MyProjectName.Jobs; - -namespace MyCompanyName.MyProjectName.Extensions.Hangfire -{ - public static class RecurringJobsExtensions - { - public static void CreateRecurringJob(this ApplicationInitializationContext context) - { - RecurringJob.AddOrUpdate("测试Job", e => e.ExecuteAsync(), CronType.Minute(1), new RecurringJobOptions() - { - TimeZone = TimeZoneInfo.Local - }); - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/GlobalUsings.cs deleted file mode 100644 index e41217393..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/GlobalUsings.cs +++ /dev/null @@ -1,65 +0,0 @@ -// Global using directives - -global using System; -global using System.Collections.Generic; -global using System.IO; -global using System.Linq; -global using System.Text; -global using System.Text.RegularExpressions; -global using System.Threading.Tasks; -global using Hangfire; -global using Hangfire.Common; -global using Hangfire.Dashboard; -global using Hangfire.States; -global using Hangfire.Storage; -global using Lion.AbpPro; -global using MyCompanyName.MyProjectName.EntityFrameworkCore; -global using MyCompanyName.MyProjectName.Extensions; -global using MyCompanyName.MyProjectName.Extensions.Hangfire; -global using MyCompanyName.MyProjectName.MultiTenancy; -global using Microsoft.AspNetCore.Authentication.JwtBearer; -global using Microsoft.AspNetCore.Builder; -global using Microsoft.AspNetCore.DataProtection; -global using Microsoft.AspNetCore.Hosting; -global using Microsoft.AspNetCore.Http; -global using Microsoft.AspNetCore.Identity; -global using Microsoft.AspNetCore.Mvc; -global using Microsoft.AspNetCore.Mvc.Abstractions; -global using Microsoft.AspNetCore.Mvc.Filters; -global using Microsoft.Extensions.Configuration; -global using Microsoft.Extensions.DependencyInjection; -global using Microsoft.Extensions.Hosting; -global using Microsoft.Extensions.Localization; -global using Microsoft.Extensions.Logging; -global using Microsoft.Extensions.Logging.Abstractions; -global using Microsoft.Extensions.Options; -global using Microsoft.IdentityModel.Tokens; -global using Microsoft.OpenApi.Models; -global using Serilog; -global using StackExchange.Redis; -global using Swagger; -global using Swashbuckle.AspNetCore.SwaggerUI; -global using Volo.Abp; -global using Volo.Abp.Account.Web; -global using Volo.Abp.AspNetCore.Auditing; -global using Volo.Abp.AspNetCore.Authentication.JwtBearer; -global using Volo.Abp.AspNetCore.ExceptionHandling; -global using Volo.Abp.AspNetCore.Mvc; -global using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy; -global using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; -global using Volo.Abp.AspNetCore.Serilog; -global using Volo.Abp.Auditing; -global using Volo.Abp.Authorization; -global using Volo.Abp.BackgroundJobs; -global using Volo.Abp.BackgroundJobs.Hangfire; -global using Volo.Abp.Caching; -global using Volo.Abp.Caching.StackExchangeRedis; -global using Volo.Abp.DependencyInjection; -global using Volo.Abp.Domain.Entities; -global using Volo.Abp.ExceptionHandling; -global using Volo.Abp.Http; -global using Volo.Abp.Json; -global using Volo.Abp.Modularity; -global using Volo.Abp.Users; -global using Volo.Abp.Validation; -global using Volo.Abp.MultiTenancy; \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj deleted file mode 100644 index 3fa523af9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj +++ /dev/null @@ -1,65 +0,0 @@ - - - - - net8.0 - MyCompanyName.MyProjectName - true - MyCompanyName.MyProjectName-4681b4fd-151f-4221-84a4-929d86723e4c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostConst.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostConst.cs deleted file mode 100644 index fa0fe089a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostConst.cs +++ /dev/null @@ -1,40 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - public static class MyProjectNameHttpApiHostConst - { - /// - /// 跨域策略名 - /// - public const string DefaultCorsPolicyName = "Default"; - - /// - /// Cookies名称 - /// - public const string DefaultCookieName = "MyCompanyName.MyProjectName.Http.Api"; - - /// - /// SwaggerUi 端点 - /// - public const string SwaggerUiEndPoint = "/swagger"; - - /// - /// Hangfire 端点 - /// - public const string HangfireDashboardEndPoint = "/hangfire"; - - /// - /// CAP 端点 - /// - public const string CapDashboardEndPoint = "/cap"; - - - public const string MoreEndPoint = "https://doc.cncore.club/"; - - - /// - /// HMiniprofiler端点 - /// - public const string MiniprofilerEndPoint = "/profiler/results-index"; - - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs deleted file mode 100644 index 9086e9d89..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ /dev/null @@ -1,273 +0,0 @@ -namespace MyCompanyName.MyProjectName; - -[DependsOn( - typeof(MyProjectNameHttpApiModule), - typeof(AbpProSharedHostingMicroserviceModule), - typeof(AbpAspNetCoreMvcUiMultiTenancyModule), - typeof(MyProjectNameEntityFrameworkCoreModule), - typeof(AbpAspNetCoreAuthenticationJwtBearerModule), - typeof(AbpAspNetCoreSerilogModule), - typeof(AbpAccountWebModule), - typeof(MyProjectNameApplicationModule), - typeof(AbpAspNetCoreMvcUiBasicThemeModule), - typeof(AbpCachingStackExchangeRedisModule) -)] -public class MyProjectNameHttpApiHostModule : AbpModule -{ - - public override void ConfigureServices(ServiceConfigurationContext context) - { - var configuration = context.Services.GetConfiguration(); - ConfigureCache(context); - ConfigureSwaggerServices(context); - ConfigureJwtAuthentication(context, configuration); - ConfigureMiniProfiler(context); - ConfigureIdentity(context); - ConfigureAuditLog(context); - ConfigurationSignalR(context); - ConfigurationMultiTenancy(); - } - - public override void OnApplicationInitialization(ApplicationInitializationContext context) - { - var app = context.GetApplicationBuilder(); - app.UseAbpProRequestLocalization(); - app.UseCorrelationId(); - app.UseStaticFiles(); - app.UseMiniProfiler(); - app.UseRouting(); - app.UseCors(MyProjectNameHttpApiHostConst.DefaultCorsPolicyName); - app.UseAuthentication(); - - if (MultiTenancyConsts.IsEnabled) - { - app.UseMultiTenancy(); - } - - app.UseAuthorization(); - app.UseSwagger(); - app.UseAbpSwaggerUI(options => - { - options.SwaggerEndpoint("/swagger/MyProjectName/swagger.json", "MyProjectName API"); - options.DocExpansion(DocExpansion.None); - options.DefaultModelsExpandDepth(-1); - }); - - app.UseAuditing(); - app.UseAbpSerilogEnrichers(); - - app.UseUnitOfWork(); - app.UseConfiguredEndpoints(endpoints => { endpoints.MapHealthChecks("/health"); }); - - } - private void ConfigurationSignalR(ServiceConfigurationContext context) - { - var redisConnection = context.Services.GetConfiguration().GetValue("Redis:Configuration"); - - if (redisConnection.IsNullOrWhiteSpace()) - { - throw new UserFriendlyException(message: "Redis连接字符串未配置."); - } - - context.Services.AddSignalR().AddStackExchangeRedis(redisConnection, options => { options.Configuration.ChannelPrefix = "Lion.AbpPro"; }); - } - /// - /// 配置MiniProfiler - /// - private void ConfigureMiniProfiler(ServiceConfigurationContext context) - { - context.Services.AddMiniProfiler(options => options.RouteBasePath = "/profiler").AddEntityFramework(); - } - - /// - /// 配置JWT - /// - private void ConfigureJwtAuthentication(ServiceConfigurationContext context, IConfiguration configuration) - { - context.Services.AddAuthentication(options => - { - options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; - options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; - }) - .AddJwtBearer(options => - { - options.TokenValidationParameters = - new TokenValidationParameters() - { - // 是否开启签名认证 - ValidateIssuerSigningKey = true, - ValidateIssuer = true, - ValidateAudience = true, - ValidateLifetime = true, - //ClockSkew = TimeSpan.Zero, - ValidIssuer = configuration["Jwt:Issuer"], - ValidAudience = configuration["Jwt:Audience"], - IssuerSigningKey = - new SymmetricSecurityKey( - Encoding.ASCII.GetBytes(configuration["Jwt:SecurityKey"])) - }; - - options.Events = new JwtBearerEvents - { - OnMessageReceived = currentContext => - { - var path = currentContext.HttpContext.Request.Path; - if (path.StartsWithSegments("/login")) - { - return Task.CompletedTask; - } - - var accessToken = string.Empty; - if (currentContext.HttpContext.Request.Headers.ContainsKey("Authorization")) - { - accessToken = currentContext.HttpContext.Request.Headers["Authorization"]; - if (!string.IsNullOrWhiteSpace(accessToken)) - { - accessToken = accessToken.Split(" ").LastOrDefault(); - } - } - - if (accessToken.IsNullOrWhiteSpace()) - { - accessToken = currentContext.Request.Query["access_token"].FirstOrDefault(); - } - - if (accessToken.IsNullOrWhiteSpace()) - { - accessToken = currentContext.Request.Cookies[MyProjectNameHttpApiHostConst.DefaultCookieName]; - } - - currentContext.Token = accessToken; - currentContext.Request.Headers.Remove("Authorization"); - currentContext.Request.Headers.Add("Authorization", $"Bearer {accessToken}"); - - return Task.CompletedTask; - } - }; - }); - } - - - - /// - /// Redis缓存 - /// - private void ConfigureCache(ServiceConfigurationContext context) - { - Configure( - options => { options.KeyPrefix = "MyProjectName:"; }); - var configuration = context.Services.GetConfiguration(); - var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); - context.Services - .AddDataProtection() - .PersistKeysToStackExchangeRedis(redis, "MyProjectName-Protection-Keys"); - } - - - - /// - /// 配置Identity - /// - private void ConfigureIdentity(ServiceConfigurationContext context) - { - context.Services.Configure(options => { options.Lockout = new LockoutOptions() { AllowedForNewUsers = false }; }); - } - - private static void ConfigureSwaggerServices(ServiceConfigurationContext context) - { - context.Services.AddSwaggerGen( - options => - { - // 文件下载类型 - options.MapType(() => new OpenApiSchema() { Type = "file" }); - - options.SwaggerDoc("MyProjectName", - new OpenApiInfo { Title = "MyCompanyNameMyProjectName API", Version = "v1" }); - options.DocInclusionPredicate((docName, description) => true); - options.EnableAnnotations(); // 启用注解 - options.DocumentFilter(); - options.SchemaFilter(); - // 加载所有xml注释,这里会导致swagger加载有点缓慢 - var xmlPaths = Directory.GetFiles(AppContext.BaseDirectory, "*.xml"); - foreach (var xml in xmlPaths) - { - options.IncludeXmlComments(xml, true); - } - - options.AddSecurityDefinition(JwtBearerDefaults.AuthenticationScheme, - new OpenApiSecurityScheme() - { - Description = "直接在下框输入JWT生成的Token", - Name = "Authorization", - In = ParameterLocation.Header, - Type = SecuritySchemeType.Http, - Scheme = JwtBearerDefaults.AuthenticationScheme, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement - { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference - { - Type = ReferenceType.SecurityScheme, Id = "Bearer" - } - }, - new List() - } - }); - - options.AddSecurityDefinition("ApiKey", new OpenApiSecurityScheme() - { - Type = SecuritySchemeType.ApiKey, - In = ParameterLocation.Header, - Name = "Accept-Language", - Description = "多语言设置,系统预设语言有zh-Hans、en,默认为zh-Hans", - }); - - options.AddSecurityRequirement(new OpenApiSecurityRequirement - { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference - { Type = ReferenceType.SecurityScheme, Id = "ApiKey" } - }, - Array.Empty() - } - }); - }); - } - - - - /// - /// 审计日志 - /// - private void ConfigureAuditLog(ServiceConfigurationContext context) - { - Configure - ( - options => - { - options.IsEnabled = true; - options.EntityHistorySelectors.AddAllEntities(); - options.ApplicationName = "MyCompanyName.MyProjectName"; - } - ); - - Configure( - options => - { - options.IgnoredUrls.Add("/AuditLogs/page"); - options.IgnoredUrls.Add("/hangfire/stats"); - options.IgnoredUrls.Add("/cap"); - }); - } - - private void ConfigurationMultiTenancy() - { - Configure(options => { options.IsEnabled = MultiTenancyConsts.IsEnabled; }); - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml deleted file mode 100644 index 7c4b08c56..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml +++ /dev/null @@ -1,158 +0,0 @@ -@page -@model MyCompanyName.MyProjectName.Pages.Login - -@{ - Layout = null; -} - - - - - - 后台服务登录 - - - -
-
-
-
- @Html.AntiForgeryToken() - 后台服务登录 -
- -
-
- -
-
- -
-
-
-
-
- - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml.cs deleted file mode 100644 index bbd1a1cf5..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Login.cshtml.cs +++ /dev/null @@ -1,69 +0,0 @@ - -using Lion.AbpPro.BasicManagement.ConfigurationOptions; -using Lion.AbpPro.BasicManagement.Users; -using Lion.AbpPro.BasicManagement.Users.Dtos; -using Microsoft.AspNetCore.Mvc.RazorPages; - - -namespace MyCompanyName.MyProjectName.Pages -{ - public class Login : PageModel - { - private readonly IAccountAppService _accountAppService; - private readonly ILogger _logger; - private readonly IHostEnvironment _hostEnvironment; - private readonly JwtOptions _jwtOptions; - public Login(IAccountAppService accountAppService, - ILogger logger, - IHostEnvironment hostEnvironment, - IOptionsSnapshot jwtOptions) - { - _accountAppService = accountAppService; - _logger = logger; - _hostEnvironment = hostEnvironment; - _jwtOptions = jwtOptions.Value; - } - - public void OnGet() - { - } - - public async Task OnPost() - { - string userName = Request.Form["userName"]; - string password = Request.Form["password"]; - if (userName.IsNullOrWhiteSpace() || password.IsNullOrWhiteSpace()) - { - Response.Redirect("/Login"); - return; - } - - try - { - var options = new CookieOptions - { - Expires = DateTime.Now.AddHours(_jwtOptions.ExpirationTime), - SameSite = SameSiteMode.Unspecified, - }; - - - // 设置cookies domain - //options.Domain = "MyProjectName.cn"; - - - var result = await _accountAppService.LoginAsync(new LoginInput() - { Name = userName, Password = password }); - Response.Cookies.Append(MyProjectNameHttpApiHostConst.DefaultCookieName, - result.Token, options); - } - catch (Exception e) - { - _logger.LogError($"登录失败:{e.Message}"); - Response.Redirect("/Login"); - return; - } - - Response.Redirect("/monitor"); - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml deleted file mode 100644 index ee20f416d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml +++ /dev/null @@ -1,171 +0,0 @@ -@page -@using MyCompanyName.MyProjectName -@model MyCompanyName.MyProjectName.Pages.Monitor - - -@{ - Layout = null; -} - - - - - - - - - - 后端服务 - - - -
- -
-
-
- - - -
-

- SwaggerUI -

-
-
-
- - @*
*@ - @*
*@ - @* *@ - @* *@ - @* *@ - @*
*@ - @*

*@ - @* Hangfire面板 *@ - @*

*@ - @*
*@ - @*
*@ - @*
*@ -
-
- - - -
-

- Miniprofiler -

-
-
-
-
-
- - - -
-

- 了解更多... -

-
-
-
-
-
- - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml.cs deleted file mode 100644 index dfddc617b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Pages/Monitor.cshtml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace MyCompanyName.MyProjectName.Pages -{ - public class Monitor : PageModel - { - public void OnGet() - { - - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs deleted file mode 100644 index c10267e9f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - public class Program - { - public static void Main(string[] args) - { - CreateHostBuilder(args).Build().Run(); - - } - - private static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.ConfigureKestrel((context, options) => { options.Limits.MaxRequestBodySize = 1024 * 50; }); - webBuilder.UseStartup(); - }) - .UseSerilog((context, loggerConfiguration) => - { - SerilogToEsExtensions.SetSerilogConfiguration( - loggerConfiguration, - context.Configuration); - }).UseAutofac(); - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Properties/launchSettings.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Properties/launchSettings.json deleted file mode 100644 index 8d1ba7dc4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Properties/launchSettings.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "profiles": { - "MyCompanyName.MyProjectName.HttpApi.Host": { - "commandName": "Project", - "launchBrowser": true, - "applicationUrl": "http://localhost:44315", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Startup.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Startup.cs deleted file mode 100644 index 1cf9c1961..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Startup.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - public class Startup - { - public void ConfigureServices(IServiceCollection services) - { - services.AddApplication(); - } - - public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) - { - app.InitializeApplication(); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.Production.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.Production.json deleted file mode 100644 index cc715dc67..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.Production.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "Serilog": { - "Using": [ - "Serilog.Sinks.Console", - "Serilog.Sinks.File" - ], - "MinimumLevel": { - "Default": "Debug", - "Override": { - "Microsoft": "Information", - "Volo.Abp": "Information", - "Hangfire": "Information", - "DotNetCore.CAP": "Information", - "Serilog.AspNetCore": "Information", - "Microsoft.EntityFrameworkCore": "Warning", - "Microsoft.AspNetCore": "Information" - } - }, - "WriteTo": [ - { - "Name": "Console" - }, - { - "Name": "File", - "Args": { - "path": "logs/logs-.txt", - "rollingInterval": "Day" - } - } - ] - }, - "App": { - "SelfUrl": "http://localhost:44315", - "CorsOrigins": "https://*.MyProjectName.com,http://localhost:4200,http://localhost:3100,http://localhost:80,http://localhost" - }, - "ConnectionStrings": { - "Default": "Data Source=localhost;Port=3306;Database=MyCompanyNameMyProjectNameDB;uid=root;pwd=1q2w3E*;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true" - }, - "Redis": { - "Configuration": "localhost,password=1q2w3E*,defaultdatabase=1" - }, - "Jwt": { - "Audience": "MyCompanyName.MyProjectName", - "SecurityKey": "dzehzRz9a8asdfasfdadfasdfasdfafsdadfasbasdf=", - "Issuer": "MyCompanyName.MyProjectName", - "ExpirationTime": 2 - }, - "ElasticSearch": { - "Enabled": "false", - "Url": "http://es.cn", - "IndexFormat": "MyCompanyName.MyProjectName.development.{0:yyyy.MM.dd}", - "UserName": "elastic", - "Password": "aVVhjQ95RP7nbwNy", - "SearchIndexFormat": "MyCompanyName.MyProjectName.development*" - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json deleted file mode 100644 index 832d3ab81..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "Serilog": { - "Using": [ - "Serilog.Sinks.Console", - "Serilog.Sinks.File" - ], - "MinimumLevel": { - "Default": "Debug", - "Override": { - "Microsoft": "Information", - "Volo.Abp": "Information", - "Hangfire": "Information", - "DotNetCore.CAP": "Information", - "Serilog.AspNetCore": "Information", - "Microsoft.EntityFrameworkCore": "Warning", - "Microsoft.AspNetCore": "Information" - } - }, - "WriteTo": [ - { - "Name": "Console" - }, - { - "Name": "File", - "Args": { - "path": "logs/logs-.txt", - "rollingInterval": "Day" - } - } - ] - }, - "App": { - "SelfUrl": "http://localhost:44315", - "CorsOrigins": "https://*.MyProjectName.com,http://localhost:4200,http://localhost:3100" - }, - "ConnectionStrings": { - "Default": "Data Source=localhost;Port=3306;Database=MyCompanyNameMyProjectNameDB;uid=root;pwd=1q2w3E*;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true", - "Hangfire": "localhost,password=mypassword,defaultdatabase=2" - }, - "Redis": { - "Configuration": "localhost,password=1q2w3E*,defaultdatabase=1" - }, - "Jwt": { - "Audience": "MyCompanyName.MyProjectName", - "SecurityKey": "dzehzRz9a8asdfasfdadfasdfasdfafsdadfasbasdf=", - "Issuer": "MyCompanyName.MyProjectName", - "ExpirationTime": 2 - }, - "ElasticSearch": { - "Enabled": "false", - "Url": "http://es.cn", - "IndexFormat": "MyCompanyName.MyProjectName.development.{0:yyyy.MM.dd}", - "UserName": "elastic", - "Password": "aVVhjQ95RP7nbwNy", - "SearchIndexFormat": "MyCompanyName.MyProjectName.development*" - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/tempkey.jwk b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/tempkey.jwk deleted file mode 100644 index b4f8b7de9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/tempkey.jwk +++ /dev/null @@ -1 +0,0 @@ -{"AdditionalData":{},"Alg":"RS256","Crv":null,"D":"eH-Ld45J684VguyI2jACQEEVGtTx79Nt7ElT20JeUi-pbVnhJxxAJwnAe68d9Q8skpv6BxZs5QuyIORwfGpJK-lKVuo8EtyUQTuUuPmP4o1YK4cv2FIi5xN18tddTltg2JmJi1sN2AD5z-zwm45YNvoFxdQYlnUlA9lJL8QfG0HQLMQX1sv2_lgND8RfRGQBCpVXC2kcap4GvkFVQpKaQ5xaUqvNdH6ftwkGMdFfMRlHGhyYyabIjs4T16HslofvXiHbOCAzk37HtBNNsBpeoQuZul1-G7tAndHe1XtuGvuE-k1fyqdm3YiCU8wK7FpvQU3x6JqvfqmWgMAPnWKOtQ","DP":"hd3I9Nc3LlaZDoPg20JZu48kpv9rMMQ0rLtcZ0UPB_HpZWBC_No-3t3t1HFRbD4iz0MCpCR6gb5q4UsL2N2xh3Q8OhQ1Zrl76UKDZrVKs3oE0VVr9K2VUU3s1sytE4OWSv7PAHYURygcx_MrunMn8Ryd4ZJBQ_g5M2GvpBj1o5M","DQ":"T3ibciK4KxGGHqau9dnWxE6l3fGtcNw1GcjV93Lxe0NKTbfrwPEIFVVAyPsFS8QdmRXEgyunkDFKLHyq2hXBi2fZCwXGoWkUqVUKAKMaNYZaDDd_XeJKOu7mwNY8rgxNETHCyMSnnNNPNabBf2iiXmrBnMwesle2L1kwky42yns","E":"AQAB","K":null,"KeyId":"0D94529E740F5FD50EC6B8A19FF460D6","Kid":"0D94529E740F5FD50EC6B8A19FF460D6","Kty":"RSA","N":"w2jhtWb6a3kH4VqAPfuuvdF5hBh7U6gwMRnddHAH7zaVL6aYwjpCzNW56RQy4W4Zabv1My4Yw9GZpjrOcyr3Bm669eZjn_JC0O00eRTNStNgmg2kB_6AB6ROkEW7br1JC0jKr_dXhOYPBMmR-KHvpwaZXA9R1xOqY02S3JD0KB-TGMSC9q1RlVydt81aMOHFzWVyruLsYGdmcKhRPKDtL6GXpU_DG1gzzOYbk795x_D_UUTOJYuhIDEj7aYi3o32yXLEBvh4Q7HPLjLcWzV-EzCn6Ossl-EVJ2TrR53Eln03R93Vmo63DzQbLIOi3yTcZD2a3O6mpGLiqyZjUducIQ","Oth":null,"P":"y84cEtE6IRBeU2sDJxjDYb50HB4nAF7-bfvbEq0haQL2sFBz-Q-uOUAeXhaS74Gh_IagmW1TzOKblVilijMHCsfOFTWlCljaDoNfdl31enh50HMFvUu8IFjcWiQ9fjR5no8n5-jDeRO5zVfgcWoRHfVTOq4Di7WlVHJRr8FB-R8","Q":"9XRZvvMIvoumlDAVxWZHkb7_an0_dFwBLqc8v74XBZhiK5SLuBqmsJICB5kwNTKzORH7yedx-RXOJWkchJLlEtmH_cQO_6WKQQAyc1PMnLPa0tYkhjotWo8VRE9bAdVmrR0cnJeudfSJ-6gDpUBQYy9g1m8cAfWbTAk3at2_gr8","QI":"xRLXLwhTdNbevlEzANlDDnU9lDeKZWV9-YrvUxHMJBBygBNVqkNFWiee7LNUi82YgTHRn46rpHY9TZf6oQbgk6xa86MyDYXGU2uGO8DHm5oh20Spp7A-RlzZ4JRXAJ3eAYMZHQIP45JApVvKbgHh_pUGjNaiqZKZ9IN6H_L9k1s","Use":null,"X":null,"X5t":null,"X5tS256":null,"X5u":null,"Y":null,"KeySize":2048,"HasPrivateKey":true,"CryptoProviderFactory":{"CryptoProviderCache":{},"CustomCryptoProvider":null,"CacheSignatureProviders":true}} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/tempkey.rsa b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/tempkey.rsa deleted file mode 100644 index ed0defa5a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/tempkey.rsa +++ /dev/null @@ -1 +0,0 @@ -{"KeyId":"600caa200caf5d805eba9f06ace9e236","Parameters":{"D":"KCNDHA96eimN+UqchSKocgYITGflaAIwxzCS5KqSTkYAFliPthQx7LySuLor4F1+uLvwnh3ZocyI3y43GZu+eVHD256sxdV8/UsQz1HC23RRFqcUiAZjze8K5VMVStrBOxaa/Ds1U9/bpuNE7jZdcgFIEHsdZtCACqwtlE4nlIs1/GLiokqjBOESgxJMy9WUeDbWcvoo+YdwgKf5jt6AZHOYSS+TokLL+Y7TEfGMXe3jZD9VtSMkBSM8wGB89zNGR0FZB9maCG/BCoRJqxdYRyeb4FFXJclQtK3DexyDVqlNZQaNKVHu0tVAnVNKKcd7Iex8gA+5DNqqucUA7C/F6Q==","DP":"fr9iaNb1W4YZ/NJ56+N3SCeDQYuKobq1qeaQWmHlQsOHKoHhNZJQZ5x0M9PQilou16AwVlNGCJncMwxsSUxXn6itG0LcBnvfMeo2v3xKcij1BtFR9qfXecwEn2nnhI3mpXtZxyCdP3NIYUp9qViLJUjGJqrbQk+OIAGRQd2rRe0=","DQ":"o1umLkDodtwvpCsDguQYSjd3iob+WHNmfe/9HyjADmUehP8b9SpUgcrb+QF301J8YmQMnYZKWW5rEwKOtwsWNswgXfMnXeWerlZmz0tj9y38YczS70liU0vETsRefhrRCaXHraMvneqYNNedhsrCNalWK+DNwcixi4L59vA8ofs=","Exponent":"AQAB","InverseQ":"btd1nwwxl/E3ryfDi2bN12TuVDvv7yoPvryIlLgu+FiLpe4vaA1omDLliQBcl7oeyA563HBUop4D5oE7si+jD64N8XgFz37dD3KqUokeQ4lrTSSOePT1K+nWIl30sqDd7YE4auz4CvSjm2wXmN31+CXW1hp3YWN2972yrUt+R5U=","Modulus":"uwMB6reAVtm/Cq0BRPZ0ozBq6g3wDh2kzqFKBf8I7u8d9p7i5ExLSrOWPupHwPr/IW1VUn2TKHrJ8OnyYhznKIRxqlxj0U3D2GXijz5kfFOoHK+mlfKaDMqweRoS0UzEz58kMlgwUoDraUj6dTHTPCVPo3TqA2ImRw50j6D+jobFrY5321EFvlirZViMPDAgB8Ca7wGCqNBcCxvIPYw1O6WZmcVmjG7umelD3XjcUIQlEbIyAmi/3gXAo7NdPmgOamla6bnSWsy429HfsNpXyCfPBzV3QS3ubpTekWPoPcOVZbWwVPYtFQbhRh8PmWATRx0cV6oePZNZGxGeJl8WYQ==","P":"wplelBfVmiOPmr6iUxtOgIzuvwSqvP6Rqmh8dhaGDiJjU8OqZ0tZhuh0G+xnMLPIHb2fMeg0dqZMJZ5iXaIi1QycYn/JKz1i4cUonJ6IIQeKKf67tvzn/BY0V0N8rJw8hVfzou+/5sRBCbiHtJ2KIN1YJQuWGFFfrZJOJzc95ss=","Q":"9gTGKoDiOdrY8kqIXJ2nMhoeNryAH4q3EUrROJ7simqc28oYlGx24Sco/wOoeB2xxrdcF5JYOlyJ7H2YY/huLvJISaw/wHLPskiKiYQ78tuNwW0ip+5ceB1dSToHcEe3sR30+OeTh0Z4ZKoqthKziFGIt3EhEgiGq1gjZuWB5gM="}} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/cap.png b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/cap.png deleted file mode 100644 index 76c667e0525b3368071af5abc103685afcb1894d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11113 zcmdUV=R2HV)UJde`slq3gQ!uWmxR$GTJ+u`dM7#&Z4iVg(PK!2=)Lz&FnaWEM2$A0 zo@ajV^`3v=d^#T(<9eQ5*1Ffd?zQ%g)>Ky_#G}Q-z`!6>QHH+8z<9_D{5^n+4g6-i zM>qf<4?JHh$zha@((eLauxwwby}-bzOu)afd<1-d?51q!iGe}XjsAJi@A~5n1_sxi z3iO4Jui3#;l#kAAEB`U-z9rMc)7T|oZ@J`pnKz!nM4w(WPO{5qSY)%FO&F8(rj=BiXIUfi}|(CB*4H269s z6b6G0U{M>PKgjJIJX@y5J9Ss)Cy5UbZ<7uAT z$S?+F#Br>(Q{K1kdOa@j$?04Yf=kE2INuTQLb2MHFl}c^uDItB?z_9`Dk4lM{&qa4zE^YzUjO)`&qnr_QeLWR@UnwJQBsW09y?`nS}eX~7wbEYizp$hL- z#eAqP6Z1GY)*qELHW3RE1k-J6J|8+C16Eyi~6TJ$4IPu&j>S7QEgZGci z35SM%U}+42^4%uaba=Ef#&O_nImK|j>Z$ILN&Eg;VV(m5j$uR($=nqqORtw@rMG3q zN*lkdgt#HM@ueDfKcTWgxFrFGy@GC1U-DS>eC_~AmBPron)~*NgN-h*!b(>r`Awqgba9Y4+t+tJT2ib+eadu38ng>3jQsz^Y+?}4YJBHq6rj%tf?<}~~Ao&Hiycm0ia zLrNbjLIp{|NM^q}8At+FImzr|rQ)mxnADMbW$8@j!*6PuvDA!k23 z74C@hLm>j$z0lTP>@*u{#>`sZV-`SzaP5S3pPMZ@|4+-uQCOEWqfCTO<34YW1r5qKkz5AKSA z(ChRJLO|cCU&A;P1!_ooqh06X;#)X;&+O|2m3#7`nnkx4O(s{M>(|(hO(bVHHGuz; z=Kz?kKX-aXp~}DE9rei|rg&NReVr$*U^5?hsT!0>1^5}t-jHO`67H|iy53T0PKQ*eSTT?x9(R0YDN96y8paB`!hargd{)O=+;5hH zmJ41qa&!hw6In1}YyCXr6cy;~Y9Gn10Cb`hB7c-S)C)XtOG>Tu#Md>vq)*M~KPVX4z zJgWt=Jm@iT+7*trYmsJxJ184d5vn>hM~j7sH9y5Wo*nst0k)L57pRGFE%squeJ)5{d21ZWvbp6UtVV`DWKMg;zRZ*-G z8gJiGHAov(m`z@xd7Wy=^wsrRk)SY#04M$WSVV+bOpIBcv>PAPiU(l$qr|D>@$u(V zz#LHN--!tzkU^jCE0niX)a`4Lt9LF6sP*5-j0=&b@9M836TZBZ(v}LilB@{->Do`( z5Oc(etZ>W?hbhMa;e*}ALIvcYkA^>k-Q}wrSR^)?njtJZrH;t^ZB+w(J}9cizG5Ws zUg3x4qj&+%;Stn$s~fhHu}r7(49%s)Lal}(^sFDf$#L&mqOG6(+py}nsq34-M}YvJ zh-_eGt2eyFL$te!mT*&c2-*rZeedJ{@ncAE!_kvw)xck47e&P4waECJ6KxfSd%3ObT<_l+##TL@BEm@fLyVRlYmq6T>?hzn^~R#h+C~ zK=4?1?J1;dxZ|#TwIzToST&8n6nb_AB%lcvCgC3y;e!b4go$+PL z%+�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 diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/hangfire.png b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/hangfire.png deleted file mode 100644 index 5cdeb40f0157e93361de3ca004454f7e840639f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36278 zcmbrmWmH^E(>9uf;O-8=b#T|}%g~;hn~5nOR5woM1Ti)t zw5+4o3N6AnFs|&5_90*PxZ>{SG~?`?bK;^rF}}UP-s3l%F0t%gB5qN(CzQl_p?n9+o#c9g$rtiGx^(e*2HC;lN~01zOBUdKF&&aH%$KT-ZxX9MMA zlQ*rQ)rzk|=n*#bZ`#iF`RSGfZcZV-^w@Psa6Ujk+yxLW9D5q}Xnm2_3f+xRiJGD< zI7mW($icvQDt6>5z=Jr)IP|21HF>QUVUyPiHmI@qvT)?SgHOAe^JA>`>J6Xvx$@8ROi-@OFNK+(@FJPu2FbZzWYBpxLAR;|VTH)KBQ|&aG4!BrGjZxR|7g zY|i<`Y5^fgxasY`2_{O5ew3Ct0@q2!m3*LQM$%ETRS*{+NO2yEwwaR72NrdMt|ow5 znvd_JO)C$f0H}wTDG}?r>ktcl9@2U`#pNjk*Vjf@=R6rwbf9)f`!HC#&}-L+!s<3c ztv$qA*ioz?<3aA#w~SjL;S2kE<@=;9`ja5OHTzAk+#(m3=pI>fF4AL@O{q;nu1I-+ z@H(CK$q};P&T?$euDv+B&!lfq@jY%~`L{;tMDjJm-}8;6ls#B?s@-<&gGQ_TdSiTc zq3<1w7(H4gbi<=P)*YdChwm|haDlqUNLREOid2>&Ml$#-JRKw&WquCd|Es-ADTk`C zY&<%LS#GS+rnR7AhdW?c7uu7AXS*@y5d?C8K3ZH%?Fnsr+pJu>N{D$RVB z($82`+?O-Kcl7sP+fk01+^^ehouytm!s2_aD#gMgp{mrIdCT)m@MAww;~$o>34=7m z!1FeH%HTdy1i3D%I$_oJGHkp;+#wof9+8x-#pP?U>c5PtEW}Qbe^ool_CZBKdsoj5 z2bR!wIXZnk*KO?{-FEAT2YYET)eJ)$uyy*L|M}yj?-#8{!e1ljnkFBJ_%bkX1fDM?^7tyevXvhfa?7=%QeSv9gNzMY96k&ZHT8qF6x*{}8Vg=YQBoyDySW}H zI!5q6R3&$m)k2Gt)eSJF6|r$c`?l>jkaFCquweSQQ#PCj{7zW=1Z_Ef3Zmo?vtd8g zuKC1=9likbkUv;y8F0D@sUC)GzW-j)L%rC#>>lv%L}=`;bsPuk8JB;{i&fV#=wdQ7 zhtsA^W1@4#2E>vL*LfQT&J?c&*p=x^fiKW);5Odxu z5Z$l7BG-;jVIv2!{!mnn-M58Q?NT_BN`!}xMHbY2r@w=16s!Eom*jWn>D=%=);_xS zI57P60GinF7ox_RbCj?s@Z%pmF&*IFMM`-6Ya9A4)%mJ!s{N`3|0Y;NWH$!5)nCB$ zxiF=mwVTk8!ph`P$XxuOcUL6#`vMkh(le;t)tw>*rV0RVxkD@oTW~0ZY$4+ zAgZWLWQqTe=r&J8pr{;cnwQgk{_5kk^h2~7FI%d=F@>c3||yGAhT6U$TP z>StD~6k&kMK9eCFp|j=NOARZRi~Ad@3{1~Oe#VDEGbanM&NBr+B;CYsj~=1n^hZu5Z$&q<-+i$HtPRHr8HkT;D)9$|Ma}Szz)MHu&nv0^bbB zbzg3I2n|4O(JQtW5x>9^fFJAkK|srM9rfKNkm1dGp73Qa-PghZeJl;Cu%J!mV^OgJ z&dOK_`}Ni(^JluF6HHXPd+UAzeC{FBQIjmYw8odm@($;&xYoGCnihNUg^N%$7^+il*RY`{n!KB?8QKM?}vfi|Zlc$0<`HVvX9X37%}LLsC>1I(?!< zsm0)~F92E1x5R4fyMrtI82ec1gMXxSUzT@wd|@1Ix;Usfhug$8%-QuL$cEqsTj@s^ z*3KYkcNbp$M9WGhR5n;5Z#h+N5z;FB#ZP?$wHll9X;aV5Uzw*~tVN!e<9p+zwOShnYlV9v!@yTp+_W!Yi z8&V1u5#Kjd!Iy`eLuCXqK!1G2f2R~O>EKA>i=~K21aLc%S8S?<56J zWdS_T=cxiTk!7{er+8=M!OtX1qmXwT3$=}n0ck~uvZt>GsBsWIW0a~cBU2mGFiH;e zj`{1`M~2Yw_?&zR*72!DEd zYHn#OMn+;;P-0v6X?>(5&MI5zx`K{$rCA(;fo;`n<& z_Q-rAy&uavgvjH@Y{7SNir~T`1i4@($&2Qo=m`%UfqHcO#p?c)1od zC~$3mQ)E_NWiwYstW!WT3;OR|yL6C}AxqfwCB%{GyIr_eQ4=;4+NQtM{k7=;%NRZK3a9d&Drida(@Jc6Xj zIHmDMcv(GsAxI*Ob2a+)7<;GUGU4JV^)j{I9^iV|zU$i#7cMtB^-7nM&Cbt%SUxUV zH^j`>#zmx^5;fFXgFV$8Yjg&Of7rH1CNdpK2~@vqaN$0OTewt*2yTU~di15fYX4Ax zZdGTx&nEkB$pbs;Evr?Fx@p574v=8jeh>p>E;jYLtZFU|V&t_Jp;4rLhnePq%9@9- za~zcQ=C@$(&UQl^ja?F+toh&ou$-d{UEvI6Woc~$Z?O?uGr}`h6bZ@fO9GO>_6LZstMiH^5_rd^HA~qcuSuE`RBj1MSd=zK7lbRR5CZb2F3exd$a0DgaL74Ny z1)E4RqtWt^DBlSUN+3IIkpAP;X0EpL3$JIwl1I!%@xBFZM1?PL8GIUy&Iwn*CIHR7 zs&m<;1O%ls%t=eCt9B_WW##_yfMO31D?X>0qlNsv4luVX7jqG#h!`zb(wU7YH>Cj< z;SF1OY}BP+b8OFm0*B}VWZ+Yhk+C7OQh3->LdkBsfwtWDC!(N~{_H7`sG?r4XNapZzE~M5_9>qX_MsKMZ76%T2b$3G6b8%tbe56}L#Kad&WV6J7Tss4Rm_bAm-pV444LZlREjaDT zVJg}}G(nWC6A8}~pJ0MGIaV0BG~K}V5_8${UdYzPzjPOLigs?q(RJNv0OKKYbAHtY z#{ejh1unH%<4o#Fl(J1K-G6;VOT^mdyldZ~QEPv#p$l2t{{UhUw9#0a_<0v>Q@cnw zc`s+$w`Bn8Rm#YE3GIip- zIX$e<)M-O2v+F1IhGZ-upsiu?Hw0(WW5vy~AYt}ey&bWY?DLE+EHq!QZoL4)oQnwa z)*D3W)h)K$9(6qb*A72i61kJfgCkt^{Op>0m1S|PG$s8Cf%Ze5s3--pYtUyR9|U6a24n#+O3 z4BVD0nqs0!F~U$% zW^_P2D@C<$LHRG%#wLYi>=cl&QZ!*Q#)YIL-00!Bkdl)%qCzhC<*OLxDbr7V>V>L5 zezkwGDihZAAYw7kxNNL?_{~K6$0_xbacBIWB0iLi129Ttd?KL{(|@B1VDm zH`#F!M_2AETJ1x;0JpOW9 z$(3Uz6;=Pv#LtEO&ty}(AERPVd-IslF9@YZQ_#D6OXy+@uW0B9{BU62hei7-Z%P;` zY7p97bW4xszUC{7P}+*fsC}fpQvUHndX(H0t!Q}IMp&%@AL30#?!u9PpnrzG*`kpDQVJ+60>uD zK_yTnyUpBDj_{7ak91g%#3mX8Q?g`|-DoC9#SGZ5wAylCj#XIwCq+t!(9d`xu(~NfXv10Z^!CS`SBtQ9j-XXaNC}!_QgB~M1Fc<9p6PH$I+et14^JB{ zxgByjz(L3A4PK6hw0ckCQhuYkkhlA4+a+4si765mDK3XhC>LxlEBeBXI z0x=}N8&J(npFe`4RQ1&+5(Y5OO&xYC5*CO%=2E>ovW(82N zbNW>Pim`2&7nS_hTCdMilMlK&Kqst?9DshL>RV}xZh(24k5=d-DF!asbq zLqG9n6>jz#8Y6O=`b^x(gr}bGd^`LNc8$x8;2Bx3$fyy-o<;3WHJ=w1l)Ed&lOtS} zC=5&pS>e)l2X6F+CzJ$v3pii#RcCPbapb`{>;cS6$3&$9s6JIX>pNZ(Ok@>1d5U36 z*pM3FXhhC=rr8teH4?#kPzh;>z*;tdP>;<*hl+VxonBcc2n2)sPIQO_z6X{t>>jF# z=rFqm{(w%3oWuLgDK#}1;xKy`gjLvk5X}1L!M-Rs<}sAmkBW_oV>ZFpT^{qME5Tug zmVo!{*`T0%5x-7q6MyyW(J)r(OEu4cGDTKkVZ3}2dMGI5rS6rPEi zc%n}%d>|VeCx~@s+@ASiv(#pbnmm#5JuQK1>W*@2mKi;q=D~4CM>e&A$cZBplq{3n zYKSg|Ousi=YLZm7j}2hJD?uW<@Y5bk= zWrWni94!UL`nY-7h>&k5asa{E_S-xeSG^0QI(=sFkqV{J+9En+9uBV&cQHMG*sYnY z!vHM|0||+wjAQV#PkhEXmOl5dA#$GN$?na_NyaDr76}S8t3t)$m0Vi|ag$0&`dHhc zYMNQ*$mG{}{RW~2sn5%8zTYq21uqBs(^8vGKe+{TdgTvov!YBI zme}4RFCJTGHS2$Uy!VNSBT<9TF+EhElKPlXAMh2UO)u!}7kes;3GLpsXjBFZ{OFw? zNbKPAl9&mJz!a*lX-aOBA7(RsdN}TE@y_Tu$M&()-O@HN%s-yNpgJ{sgUFl>PI5&I zCFy`va1c80?un`07vs65y1yRMiP?s95104NA>m>#vF*W=C@FH>tnP?33BH1T)LM}I5c_KSaL>8b0!_3v z+J}|ue#N}-$9<<>BueqIK|`$4CG>U|XT0}HqWVnC!l-1*u<4n(fDYcgLPzH+wLYDAo@Z@4DE6 z?x`%M15TUdG+EB^^GM%cj>}RTY_Vhbulo3V+?UdhdS5^SnJe8`70KSA+?(EkQs~Rj zkYym#&BL?{z@WTd6t0YU4)4Uyp^rkU==_&r>F=%{n<%eTOR7&kiq10-3PMaXo#%bO z_oYrYyHTx@0ll5e4NNY7*tYq+X$tLFV3)1E*>}CXuU|PTmmEGxRIdkA@A>HPdJ#OE zjt|^BcT*}p`E?j03v_G+>MHm$0FrC@njtz$CVpl*pfiUQZnIKSHg3Q>| z8&(tL3{PxS-g z2TWFr>9|_ST$IH;9`+A)|Kt>Y*zW8Ri_?sw0&W{g?hS98M$H z?qyGC?WVrVF!KCPnZWAo9NH3tqP+?l)wZg>iPb?ayDOX&1;RcHw1`uDPJ_LtD$O=q zR`n{aP!pLH{q4?Wa>d!Q0CJBw-8xrR_39#@nq~jJQ4O@wI@4z) zYi<|33=X@Ybc;7{R`^--u9`4~ zp&4$f?PtRUM_Ij2BpHp_H}f7Vj?=;HQOef+AMh=m@^datUF;T*jv%%%y{3;|6MB8y zPK$Lu;|$iC(mUb@ZtPi$^BJ!C)C(lUsbFBq0m&q+P z8KM>|MU46ZwZLECRo~!C~n*fO<~Z&}MF^M(ui(-d?bQIpLF=DjQM! zhT*q7-KLA8r?!6NO=o3iIwcUP*?Pe{v@I#A@J{?AAzniuG-r+|LH@jA^ zr@oXCPgNn-D^ZsAWM0J-nHj?iFn$Siq?}BT4JMZub;|;cytZ?>pE4tydT$-#BTV`$ zK8TZp7z^MWk}AoVvTAHme_4O1=ePa&8^mF)-Ta}!jQ(ekMa7|a*5E=#a;w1^QU=w> ziyPzs&ZKB6`Q%zofmr+@4uf%>_!ZdAor<#2%ke?@C0EAJ_oT;hK*rF{l$hHA2PbiK z;?72AWJ#GXQjy8{0zM3YK)U50KWXoJG^+rrW3!ULJ48vD<7ZkxOh98TTUT47`Sv7~ z)F_XQ0t4V2q9zV&p=7(kAt88?LN6vKg1LW5@1wRaf?BCw{UWu|&@O9vDHugLmXVPW zLb+O-1iki}tg$qQez)R#VXcT$+58^Dz};S^Beh2>3Etam86-@~iG_(XgWtM?H5>GK zy7keRY$=Kv+xNjnnm=4X3ew+n;2C?Bm~oTE$>&a9C2*D2t2nxg|G47nXE zR+VPwLIzhHRSO?T7nI=JsSbbnE*Q%aP8M3j31qZGBxr05!R~5))^N^Ke#Dsht|40K zQE#}kD1rq20^NXF3L_p zEq@`L_$s&7Q%i`SGTzrRTVg=4S91|zMs1;#KwdX31qa!$YuMPrp4Y^UTx5}b(dzjr zWl;VnoPlE-81&eskX?l92fPa#0N;|6?6D_8yl!eNUL|?Vzu_!}x6kee8 zCbhnEuQC`WGz&VvM4;+PJ;#+!i5+MZ&%x9*Vp_5%O7l!cKMr4aAWv4%IhdakZ#)eNmRmuW0C5v;HB5bHkW5C3;a*f(s;r6A+S+)k z!xl3V(6pDa2Jw_UNP@FXp)=Lw-u8{W~A5?u15k`mn$lr zL=yWZO};aG{R6lb7J&r|EF`C!>PWzg zpKx&Af2YmBB!4Dss6za^M*%n}4=Pc?+Knutx>%QjH*cf($=HGQh`4T!S}`S;l&3lq zEYH(Da`WLcKOgjI)@+@_N3U10;~2eg*y~Aynq*{xhE>VLY&ajvAUGXBXsZA^dmiwj ztplqgc^ve+rg%G&*@?+w!nKmyB1XnF++L+xarHH#V?h+^ox&60eYeDg{u{nTOZRl{TgOtol~P-a+ktJ{dv)9E$qF z_i_dozXMI49>#q;C7Ika+Cb__V&D78ovRTo&C63Z*;Ec>mBnmOgp7Raadu2=Jcnu{ z?ctM&$og|Gsey{*3JDfw0n-ZV#!831%c?c~L$av%h_rW;Bs@OD=N$)G#0V*dRgcg$ zCD@c?FpO{F-rCq%(pg>4ynCYu&;i9Wa+=^*>< zn;sCu5wbrkE6zExtX>U{&Bz zO$z536S7Fksf3qynOJ+ePRwmJ{y6?~XYR_zsEmL~v#Oz1LenMV#LqQrrgOudK@m55 z;p?g>oGE$qb1=P}`#U%7zaE~fIN~jcy0hybv>BE_AD4P~-w|LU`2YrRhTMJpE=_c3Z;I_?08(M=Qd*GMurqS`tWh(dS z;;n^2Lpm)6EwvPbsx*!9x{bL_shFD7$14`)I1Kcd;V*U%o?N{fy;#Vyhz9PrpBYZH zBG0kM@_d-Tr-ofNq!>MFIb~j3iGHP#LQeR&@@7ACwXC7SY;cK0-@Oxl{cS$1CO%(x z{(jV;F465OhKG%Ene4RJRA-f60cZN=DD{ZkldkS83fGwwA4PpJ6brKAW>1mUQYqyq zFwSb#-fWqiKAQ(sPqtXv?~R$B%MvlrUzj{{&RmtR!0U4Ij_T`Bb-d6*Dy&ij(k3xccTEWD;lV6PJ9s$uL-N z3hO9_H(Yx4E@mQ$nOCnJ6l2YZ!A;bA zDk8)D{ciM*+xAJglE)+rpTq^G@=T;5Q!P_hQ4&s($PD=a0^i>A&*!n%blO*3x{IUs zj)!k_2+iRxrSW%PWkD>~C5q8#f2z^KMmtdreNm~f$A{cbyt~va9v@E{?DT-$sSkke zWk(`y;{HCiI*2{OS7HkS+8oTvsN!YP$4i0C^)?*6m^9gE-6*LBB>hzr?L+82kYEK` z@ZLOiMWy)TWLc@Og(({x#95z`m*4_}_Lm#MC+8E+)UJJ)82*SLA1THwUf*WBiBf-= zQJC!+7Cs%|hRQb*0Qy1o&yWiBR$OI>o)bz84bHskx7)I+DhUTqF2l;ZzMTj6N?k4@ zqi$tA*c;#L-)>PgqOE|+kMd4R1Rk7yH_T;Btq?+k_(0H8I%Xo_!a8+`Is1~>fW zX{A;ww-H`98jx@BUS_mqwDz!&CPtv_yW7X`k@JM)%ULF?R}z9o`N4uUB8(Q5B5u_R zXseGXExB}y*hSS;4)?V<0oF?qutIlX0 z3`g5*x<=;scp`Q<&gX0X69W)j?M9ejctJdM>r4eL#ZKdVpf}W@cH~^lb`|CM;AI-D zXyMjI1mu+D`$P>%_zWG}Rb6Zx@=+A+5}^!L2*~5H$Mj)L=|=TplFd^Xor#|P-;R~U z!6CE~NeJTI^SPP6vLmTJXsRXZe_#wLzMlnVR1{A{X?h?cL5U6r9j^TwSk6zROBg)Ca_&`qk-U^uP zJs<&$B&g zfk&*}z5Tybf>CXRsV?ghz#;FJzXvtZ-YqFO@+l4a-!sxL(c;C6O;IL2*Lp%&eT!^q zgD+?n95d4J<4!)fq82l*Mi+HV8odX1v^p=swA_y8x@~?68B}Lt=NK&T!ZxrsfnKNq zhA|G^-dj92&0GyU90fFH+K>2){9;XXL7eURy(k^o`LX^<()jsM$g2;ovcN~~HNMbf zL)_bQ4U5hua$7|bvoj+3^|2f3n$@E1MF&XPWjDiO!jVkW9zH5SaZ&9ZLb-e~GqWBS zc?C`p_b?+uYakOvb1(_p7}qX`m{lzY213lt@btfN`#HBZMxihO`ud9Y_)S!$;C}@H zg+TF$7TN5b2(i0A@8Oy3Kp3((f)EMVc71L`QT8A{9HePTNd_BX3tcL_qbIA=#QcV` zPr8pA!$_c%|F3}7e(tOmXBBY;C*0tgU`RBG?TD0um~f}Eo=9*!R@uVm?$+);+;$@Itd zkfVYB7CBKWQkq1_ObW*Gll<29qnalBGrlYVFZM2_bw8*I$aP7Lpbl#yS#2rdQ-VfV z|7}=Jm3hWThRimgm=A@b8`x@ZPdKQ|Bc9YqEgHu@K)U!YfWT4RPYJZ;xm;emeYmN` zROg!r*6`)!NqSWoc{lWf0ORH^m?G+D;V9SeT+QYJ`?HUDj(G3LqCj#vvC`-%iPSe1 zf@LO^xTMXPv_J=y1^w+}^d$!+Y_qeqA)Bt}DbvFqA|9wgrY4^Ns_-I7%M+0<=df3& zx5IzO+vf3D<(Y}~NOL9JB)h$aYs;Jv*QT}Mi|U4JzZ;h9*C3I1Xi+w4CAwtEy!kWb zn5a~p$x+hJ#7iSy6%RcK5AJJleP;3v2^|uC5Wjq&)K)h-XoXFc8ubH_aycbDqyk&0&@Jv&6QB~luPwduY{*9))p>2kH5 z@~#|UcypNIQjQCR5H4ofGv=f8J~mNTRZFOiAFJqU$F3BshqeDEk5nj=MXd9iASPr0 zkb#%bg}sG`0xtWEaFQWocvvAUCbN22=Pe?GO}f8bas7w|A-~e*&*p|V`(Z2+jp@+4 z6!HMIQfp0X%oXL6A2)|E^48kINe||KW`&1JkAm{)po^F}Y6V+~hDsEE5^((XSW)(F zf1$#Xtr81ea3`S{%g*V(A%pzi&ODvMsi$m4Lk0-7{-_`_#+xewE40LlB zeEQ!*nvoa+?VFT|IizyGOpf<2&!aOX(6*)&Qpf}m084!A;bjyU=PV(4teliiYLII( ztZLon>7yPaZar|sW@hMumDRte-%!D{c0zI{%YxigDC4Zh`brX9X9do8(^Ysr(H2sl z{t4EU!=#nj{E#T01ca56;4hEQLN#iJY`LERt>GqIaA(yh2&!7-*_e}$E2@g;(n}(H z4sjYyfKATjO56Qr3W-I;2{I_LZZ&DiPl~pmMF<-nT}2sz%fq@-f}qIDdI7~ zFc18fy92L^Qb{15B9TdWZN=u!&Qo|Qcd#5<3yu*bVSl-Z`V=CKuz3~6ylNR-O=u~a zMufJM=9MDOX$Te6kb}z*AAJTdre2i&@HOubERHsv95`ANR$v6^hp8_C^8Lin2>0y8 z9@m1zu9s}K+vg0%6`@gnLV>hfYV-J9t;!&sybxi^;K~Zj{PIs2TB=kG-~ zkvTEPq5Td6;TaK=$dP|24`Dtd9)+|+gqwEkiI+oGd{^-&@6W%`Ttz=C~zFfJ#C`z)9s^~J= z&lA3hb6_+iYl*>*d-KLHWr`Q)3~1pfP#h3g$bf$<#B{aBpv)idS;guG=5EG_!30Zm=&DbX%4;Df-1jC0V1g;NFygh zBy@BhnTw-MR2-&=b5Yi^C>2-xh88bOxP5#8wOZ@#ZsMBXnl>|7WHJXnI{p(27f1so zKVcX)VngN5Tz?o-U>u0hnq@W^BaeEtq*RmDu6+n2LOSB!?ha(s>3rQjdi;EL7pq_7 z1hHZkv-Pl1rP*N0ZR*VmpA%c2oc!j(#*atMYZ;WcOvA9~u=|s?GLsikg)-haI^(+n zRn->eXd?kc`ozS8vE%M-E z#%J@*M}oLk(Xu@y9PEF68Z*0Y^yY`$EuQG@Z=<_BosoO+J$0>IZiG1IWWCcreKJ~V zJEmvQ>-M)=j5QkgWAb3QMvcdRqXS%$#A&L}=r6)iD?7WG77WAZ-8UNO#C@;?v3Ya9 z;YVfFe^5E7%H>;;JX#B2$8R<`4XOG>r+z+AjyU9SvF5T?$JRgKBvEIykcquX^pse* z7a1wAbgC3wh_?()4rqMeASyLJJuH{~YElSE(1^74klv;#ZOChJB^#B~hLUhl1IjGI zzj#dtBr2>1vDC{`ldabI?s8PF{s*J(tH-3PbKS%};fxGYlBEL|OhsA#djkf?4ATWd zv4uoHtD3b|Z&#!@iHRY`LD$C9O z~BYi8B*15OKCGsp5uBY6l0`wFDi%ALo92ZTmJ40UijG( z*A~wId5h_0XMejw_)3K8t=|DTrv0yuM*_0l zME*v;O_CKU@b}j#vClq9SWtw4Kv+39LUMK*$;&$b@htRKZ*%zOYTcM~?1{b>R#W{M zFaRh58tJ|o?`G`3x?qj(WmefY1aU?(8THbF69Nz!@_)ACRp2t~d6ed!u5TR0(RG00 zFe%B~+cQ_$pnY+R3UTdtb~JjVt&8MyW{*DzQCUowo8CRBUI={p@nz!mhqO^rAC z8MOOo=PDPSJea&1@>xs2>ftyMJFj(ci+Dn@beIHAWOw|BIfTH8$&N| zhyPMr<7&oS)nEjzrEThyR`gSi_4aF7F`2#MTJzX_=XI^SfRPbW&xDTWKi@go2BdNY z7a8&J`_v59Hy}IARA6+axwQGs|;xBrKN833os*Hn^%B(DXYavJGA!DQ!mvFct>)@(^0(#x*CjV&u{T zaFi5e4XT{rQtqmUD0yPIS>-=uV(Z;?x!C1xo+3l=jB!V{n!UMpi@DR9Q z?TNUKd@3@zdcaL>{qqIuD0tV?oz*ctu}@NlA4p4zTI_}EMkzle&a)xK+TGWx>&ATV zONy|Y{)N=SL+eYnjEo&N-jy(liyyeIZtQ2d$H{J@472SHcjeOlXY?LJV`=uD#AJ|u z{32ben<<3p3^#$qBcH?mr%E1I=*3r=ZH-%=8R0nNhO4~z=Decf4`LR1VHaOKm|Mf} zhuriR%Lg8O&#YxL__BU`mD|4!$)^R@v8EWpNo@w)Lf39zxDa&NAo?7bKbX#wwP=YQ z9Nc@KhhIws|7#OFgHtb(AbJ6BU5)%d@d1Q&lZ~|D4z$?XN z1UJsHky93v3NRCfTX;y0R|tPoqx-{?c$i3=7uP7XCd;Cl8X9Dr9HR*TV*ij)BeEc7s21E_&u4602!9l#AT44k&m4g_0BSswT?n!IIAuNuinD^15*1TI ziVyNp=22n&p`{~|l>dp8yU1a<(}?uzP;R2g!g@gSptNezZ!$qTh%%Z)aaW@F8PuHg z=(#nP--+yb%H-l!Eg131!eNnXDEgjQ&)pfJc3L@D@ySP4$VPzdr6kfu{i*V(U<&9(Dk0y3UqP` z{OIgkHsibJkR&E6uRzgLkxxC_+lCFF;MtqhqwXMl0a-HC|_pB@RIIU|X#B<)R33|h8_w|+G zx{!$&SIHlZN?xwm?3(L}D|1b#z4a}YtDV+tvKL}r@n!_= zze2lba5}5E^=!N9@iZSGG-dugX5jp}wQGdXGenHWs+xbLzz7 zPG~r6vfJ6UwqK3fsb+`>1J3dWQu&=|eR)l32W7tn ziSgF#L};LP(mg4XdEAXAQy?Ai{}0N;mFb3X+**Mmv=$dYZ%4L7pc^eBV`})P|JTE5 zYcRMJOHiG#IY>&D9c?8iU+Y&<@U_AJK*j_U$3MTl-{eY=g$h%OdudapYj;eqP>7VM zBGMe=gPy8u1+Z_-{5Db9F&uFVbphs8@?s7F{Mm;&ptJ#}TJN3DQSX*$0y&*n2|Yd0 zgo}X}SA~2YZ!Sut(co( zTb&|AXypUuvwVAf?%c!(|En($T{egL%B)h_8H5=tJkDC3e_b%Pb!Wjgc9!&~gy_N> zg2Ey*GJbwS3!2L?Sm)53TYj8OUjJ7*Y{Sbji`0u-Yv)-g2ul@0j>Vq!zqMW0nGe#-X5S%F%7TG{1hXxxoeC)kS>l^}yTg{{ zR4$*7#p7BeQCKV0`2NpA6q03_1#07Z@D2ie|LeIy0)X`?NomE5Q)In_j4AF;_-Bqv z(9Aj3)@m9nlL6@OnQ12%`ArUljc#Ue5;c(8Y!2VOYLB2DYq4F~Oo2csvW=z^(GP}y z+$u<@47M9O90l0^-38&24xOrLVwHKtsE~RgZzu8b?pt&Nmy11BbES4T#U`LXv+bJM zXu(_dJvp@rWt09}Xd5_BKHj^^w{NY-*PXOdMwd)uZT=4Uu_Vxf#DlWv3d-X+eJW@21X}o z18RzPsNoNcab-k|Nx=`lw!KULfwbU5uiKd%46bYA?5TgpN%kL}oQP^`^Mbie)8v-o zA}XwZpr^lBiitQui`uN4pBg*0mwr*Z^-~B}kehs*`Uk1TLNfdO^0LZx5*XG85}@a* zr6-;ldvyQj$o`izw%rN;FI9ngbLW2%8)Hd}aDZsj7r-R-rg&T9)MYrNg+;J{)TlQD zKm^QV0pIwS_=QUXF>~dHkI0l%Xc8;+fgm4VQT|!E^m*#}272ZFFqlv;R5iGA#Prae z+<-xC_`Mwrm`n!Bz=OMuA_8|C_YNuyrrrNb3YDTFHhT8a(+oBtYiY-d7WyB~nK(>BvS3NXqus)>!HJSgW%uz% zn^^MCX6mF3`C9I$Aljp8INt8U9VmBltldO4F3KFwD8Cg$>cViTQAG=1-T$x~kq&hK zIwvLzgU7o?FjMjTS(f=Z9|9>2dN|TF8%hS0RThxn`RCQCDW(GoB}K!0ZOcswT4~OtJ`89Ehum^TZ6v&93`T9 zs{}A7P=FGw-3=aak_vEQ5vZHO=MH8OF+)0`G5|7LkW!M};Q#WX+`TKo=Dc12p9yXM z5@DcYW7+???=Sym>#`0!@g}sv0Ypcz3_LOspTNS_49Mg7ubh8*VSz(Kc;MmMfkD)B ztiRNkiw8~cTsx=&!}aTb>3PUR#8%*joi5-6zxH1)Q}3=3;{TTr`?Y0Hp@B(Y7Qe@T z8p8iS4LJjw3Ty4)U%y;*=w0nTd&pgFfqTw?0*~WE#n=XP2+v*1$CPBwU79`Qj{PN* zd-%gtoc|6P+=laO=}TF_**oa^^o@~Eh3GBV|E{#;U1riP=z20H$8Ya3<#H(TuR6fv zbp($LLX+a1Dxh+0KrjCDOUtdNu-L1DHUbUt`F4&3^9kSkt|`RJskje`V5<2mO%enp zfk@Hq;?JVJas8T*{|qs3i19B{S6{%{}97mfE{}14JMH9#(0r( z{PEb11iuNwjU1O=&Tgdz?0^3+*-k3SjyJ8R`WA=i>%J|b-+L>gCg?@xKOrSXwks|3 zdD7UO3A?Jne`2Av-{3$~nOxe+Ia+IAs{@xb2@}zRtCzv%0nZokVBHZ2!TWjG7eJz3 zCFAgKmDsxLZenYYlaeO5m^2NK#f1?gy;}*Mw;RmuQ69l_SOxqa?%pb{t#0f8Eydkk zgA-heQy^%dc%XRE0>vq=#oe6(ZIBY&f(0pB+}&DSik9M(a`No`p1t4mKUe4W+^$d7 zTA8xu9CM8E`wo;wzLo6|r?32;L%TBfC z3qoXqdh6yHInR{2k8csGOooo}NJ09ZnRox!Qvv^J>TGrOkpKORAq$6G<(Y;_5iCCU zNSH(B=lw%r%co+AV3mDH(XqU_2KQyBp1@Na%U@@X?5t0i|N5ZLsbr9u{Sh6;#=%4- z79xXMGcy>dX<6vVBqgMn`JWjk=pXi9YyAJd=J}sp=>O>8f5#<+|Cv?4HqqMCmLId` z!CxtY8Ek6V%nIhH!FqZxxa=2WykJ)U#lrk=`H{SE2@Fo6EwKgIZ2^c_%h^?F+U z3d`h7g(N#PE1Ov1CY^A%@V_oqSB#Ge(fal|I6TW6ECKP?na&toYDS2 zuIBq77lQxEC_?J~|7Uwab^tP60*R~W^P~JvXZ*7xx_w6u&Hwnt{t>YM|Mqr9u{`r{ zda!`|&oh^x^3zaIsUOON*h9#*l!*(>`5!`p_J2BNbP$)6BC-P0s+?}TnjThBuHtUQ zh7&)U@&*FRC~Ad2pKrqNJ>!{dZAEt2;(y2LrDjeYOeDzu>{!{skG#l=)WZ1;@A2VF ztJiDBMHh!{M3$&0UV`P>PSnAY;@pB54llogb24%ef{{DY|BP8+{ty`u-s}Sq`-;_t z($i{Zl~l|zX*rq{WcbyOW5H=DO8=q$n z%VwK-aFBMssEC|7H~;+-7ztmAEFIC8n?{c12QEpqZ(iPU8#Y++?(v%^U72{}RP&0# zJ>5(OpY8Mi=q^MZtUG_mWaaw^Ee>H!o&E)@aU_!5BWNQ0$AbHB{>V#)B~GSm|FR+k zfu>7g*ypNMxS74Bg!fOns*?gD8shNV5=cMW7bYfgx~$|AxAOxorkXrn8=d1jnEmD)sPenG*EWmVjK!eeuH~ryra;>Y(}00&?eT!OL6q+ZpUf-VylRO=VF# zg_8e=97%2<+$RqDHWRZa%T@tu#7H5f@><@Y`DBG3K7kggj9i*CoV7hOK8wf_LM_o_ zG-?!_rSun^+7)=8dU}DTFCZf>B4j%NejXBPF25m?VQtC^PwO5ibG#FXoW0?E_GOXU?w)Wgf%I2EDu-|#9+Qp#ueEkvyo+tAeb%)eqbx7Py zD@RPjVt8gO!{s>71`&09cLFFvI#wkIOtfXKmbzXA>fFj@YE^JObMB2$QwGgPtQ^y^ zE=K~s3FC8-n{lRJLQRAlgogeT@M09LI>RQ#V`r+SH-ipiI_VutbW&d zs@w2)UQi!A>6-jN^U-27ZTF*;x?$)|CAA}_x(FyyGC*}upd(=cSz3{xm@Jy^%*Rjn zG)v4~pib%8YbD14{iqR$5>`Xc@N8IQz^azkM^=3q8EsWtq86W`N#QOQiO5cDg)EBpF7%-9^O+6)?c;F!RYAdAwEc#ccScS1Co>WK1}^={GwHfvIRg!` zl|zP7s&{uNs)qhMi9}+QEFTLcS*%A=^=6{HZTWXD1D-VW6m(hS)orQcimg-A(-PN| z1%Zcqd<-ccbWnEfk}>jXa6Dft_xzZ|G=BTt_aHkq1A|LOUN-0#S~YYxW4$RQ_oUK?sVk` z|iFKtu z6)9aco;>OR9CWy$73%Wp6}(P?NNZS-{+s(1>=c4at`p*a|KOoYiwlTrmJ7>fOOT%V z#q@=I8DEWr_WqG__3!!Zd1>T`f)71p7ezJJ{Tp?=g;QWY!Oh$|ktVOA@GF+oN~Ti- zxivtz;+Lpb>zHh%kAyydmn+2=YSqvkDCxsCH0qw^kjtr!?8LD0>y3yUj)#?+`Fi!U+MPkS zd!_jnUDhMp%lL8BMJ=^whC#kSIsf`!Z@jN^`pgaL@ z@9zHitYBW7A^-sBC003Msb7JTbww5+^VI=7>ZADPu1i6W`I}h*T#pIzqn$Y3V|{$G zuU>w=y&1h5`0uhv@FZZLkN64Ds%S3*B`H!&yk+8=fBVHzM z*IO@^q}p(6<5naQXw;T7>94gD0=^N}`8_a<8QpdYNbw!PKW5~GV(7%zeS#**Z|u)l z6+|VBh>CD$925m+4^dr;sO+oBYo$Muzh~6HD9~;$DdHQ%B}gvZSSXMazu$wl>L(bK zDz~V4sq*v&yWs>pu!RzbQQoHC^YX%T9^v@snHC z8L@?_<0*gJZpXqW2y+E<&q(@DS2Gx9T`!gu?HcQ3e@u)C&^!;>NX+Rq-kDAJ#x2dI zmkrS1IM!R@lTuDAWXST7NdX>$bAl;>iTht24ez<|fmsBS%IF1p5&>2Q(;neT>51=V z?C0S5#!FdYi6nl%fMHq1B6Sy^Z3gAORxURmXo-@%(j09F>O#J@yhz%h!rlZVE!7{AnA=5wlwC*6`tX6wWcO=bTrO}i^`ea1 zWt)G|ew$I0*5aPp!4Pd zX)qs*N2*(JK8hqY)s>XkVJqY$f9m>xZ{lrv_Y;4q@hN61_j=FS%(Sg0Qg5FxeJX!o zT*}|g&70CDB8aTMtKKN5Y~Z4v_nKZZ>Fjk)A3I6*=%Q;MKPOq{3$Fu`(F2UT-?Vp3 zXb#vM4!=UL=^3d$qA~OF(Se71&d)DCG!iZK2O63LoE(M`&*e4}>()n91m%~&<7cVV@>AYb`{bGYfs7ZNm>ETO-> z2}#8>+7w2Hs1E_jL^L@cb`X4!kx!s&5Z=Ai&k-qgoxEH$jz%W&m3}~H2MReabB68y zXK^;tf%$P5GvJ76Sw}Cj^spwp3V>TKfqwo9rl_WbnP(I!pNX3ej)kF&qeCX*b#-+0 zV#XS96gdo-cq_5-=^?o~#`+KxF4k&${$v$fO{y6jwG;@Ok{1WPlvIs5*AA=Ri`}as zjT$*67r@F>=RJ`dqgf_>qFa=HU0MZT`bRs*TI--#`=%X+3C0)*@`<-ML$cjU~|=I5n1e` zsaU@0sq=aj72<{?^xi7fJTH2wfnp_Cc;zTwJN-0X&V+Xj5ll0hyxw26O(9;%h(~#5 zT9Ro{+|Y)CK3uALGo%6z7N!AXAoL4}d=@@8!0GDiOI2eu6gA^GtXQ5O8mq~>Ig!(U zqH_jv*?7L<%`_Uq!UsJo?TH+zNi5(nbDVa&8CFqqr_ECp9jMC38+i!MspAAAMMy=~ z!?-}jVAB`#sd0Z75ulgx;Es_gNPf(@#n-=%;MSLG*#6yaT8a>FnYa~jtNwA`Jyl8M zs|M3K{LvJis@Y%N|H$+Q$D?k!EAoFtd^N8O|Hp6s)Yga9$S=7uq=2wwCo9e>DZPfeE}AFMZ|2qQVf~{y>9m zuIwxwLQ<@S!HCWo%SR0-I@5^Pa=$5SiP)2@L+nWUY}kdRw0uwc%xPund=pd_uFub} zRjkw`E8fvYOdzTvZ5O-x3>yM@vr^AZzn1dy=o#v=CxHBSD*+hkS;lD;vRZ4Mo6lu< z9d9LQdp4)N@}>Q#jzk&y5%}5lPw*EBpg3aV`LLgRAd%gN?x*i;rf=8iTlN)2=Eyz;jG1(j$0r|Igd35;K^LidugKlK zIh}Y>Eu1z8-l*WBA=Y}v9Xaa!RyC_uk!o3jf?g$IS3`F1)K`~sV}+hCcv)F;hc22T zAE&ol5tf+VPFACggL?&%;tJ3AG8SSyfwH`%mP2aSJzljobXV0N-(16-*V|XY(j-{V`fhqLHDp$0ni6CBU9I?j2Z$o>~-_c~7O_hh29 zW6ZJ`tb=vj;<)@7gXLIJW6gz1`4$)!`6fn;2O>^I>yIVHdPK=Pbp0u(LV9Av3T_Hj z>T|o_s)~pQT{aC8N`^4fQwf0thmw)Bh=`erX?SrV@M%e9fAe}nwCeEhiGGo?A4hCz z2WdqTok)gKA2&1Vii>^>|3MMvTu<##a9Y++ZPZ)D$IS|Bff^%3H~2|pjPJA`+9_4% zawbvr(k`(vnUu(MDnZhSuq1;b6OOvB1m(n?i(EdLU21Y9TyXueD|XVianprCTpsS<)Jo|&M38~@nO7d^oW^1Vv$MwBR*4wOB-(|Wa0w0T${pXJ$7b za`s|ZY9qz%Nr!gMf`41dyI%ga?|&t38Oh}tp0Cu~fCO{6v<!+!2nX~r-0XFFG9|os{g_!+X6Dv9Rwzial^1al;+&y@O97m>giKA_NtPRbiO4$W@Kr4c28o|la%rwf|kCE$LW0(wc5|>T=LsvC-~U9iO{0R*NxXP z*Cf~NAWh&u+TJ2|UK93@QJH9NwR4GDU0Inz_z}0bnD$()UQY>4gt>NLy$~W_k&0si zUMs*qvf=R^Y^)r%xBBTZ8n5iNI&NU7XR|71z>5_j$w|zNC5lp8F+pUa;+Z`yDZs7$ znIfH7fa|!jV=BkesaQ=#!eVIT<}H>bt{oqL%Jm=5%d&^qQg4 zLO8_6?B`;_(INT#bkD;-d-c-4^(j)NGS)8BkzbpQ%vynzv^w;F_sQUwC+@Rd&!7?~ zDN|=S?t;b@%$u8}NwloWd^Im&6AjVnwPFMx2jo}V@!Ie+G+%%-;CQ9wS{qdXWQaxn z?JpWUJlm2fKU5D--i1|3KHufith-7akl3e**!P)5ot~P}B`?8kiS}_*JQ7U$ULQ4} zz+#wt1p2W-z-M0eJMdnT@263pU>90B^NYM4R#F_nk|t`H7C_#sxx^O#Q2J;)D~qA# zQ)hhT;HAa6I9XCIt1T}LT&=`@m{6{8T(Xt=xah=atD}Z{49>WbdTmCv))|EhQNGD< z?%zD>aZ4;$ZY!ar2fipFAyzCU9>RYSUYW`VPx{ew^?s$*Ycypfmd)jdS6B}(s&q#O zAp!$K{475-dYYV*`<0S=70dD2r@>#=4|Q&X*sp%LV+KsL_YMhB5a%8a4QWN~(`)7M zG)HBdvCo)D>hSZ)TRRYez#aUjosryjE7u8(B)sx9)$8``xVbkC|{ys!;mqWpVfZz_KnyOw4TCk~l39)?sY< zMva8c+x&a>?NUi3Hm>89MRADXCo5mm`7CgpJDxPE7!`DQmz0F!eJT@!u5NJIQfKdgOYemnKN^v$SoLB*^WVz? zeT2Of{n|=1<>0mXpx>yyp<*Trpq7Nq2z%&D*$XXhXSzDP9-UgHKXqkck&#!^_dkDgF0TI+frST!B17&Ly zR9208&RF<|X(+0A{T8Ekhhpp3K zhr?2i5HL65VEC(~A?4|Jl-5Ht{I8~hdHph;$+SZpX|!pm*ZpsH0{a+jRe)+AQw1`vUbD*n|xeqPE zwshzMFLJhP&~3p(+1`WfPhYPkVid!`?vW^U`h!&_+R0CvIsGZug(!gzH+o7<*9E?T4clY^8O^5034j}1-M z7TdzoDZSiH`SGF(^@l2mkWS^uBqtv-wDm#jPpbJhu1db;bn7?<;J=W!7$v2>XM9dg z6PB|CyiV;Ks(xwl=S3bnS-UK37uai8Nji~%#Cs@Q=R5|VOVW|-8`P#E+J*^skp=x? zcnO}865G(|1jzq0i&a%k-^v~KC5ZdHL@w&yyPk=+ZNbsfE10F(WqzP5zRRs7s1!m5 z{Vary-DB<>I6<|ts$ucKikmtv14~nz1_D9mAGiX~P6r+X-nPEWem)4(wV}{2Dyqo2 zE{L#K5td#-P_!hO4p3J@ayYaHe$0iQBIxGWrknQPMy-E4HGG%<>d5y=w_%HdyAYkbY zvjdltyn_jO<}6c*zs$Gs_gPCwkkZ?iNUyx6=JzDV`U@^=?61Z{?*G_Y24{{P2Z}Vo0iRr~UjCIA z5DETZ%`u5x9Gx)6bAF!6i;SFY{v4MAjpCU2AcJWj+)+~gH#?M>T?e0~<^=I#r)EeJ z?Ctc{UV36@Pnc|Ug$RbJ+rmyD@|t2jNpxbYn9|)wdLeWz6UuJLvq_MT{Bn;n;a%^* zw~wqqyqeGf*s(!T{Hg0>0sd}EEUh*Pc|vzP!Y$|kt)0 z`{2?xU$z95zFo0(&%3xzAHPkPAhQ)?e84@XxuHM&@wKHRE!tBBpUv(dRHPTpMKnsh z$}yRCA{LA5r<{=rqhxtnkRXY|ckDz?T=Icox6h7)(zy}kI(+b`>&tgcj;@MkflNXS zhux!Mc*#O5L_g%hiY$&ArLDHgNbU*e_LP|?3<$fD$2T$!Vq3qwjM>owci>Eu6(=j+ zsJHIZW1K80E2guGh(egfrWjv}!7bk(2_;oz@yBx^)3<%Y!vrmG9{0y8{8NWJ7V$4+`fAj9+|1ha zb|@x5;j+NEjTGaUtSB2+wA)Q+vv8Gj5%KG>Q*v^9ZvU{$p=g1IFTcxOlZAaimQDrH zm%XAQi*W=~RQv>CV|c3SwjcQNPuF|DzfX3b5h3V`r04u; z09E*&xR)kwBWW7Zvdl*1$I&aP5O%z04y5dyx>RM#7A=xwiHukv1e}_?d3l5t{L+x_ z=%U=mXV^-yCK%I`)LEXH|AAx?Th%tvs!XnKj`Y1!%<%lI$)?bv7J*nZR6IQD{=4Lt zmL=Z$x?Fn-eD@|jkyWkiv4_;x;%8EHtVS=Z8?O+#8H<%<)VmCocED|~OO9D*xcW7< zZ_Zj|gXoLQ6Ch{Y(g6UIt|`9%T>yd|SCUDu@pX-tJ)f4skoJu3akBPNKx^xjNC7vd zc+GDZqDoN%o zbxF5S>PVR)%d5-VSqUm*<07ze+_Kvr9!yplzh}H=T6AKnky-}Az(ey@@C`cKZmyax zl9Pd^C@sLTJR4r1Ko!Ov)q_qlle9qq`|I5*?u{0xq6sU4xms5OyTDM zcNk%y;5Q!eyW_$mvq28jt!TK} zRoy;6YKvrFTV02-8VkBI*$Zq-w*8i{d0>N60^Q@w?=)GV>H;k3$59B^#N57txgk{HH&o`ea(k=1G7b z;p=~CtDbv+N!6@D#8uUpKDc($!w!m|K|K-fLxh2V16U3`LrS&YGUd3 zd2x;s%7ZI}t5nr$j4=8(qHyzF+5ys%gl!(!*c#796wZ1$q{+SvGe;OS7dIjqL7SoH z(}JO+EQGg6VJFC)p~C7_D$TnvmCfMRZ4xCv1|05f){?hk(252;HmIg*{bF z;YE8P=(^Ei^Ub9LwqQhZBYKT^$wsguDNde#ZzY~B;iGwW_;2*nK+a1zVhdP#@Kz$soP zYxYeEV>g$tbH1|K%`j@Ju1!lFuTfPsSA-Cw=vwawDf&!U)3*n6sk0?}R; zG-F%ssne=nhw*=nAcX;BDNXvtOOr&zZ&fxf`l*was~NlCcxdX+)iEn!KhT|4&m8%t zphB}hOP+k5E|#Q^vVK*=mK2)L0K1o%2g{n8E$yK)=6JE4-Cv z>t3})NiWi#9MdG5xq^=M;ES|w{cDw~0hl0#61Z?m6u;Y{Pt{j(5KtyU{1+v*HAD;p zg@8bnP%KhKk!q}Wlqe@9B8o>vQ8}`Es**|*QvO=h8`>_3-V{nnwC7FR@~CS`WUTsd zrKnRyns1eEvGYldyp9&cD6MSoi4#UEnLiLs{_wQf8g z(bBksWa8-@&_^I`OZp#yh9w?!GI&MlT08=8Nca3Zjb5gz+nJG>t23hinORux!n}cY{F|*buZBhYmHRmKSUGQ z=ylx33IH?L5lWKppS=BAu;z*VRU4M^U-Q!%mWhQ(|AW3)-Lg)jxJE<;Da4Fxx7+T& ztl~JdP{=V`g9!n-&Yo^Je`_}O3K-^sd^IxC-$ZQGaYAe3a|f&~n^#vQF$99AWT)w9 z?@f)&qLcVy1$+i3Zyt=XW`xEPTKU28gs;HHp5L3{by-<^tPY1y z=N2LAvG69Gc^!6D5i@KbLhhU|@x*3qp|D7o1Fy`X(NTGi5~-pB{yu{zX}&_?Znn<9 z(+cJELH5LZoff}+FG(KX``Pc9X}>5b0`_5MX@%7~|_fFm@{%0Ar_6sX}8ztCqQq(pt;hNMQ8vkpp{$1TdMZ4aiHoEC) zLDGiT3-o8tq<{j3Rqe@&O?&nXb&5I#XxO?~DNelw zE=Qxv?Ieq;s#1Td3>xT!9{dSZlvoAyUZaGivutGMKbJbPSfa&XmW0w}j+EJ#Nt5m= zQ)l=%1*Zl(P`^`N>zTQDHvAHGMmM_TCk=eThWYypx;N%&-}f;>7r-Hw#)!O{nvkvn zJ<+xY?jp}g-JT9kO*)*6P&MB9E8OtgPG4~q<-C=oN_a`BX-bwx7~F72HAP21X5&#}7LRbR}>1m}KHp<1h1>ODN|7Wfi1Xo?}&& zC{mbeh;Pe%_#au6=VvkQkOrQ@42fOb<>zSDHov+Fr1G>{>lRPx=>@p=yZU}vC2^+Z zy{c~qWldpo-M@-ARBl_RXB~Hdpl8E>lt$}q2hE`@ytD|OtOh8Iza^zEL>L<>>Zqf3 zTduRa#s{zqR5h^!xX8)%o5GIkc9rLPg}UuivLZMH5b~Kn#-H8x>lZ7o#CzjcX86Ob z4wYYMB4Z(|NMsD794THUgh!WaF~P@+RpW$-J}yLPR?yitc&keO z)LxlN$erYh|Ts zvTU)~v5!w&7pnG z3u|)`%Kqo&mE=(K3gz~S#EUBJgCQA1W1K_da;@M9$eZ^$ZT+CZS`=)3Aw=Q53E{G0 zw9HQzRYj#CkFSKXosDiK(abG>ME_Ok1Ne`{(CF0Qic^oh^LE^XCvfaMbl2Kagy^G< z%X!1G@_>u+I!T*==kiso*sxkj-OGm*D=#zDJd@SPAGvjS@Tr6xvDB;@rRvEB>;aTZ6v>B^A$(CC#bo#r#8{$!c#qDAy80wgt7@pOU#-9!+>i3Fp%Bp8bi~3> zC$d2V%ZMiBb@CYWBs*CJd!BP5QQ1YA^EA?C)7X%HtFr&V-bGO%j8I5sY?GP>yD?CZ z1SXbE_#GKgBH(=zY_x*jHBo@aMpRQ#Hu0S?c2P^4BetfbT~@#O$76>yc6T zk`;;7wG6xHSi1ljpWtvS2?Qni&&1!e(?7-zu{;V^@-#n%{%izpB1JPIp^0V{0)N`W zu4a#%l&vf18;)DHCs1Xo8WU*S;5)$7>7}^)pPsC()P1KbI)+ld-CUKZT#4`Cs!Kdg ztk&ynoLJ3$>ER|8Za*<5Ov*Z?8~}F*sSEP6R7oNs0rmwV-`a#H>ae+#t>TT5o@nbJ z@xwfdx6yAGQ<(VG5EF`=S}{sRzeyFN*q9OWQOsak$$oxyTv{1OFZ=1JmweGj>Kaq` z?(d_-Zs4lY-AsF(3NWbsFt5lqu6NVb9y{IoZCz8c606zoe^=EBbeic!i%g`-dsr8O z%EtXdRkyL(ePniirI-f`vwk#PlkRZey?0)cMBvQKEUn?>f*xlsT*ux!#QK%OSs!(c z$w*Y$*zCEIKh&arJlhgvczK~L2cpsCUP|}^sc$@-AK-;)5~$>t^O?SSWwAv~P#Iwr zK^CvA{W|{oo+^z3lZt-++rT=80Q@}ky(vyu`Yh3>oDUJIvJnWW9<^2UmZZC$@k*>a z5^|bS`UCrNkcQDqAt9lZoZhaOg0LKIS+w@NzVQJ9c1tCD-3+NRH@` z^s(-!Rf8gdA6m$4i;2rub z?C+HZmLRJg=qBHDRtQwN_H7lSxa75CWjfgeFannn%GWhG6VK)AYA7xz9j$NtXsLWl zm~`e6l~{kc7%NH4g`FhOJT*ujuF`6qN|1ccK9@#SF_5Ue7zO27 zqf2%%8@zjebGhkQNQrV@U69bm+WVN@(mMA@AZM@;BgmL8BpGg) z21i5hW!4H$cq?J7Xv>*YCl@g+ZzwAgS!0cN{Ct*(B3sRt4cpzF_`F^q>~7+!)$amh zA_bnq(b)x$=mHtn`~exmq`APVQjIz^C+IDXkOi&v@WN95G0^M=smgA_h_qvn#>AM4 zL7QsMdW$~0JV)klQ(3~>qwmol!}+Cw{i6vXp)9$besG92a=pxuP0v=bw zMp7>yJT;Hquh2gBMopa-tS-53nivSRBa4plOrs!|L8&mAn$8LJeQj-+FZ)3~`g&vI z5O>N-Y#7AWVC+B5M^RkOM4)uK;x;1@i!AYCwQfs#+!QGzsB^B-r-;$g|mBquvz8 z2q0t_JSAPMyQx60c}Wod+8fowvBKfW{4sr0XScD3i?Iv66jnZ=kgvii{pyjJ*yw|m z5x=pBXAQGQ{c^e^PcGG3d7k z#odyDQwKsBoP|aD8srk#D(~MC3FUjaf0{VM>2$Nl%m#eb=Tjv*np=G`LZMbH{iWLY z^;yfq{%2?U4-e2L)!Nh|lkyL`Y#>JsW~=4wb&&RT$HR)&y^Wd$t_zD}>R@15Qzm|Gb5+%J&ilJdi=JLiOUhb^C z1Ok_M{l=@NIYJJpY48lCV)iwx(C-ATM{mLg4|V78vnX_kSGE|L2Nuz8g3>I>W@C2Z zDBz1b+V@u*9{%_>46CsP(McAV;6KpfLAT#HQr{|1+5 zh7N_QtZ+AszQ^aGH~^>*Dn=FCo^1PHt~`(4V3Hm=lYgsDh(MGF8YmV?kD$3AbKSPS zlZtnI9GU+s3^6#}=my}LN|fRLZja_9OmzDmbbbV-Nuyw7Rg&0_uohX6$n5zFJK}IC zS5-MMbnQ=1{?QKU_E}~lO=ErYQP)p{*>we20U2{rJ8G+NtoiN{! z^5#ngP&i)G^({OOMnqE^Bqf`7Bpx-V*1bAWR7TCr{Q}&%3t*P}fu)tNY5+DCLaaa5B}GK!dHJ^Ht){m)^Mot1pPsjk_lcXQjW&gz8SX}O+|u=+Tn{B}9xp_Kem z@eM?+H;onEd%PB)niIYIKz`(Avihw4vIO!V%^&Q~`-?(b1hfDuO3Qf0QD)K1a^cJzJ0kr48_R=U#bH)mK56HUT74l3?n-<-y})=&je=|7=V8 zZ2vi%KAqMy7h7BTq=H@=YM8UjcJH0=lHUN zm7@3LJlG2Co8)j$MWn^h*FF9r%`vSvdPuE@VwGt`pW5 zGM>T4>N-@G@dC5L=L9(6K2Wr_>MGZMIhvej^@P&RpZWOdz%~9@ZuMa%@93?5`h)-E ztfgew(;$=JlI%%+e1H1($X21nBBOQ1KLSKD7WPbImX4qYCHu9}l2g2|aqoU){6&j( z2h?d*MTXQrXXc`vp9%RBcm2+D@19BaJE@C%q}${nC{z{2K?U_^`f-ZY`)A+82y}P- zRB!PHLRmP<^N%*`i@D*Z*6tH!XrhPCFbC4&Mj$qM&tfXwJy!6teoXmUv0C#RtN=lftg6v@kQ3k)AIY_k8TC3e-9GJxV8Rm#DC9KE)wa)IL zii7OELze(ir*$sRq4lo)&*$!a50@dyRrH@jCLsq^?MOYFr6$FKWpm{FAtpj#8{P>UD^n;TG5s-a^p0_aK5&ZDPwB5CWJ=X!YFRhFH_pE#s~K9P zkFoq)Ej}?qH`Zi|w?fWHgMN#<{Qzu=QlHjILDRwOFJ$-QpnOtEfn27#QM0l79ek8) zJ>yKK>iw6Fj~AU}O?Shvs%jP6XpCxB8YlZBt<}SDV}(^$4neL_c`qa4kvv;ic8VhQ z``S7KdiKI<*kq-mk^yh4JG~mFKeeSU6r1$HHr2FvSQJTjsD5iJ4Ut9fQ@4Jr7D{VstlN2sCQpb)x}0 zm=s$9)#K;Al$%(bQQ6Jkzv>=fN<}se*k=zNt-G0?`*{1MXd)B9J2Gfp3|e+cTYS)R zZqn~E34? zVxVLf=?aB%astUEzjw_qg7_`8LXOKndObU}JI^>l9sTp?hLRW6$!x(g#U@UlZg5&XPN#6XqpSrNo_(Uv4g+@AgfT(bBv~X`C{aprcA8S_@aT@-BXv>awx8!F zF&yeQV`>iNMD^dERAgrd=u4q1GJcBa=&mIQ_IM?|X4ks70Z+iaLJ}qJH zlmDZbHz!8MJq4D=i;C3~(k|3|@6bVm-KxI&{r4?A=3NxODR@aG4}-sY$Ph5d@Qxjl zP?7M(5PTF*s+OJeRw0yK-+5D^ZN7DP)|;3E%n1cdPL?VyauTHGCK63+=-(P{c3($z z{2~;n8)G_nik8A?QbSP+z(>%GYOk&(jZ84Wfx&GZc^4)N-{X=-tVHG)XGzO-ZzE(s zo>`rHgajJeO3Xbadt+o~FG~Bkj&;8@Jc4#m3+b>o1e#j5JxTI3(Qg(QMPHu2gn#uN zxQ@2aUcnUJY3Mr-s7VI=_KQJMFOVmbxPOwjdJ1ipxfvEhBE5QFw7@CMF_Bf0oz#Lw zk9a?BeG2N7;1fieRad=uZBCug<{R@qa~Zrs;+sggNGkkNUU{@5JuZB`Zdp$(V5TfE z=nngSf3%)slVQ`r&=*+x^wg*SHeXDsSVsZipyZ=YPV;UQnN7v_YR?b?iRjH&++p|a zS?t9&4xqCL<|n8xb%xDIM@E3Jh*lqvXpBNLGWorG<$goO~9#S%KTy76L>9|3bD%UwPHWp{Z^jzm;b++flk=IEfSmSZo z+8d{Bb&G5bB&FnA`!?{~ztwM$Ix2Z)gWe>0%RuSrdg4z5*>ty%mim zqwN}tl5X*djeIS4Qm}r&3blNCGGI@l9lvZy1=II-kn8*DxWSXdnylG%5XbQEZp~>5zs9qpR~uCMI*C%n|=^2CWdY1eNXUArQwb1`g=x= z-_)7>?B7LtUm7@U;+>QAs^IQw*i-5=b2pM4E+@hqvasK5J`PB8(oNKcjii7QY7jhg zZ+!tT`|)dBT=6>$(l5H88ts`NMF8AN%|;ES+!Q~zK?Rl^B6xp@BvB)I z3$AWn_C!P)`j-indqu_@~_!z>Tu(Hl+Xs*-ux-S`NnFM!W<@Ns+od#n0_^Y+rbOXMFzgVp; z+?2mLZ-OE-pMireMXLy&7V(o;G#L@gOh*-_mvQkDCqfXRGew zPf1+&X(+TcTTv|9B4(AWSC(CX);%_(V39T%Dxu#!QW}LHuv40vGJ7kcndxfXX z-~H}Cg{My*JU;Yb!otcsEB8`W4=P06xaX6KnP+YB4{&C_RSl_-!^)q>mZ37AUP1(TM)TyvMM7hU01>Lwj`c*SILY2k1@f7g zZx1{WZpQzOo*Y^8_kj>gK{Pw?eo3;gp|L%J#J&Tw8d2$id1t8|KW)J1h4Qxi!%DPQf}IPyEOJ2l#uE7A7uZk6L2Y-6y!~ z7K5maLew>KY2k1nBS`t|+OYhSk&?!?3t&Fyjx!7kKh#BW>@jrJM3D?KJY`-r|3vlXj7;Hi_ zkepYF`leIx4aoJiF0ziQ(}+1{GbQ3^NgD<(c(k>3RAL-3m3znmQ3m<(`%Q zc~=~T>){{h+F+e;+27adc*4jp6+x**$SJKtLvstH3N9@i4u|tD`6R8l7H)Bc!aMsJ zXKjVPEq}8?5C2FvXx7nivw;up`=uc?yIL6f$y!|4Ou0SuH2Rco@~kOcXnkQd01qDT zL9mj_itCS5Zdv(d<(QRcrKV3P-(^i*2+OV_DM`a-eII;!z+AW<{&u52{?~5Sm&HbC zo%Bj7MtVstN^9yNYHfo|p&Ifc<8U|}&fDRWvbtu(nauIw}%AoI+g5AaeLiuN%)7cPb_G)O%5eux*_JFQuA`*&f!LFa0#%8p% zcS5dI4|$PsI2;b=?eIxMOFMEa8sQL?i<6JT@a+YA{PVW{d0YN!jW+&mrx7Nev=VOA zXKf>@f1fmfEL1%nNT{=a)oG5M4= z7GHM}hJfz4?}q~q0)_Ycryhsnj7@~_6w2X@T5KYPmXwoL;W%m$B8&{$e$Q8EN&N1b zGbWyVER=I5>TH_+->mQN-^FH$W^RG~)HiN=<8)YLVisihSXnF1Hq)$ diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/miniprofiler.png b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/miniprofiler.png deleted file mode 100644 index 244c7029ac13d24d9f11101d0d4ff550cf233dfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22147 zcmdSBRa9GF^fekN#jQBSDH2?ZTY=*4?!gHZm!L(86pFhSC|Y5QXoEjs1keUMxLJC5f=o%r-~a$E zKvDLCj&IH(+{e>oCy@DZ#}Axq7V_Z)1wE`I*(woOp_v34RIN`IiYH|D78nG3kAuCF za{`ln#s~8@a|E-U>kZ3llYI$q4Eh{(3NZs*0h6Mr87p?+fS?naSJJc?N`NnPmZvv$ z48_>T9UgYuK_}DYVB`B@uh$0a9iU` zqo-opVoReJYW2h+4$xt>Qf%SGV1$cFqgNY5detUauviGA(uHf3Tl{aHAcN<>abNTO z-w)DSyc?QujxL|cOy{D=`TzjmF*2fnA2+N!pJi#fn$(y3TxbA*lohb~#p)t~L^=gE z_ra;e*$n)cY`aYqzmt+`j^EA%P-qjMbebFE#u>$nr9oYVO<$W`JUxa_?&HUj4Pbh z@b4TLem+{x*M&2-a&oxSHeu&8od_9GG|ov_-7abo3-~OU8-Dk)UOnIuCGS2hK-$v8 z=tl=Ej7zKaafSSR#kXDd)^-H`D#yvsba*d6hX);glhKVm+Ko4?F6x}{KU4d^o|*rL z`|3QxxY{)oXcz9vjX~ zK}@;20*~5!66qThaWDLmpV}0DEdKqVqnSTzZVldP!w$C zXN~vLG(~+h#FD2x&FgN6Iedk*!QT8GLM-EsqZBmnr_nN{*VKJ`IP&Tb|)jy&JGGgBfT zW+})Z$73uM|2G*iN~oervodbWsOdT`|J{LT#lf7OK7U#{=SO@LCJp^e>)u|cEJ2u0 zKAG5EuScMrJZ2`cUT)z7BEGaHXeh~kbcQc9z9@?>`LxV0JJuZ{Q(lI>$yT_`rQR18 z7J_)uzfYYz7cuZaLuUTNKr)yNsrZ(of)>y#&WuXbc362mQ(Nf}Tu=g1?x^i&V<7;| z=x#5&+nfHo&r0Sp6S}G;EwaX7pD1`hLyTw6Etk7BrkYSCe3}YR9Ytc|Rbp|QIQO^V z_uhgZ$40d=J^c3X33=^}@e06Am(NKwwP+K3J7sLzbfjyXZ`NX~?qpc4uf_PmVhiV4 zKKPUQ(_&W3%k%DOA5VvcMJOs9@4uN0<=wBnlDPE{z3Kefdt6T}N@vWJ@O6NT@>uL* zs3h8nPFwKAo<=GJknv5O_+AYU$DG`C(bo%RCs+$_StNAhNi0_b_4XchI^L{zJ)fS7 z!Wwhpc|Pljjbx-oVx;iM0T}_|W;8tLum@>k*KvnWIcT{T`Z*T~(8RJ768SDJYCu%m zVsUyj`@~xC{wkG8OYP{k76xN?;kVgVi9^x*-05C@rt|XONicKr*Vb#x_V(QFd!tTx zfqwc2@l1+|8QqRcm3enJ3BHwL%t5{a6yyKM-Zs`-_E!PJfHO6fj=Mid7!r+1N*aA% zTO)7fV1-#^k`QJ%7=_Wgjgeaeq%aCo+yVVR91NldZC1-IIm%XB1C^p%hK?>pLjWa2 zfL%|MH^?dYv~dKu;Zq67H5p!jaLqL-;CoCtPkykYkDh&oq*8?u^7vzvJYwB*Dj?IL z2z@Wk{3j`Pvm%+N5Xo2KNQGoYuE(1L_5W_y9=so2d$M|d>mLQ<{32aYcsN;mq}r!t zXWokVj^cIv#CZsLLlHW`lCQ;RPwnv=kmV<10BtVKb-WqQSSC;S6g(eZ|8GGxPLoy& zBNvKM77l>$+k7_=%i`qJM9$HW3n8TCo~3#2p=l?fid~H;!X`A>s^}){x?jr@uZ%(J zRh4k}dVC6&@Y*^$R-s30|AU6~r{33@;cSSei*J%@@#c5@{v4*X0-Y)MIg^|7qdXg> z?MRF?3$g46Jx0qqavAhDjG=YVgWtfCJSF{)9+|Z40=+^ZeT<;9s1{nauBT|%!_`~+ zsC^A|x-^Hre!|+vy`>K3DD2U8rz@RqI^w~c+nzgL?yHfmfIoW;G|vykFp0yR5;dXl zF~r* z6nTRcQn&2MOx;P|Z2h9VBt!nPQGSLJG4JA0ka9$(Ey)+OWLW&Q!<}K1V}9eSwQn)s zFUo&2Q@>Cp>3sTE?Bp%hpjbB?P5?eTt68I1g#>R7{Sl|kv$B_ip>?QO^qV@xOYi3W zjx($ak%7>EI&K=yGyppYic-Ck`u%Pa_I#5#qqBXVV%9MHar3@K&<@uPOkUD4#22bp zTjTq9@bL8BYzWxm>r8*PpWm?*2wBTZ2yRpXuU~?8J44AolURx0m0W>Y?3JE$;rR6E(ids>qY1Ud zvU2D=st3Oha(B$z95=rP1lps+eST7YCP5YYwzaII8r?P5uoK~;mj4;wDpT)du*X_b zC|h;&;fx!Smh8li}y#Bo*hCohS)13GMqJh{6N<>)s&26bCjCySID_HSM z(nMWXQ{YX76&(}RVEfHcvi9f1q=e6gL?V?5x2p0AEV`8SqHFHAN8tqGm1V^XD*U3g z*9=MwAKiUjI*n?l?OKFE()LVws`Bp9esCpWjYjCh5 zmZS956ze*lnz~geEgqC^cUhE*!iUPCau$ZbnpWVH$=3M&ew?O0j8wj}!#h~*b~57$ za|e1#Qa$RbjAWZ}^Dv4Cb`RQHPuQET6j$S9OF;$IC459H3Kd;*< zA!ZL7?2P-Y~ls9sX2dac@l$*T6!@MOHl**JXeEz*Xq_&CA{9?$#PSdj<`j z{@>(>Kp{)kI%V~?=9RrWwBZ@8vv+1E_I9UvK6;%vLny4}NmWYW_?jf-jA0Co&Q8A9 zk`i-2YvfWsx_9725Gau|rtn%GFDSfD)NMw&?)VwF#7B`6WcMix74Xv&OkN6dXXVzk z31i?6W$`w2I1Q*=o*fN^b^2{CMm>3qQ-n`wb;o_c^2~OyJr-7SP?i6<6wma*0!2Y2 zOZaN4uY~+?5SWNkq0nmjS`LFw%gnlU@O`quoYpLoMA8%6PFrYTi#H!aYn+{Ol@fj>dpv$wvAM$S6~mbDj|MTD7FuP}~kZY3+0Y z+3R^Rp4B{6UW-waghFsGa9@zdlD_TSJE73BOjL&;gU3Gfw#qVfxLmAPcCNW$!TcbT zdUloXy&HJbTb1-e8iN~&LGD%FZF94gE58CSeQgKIFlzX(8pfCVmiOf2Qb*`!ga?92xNNvKlAd8qcQ4ahlAii?iB^^LVw(&qK^N z^Ow@1DCl$%{g_rpXEIC6%&n$nty`1m?@3mF(tVL0o{Rj7S4$TjXF?Tx#1(HMx>&m- znKhv@?1%^mm{PX-Pnt>{y2oX~|JGWg7G(`lLOl6Bu9?$UU#`nf6`Vy(YZ};Nv*#uv z>S$iCqT}>kLo6#>rg~BImdv0xcSq4{qJ7k8=o}m)WQ|hOumw%-=H1 zcj?D#{W%0bPXFK@DIA+w`yIJmFigYpJG(El>gTmZd9$-BJ8we${k~+x9(I=sZN>*y zudw>qbKg(B2rc_K8gx1Q0pcH|mAzB=9r@WwKzxplg#drT{eJQ!FYts${d-ZSaK0!2 zDV8~`{N0P2bV|5<&?hd!Oj=B*>t-{tx_BNVFc2$#(s`!hAr5DE=QmAd{@QJ;FzSI8P zUOJ~24b=?Rg*{c_AM+jf^(AWCfE=(+CFsch1#wA=t4tQQ04b(C@wnc`>e4$3Tj6rVN8=<&0Lwrtt zL1GqF6J%e+T9$rXbAZc|=n?R%ip}@=D_fewDDxjiLzCd29bgw?LNd26adNAVl{f!- zHX(E0k#G|yZwG12f#2Utf1$;25zTsR%Il*Nlcsrvh+QK%*4*iXLcvNXionVnQvDZx ze!h7^qvg#z+Mkb$k@NqIIm%iK7+!0RR6G0yJ0gJ+OOQG&asrMVoyCM}<+V3heU2fv z#iQi}(ugeY`^%#!!10-?>1)_zAcUJ-2?<}xp`fnHGLS0Qyp*0lID?0clu^YdiFL5q z@1QOel1K+8(GR(jORTWOMlY7 zhEenE^wuH|)zjr~ffwRfEu#gk=Xu!m9@Loirnc5kxM5Sdu7PZa8v;7q59pxrXuAJF zDHBbLk%uXmJ!{1?z2j`FtBOoxT7x7tOtEmQRbwX;BeM*TfjhAU8UJ-CSMY!1BG>)H z>>n4uK8YxhD@<>Tuk!I+*16C$lVdvT5UYEcmT@lCcMjM!L1Xy@$A#uw;#7U4OA zYPF~53+z`_#wRB@sOKs)Zh3ocom7@)I>7(VSZ--*~aKUGTp>6_+#=CsmBY)1kup40REOxH?jWLTO4oH>l&T9iu3?p~5e7y*(ALNdA7 zljWHSQl?6BP4cv?e9HN>0~`!{Gv3$RJhLZm>*-$f3H-p9mLfWD+A<-UM;-{;_v7Ow z5WKq6^IqtvX#1@@60nA!ucA~TyAT#@-ta&Q^j7p@5v&EpOyu^&84jwzM@smAnMLq= zc;L1`Oxr8ml6R&e61r0Jo|Kh<_ysm|3`Ts6A;Lk@EF5ZtKR16&9{|<1)kDa#95@`~ zd6|?-r@iHqw=}GD9;ArS4d-Xr{d@lYX}IY6)i#_XP^R^0gdd@r;639r!(QaMTYI52 zbontPI_$d=8IQdKqOLGl-gu|av~o9BC*7){f=nyL@>**o+{zfEu)+G3g0tA!nRq?0 zZDkveA${oe!@D%_C}v(}4DYYHR&4ab<$CGQlZ=6B(*cB_y7@JAAdgq_s!5YEP#bbu8tVg3ujxBT|`jS(^xT5fNb^Oxu2*zySo#XM4oaXS$q-L&CH z7673BM`%%syJom3#nY=KU9DT2Ipax{;exlbZhM6g4o?ltoXq&B>b^=mQHOCus}zSZZp;&1qG)T5b>3h%jirA<>MpBnnrFccYEX@ruKzosvyi84N?d=;e@@ z{*4EK>I69g{pGR9X?5NTjnTkEw>0DEq_ox>KLt7l&Xxn!{CKh_v5mRqzJ46bRYA9m zbf8GkXlSe?eHH4=YPUOW3ImoL$Luw6y)gnKVmLBKLj5ofp#H2qEz^wKpm|U&-};TV zD-Tvm;kR$u!KBf~&EHsnpS3;fIM^;^F-HHmLk~VPvb@{6l4zcXVju_+h!A(Tkn7OR>%VH6=A)u*%vsAO z;28NzWs^SqmCpd5I))^Qhqr&|;PE)bLz9A@KaC^!E?k6?{(?pyrQljsryZh&&3vM^ zY7Rbo=Ifn2lRYzTGd6wMb?hr=PY7fDA2JQg!#ZHZon-*fJ!8R;K0+vs&RD}M4{zQ7 zXyzuIE=LcN6mvYGw)T4>9C8Fmm#&FPYMjAu`g+P=|CypfPKvf2Z-*!j?;|!>{j8|o z5d@sPZ{W7~RjWd1bK@M0&LNBdF5EW|g_k2)Ijg#8**bEQy5Z6615)^GOjg>{xkcZL zU&BVj} z#P6mRZOL}~R}P*gfg?;u;`FZi`K{|7E-`%E4VwwEBZg3iS-|dtknz1x-KDogZS+c3 z!`qSdMy@vOxN}zVN#toFMD?%#)$nx;a#XrgU6l?D>PCNw%gWh$&y!bo6`!8lj=D|+ z{Y>{h78Ot!`WLESizpqImRUiK?JF<0g48ouwlA6M(sKW3rbXikGzpHVy+%J*Qa|6J zb%zyR6#JabPX_*1(M%i)WPqlrWzg42JZY%r&o2A3W_43EgR6buy+;F`0dnJ9RaZd* z6WEpvCIZxFogR~(KhjJKV`RNPmt07jSsUUAbwzz}+TD)mHT{~sFCZ~R$3jnNU@CvL z6SOk{h1Hn&wJ`IOvDmx^_guySQZ$q@yNTL1tIubuE05=wTJJ+i)Vqa)TpTk!-^jAz z{a5k*Dm*#oW&I0~`YAdS2>Dr2BK-|zw*2`1vb5&Lzx3GcJraOBw8Y)rF*^N=8L|}p zySnt}TaN7EW`F%;V6=)wDo5x*kl)K(nZRW}`M!h%K2>y?75SRf$8EQT3K*)9zaqJev0VNIljddzOZS`p z9Ay+)NC?J;QCH_M1{fPRX|;+|Y{5{fr5}HZcvimi#Basrv)!_q(fkE#UWcAc~tp}z@egzZ$9EJpxbj_*hAoU z$L^DtXt!mR$A8?k*}NPQxsthHagF;Gj_;jpuZ-cEs& zJ%Hbvq>ZrfKC%=eYHNWG?DuXzRd7iLOg{J!BKS9}%=U}VD=NG}LVvAbs6MU!$!oKjec zB~@o|Tk8{bkY_%EMPN$?8OV?h#6R{%|FNl`M_#Wy7rT!Qpt*h21AUr)Ugc4W-uTuc z-m$(0yB2D12K`#3kXFV$7@CLykw5-kSF?jYt#KV*>9w*Hce0L8zg!nMlO`bU1yf#I zwkZHu%-LoAP$o$IxKG_zgN__SL5)S_&L>z)J`!yUrpFB7Vy94-$+JJvG&wD4+6j)~ zX_Sb_H5eizkSTf3WoMK9>m(uDR6zufKUVPmXfE=I8PZe`*>T0W(bo331|H!@3R z)%S;sU4wHvuw;4jKh8;oqq1`bJrx;os=bi!#S4Nj`@PQeT_+J#sj5gy<<7}^Cyr;j zQ1uSavyJt!35}7d^iDClAuGQQpMTa)Ey0e~UQQoBQE|)g$=AenTnWktsN-6$S~YH1 z_7|k$0T2ZHL?;*f$Rk!Fbc=(bhh&rB7TAX?2l)RL`LT1lO z$Qa7Ae`g4jlwGQO)8|I8|i5@@}a%aH9(cgcN4hMgJ*jX^jthQSs%D>?8H;LP&-;?}mRO zWEZrD-s&ZaW=f+j$AIGL9el=6UM2FTHs`Mt`}?ptvaIr*D@f}%Wzx$kv%h;%LhIq& z6~Oxa6x}kbn|TC+7z(4soPJFTShKLVbrzevvRp;nkbyR4EOMMzsPHJnPYWF4t=0hs zu3wGS;5}pu%(@`(??9ez9%}+^{YLAJibWCo;vZ460;_*UYI7>FCbrfqB9cDR)@qBa)fKVE9^USJQz!LT!$znW)Gk8PKRcTp ztW90yOIoH}Jjzw@OYMG^A|%(^GEA0j90Y7a!_6VfN>twNm6@EZSv&1JJ3AgkB-TyR z1s^~mF@m#z--H-MrbdGr&X#>)GthjKIw-OE*Or=&iq?+$il*f)A65ayPe2umJ}oSO z0TZk~LWMUyLnQ*W*joRyH9UF2pyu1`WqWAx%^Ow(*tLHPAj`6}mt)HN8rP3DhRcTg z@zYjFB8lLf3 z@Z}Up%XnsCOqp1^vX(=KWAdRE`t|yLun%>6`hT-6{QpTN|KD{|Y;;J3JYa!Rc$L=7 zXwamGsX-}PO6VOhw6J4zgxBER(pKwx-8)aDwPcydq_z~2^3C5B_2NV*ymZcS@e&b2A>c`Y4lWWxO#y7{*XG zbpkoqb-OXp4Y*70@|>VJP4Q3YJK)Xq!o!qmY(G1v>4FEAc6rOJrN4CLb5x#jov8`i z`-xMl^nV_77GwS!Cc1X1AF#Z|srkIC`Wg^vYfA`~1*XQ^G*)r4B4T*}GS~;I{ONC; zX>IlEq;aC(?=-aqJ9MdCBeF4W%s+Cfyqq*UbQF9=Lf9={PV<8@;+O@+r=J^Mwk~3x zwi6<2$mKh|HvYu!*mRvL2Va&nyKwk)t|kbWaTi&C>L>^%qDKhBDQ}`+W_m}(ac{HU zP=BR(9q2u#A&nB93QH>=TM9};>IP zNASXFfmd8B9rup;=OHoD_Z+;NVt2xdR)5# zWmZ0mJ#yP)Lt%QKo>;TL~98+KcJRN^0p-}dKp#jmbDyBHhC zKFT3+SHy8BG$TfBuv+s%8-dcJ+L*Smaf1P57FU+;TSZ}|zKTHnT6&9x&$3*r>6}FSVDk5)9RNnGfkY-BFXOUm|rC$W{5_dhV zDkqH-UHx~+ffgXWde@O&r2T0P;(Zpz+q!;sy%T&eT~GhjH2ZPvq=P752>_)7IS1Xv zc0C+snO1wOI0B>uGP_RiXB%qG-kxMmVZH^RvtG>pY7uJ&zwCGiuqg+*Ms4qvNmwJq z<-zH7XLr_W!z8nb6H8-s#+mgdSal_nw^>u`@|H)ce?qzaz4^=Ts73G(TkVC0F7Mqr zg*F%6J}QI*Wgyu1`gE0Y)RwPa9<%YT`}U;4XTXd#7|u+mURmk_YfhmMw`t89kz{RYyN zf=FnRqix>3JJS*S_>o>Ajz_PG;a`#ETPEn}s1<9D-@{2l9^?$dnzj8W1)lVMNDQlI z%uNi^-rD52R7_C^Y*48Rk3&Mv@yMv*Yb^tw!R{qqmejZFg`<|%tATf;DTUdD@Z@4R zVPp!dN%&ZX)I?G|Av|7{p{5g-tO#nysj&-sn$*qC3Q3+fC_3;=;9BDdYW^Db>3Vkf zs4@Yo-`bKl{VV^)?ncR!9x^VE}hYJWMkUL&QtFum$4+dMd(y8qn()p(wc zYhAldd0T{FjEI<0k}>-<|UXy*@oIPcIh zv6>jln&fr<&J%qghfDqQiG89xwuG$MlKz(%DL+Fg&E&G+1 z06>dS#-FJ&ryuOSN-8D1(N&^r=P7MT>z?+&tZ|}4>XLflwR2%R$5$aT5~g3``lb@u z(ZC+%^{j8CS>7FErVsCA1pZjw*t55-m#o_I9D|xoeD0v*s1|K+UO?277UX&e)ss4Y zyTPwzRd-Tn`&7hsb?XzB`=E(0KSFM1pLX}B1T~rYL>Q-pL)91+Bc|#s!tk}=B=fgx zMm|u4urY14&|H}bu#7{Ng7AJio@L9l(esX0ha43?na{iUEU+*FCK}7lnuocb2G=1X z!G~MZOZm$>U8URi7(Yoarzo;AbCmkRFgPlQ5eSME**ctHfirdX79jxwwE6xem(R%Qj9pcGOk*zSFThY~DNgVfAfuCFnD+b^G^r5m{ke}<*-;#^O zNnh5SI`--9`c&ARSZG340Yc!l5mRGfsXQ}ciZjRBk6iiLJZHMS!Gus9qAgg7hcik` zD(cG?P0bF{T?k4Vzp;cz7Dbn*fZVaFP8B>GJ$`T3-Lb-x=-)`QPb)=EPfq$Wr4nbX zVf-4}hv3!*dN*t*L!1c)IPiZH!vnuVIrTQGMv+SoZbcXoBOX zj?_Gkgeo6@%5aE@gxlD=;<^i0Gt~jUBxT>z2vhav^ABxHa){AfSEqU1f`ldvQe#vZuolEXVGSdCW(Pj^ISB7xZ4hFy#1CZt9dd#|bu5c~lu{z@o8I^NAPDX~ zdjVdOVJ44oe0?aN#!1&+QK-a<(%%eq_HMUW`GF1QU`XMEO|YjJ*d8_Y%kY8oyvap( zSxb{Mn1B&UXmk2*n#;V^?H8XI$@}-p2#7_8g-6!BvU_T)pPBz~`2{Yd!z^=*L9Y{9TFJmOYJu z3NO`xAYbtA20}$*p)Lp6JrzsdSituk5oR@XoR9w%GdF|JHViT$KX5;4$&AZ&s2W}VqZ!a?{Gi$-iv*2cP%>X7# zSGEx7cyL@=*6BTAyu~39Zh#OM^2F|+8UpRmrlYY1p`(^;##;+FnWhKVE#3g{rtM9k*;s3uB{k!4EdZU{tt_p`kZPwAJ3s-MSo+o3$cNqJpY}GmpyG_ zoKO`ppX1qK($!;3Jo)pxFrdP*yZk`t9Ad|9)t>W)eu_00pYqsT8mQDmqrRUyj&=3+ zraDrN)KakxC0Xq?UugiJyfsXWi4t59_j;7KL#Ud4(im&9O)R0homAt_i`Tnyim5D& z2v2D6`Ob+!QQgZ$8|rwR=~Dr->t^25=zyTauj`@2Jhl@vEZp#hv#LHQL-fj9{fEx9 zsJzvGIKKvJR6FlUPvT560k}EIEnQxhzy3jvB4gA8|4m8-`XO9Wf%881saS*^+L@ku zv_))d_VZeSYsvxpMwPKQz~v2u9{p}rV#UK9m_9NnP!6^R4VU&Wz|NKs#>?M`qHlkx zL%a-)_pIs%=KBLy8b}aq5pD6R>iM`O-Y5UK<-s}sp;`vV=^!RRWuU?J`RYO34vkgs zA!yr2;()WQ&^Cj>sA|th!7ps=amSk-zAwo~NgZ!w@xD?21mYjt%l9;Ah3w%^MS<%{ zv~REIc*uU&p}5T?`wFRht!;H+xA3%w8&Q*av+#l^;YC zE=`_(!t_cZ>ppqlrA28W=y}li9w}Fx7h1y}Wy#E*7eBaq;RZ^jdO(5lsYaCBGZq0_ zY4Ae6TQ9&~ZUUIigR!iqw%s+(G z`ncN+86P_=t=q& zK6TvJ8s&9-SfT!sbPR;U&ztHiowsIXH55sz6JC2mqJuTb9sXc5RpUFI_3Ew% z?(`un|ms?ulKKQ z4~Z{(v;_0ydHU?8E08{a7>m zMjQL;m}Scwz?s|N>9l)3KOF4t+b;RT_fO26JDXy0aa~>L*{Q+h&dVwn%Kp&LK|2Y( zpnkVlbN|YN-|Ll;<+UqIm#5=L9JQ><5%n}dH=A4U;M(Ge$z1u>rn;%hTL@Ig^G1;$ zTzNO;8eCdb2)Uh_zj;|>eivwMEZOwDcJZ(b8dG5p*vqZ)WmssgJyY&_$`M@K6MlbM zEa@*UBmn)_K!GdKwYuK4le~DDk$8~rjObh`wft&^>(6Q$(An5jR~)qa_$QN;i-B-& zh41s8K|h6?I!**v$83q=9dpoLp?qg!KCky>o88K7_Pdb}h``D$aBR#5pPy8y8y3x5 zI4t+>d=eb6E(~w$2|A4p5D)Uvb&B}@#eW4+a!X(346+W&n9u7jXz;l6_?{2!U>Y9n zKZxT6d8?+FFwjy zGY3H=$kl87e%vjXOX@7?QBfsyoJ+1kZ@qWwXz~}X=S$O6zw%MUePyaYgFJ+8f5r3K z#W=Xd8;id}DV7(lywEUt=f4HRxICrIO%#`KRBEGlSo5d z=~U}|S9%auKM6U>>_M2;7NZ3I3P6Lrs`oXrnqf7;6<$}(x?8iLQm~ou)Wx=W7Y!bB zWKG<$SR>S1bvC){)9H-zj>ziCs~&#@x@w|IeP+#XnM%ei8}IaI;eAtW@Gsz5GPo6F zU7R+X@HicP^L%&PeRozV-*z4RjD+lVWDpFC4yrDAt@l6!vDEiV?RvS~&4h7ojS^)J z;0OxRmVsI%+Jc^ro1!%~Zf`i_u2is1$=WW1c4Wp+_U7C64=d9NCUs603OmNP9t9S7 zt3o}Bqsto)Qv{ArzUl6j;soimbnh9!He-YDORJPpG>~UtyAro09k>a(8o$5qRUCVY zc^nyZIqIV`h7+{OR~u^=&u?Z6IN94m#6X!$sb9KQ0uF-8ZXC{P@B$KE)|>^hD_2eK z=DEalmb7w}HxmM14(|kO|DX~Mn2SvRYVN$v+@L&Htlk;X*m4Yhs39qXY0esCs&217 z3=sB&vY017c)YBazZYFnf&0Iht94%a(8QT!{qnC0K-?fj#<$+h^;M4^De7AY-hRB) zBi?=KpSk!%T|g5pw>=tw`Va>#sx-1T-Y!{~qild_BRmP`LDbQx(&l4@v9UH>kB5g_ zSHUSXlJ^4<0?9+f6oFMs(`K_eJt%XHg`Gu(V*CVezUY|gGogC~X6;@61Z3-rUw(Zh zitFP2>uB_Vf+;|z+*-U`fhqUzuct9zZbSrNX!{j(^42v14c%d3(ZXl3J|eDdd8^uU z)pMFbLHcRYake_={<%a}Xzy}SfX2jJQ(tWXM=)f}{UN!_-EE1G0+c<|DolNtxi2pI zO>z4?Qw%8yy#zrzZ@b?`Hq9%ImSc-0zOM7|uKr<;8d7WkJ__s7mT>@@rt~3aDh4vX6%o7B zdPk)yTuH42L(0X;3juulYG#`CQw47aTA91)XRA|Fey(WCtQP`xZ`0&quqNHu7_uK+ z0c#${4{CV*@1hZe!`Fj-+k08=M6kc}Xj$+RMsU;k%!sp?Q<)hP=4%o};I_{(|CDJVEd0uPh~#4Ic8+t^#1_NmArg zCpnaz{A%P5@Wq+>a>b^>3e$yCw}-yo+@8t7y3PWJjODdgJMx$d?H1N}9X}rmxx{E$ zruL62m$z#4pAR`krzFlGO5T)3ii|;tQw8zP@!%1Hl(gtl%IdM+>yb&giECeM& zy4vyf5GO*ucm>mkDUm`*vdGE*s-ipVs9L2x@B!u9t?d5efqvP6ZBNDCkNKxfJw!bf z!p(#)%~DvL9=3Yt%EdE;PA5ydRVi+M_q0=)#R^``02xJ8p-LhAwCpS3l(0O(8mc38 zIqeGlphr?%XFt!+4AB7EFU|;i;_l)uA|%f1v=>QeK*X91{3>twUY<1$(n#boY3mDz zt)F(}v8U&6Ee5i3T`EkGD5~H~-uDBfGChA!Q|nCCUHalO6HfE z>!MqI>c=)R+qu#64||n7=q5s}T6bGhOK~{C2O^?u zY$>ZkUkTH1L@ZQ;->u0DOg{ZpvGCAmRKH25N63u*XfTluTqf?a)%DtIEjf;9ew<|d zih0Id!#La-0RTMh3I4q75s(EHCv@vKCEwtz5;~fpOBO2F^VkSZu_chaP8_?Wg65x`~j4typkQ*=*B?$5=D>( zivE2mFV#FqaqW`=OT(ZiMA0+bAq0KkYl1Wb5Y{jWF|zln%1M0|>OiV7EoraOpTAz` ze3w~(h?rxO0W9cUR+pwa8+5&Ze54=x5ARg|n{CF6QgCSzxwaq%{%~W+s}h}WC}7q6 z9~;VpD5!vF4OVi+gMtIU;+svWGYKZ1)D4o5kBHg@WFWWlMV&zyO+BL0%cH?jAA?b? ztN1B&yEmBaU{C!onNqZKy5Ql-X-XSQam;4{=c=Z*Srrk&w^&Yoqenh1&Q6D7a|j9# zjSH{E*%=-0W3P;+MZ34EF36+LQ($Ce`|6rZI=W?Sq0XzR3P?g0hk@w$=(Q_LL4K{| zaHj5XCRZh7jE0ZdQXR=kGNJnW?x<4Fqa5PNj!SZbV$yf6bf$e$dv!+v>4o+44mz`@ z;m)M0yK2)OTsKxP&QvWDOQQ?=IkP7!Z$c3!y@deBpT3LMJ>d=p;WA8lrhmRpJ~@=w zVSkgZDImpGDu-Jq>o{!laaAVme+$KLu*izsI-Q@Bm>1yT_S@gWDh1!adPc~qGU@Uk zNsV7DqP{DnXz4>eX2&9X#u5>vK|SxX@iBSFTkLCf774%E?NVrf%t^287=RzD9e zG&JR6J2GOtR{JE}Bb-A4h|@prNIt%K*O;N^-*4e<hl}AIDyB`y7ODIb1 zNkO`$g6%@#7|z>bu`z$i81>Hh2{>wd43DIY4eq1)*D+L-dEy< zYgLHMEch%KnRR(Lp8U?vweCpHlto2vVP_-d#HU5sl`md%rE*1Q$e+a?Wgvl`Ue7u) zKahjM0WDI)`$;n2bfdK#Gfjrc!$U^PS^M@&H%9PU+D@S4AY>39qlJ+izl0)4G zg>MGarAF#dQGV)UVZNUye4_F-Y7D;>+lJ>_OBA!5egRER!VzJ8_ea37B(?h;@X-)A+ni;5WRvG1_;yfdM;T zK*s;3qu3mHxt**txvc|aOtW+lcDWu+u+p|QN{#U$Ufuv~&Zv)>`qw6F{6=qJS03IC z%T=uKt+lJZFRz>8izLC?2*)5ctdiH2r;_eR#Y~z)U?lr1O zc;czX+N|&Od8Juk(uUB#Qv0<_~+8rJH3$%dRbN zqLz`_!40Zd3;aD}5yNeTSdF|$yKbHhP}~#5Pr)I}Ou#{rJ>&>UVj%b96CfAl|5xho zAzqtclJ!$XjX`TchqH1jY(PMB1NRq$p%U{HDV~pMDU5whrKC-w!*93;hp#C@D%##! zRI;hA73z3x9-B1ZTy3bs@JqF&GCR+sE}suH16x~oIK++Gi8RAjtL><-%OMKTgo~W^ zZ3LD@ncXM1FrhLXA^E{OucZQ^iF{*S%fiAU?;oOjOm@B^1dMYz9KRttG9Y}2L-_Bux>I?>gd*NC7Vp~`ubSi zV9)7kNu9LXMT_rSk$rHRrpS{y6SrY1xZ0EPvY5#~eH`i!tH@NdYH_+CCFYqp-1^sZ z0sxTw&;J4ts$P4vK3&Ry`hVcoWeT)*62;!giz%xuSdL>X@}%d)DmgRA~>)R_9Xuxi&W_ z9RhJ~0V_GHWsjC?{ay~*sVQp~5xZWvvWlA&{;Und{wY;A*f(B5ivem{sW&=t+aW8F z#YeyeM5FU;`DXoHs7G&MqJp(NTqU&wWB_MIMU*gEY3ntfo`)u*D7J=J6y(XOTZocH zIC~fz=pJ~`nx@0+aI=^Nd(ZDZL(E+GMz%+Lod5+1=(IBb>uFN;@ZN!4ZwMW^IBv|Y z*0XiSsW|cbcLihW1%uf~O;IEcv!5B;#YXpkzlTW+))kknYgo9UJ;r z`19h;{T=T+PVj8XJaW6l_!bGLRmF9*O-%O8Up&&y=UjgB(lLeGUs2lQ=+Nqp67QIG zuO!JP0vHG=N4Mr}L5W{dNP}!rVL`60f;!Gl=yT@ZFPT zu#wOZea8@+Ieyg--zSgWgkdzjVd4dJYh`C6336xhds%N7nT&0Iq_|4?rQG`=oGv+I z7hh#sma@7fqZ=IwT^NuFJv3oozlH)(h8=Sf+A&OmqH1R-4)XKJvuHYb^}0IJqEkF9 z-r5H7;L({7Z=oSv01}=-p7p^Z_2P$I7X)&ix-@(LM*vL{vhALj8k{w`DHVy{kOvbS ztOHgVYedjlapV?Pd6Cw;NvO0Qc^4RxJF3hKigm-*;>ngu)A#GQ3DkZ1$ z5JAp4Vc6w!uCjLN*-U(7)-((z(&{bcHb*TMuwWA)My6?Egb5>+4W)v_@+rCR%wYYF zTDQ+xh}2URJ(rf<#V&$wZM<(BI06o@BNX+=CuWip>9O7kf4P?m1cJgQm11!2aNCx4 zx^5Q0znGFu-LyNTlB$4UV}@a-=dyA(w{oEg0U!c}02rz9Cf7Ax&gMnCDB1*Oqy8!{!YG%NyN>mgMuK*iG=6RB-5;Kk7xNr_ zWF8qVr`30Ua>5((R5g|_#4{Iu)gx!}h{DQfSs{}qCb)KIwZGgO8<;xtS{IZtqAArd9SZwZ%y6Kh_9juVYCp>TzKnJpxh_e1w%Ck&W=nE&O!pq>O+At?|R=35e$UA zHjhn?=ljkNZ2weiu(}vwWO8n3hO(#%5@iyz%*;l(t89$AsJ-#;@7P`E0Ot@vOi{-d zw{JPn+;pI}@6=#&F8RiH-kutq@fH^)Cl;=~KafdhJ(Z5OLoJk1cd;u_%P z3$I*d0;M7*cI*%NTJNimZm(ei^^~}atNg>4b8r4f=b0my8DUhy)It1Z-qu5nwOgy# z=CuVI+pa(u1tWgRDWzhmpMUE$m)}V-C5%W;v8=gx>;0R{YJxXiQZR`X1zi)@C)4rV ztN(U1SXJz+cHjT(y*K`UlU(O;MPWK;z|pk7cBpG?VJds%Uw*yy;AC;7UsLo{JTuup z72R9C|H<8}Y$xYttatj&?;e+abf&ba*j?n3Gx?EAv6-DLMGm-kXkoVQ}3+Ct)}+dPd38~fQ~C36T%L{1ue9F?BVUDw z2vp5#@BR4nRPRht$hG&09o}+p&9-oSWM=%*)X%>CN^?h@-DS&X)tQm``KkGPzPPh- zca({=ZfEuBBNvnL)cOCqoQ`K)Zg;G2dU9mS;j?EKvbQ))000MEu+ez${ExqRq`IXt zJ((LgH=^lUAmVM=*H8#Sg$Q~}J<(m&@zGf&r2wG&BCgsko7Pj5eQ@EKVD#$5Prmso zVHjcn3r&&3k+vE=C4$sdg$DcR(=+Z{?)iI2=@ z7c;@Ap9-Y)aKp9E{`lC;J1?9{&t^+1i*xhxrMG+2b7@D=w(WsdyW6g>v&e%G`pdmd z`=V!Fxj1%y@~8js%I1y+r^k^?=VvDp3)AU6pWD{3yT&Rcuo3PC8-odEHp=Xjb22-c zm;)(*IDh~$-W-o244d{v=VQtDe|m0VE_3o{7Z60814Kcv!FTwXd+N4sf(W{N_Qrc^ zrw3*fHJ{gViU!SDE@$$6`Jt=l`abvEXPWoc6@}dOdm^#xQ;M2b@`9o(X3EITE4|9l z^>c$yJoix3o;rvi5eN}66-Z&4gAgQ)P?1o9EZTQ-Fv18CRMlKs(Nvo5%qXgw z%jJLpwVW<5IT?rQWskCc(y9A83pXOeZFjBj+c^uS_-^+EmzSAq*1{ zV}?GshY`RO69G{P7c3SN>6QnYX2+A~UhkT_o_urQIHnK)$T?>&5^gVBtK5MI`6|2) zuYG28Zgy;*BhC$gFc3U+^P%SZp4sp8I3R?S(arZY=(_RVi>IdtXXeLJbEC<^fg=Km zh;>8HCGrCohP}Zer_X^9B$NmaYCDi3~5?aWOY@NFUcuIcU1SC7|i7t zWkpt1)ilg}zuKQ0?dj}$aAC3Iu^pab_r1^V(em2lK>Ym6JzcL~g9ri+00KqT&Korm z0H&BS0!6UWiX(zB!xRxr2>^f!q-kGtav*-{7Z>ISQ%6TS5yFM4IMhK)qFw+1-~bbZ zDIyY~j4XGSFkHVk(syET`0`lS>sNb^4?+$lzYuOKAGtV51YF3`?xRku~%^M&ol ze|$DQpSg0Z9}#2=hrJ{b#Z)Ab-4$h3rRQF`bmpaQZg38PtJJpt zsa+KfWy^15BCX$3)Ai;RZCW#d5!o6Jh6C%amLVXNFdL%^Q4(6;=>Z5JfE+-`p{XJD z!0+$I1Y-<|fT={5@0X7RBG`IgqhXlGUpzBCG?SgpWoAYpga831(NJBWqP`Rp9BHpS z{FRPl-+w3W1>)27ihh=Iow=<3Fan`U5|Gky{d3!=ObJ8e0DpgB%e|) zAM5S>+1bQMy8E4;NNd%2&s5i2S9PfEeSF)_Pj7=1E(qs`vqdUT?u1Id?_PI1!yYzPNaM!rx zV-NrNec`5Zlk-$8-TC7AYbX1APYexQ9PyTT@S43HLP`6BEu8afo&AdoIa@&7`A{1b z2se1kp*nZi5v=x0H;Qmzf;VleR1DcxBzc2Hg`RjyTo3-qflX}{y(b3d;t55|3nFs| zTvbhF%^gc(hm{}%8#`)jPVs7I|MbYrVm1c}@Rt_Vw1=DbHn@DwWlyi<5O+P&R?%46 z+u0xMpH8PTnyv{pRuT>ff^g=guDMv^<>%iV?jGOu@YcqTx=^I}z?XJq(pheD1ePS` z9Gece-BILNIpyb^&yFX$-?}ENa{d0u{m<+d986u*`%VrWf8k6jmO1tM`K^ar+yPh1 z!Fpf0=kl?>@xE9#n*|s+U5?^vU)}Z^Pry}BK~%MrZhx$m*ilJ1u%yUBFc=B!dSr`Y z(YQQ5cchRdPgdm;5y{cgeHQRLxce0Wwjy9 z2!ybx%(Lw?E$P%kbVq~$tmu9w5_V8?ArSS!-~QPaMO7kgRVybMn4r>V z@UgFb>hjxt!xzU=$&}7@n@uVX`>I;XBU`G_I(y?5tAMJ02hH(1YTn;5oO4~(bJRX_@ACBkCs9N4bA9z=lYMnek7ev?|P!` z^MCb-U=uV&H*^CN#6$)WhB(|+h6_6 zUq9{%xH$l-tiJog=~tgWssZ(>Z#=y3i9LkfJV~XhXlhQ?HG@zrID|q*TSZn4-M|Dh zkuDc>(N$ejbcm23(GPNQa&BmbDr>5unkL5>5k{FvFeNwDOc(NgYKpGrHC@vogay?Q zSzGs$1Jg8hb*UvcIl_oZjGMgw?C`PgpBU;I(+w@u82HNHf1#u@psD(b1PK6uf;$~8 zNv?08t9s{8&%N}IZP0=vLOjsJALb!~QQ#Dls5QsLR za0vkbxXCqDS8}SZY5)RE2o(qw2qqt#^Fl>9C8y}BP8bpGBBt0-bzL(s#Z41hvvr6v6W zTrM9_2sJ}YU;qNsFjZMI4U>w5FnU|w8Piz4v2%2&xpcrhHA(e#Wc)hEHyJa zM;QeW&J538KQW}Mnyo}Ai-gvlH$lKey4tG&!CFn{dM64(NEjiE*uaL$g26((C&3?G znzx`^mDnoXD(AfAKz%4u{N4*^&b{6(FUq-$3^CkbtzT~P+=8s-HIwKgSH>ePVTaq6 zOUsvz_RUWw5dr1(q2&^12qVER2`x$s6#yTz@!8*I#P z523iRBiesvI6gM_%JWB0|MH?Bh;l}rn@B>Nx%u9P_QS0?V$2^~|VrR?2Xd<4N8A$x#>%Z_7dm#V|bJ=7(>8^0> z`~0qo#gvY$&M6;AN zQyaB8B+)MX_D?j}Aj zbfd0gi`zn1_4Is3Q*_B8+C4VQir;B08}re8vTRI&8$Rb-)mK`PbFz^8?|0jS8$VbN z$_;QMCD82#^I3dctUAX3Q`{Xk#`4FkW+OW`w_V@w_IhxqKKQQWZrwuszl(LgEp7*^ zDz$}$g@whP!m=?I78Vv3cM8kKSXfwCSllTr8)IQ%VPSEnuxyNlg@uL1ox-v)78Vv3 u7IzBE##mTbSXkUCEE{8CVPRo$r}%G&lCJ<-=Pttl0000)at;XuUr|-GDcGam< zRktJLWyKNUaNz&|0HUOXh#~+0j{Wt%1P1);`LLe*@aqNEUP8kO06-e}?*W$b0}1cz zLsVx`b!R0zQ)f2=M-zaOt%bdTle38q_T&ZtKn#!+`K9chectJjOfc-T^;&WIe))PH z1jd8|fCMw#V@UYfr2Z3ABawbg(U_;+$n2WOS0i`I3lxXnos`Wv!o|qwYRD6DV5FgI ztWZCoUP7T*BoRq25f7*X;f(XU9bRgIHdO9EaQq=9=~y@1E;}I}j<%5rPh_`FyB6-N zUaG>Gp~3zqxjh?%g8xYmG^Kok|CazjkhEwhU$UJeC<^|cbfEv0`0o&ZH*ic?m@m1K z{X_b{(VIK(Z_Gye=%=moj(>%ZGe5AvBuJ^Q)wh}B67me3(fZQ&Sk{VDW&YtR*>DDv zC!l-KU4;wd9i~Ej{j6;OHl_oOla3{4qsd(8<)U(hHit^TPCo?-F=ShCVx&|=Es9cW zcsNDC9?I#&LJEs1mvV!}94X>NS($5{>GI@iuo8wnLm4@lAt||t2?M#d%JgQ(!GG7V zP-}{5fN(fA^c-@yl~={@(>!S{L{o@xoXLI&6X4I)#{|H-mXQ50du1isNFk6KVcBvL zV^6Ek-05;Hxr;$BZZT!EL>a}=Swn>Q(pEI87);dDhfD$^NM@^(hCdaNhO~uY59tdE zb-(G;AAi&ta%k}6x|{BXqJi^{H^7F!tF_G+PcHh9cc*G$?!39l^#<3sk41i_Zl0Bl z=l2B{rRp5WGK-&26NY65G8|RqJD%MKZi4ZuPcjP3435arqPgp7YaCd}uzXZ`|3Tei z(qxuUveU&p=lx=Qvfz|b2DDKGAc2W>t>6B*M1khcFCB%(xJy03VSn!H^dZZTXI%Dx zbGZ#^Na^;jxH@-62LN8X4y=^v6lYwBt($FSD=w$zFR0uolML#xFS&_{iS_R*r9|=j zHZ!e!-zN@AW3dfH1y;?2egW{o0o&7B9uo$1MfTk{SGA z@#H@ERucv|=%& zJt7^UEl$13sfu}GHDtsyIH;zB4(EFLrEHha>MUVu9`F1P?RkIa0!RJ^^9ubA?|ONq z3nXuy|M=V98WY)?tm6F0IH|(eTzStI(g9zAbNR`ukx`kMy4JKwg=FIA)8(q*;tvWB zfE7-e7T{ND({7^U;EaWYgtW%7EhI%UI7s!e)UC)Q;0gx-grM_>59i0EHI+bWo&_=^Y3xk;!)y#+#U+DgcS{Dr`wt z30`I&3ve$ZPJo;C+-^$%!S4$aWtPo%wwX8oS>NJ-jdGC*u+$6>i|N>SA4Q0G_jYX6 zapN>na?JVIaKn-7_)SNSp<+q@0Pxn!JEw&{^Y0Cd5Rk1$FxH~H~M%lP04h|WUs%7D9AjxK}Sg!RPxZ_ODeWvrJ zS6c3w^B%@8pHOS?g&@kPas@moIG~4EkKGhbGpxJ0dgZx(5+BZrA^CvFv~~Wn))VRr zuBSg#^qN1ejtv!f__j{3mauRa4+5ciLy<}+SpnF@^6_7GiYO{q@h|)E_aZmJdHZ@T zBRw9$$LxOwj3|X%0VAkEmGW@V#lVF^%dB zf?IhywV05^&Djk>q5mLL6_%@j0nGn=T{j#nCV61`S@x`e=sf1;`eJZE`{&S zO3h`KuUJl-F@5P+pWazQlswvz<;Wo|4&}-{-%>gAOhrkWZDY)%$rdfHl%P)$JT?*s z>L~pSSLE+G@~E(dy-eK#r4l$E&N@!VRUwPUCY_Pws%%GB${RPXCbl>M2w8?BZl-2b0?!BXO(WV5lhkT(< z#PWpXgBX^mK!c4wio{$-b-gPu;}(Tzb!4A4tZK39K}3k1AZ&zc;G~+t9PykVeMOp_ z!2ki6a~+v*QAXnu-5%g6o-IC@9dgO2#TSbl7y}>b0>y!)BeBu#CO(c+N3)Lm$MP&EYOeH|; zCOxkw;gRytkj8{Q26l(*1zppPy-LO9WKc%-s_(<&QP3L*L)#L)PdnCQMr`gwJ#Ebr_E)l4 zM}PWaLPILY!2}ulK=?3r1mXLMj+B%peL@mF_+ebpo~p9cMkT`7cn|qb2ShnF_?b(G z&e-_S2>wB}!7XCJ?>?h@?JSSBGS;Kik*(!4y*RDO8Autlr$>icrH7fr*b7T%v6jH- zS~nufxLW^2xKDYZ^QbExXtKTco!&;48KP9kai?@)7?+b7X6Rs+F!_yqiis+=D(R?+ zB&Vv80x*EbM9xfhq-1X=`wy5PH&P8q1RSu?6l{Bm9kKpC{a~VSI4?0HvhNg0@vO`= zc)K1*PWY$0Hqh(Qv43I0{J%xZv*-UK={0iX4ErlO4%}ecXdQ2{sX^oWtQ2{oS1{1at2d*rcOnOx5U&mqwR9$DEsh=i_=va2-a=t$q-0LHI&mVRpe~casW6l3NA5w(?VV-_@SMPZz^?p!x zi086arrA7ZJ*2t{-j=Krqvc_y3Insu!@AEW;QEUUGbWpX1S!ZFI7yZq35V`;^TBWO zDB=8SZ%th#0(8g%Yx%=!h6(`3DV&K$gS{nGfdpfcXFHPWYBE#O-d{5!(4{*`0mAZ= zhKnM_J%$Nathw6~TcGsENOH<-^ zmwqS!n?Zb$?|_hJT$_n3$T*QEcI^xS&WoH_KqelR_wt}5{cZz zqp&UfQki=X+n@(P7C!oB{(D?XdxTu~4F!jd?(tmP=}5j&hgR`#7Td-(wKc|BFC`sc_Xp&FA<5ftB&gd*j~YPcbqt> ztCford4bCHOvw|y#JH5pqvCrhbTJW#1ZeRq2YL9z0Px|WLfe-e85XJ%YFj99B&d@)fHV(_&AsI4U;$yHS@Ry zG0XTi6QnU&Yj|>VNFh+K$+QZw{CVn%HXusARXVt@tT zqYq913_=gn2wvvLP-QcXDi0@Gm!FgMl)Iyr*hw55NtspDp!JCRrS^Ss*`nn{E=(qa zkBO|;wIMwLX3L=v==GC6O&0Uct^@dV{=Axf=;_ydd|JL?eExfdTdBVF$Ha5-{*h}b zXd@9vVw8~43*9-2Zn0|5<9>PYG(Y3;xjWJZyY>uYt*%?$0!;wVwg?o>wMIIw0K@ zM;6`7I#<;qRWiJR9uyG#^zQ+(yH_O`3}qA-=;W*L-k^q++r6A_#YLR^$zw9teVSbv4=v#Ti-D6}bfO|>exY2UVr*E6S z_mia2D$n@5JQ-uuwoTPuW%n2Y00t=i9>jL~tk2X4&tDgYIhxKQ6o#zRbaWNFeJZco zYv=;R{Kbih<+*K@G`R-h*2kh=#^z4l3!VmjP8j*Pfix6hBI_Z~sM8*pl41kq%8)hC zGKcb|mP?tbImzDTFea4-XcY!ZLGJ64s3rQ@F=Kc>mzG#up2Z(6;%T1`)}5E~DT?ve z6Ld=ifx`Z%;nCdtQ@V`!dDgz3axZFx1QBESOTBzl`IQEVW{m7psZ~w3Y&bpMgSwW> zK$*U!iwuVS1pz;kj}YkzT&5|;zN+}^5#alMA%)NiqX0MVz0H*aY}Su6Jumvt-H=t~ z1#n1|(}%mSyh1?q5#7zOomwt%`mHML^`n<>rB1tbtnfvC)&eskH29-69o|WFt?);$ z!TGGA6=~^{Hy?hQ%z;+}~r>izeLHsI13 z)ENL=Fr4{s>%RFf#;yZGooRs!( zu=r33&VH{*K^PFQyhVSCeb&5F!CM0Ja`Se}5MIXV}yX1{W zPVQsJDkOA|<`k$!y}lFp{P|A)3Cha=c2s8QUKCUmolJu!&P0j6ZJ|rQTz803SDapg zIvTGEM?CSu-0*PXLvt8$Q&OE?k@ddiSC+SZK4g?_`I%h*-UyYSlK#3bi(~>lcHif< zw2woPvU$y#5?3%#As#JS+HhDQv8T(l0x?^uN(%xJsM!+8Dw^|`;VHZdS2m12nhytJ#0 z<_VT#9~Eh4X=%<<88yz4O-gE2sa>J>^OWa~3ZF|`U01sYViWlUgjIS>fVjW1A7f+i ze$Le0>TK?!LrBsY&jv#uX}*{S4==NnPxxa20w737Ua4fe z^pdY}>4tQa$F0lVTvj{V0vVW~vx^SU^MNaycjqYFCPP`ac)b6l1KB$9#4 zM5pp}w?~2EY|f+cf(w9f$+^V@*z&p0HhHih;O_7-oQ4av;gVlEk<9@OCR{7u@P*kk zGV;MK+uX)Kg(ti~hQHx-j_=GTm(lyB0hcL>2{j&Ss0;R`QQTl4M#`gTmA#K9kw6KLap~*SqCP9Ka+qK;vef0b6zK) zcY(F#Kn1QxsBnq2+7_H=bCG}_@U7FRxL}97mLIKN@$E3j@2sxR2mpyKJ=7wb+;#2h zpwTqq`BM_HRSX;JSAwvQfv;SiqxFh1-}wy+AW+)GsM!>Klvl)1e#kP^tIZIY3n7aW zU0Sr0-Wrg}XO6|iHTRa3c7!}-1r4hCJxJfWvj!y8Yf8*JuJ7)a@8{jjPIf~UUA4+C zL|CnTA?8$@zL80CH7SwbX4W*(r~)4H`T_6WjRp@==VaYp?nSr3L?B7~c)_9d(M=)Z z&jc2$83$nirl*U3?j8nSVjk97qz7c{T-%GzW~dlYyz%kRO#?9<-w1Q6*UYR`$CMy+ zHu8^tEPiI%W^9hbBlH-=Sx3f}QXp?_(oc@F=XyGwoH!v0YjePY0Y-Z~Kmu-jEdjg* zNInt|ob!LIWwn+{?Va!wouNUib5GVFkGHR}--Me`s)GR8OWhe}qOe74CRngsiaMR=MhOYAood&E>w2gg8kaEauf|1J#*7?(DBGOoBY9?cId6q1mCp{JfQ(3fB_X!V0g$QBpWV z`q9GN5uyV`($~A#e;#rI-Pw0bSW$7 z=B#0f0vGD>C`WwbM`^{m0p1?jVR0Pv#a;d`F1+9+^Mnxx!BQvD@OH5}JnD0LN`rEQ zm%SI>lGL!{7*7z>nhioxpaE-hH&nxWTF`}SbGwVy)M@d?0ZGAl-7c}xXAt>b;$&XU z{_4)bM)UIQbSSkw|mAFSYr~1_z)TeV_fi8FE*eVlkG{UHC za-|&+<6z+~8T#&!RjpJ_^IYpGsO?37#eLW~YHLp8ft?8ja39vH=lRFa%kOwmu5i8) zNvE98r9=5zVR$D81eInJ3!l}HpSPO&^z1c@EEE^^RMfAjC<(Nso(Kv;XK`_y%1O&;i^XKAG3OYTu&*3<;BWY-+MQAN76Eq=( zfVJ#+-@V>-anNY2X|hTvP7$dPE$KO7jL&sIuaTOipI7-?U&zZ~pn^&CvtK+;KwvJn z4#62b2tOQwl09}T63mb;*j}XPi?#{qq)VGpSu9a#L)0c%5J`$jOawUcu0e$IAi<3A zX+aTpcj-GLulkiQ-M0tl=qcy%19_L6|4tQ>Km`1X9M0RweR_L`@ZuOI%Wc+ZYrWgg zT}N+ku#;Q#1r5Usv?|xU3LxJc&l{d;)f|243o`*e@?T3@^@=e{ptd%G0fMeup-PtQ z;ze0tS21JbONk17RCbw$8E*3t{a3R7y)XfBrnzC6Nsmv@*P?!5z?U9Ejrqh~?ByAv zt%jd{78?@^$-|2Tw36Lw_48w;v&xQO^7CV-0Llh_lFPI0!BX{Qx4-|QZQWBChx51T zRRaAe6-a7>4gb4T7`w^ViFhA=pCwSsY6TlBlgczp9J@&k4my45JOIX4{$;#CD{=Pd zvE=h)csQ};3|qrmvu3KK0w=bZ6cezqhMC?Uo!X#1C(at#dit8K zwJ1dql&<^AjUtb-+RlZV;H4vq5SBY`wZ*Nl_`T7fVG01_W$m;-_IU4SDCf$=@LY%M zfa8E;LlpgXT1dttzV~@T1&Tx=8C5=p@4Da>go=G2 zz(@GGemPFYqxfF8w$#kWy2Q)2X8(4ShvxcezF+apN$zsuU{_IVRml_w04WEvjrjb=>9nCsQ12)^RL*rFoR9}=X!kn zK+I#XT7b3REKhcrfwpt{sPe;e6z$a|Z33q>O8 zPH1KrN;p0m7XzI`TWe!RFGCn^vzEo`W6B;8JuX`k#%QPsdctr*EsCTBGE&GRlBlW@ zZ})7yUXCT9&O9#`dFQ1rCE9LjGgV#(6;H>5d72iA!jn!ADq(&|{q=a87iJ@mx34!8i~PA`bW`_gOa^L;<5Zl8QpYi@8`mwO_6b|(CqoQ zYz?NKIZ+6^EG-mNrGJapw{(EywU-3Y4_I z7Jjj4rtRnRiHA!olld#5_wVS%algsMSxL&&j2uzKhzR2RPBy#ZK)=IOH`*Y{U?Mol zBTvFP7qNZK1HpR?C0Xgz(Aq@Qql1IP2dXG1;#nRZocHcC7JtuK4IiiA<;N#I$Hh_c z*RgVCd-&Pue^Qfj%n*G{h(p7x+}?MnJ|=vEKE!^P0pJS;rrC*NX^osO{NCC}N+Fb4oI!)S6yn{%$?;%p*JB zFH)Qis2(35-OBS8GPk+r(~|w(>vo1)D0$Na)VT@)g5KoKi`_b9%AfChgJVz=OGrWB z;yXJ#S7r|f54O5B*3t0;1k0IkeILIUD8p`nZWF@cuumE2#X7z?N(%dYK zR;JArp{Lk3zoTSLrbMUKt$I2QmmgN{(9j|Pw6S*W87LoGI|%@?lk?bVY_;B{;OOkA z*nYNhhd<(?tCNB&<6|SgRP!+++!hb-3r7zDu>ZsSu)bm`sWa@@y_wHM4Da`rF@YQ_ za=<{4qCH9rd==aL=f$6R7e)}GUCy+T)XD%4=B3nTJkdL+cO&=h^`l{6(X{A>N%R7I@r&Z6lnJ|GaBaXU6Gpf@hSCqFRQT2 z@|3t1bzC{Rt$z4Vu0Qgu3FgQ^k+Wi74-Y7^kzIv9=48E0s;KmZ& z$lMhU+)h8b%a&XOF((zHX8cA%3p^dwg!De-(u4fuV+T+~LeNf#^nJ*SjW)qookKEq zqJn<6=^81>S_DT{@_HI**Z!v8?%Z6IRo+j1n;`-n>~nZ|=VMeCd!HI7xh~-M=QBS+ zLUGrd5zF4YnrlOewvV{VzCDZ-*;=lu!sBXjnL(#gOQ2)fe0BcSHT;+M08jm>FpuJy zkE~DF&TsQ2dt**ocjPlj0D=|k1G!2&mU z)A7-=t@01I9V6b?Bx^#)9w-OCIXX7B+#-Hu<*# zekQ8&H_+Tdn=Xe4RP*Q-I%hmZozCBX{ad?s-s}$>{m& z$hv6IPse{j0x-ZpqoZ=M;vR6DHo5pf#fG>kD|k$!LM+KMW?&8JN_wjiF*rLIk)2n* zL26bDcdR-R4O`_%W);t7Hw7vd8sAniaSiw9lH5&0i#Kjdm{9ll=fk@Xx`l?Oi;lmm z1IXRcuoe;V0$atc-k7eYZ*_$PA85q{wA(PuP>rw!rj&rpc5A!BIhm(J^DJZ#ic^MN zP2R)QzNc#0rk~A`p9zaUs*sc3`oOL%)zJJ|sZXfc9CbC&EK=sMNn)DPJgCnPUf(P# zZ#F_#RmwS_=%<`lGvVta#ql#H{jT&hnFSJK&G!k~A%I2I)~jigUJ+WzW-!0N%Ve}q zmn$kVZXDA|ox+YbW1JVfTOso|F`PY&t&ot|b)xwW|Dm0PUyge@*nyiZx+?TFjdGZG zixn?ZeDI#*@p{)f_aB%vE$2zM^m?d8_(kZ7+>3K2ADW>_jA!%Y0RB-?d3nyCIM{AT z!^tXC15F9>0~fe31UPU(aY1`%IpiF}KoZ56tjIxZSMpvlDd85?rEG!8_O!EgaD+^}-? z3_DJjeiOc0O=F|oDm*b4f5U!Suj-9ja0q>SeQIyDYMw=%jA5@ZvaUdF6mtfx`E1}X z+va$*+gP99;$<0&L60v2a1Od8gy#l*Q@Z*f8yASume zRA=bkQosU@ga?W%0$yNu(yIh%SFeo6)qw+Wq=SQJT>e(Jcrpd1kH?gnbhmK@XM}2% zXX(T~4u(fvpA@aTe4X1ZD-|>}f`Ep~yjuKn${Y5gSbsdc80jxxl4UF0q%*tmKA0mY z_cwfCPiCdICR`DLmHsv6EvC>xmhQ~%fKA{r(tUZBNcM$hvHs(4iI&Pm>M!s2atucU z15OgL_6-%?T?akw-SqCoBbc%hFB6T6L&IJ{A#-WPaZ%B>HAJY?Q`I_?*NbR)6!@qF zh6xm;LTha-%*`nsCb;>Mk`3V%5xlhAD@=G^LW$7~7{;Z#5#BZi6zysa#;I~71K!8n ziwfzLI+MNQ`lSLz1QDdi!KZ+t`8s?ZJ7rDRHiKt+6N%*qFbk`a*L?HD+5%DpYIi&T z-d`IerC9TR+qZR30d*+b5U|XpS2}jo_Qj?X>^9w)-kkE}vfEsxcycLB@sLPA@L~A- z8kb%8E+F1!&}qQ|{@dFU?j^Rm*NYea!s8{X8`ZeB+yi=g`F}0Y3JsJdpzIca)Y8)H zX_SU#w%^P*Q$tNT8rd<3@TJEJ%Pz5%(;ykrlsTh)ifAD8m7R{S3oP7Rrbe8YP%sB< zrC|Wt^XorK1fsCO3xl5I~DIY zQFS;rZdsdx_R9XbEFP7ZX89g+hrkTIatsU5P0Zlqrai@CP6D9<{gap@qU;5|=~cK* zZjtVlzAXxXhkZ*-TyDbc0tv}T(btIjSMSN`X}Mn-*Ab9uvPLrtEvJ~|ywoWg?k{m+ z*vDKlVu6?vVF$?yh_p&CWrlf7*b|hrXbY%a!9xXnk>T+J!H@En?sa21X$xf5 zI5*W;$12{O(7-@});%;d$d58%2H|*0h`uB_{v>tRgJiZub#>PDIcDI%Lfb5Byq*1h zE7gDFTL>eGCXk8v*cGXc)TDj56RCa<%adgeZ?M_drBpg0gYu+=PX*<*7;f;lo+^jjGQR>F<1 zN%c@6XZnbdt?MbCH9j6Q8V8Vn{(Q1{5c>EBL$asrFVj4PZ=h_?S0I@BRQ;_891tci zu`Ncy`|V%B=Gij@#86LhG_zkwp?8lH=hA%x41|nZw(DTI!8{&VZmu8-_H}w6EDjXu zZr)}l%-Y`WWco1|-?aU4N}!3(tCNt1irWRS|2HV~euvtx7SvBd!WSy6G3NY=v8g64 zIO@+dq~7m*aS8Q$gD*8m-X(ot48DnMpb@dQR@%XcM%9DY$yW8X0enOV?QAjl_9t5A zAj@R|8qiOAWO^EU(Ah?!?o3C^$4mI=8-k>`l;g>RI}nP=KM%j@5}gPqfO6o2Y1L90Sx#)Fco5ZoS08W7kRvZz3Q zif~=HVr%M9Lzq_EyuWyj|FG5FD*zMFLy|DuH53Ryk%!K_1nNkB&j%nFfQb(>2&fGG zsa|Qm&7VpnMu6qaNo_$K1ou+aI;Q`sehmf`;lq0%W(kJhJY6NSuhruBX|j7*$l9Rk zAsvO2-chlKijFy!Eo}HN>V`0zF59NfCV$uO0aqQklx8*ZtsvimZM7CxcOh}adIMuGQZqEfNZp*Wb9|3iK*`?qh&H3O! zfb>y>vb)J*+?c@gsT9#s0*ytI`N=KhID*0C7fY}7mNVYgV~wBs->6rm?8;yO#=`5D z(b3*N+sF{VGXCY|8`JoTO&M_)9(vmU#JoC1FL?$`7-nu^A9TP-Bt%5(q*dNg#k6bn zT?j^dO4Lg~PwN8oJk9mBhTDH`_BwAxyzsLqTvzwP@T*Y4@It%YxOZ7*=a!|hr9H1? z;_cVvjD)efH3+_BN(4W<^Q`t+g;r!$*L)z_1Ts@wRiCW=4g;R9iEWduQ1l?5Yu>x3 zA%;GG8!nXFO!6`IGNh((J2UqbpLL=|O9;u24ty)ZfHiNnB+RnKVSv~ic0s`%3l>x4 z+c1CkghYC!P4hualb;=24Ot>iW}~nF%N?4hDT(3FL|#zal6>1iciE9& z!O>vxg~jzi{R$}|Yig3ZR z$G@@OPoS$N#qS%dK8hv!$qDVO06GXrw!-5jDvZ6_@P$rI(B6{svnGc>LNVhPi61dy}ku8;#NUbedQ1V z5f*5s#{iB}EABS$+2g+){QR@#8b;_sox8I)pU@*0=9l)NXvQrMA!PPHJ`YgOk!$hl z&qnquTN-po-XR>}_@fnOPumm`00}IJD2mUi?4W`V^=UbUb(@J7NY9+TjKkdZgBa50 zUxCo{&-K(5bTd?a05nuz2ctKJ5I!#Kt&Y=gl*1M~^)Fy+gX@CJ@<^EfKqsKUN%OUM zLOO>K)?0T4(b>DjQS`xW4gSN5o_6=+taBLG0K`X2jkr38PAydx55@2-yP?fFrqOa= z>jbeg?C4lXo~!;wf`|}SX!8ooe`LYfeI-YFBiCoq$GR{re)lIV#8wg6zSieXj*cWf zDkLjGc1K`_HAAoO$nSgmYCl51^>G(s(qJ$Bp~@q+4?jUVH&))yi|Ou*otoU%39-Y_ zT#m_wagiC`nP=l*;3RUjMwiO8RBTI34hERc`dZ6z@@H`J(AuiiAutGSWFlA6sa>z?2~>oAF1@^z_Da ztCKId;s~j zu`-}+rQSI)qo!r4IER01RY(8AKd~KAl9Jb zR5s&tq#?*S-41WUPE%@BK(~#=vn&c$ytmujYYyVj{3J%rAd+}0H-QE8e5I(~Us6hB z)LSC8=~QE+;b}R?)vzdn^8eQIk%bKiid3T^!=8krpw-p<lwjoZjZj{I#zr9X-I+iJoz z>Ja{<;ltHf#3g>%q&PNNEi&qYHM(4E@?O=36~4SA8C;w5{h%x1kLQ_}gy>UUqjR-& zz;@FpejLO6g_B8xLF&23$Mo&{|>UlI?`-@jNy%oWOxs1iFC7( z9TE}>izA~dIm5mw|CK&M7rvUaHwgnlV%?ptPO<_j-)ciqH zuQ~&z4c>}fW7ilVB@MH&OgB$jixQ&K&> zgTqgfP_I7uvX>69ukpNul;cxluo@gQzC> zs47|HyUF5G6%kbXpQPcis4kZ25U?cZ7dk(-EKxi4=P`S=PJx>hIbGvb_w-VQ*+v;lT1VXJwlh<8#269zOi|{=LLBlzw%EH&YGjt!2b( zh{IX7S!)SpOGtK3(=AfvZ6$5yz&BBt-A)&u%1x@h=^ZuGDc^Mq)E6z;KyRNB3z0<5 zV7m?=M~fxy^u&2Wpcz~ndA$}!c3;sVE$F=LWHSM2xPB3`?%xPR&5A-P5W9^&+!nCPHa z4FaO}WU-MY6Np}JvfjeR>{=IaTdt>s5jL4R0m`d3ChMcR9I4t$(kRDe%&zi&xBul7 zu~nj&90GM|=4uw2r`84Wi%WtcFzzapviR8wz(06lZmd)8QZdYZ? zmQ=_quL?6zN-EJyDM#5&gds+FNQz1sNw!+JJgxIxyk+lGY=ZI)=a!DNSmIvLW(V}0 z`LY*e`hA`q-^=z6jG!Py&ZUKLMBF>*DKxD*sA|?Yfc|ZwOayXrU9~Ma33j7VkmzVbczcbUY0GzMX(i$w+M| zYReR@Q9~8&dpEG9qrKFe=C5b_=ux*;V&C71^3)M6h^#FW=##{+^rNyL*wdDh9J)lo z`!~!noSNEn%SszZp?~3`q>8o;f5$$cwq%5`CoIY*4%_00iyuN0$}9P zG@!mW`01J;A|blIPKw11CwOMq&1^GWjWKnCGM`Y*05Vz_Du~yqJQ?L$U+6Td#*Pyr zztW=h2>vCntN!ZkU?}^r(qobd29}!C0C^=WxZZG%pGC#*bb1%rtPv<$-E4d~^I9-F zhUH-+%lEU!gz{{`XN3whVv7gkR#}5>BtLhKJ(c=-qkjGT9aGztZC6lm2}FZ9RHAk1 zyx~Dplc#RJaGEiNe-4VO;o1Q%>9HmVM=&vxi#Bfl0Ef;-nTD>+abaz~6G!^5y;~xk zse5J?XEgOyPgnP)ljt{5R(Xq=HvsTwZ9fM7V9WPq^l?gM&7^KU6aK623uXa@(;#tmz}b?1+Ix}7BlT;KHANs zRK7;zCF_@@+mtOY*TWjQ#Zv|iSmLgeQqgfp<#LVBLy&3r!|Yqz^Q349>S!*H?h{C0 zM8L1kLxtCteLSTfJ#eW+^Yi&RM8Ly9Ovfv4PFElbAQ&v3hX?DU=a%Zcls0#d#T5VD z+mfk~jD*&08rpTr{;q`(@8bd_d$LL2vm_WE(n>U8u?m07s&d=#h%`X1x2U_3&nkLB zbwumu+{(02yVj8Bu=0`pHn&$NqhUgpN_foc#XjhE)O3XH(v7`4T?~AWF){%>?TUvk zorpMk13xeB#uhJaU*>)(?b< zURKYzaJ-~sF5Xf_ecl(ptz^RPmJ=oTAJRWE#-=h4>3O=FpJ@i-arj66%yN7BjY9GeB zliN!9DpjY(ND{KFm8LEbY1?*iYvg6BO{vL%`?6iqA|Tnu3N*9Q!{hOfREu$)#XTyX=vv{4lC}E#k3>Dd%V~d%U=lIxaK4yMM zmsXT?QRWZ+E3j5|>vpO9nXN#|vXmCD_FRf5C@K=r?xn;_iy82;DZhmP&D%4Xusmeh z=&MBz7FUv@*U@cvn&Mq$&g7TU1gPd-`w_L8VdB$fd!D;=NeE*z@vrP}dU$xfzg>PW zQ1mpjVZL@UIYzpnib$4Cmf>Wc)aELrM=FzqhY7>iSj*AS9)c>yHNAG62tUSmCwIIq zLp3Mh>q)PUJ z$55l9S_+a&TmA)8#>*TgKMxY zZ>j{10q1fi^~=Yp)!ob?aQ9m z*3WWVbj)B7ac>eZOoG9D%&1#)*ojLll5}bG^W&i0vI$H6(F@0wm0#W-0@bUsAp&6hHr}@S@bPbtXKwTqoaM^^>|rP{a*@9{G)?~t{7}iTV9(?m zPtWMwD@PpCb>?df8I*Zi*^y<(H@AA*JdcLx4Ky)-k!WFWhEV~OZrmf)mXYjJ*)pW# z;I?Q(5hxL6|JlV(oDe3lI9phOdNRJ`2ek4h5;J0kcY(akn*{+LJ;rvMaEEPFKnGh5 zVV=bf%qNJD$k*P#U96tDRb9O{bKiL24Pb*pXq&2la_?CC!IL!SQSq2S}K2rhCfic$HF)hWiSrC9ZL z2k{Rnz#l+}2S-n5byTkU>V!;#7ym4W9Mbne`|p7cMqi2YF6GrRIKG=#6}l}4Dv<_! zw10sJin&%hE1swcpBRD3F+d~udoWmNMQm5IfKeZc*t<`@-~9=F;r9ci8%q}?jh?R? zb3R|L^J_Z0yv=oO#=sKn!-)Z5AH8xnejlnd=;+PG#W@xy0TJ_vUWh283`Yx5V=pK5 z4rR7@+-2piBla>#J$h*w6`a;T>D~^>-rHYqR7-Jqu3OUewo1`?ClxJqs+I#Eatq&ha8XUiyPxhj$ZrsO8&} z^n?4*9R#PN$s8_GoL$ zUl@+*&aWqm>YLCEv>+7g@L|ldxNX@#9U-N3j~Qh8|GKiAD!44Q&5%>uJ$$kkIbVYzJ9jtr+g! zDw_6MEd&@sIA0aI&-H-yRA0sfY<2_838)dbP+lR(eD4j-Qd+H4VVl|5N8J9z9o_1x zX1;BkMS94d*GC8gLEb)?=Qep|R6{sMrwfL$fByZ{sHj8V3In?-$VLkBL51_|;M*v} zReLvU*lD@TOOGjD4QqP^9rfSVTbTqgUeI>cK%mzH2p^j?6aWe*hK2YxhgkR;@kjGl zZ~N5c)cbm_F*I3jy=#}%j};qU@b7x`n_V|Rhou)k>h-2r;)_>BfIcx(x`cGzM%w#e z7&M=5FpIr8sGAXS<2s(zT{vC(q`df&y*r(JyM5LR7XUyW`|p1N0z~knR$=j_XuDnr z#3?ST8yk7(1J)KtWYnd0#O4(Hwyprg436I;Zuxnkx9g+(YAQ4+X>YqfuIp;}ms_aF z0#-&o^lU;{L;~V&x?fq1^j7o62EBmhG7`IvXZl_0RL#iZpDlTtZz&KbzFlA>IEYA>ebE5IF)Ie-?{a-KV z{g;H}{BblbEK3}j?>A}T%9T53p}E5qj<+V7v$ULP?t$e>anHok%s~z`H8mx&rMOX4 z3}@~{1ZQXtK7Rj+@6Y$R`{DJtdpz!O_q z&qM=D@cvf?1v{cY?DcnQb>EL;$8oy8_>KtdW$kwl5n3^gO2dq)c23zjj~@g#nEea= z!gn9x#Y!2&x>m=S5}`iHMMmu?!N*!P1XBuH8GiO`NGHN$FKfNWpgU=|SpUu5Z#Ys| z=(fBhY%S+v5%Ao4^^+uxcspV4=%RW7#grrtGq#&W!_poP{6>kEVQF)z%1W2nN`JGg z7{8~wqa;_CLB-H3vrvC4maHmk|Hz5c?l`NTWZMk*o7w4^95AJwn<~sp4I3PSgkh`qs8*ie|K)H-IAFTk`IAuWre1 z%f!|@Zp#09U#iF&9vD^-p+$O~FeAWE8SC$VlsUev7y99!#o48Cw(X^OeFpyaVnZx1 zXt^d;9dK7DeIr!DF7ijmz`Q(a%1dprhFRUGW*m>Fj8)#AIT?^oseve(AhcZJh4(E! z=QCq-xT@-f$9`G6#$1(ThvNw*ifU-C3V(q!l#tUoTPc}R1X=(7)|Bf>*ycL@Yp#G) z*Ru;xRvUabiL^dwyNd8V)GLMTW(!2>Em}y#jBk}d)*g9J;c|cUW9Jf9jpT#l6aHtrph#wynXdRth#Qj^EJH6! zd7*S~V{Go}3HO+Eg)?3viq+jUY5*_H2AQxL~>BqgLxHhSz zXmZyw=!ZZ|loYkKZ_)gx65phn5O4S_#6({B1&sexO`0cefZ7uz#lL(-dEmrjs@R@zEIGJv!^ky32j@R)*+;i&=G3!fjE)+$>Z-&pe}=JL?Qn_)dc+#SkZjCwWzZtJvr zTn-tgB^5shkO^*9Y`VR*}2?a8OA8Uyt zh`&;cT#^=fI~_-JSsfo0q1yShah(?K2N9|j=)l8-HNY2xPOJMR=I6DkBA7U6N(F30 z|8G>!)PbjJwu&Wfj~&MNd_Z?UHUj`-*An`?>5o;Wb_@QR9NzBPo9US*H*iTcG$@v*e09o#kqp9%dfF{Cf_!fMv(ErzU0D zKwLnLvGQ&H!4jz5-_^FQZ(+)w-jR;S!8)*HnVgV5=bHUsb-yP5MSQypYUpY09jMS$_Skb* zHwfnv{0A2k4|W82*{cnbu2)Q7P)B^t2iJr-iYuRuuFKw|pv0QW(#J3{q7nv`29+DA zyb$$Y@3*hcW#+C%4M(kXW(9WrHl3p9*O_P{UJEJr-od^iH73eEf%_%`4rc5X*|JPb zJZ@GMW9?@(3L|~xnQ03YN+VYKsik*%Nd0&spJ?6qA+fa`XTr-Ck9uMn9#k3-qqV&h zfjhpNFJF*7QThs+Pj0M4+dS$HE9>*ic(RUs8xU*qGuO=XLy-GmLQdPb#d-Wwx#+j^ zFVUm3q_q=at13uE&GZPBRFyGN0c+{?rNaK2bDXBL+o@y5Ber+)dZ>vA-=wd87z3_M zPP3m|mV^19L*#JVblL^0_{L$`ddrtUx@_$QNBITmYbc5 zt>o@uQXHoJ_wbtq!m~fjPTp?VE6+x#A?IvLGm1LcW9wjrJ%7NF;ZsHrPX~AQjz+ZazVjAY!Yv@os1zSu#4CC%@*HrekqLZ zMjDnhph{V zJxSoA>2^ZY=Y@MF?5gZ}@mte5h2w%K+(ZSnN1CLPtpavDjA$Ofr83j0aDpTND3zP4 zHQ^kMKb-P-4ANI!N`*fa5NYJ859Nrxs*T;j7zg-?Z;}fSTLqJ@o6{L*WZ?5&B)wtB z`$2Y8sOS8XGm-#+zy&VT7+0;Mri!^*EIr8ipw!I#U$F8eNh_kIgi52A;_yzwe2^ZS z#)}!Ll^HM!_sl?d`Hk`rR}Z2WOtA8Y<{W&bkYq8aYetuAW{-M>Y?3dm@?AV^b^ahG zS^V=smXLtQUsCS2r$QPr7yE3`a0ZzRBG{zouWuWxD41y(riHO>-|P~D!1Xvc4lF|% zn3xr47Ep>^)q-1(_Tdkf>tMa9v(@>Xqek8pu=1JdBT)|3LXqAgt^_~7@EQa(Cpqkp zvMck9O{ z9${W>1ewTL+ZxB(k2+Xkg&Y+)KXt%M_wd{l!7KGX%r^Vy%=8LQ!xx+Z@w_aTid~+L&%2fk z|JqUZyQ}(Ct$^6Oy4}QdwEy)yh5qF((nPG0=>jjiUY9nsCgj^=75nJ`*1|#>YHem^ z;Qg}lhNcw0+88GnK8m{oxXO2xV_5t#jHuCD^+^dS)fOg>cp{*mXOkd9vi`8@3)+-j zdyV{Tf3)Uo3r^GB=~9hhJw$N;U-mq%A1p_19Cq9Pr+%g>=f}vK(4>!0g!k#OM5Hf% zdozt}?ERXl)}9u^Q3_yh4Gqc+*-u}mo3jJV0Q_%A4du!?V-Hcwo4f}bUe)tb()#3! zk973W=YCS-`%czk$F938SA1*{kS}6%mdQ??u6)_?QX8o+XnzwDG<$Mzq>BOLnfKNi zGqZby3~wK8j)do1?{Bz<%I~6*XjiT;IzydIt_g$}h!M2Sc>yktKDgnnG_nE|d$jDZ z_WeBbv39%q6I85d&RfY_*2*iAR-TnsrtaxjW?K^rptHD^M(-RO+=8u@<&issnbrz! zkPaO+UC~E*>5_|Ln(i^8yWeaA+jC8L!s5#pnk>h)8BTtOTO$+xWGz|0#l-m;A2@6) z@u_kR(XMuTq_7Q+c}dE}G!y=PGG{!sZsgre&%fkUe^Ap*Cxz5mD-{ktVV#Z1)Gk5ea#MPK?kWeXOxvhFLC-{XO8N@uXz;4 zSABaY2SX8zllX=^Kb7C)mUCD6)Nop#j*W*U`Bc0l30o@# zQ*0_Qn5Lz~sD0G(HTB7H@Z8F7olEE-3Y6*c*~Q|)?k2?jlS^UmvtUU*N$Tqj*0_T@ z^|%7vF~J?h8nn`eStY6#l8uCe+kI>sjcDOUIEyUY;fvPxS_&8a*eL6fX4w@NhV1;? zu?Obr9?Xl-M*iwD(=)hGljgZuXKxi(sTN3)^KrQLEeQYhk{jA=NE+$p$lX`ADv=r6IBfCG30qOxEI~P}lMB_nPpqHXRNc{YFf!jccz?I4qQ|X?fAxIC{ znI!!jq$dS6BGQcJ2rz1!;5?Vw5*;-k^Vxkx+T_<}DERxgQx3_WR?@xHaq#oQsOI z*qgFZ(mmK01Pf7l(Kl}@V^ANB-@(4Wca+g~dGiJX`uYRc=TP|V&6|YJUnE4;JPnSX zb`0?bu6xl%Uj9Bco~#hzXw&w&jD8gDNR_ha9pGTVey1$jlj<@WoBEL&gp4dR%4heJ zpM#~$LVwCf)|zYw8CjwA)}Pzh!_Cdj<4=jkADye01>8Nfk#1wte{u+){7yvxahJkD z_U+-BAs!W!$3TR>VU;brNM|-yz6`0HaXIT;2h@lF5?%ZD7~llvGnp993e!Y=6lvUP87Q$HK>F~BTS`|FJkZER9Bs~C#pj)X{lUCzGf8Ge zrZVRNIuMEv!~w6)*30$uS&Ay6^+e76H?pcq`+k&wfca#|V+F60I+*uY6(Q0EgN ziNsw>MD+MaUIi(FPdn3=oXKBg$j8zpjh^{v;VCdOSo` z$^5^O1JTF?dn>$0;%C_2DJ>2iD>y5XGK;$NQ1*!NY_p)wJra&AHtYVO=7`S5|E)dq z)>}W@f*!7#?^^!u<9Rhc<1ca;7ue_7%4&&`(aKaZQpEhHayjFcoWB6De_)ZAeKY#R zDTUKJoS3Hj`ZzfP0%HZaY@ZE>I48n@FZcD?K;-}RY;e-V**+SkV9QVZIyG`1xIaRU z2D37|Zz`1gsx3KTdi$9zIV2(4jZi(43=`c%{84}(S@S=d_%NEt41ONF%}Lo8rqiATOkMJ2rN(z56>o8TuK%l?lQFpQNqk?#=) z{=+yjACfHMi?Fwt|o$o^)Vv5QjTTzm@JSmBl!M%{EDPx<)D%C?(mRKk~Nx3Bcaz*^gRx$fOu z=l`bY|IOaw3K~jAQluZJhE9DkUzz%kR8`jhM29(9AU^PQD9lLj{wIM{P7OZpS&)!}%)BnJ?FC!Pi!J+hF9@ASAIov>oj*a^n%^kV!6-lU zpoU{Q-MM!kN8$FUf!bf_6Df^?cx-#Q@NoziZQ8#Zuhe?d6Q53^=iho2&&A5m9e1!5 zrE-WqN8yifWO;l%ZK?+0qTosch#|LkKj1Zv>iPy*eV9<4I@Y5xv~V{;p@ERZ_GP$> zw})&qD+-RJU4mCu1<&mt{=%VdB}$TzR=QSGx6SW=cW|HGcxc7A-2w%Jh@@`~T)XaV zMrR$NU#6g?{;wqOEMN-TrcZ5}bDVtdPaw&gTG?0LcX*nH98q4sU^u|n^7lMaXJfOJ>tW5Jp z;a&$v5^}Q8ccEA@0mi`wB zgppX6Qw#O5F*E@CTBk9x~iJn5blh zk-oTxfr1Fyi!6s^A@4?tK17Rr|NA?tH-dhDOe7-WER6B+rdQ&BOT5PyjX)E(BvciK z#&EGd+cWmLgXJ^9AuALZFUP$vQE$#K>!CqL0!%CW-wiREI}ZLaZE>+T{|88N{xz0f zOA*der}6{<#!;B}1*2r@V|CM$q6BAUo3KMatVnipR9M%ip%7v;tOxzD6!Lq;w{jev znwDNxqp6)#4*$gy5Z=Nen}{R-;*9(QYRurb&`EXGtqXLfMOJvmF4D6FHUR_!oV9Ft z4_J)YuKgU9FoWA3rEt4d0pB)1Xx8g~TA={f=))Ij=|pUPN-MHI&+FFx*#KaMhGl@o ziN12|igmW0nP8Vv`|H2`i3uZaje*b@<%w=b_1{;Vfr^bAAA zSy&-_rqF#0u7Ca;_P))3km514a{=1wWcY<&SSRg79?H)VzH?;>Wrrjk+rWO-8fCifAuYy&3*N+ILa- zz->a&ep|+PJ}`3etaDnID!;tg`x>Eosx1&I+Tuz%MIx z=7NV#PXWGrPFV#;xop!dbQ59A9J%^w2&T~fP|?YFX&Wf|h0lL6O*0r4(+E-US5P_5 z)C+|c{qj3TY>M41%uIiOo2i{#EjG~}23KxNuA0Xb1J!-z6N4I`C(oAb2};|GZ&)T? z?H>eN0r!*0h44WLO$t#xyFOZpvEGhnJDkS}{rP|uWm?RZnQ^o87*)O7M47Pa+MaZI zR87h6;77T&_3s@v+cz?=@p%Jg5S&yEwE@D*N&2ww9l);Iqiz&QAbFYW9TJFZxgL#}Mu zCR&C=OG&ikxJ+^n4oox|Wi2c#wjMz*W~PIqhiz7`);@fV%>dG4Fc)oVC2wNHdVcX6 zWnu->e`8i?X~AZPY}jK(>XI4`sFE9c0Y1L9Q*izSwSAJWrpAMr8jBEGbquCXu&w#6 zEL;#|DM;4i=se$*Se5C>##56#-aQMP#{ycr#dZiXFS0!x9ARh$sP8zv?jB88u*5+? zTw+G`gSS7(k92bF`rR(C*(ko)0ya{Hg7!NW&c46x`J{)eXOx zHQ&bT-Xm1tLeO*Tj{LLOe}c~TL$%w8zrUbSbP6nj3mJ|PAB!rPc`-KVz^yH*Gf;oU zoL5zsCw_;al=+OS=RL>nwV}y}f|6Ka^t>cE*t9yIwY3qeCVFeH%a$wE(@Fnc$~{5m z*ZpK*Iew1vzGXXv;#$DSKNINQmH3v5-`^~|^MRdrxd$#Pn5^PDH%H;F{FO`yj0~~@ z>XUbf0GgsQ{bqElgDv4(^TP3eEnm?pP4Jjg8FY4-+7z)($!qv@4M zrqP-34rog^-xM;#NuxywH9=UyM!_d@6^K>xa^9RAi881NeCW0k>aE|!lYE_aZ8^?9 zY724JXcX44uMZC|Pdl%2#LQZgQsEe9%Lg@l^b=i0GY#%Z*}l<$IlHKWk$@0RiYb_^rmj-< zLR8U);ku^8w!@S;j4OK^X8mt2UAhO!Fiu-7{ZIazaSoed-=I|xnyTKb%Y$cWgRrR5 zg2o0i4df5cA=F*}utQrKe&hggjK42LhyNqmaU2{I5MOxMQ9AQ^Ny||8X^QJst2}Du z%0vOLfYR(QN%k|(t^-SWYRr{!zR8q5*rBrT<{=f}3O#)O4@Asho}7x@wiiT!IcvJ? zO^qLfI9n%X$tf8Xd%eQ?_fh+)EJ(`AD2ddL-yGF`nPc^9_i9sFN}1zL{6<8*kYFB! ze2_II!=feA(b;h5{!}Md!C!@zq7g&4bxWt;qGUxWz{PZ7@J4^;)Z30KRF@hJk1Z#h zvJiQ}?yQ&Sl>bk#GfZ%ECK&LN8l4_BRYSB|tcbTgId^@hn!?6c<&R3ki&x{8vsM-ofrzuEk4`;(2K#LAQGUX> zfo^Z3fm;=>wS;c?P5ioB{K?~sY7ys=dLJze`#MnrZ-q}~hi@|IgQ5dRO%Ke7I!1{F zIN@cv4{}{z_t!j3Z@ssM$q{%9yh3bC#IyX<**#y-3VyB8oYnP>Ei5{1p5uSpqRIS% z=A)=7kbZf&9@8fLIKC1t^6+p*8-VYBav&mktJFfq}wVt3|q&3WcgWvn%G`Cr|tQ_wu8qI!*0DTLECm@ zjDuK-?tFOy${}LJ@6W%R`#;~qg>3<*2*=)iQ;td_A;}OBJ^-*t@5v+?^_7JM@&01v zIW!c`VZHkgYn-O=XAkKV!aD;R70XMCsK9`UNmJxEfp1rxJZO`3_hF{S#DCY&F=9a_ zhsjs$UAlNmxjtE**7~nPlN{@ODX8V-1+JF3aA5o+Yfxy zo82+}j6aWYtsuUC|Wh*EVl|m>-d`D5=K*fI~I4?jf2}T3qr5ID#-bT0I ztVMuQrl%3Nth5O~z=GzteYXpDT(t3@Kb)rat%wTim2dpFxT>CPahPM8eg4jC1fz~W zte&L=>y6>kyD*vR!hjzK2#a*aP9UzY5o#btg`ClXw_sHLUOZb-_ZtKdL0>mlSj@;fz+jo3M z*9fOI4Jc^H&kUzR-MI!57Cxx={LQ&-`qq&{4a_KIS=pfh4>|R^W$maQ7xo(|t1N5# z0(DeiRq^0=45oU5@T8|3lt`^VUvm;EIG|4NoBRVqpLqZ(4;nu0qt{_~Wb_bkJz=TS&X@q%=rIC^&soL$J;@3ho3jP8B2x=F^-P zJl>NOm!^m4&4Z_Og(|ym?3m62P>&5xjM7({t&?gZJI}~gno>GL?8q+_B0Q50o<41R zwMTg!BpMwH`I20+J-RcAN}Tg?@~98gYM)wo6r5KH=Ff!AELw>E0wtT)*O@x4GEKUG zX|@DX(6BKMIoH$)_W^ z^vDS10+%FZoP6MTC4n@c=@6MYufyXu(;y35M&@OBOby%k8Eg17GdDQ!WA zMB$U@*iSv5j69sZ#_?OXloC+o8BQ#GipjjG=ntWmQQjgT*>F0^e~}JWgaWfOywQ}J zI=0@52Kd^T|Lu)@=kH*AaAv5a;e;8W<=yk$B{EmMTb9TFWUb~4i!%z&=~BYj>OPmc zmuf@bUqOJtWtHbG;Z{SLnbKbWc^^sqj~F*?>UGKeFN#sL2LtUK#*6$GzVt6Ej;qrD zYVhe}CMcZKa2eZgZdS*h?FH+!PBVGo10NC~C$3}#wJj1xf40@K$l4Z$w#N8n%Uk(^b9cAI9JHFfQZ7VWaleBrf!Bl&%YYI0{a)v3M5=NNZ>o;G08ekt2K`vr(hpn$f0c5-7T z_do|FhEKbs3Mi2h3`TpfWCHy9i?p8o*w(vo~xkY=)ZpTki z-_Y{%;((lCrcS=Cp8A-YRK^v$mg~ivP=#DDp|L8q&C=j&fzG^ihfX`Gxmx)6Bs1~$ zu=$CvuFs$DX6vY3{iK~rO=1G0(ZL7%x#aj_{NEjK?BGK)THhu)g}go(N{_k~K<*s# z5_P0v;g)vp+rsNClGi#i>HvxQcR&_0aCNM3i;MJgag#443P&Yl(uy(9U!^{-hxcd8 zn}=U|l>%p~Q{1+yb?shcVHfE&d4fpJPb?hLFjm zm36gyo(T<9C%OR~ADp(hdtaup&IRYgm3Gan@#@l(0iOv(_^|}^=M%4!*@Rt>3hHMZ zFP1I;PeTGF$2%%k)if$6UgzyG@gOz<|7=(xm#&g+Q9C-DK-;BSsbV%C5s{>-()=zA z({Xd&{NKL>`p#_Za&&xPs}QgBIQFe~M8ZkEe^~aukEdY&WVVE?Vg2Bmin=Q3sKB2@ z6IL02PjDqD2dx5fth$VMUJ@lIHWXs`Ikb>4n|o5`-M(=y9?h=dBX&!(vOFG?l%0XE z(ODat0v35H`Jg75(E{|b!eq7EW;1pf(ypbUA>pWXeZF8+4}VdKV{?g3TdB=fbj1kl zY?n>dXa9?3Z@?GSQbaSyr*!nt?khcqkR1d{c8eTVCHKu%BYF{J>82x*N@FC=4?=2O1snD~@4GkcI`4)lDtXRi zX$-hqyVWp-@NpRnCfmeK#uXMz_(Lc1WjI~U`&(OCZmubln^2TjyePQrJd_s+gTd$G zAePy%)8+#wjv)_f6Gv`TqXoh>e>-Y;)5Nj-zYe?yq{RjqOdtk?m1qvwFm2CWE!>L#qng`)`t zS{04;>DFi&pm5OoJ+E4=dG`2EmYdxyCGe-^lCowx2L%cHEwgSs+rCCHMJ4UCi*3YO zD?3ZTM`kKtJ*T5%ey>sP58Kb)UTvF6Z3LDyGV^|Eg0d9Rya@(PLTA-Z$_NfB1LU~V z(%EhD>5Nxx_*s=e3Ow}p4Y51GzIKlF+Xz@`E~h&zW%TwAgtPtbuM%Gu^mjTw+m8*P zPLObSY)Oi;zG~!(x*XDm4xLU@&v#vk4v^*hfG3F|%mrcTN)SFG2_^{tZjM2x*e0s- zVwgC-bhH#)`K@EaB<3ASzVQgXK>YW=hkVJrAgu^r3M7ZIcnBX>;}(z7j3_q_n zlY?3J4b8BqMh{<&dt7F9t5l)iSIzLpW#v$eJKIBF5V&fCH*vR23bO4+K6p3GRe018 z?w&B&%O0MvGN&938D+Q&048rehQ=%Nrac0=ljFEZi5IB9pen0TKt{`)U2D`afGIma z+udY*)VVA^=yfY=4TtZ~0!?Jxhjt%BkmEs%Sl{CHKWm$!B+q{xUz!SO8+DJ*N=_=y zxOC1m7KAP;MjZ{+`Tbjhw54;`cua#ThsE4`v=M!kp8&&zC2{%C1b0! zXfSpazeA^+K1ZyzxqLcDCa15;42jw$=N)~wkS&76)`DV{N2|1y3Lljxx<8kN|LN3g zz4fuRS@YNw^=A|&1IzU4g@PI^1*4fZbnA??W2Q!%_N?}Wmy`v864(|WE=o!YJXS4?vqaLrM)wpzu<#dwlYqpd0n z$DA7wvx-dHxE$liy+M*oKrW`PkAL5!8%}n!KARulh2ehmq(j&o+{g(F(zDJ zMZPnP`-P28`?Fo_>$oWA(C)(*!|=F18zL_jsow_OJ13H$ff}NP1XZroUYP`Mu9}@S zWy9w2bl>vu_^ZB(l^2UmzTN#&>3Jvz)$?L5Gb{~4e5zTj2TzDor8a!6)Q40GRx41i z39)z6?%`*}vfM-(^pZKf#M=1Rd7Aokz1LRhlX))8h>tt=GTQ&L$cV|uSc-gsMd4JXpnwa`>S4D zn7dI7Clq@8(D&clYfM7-_Ph%-uA7!!j&2*}|F{|6YINtY;XbZ#dCgt25r0dhQb(zi z$O2Lo>idZ=yU-T8QN$Rl>7y#4lT!m9y&Od-=wh4QgSc{Ye9S=qLOg2z{3+}Jx>JU> z?m98Pz^J5z6LDRJ0tgG+5nHmEyf`~S91grR>Aly!6jZHIs!09vM9!B-Fg~tqcEwFJ zV`+f@Vj)P&LQ@ArUE&`G&iD`5J2Lu-npXMAC{1y#`0r}#C333_xe%iEbzj0Pjos~Q zvsLw@1ReZpVNpZO^Vl44YCm?#Pn2zz0?M<9!uRezPSEciZNS807~4*|RHw5BOK3W@ zA`4rI2vhHqkxmOckLc7q!W(;E*V3j{vhGfiyzE5c6aA@z7jbq=0VUKMFpi%uCA?6z z3#yjIvTSwZ0bQo$`_6&xRL(Cqv%!@i%%>?H!Ac7%-}^X=UE6O!oj=DZZ`_F|)}GM8 zdtdI<%&xM_m?`=u+thai;|>ES=5u5Fkb6;h8w<|o#+4z7Eh7xv=ANzL>mlOxJ6SDk zl4+{)C1{Kb-+RNhs{N_J-U3bqn>DVFFB)cvzvWXa6v1--b_nTz87ccxh?(hsWq&HT zf9u}s%V78L36jSw>95Xv|7X%BY@Eb>5tUu9hHmre_@}amfjpXmMX8ufZlh+T$@aH- zl+A>t?~-lh+@yGwUA_tdmxK=<=t2}j7Jf)s=O56YM^`!*C$j}biiUm|dg17kxv3CX zX%c%|(RxRsS8~>nqI|d#d6%L5%jb-$-%l+);U|ZpCD>W0-aBATX#>a#N{W2y73R=T$+**p=}_`EZV9nVO5Ez8D3|fHo?9f zqdlw7?JdJM}Kf~95uGm-KcQ+R5rY?>hu7Z_eHXjntqR)voGXvi{N#jq*T&&Wjp zR7{V=FV|$z$t^<-HaA*IiXZ^nbSDl=8{5SR3ZxaQaM`KuJ+Hu@4w@%pkkB)35%=erQn}KN$F6%m$Kgum0vWot^ z2~hbsP#F_fK^QTfMB>PqVF-wLGO0-4$(kkHE7T~3ofKur_|_Auz!c$ zFr`+_v@WGVBMVe-<(3rzNICR6o&j;jxX}42^_bys+6s~MNm6Ke=X+yzsxdl|=yZ${ zN{t&$sm-S}s_uE|MO1ZRNv6<};_B!uH*Y8JSfvWZ_l<$xjYbxa1u~36LFvbcd=%vo zGv>$$!Ny}BURd1Ldke!ro_ymI^w~7Ew>2n&m=M>FMsSAG_>UlIDrUMm`du|$<>8X1 z+3u(>UgE56V{NmRx^<10eG~bLo7Gud6tOovCen+v!Sm2nNeR?e<>--68J0Q5D-k9U zk+}0eJ8DN3$oR{BlzrCY=VP$;0uGHM=a6QultWMP9J>cE$x~@wFH_Y0gTZJdbpwW8 zYQi)kbq`Doy~R?AsH27%(VEi5ONVa+Gz=Sq1Pi+zb6ISj6-c#in3X4~?YGytVccz=fan=;~&%8NV_ zope4c7jf2kG)4i-yEfnY@_HODyGGvMbvmO~$ia5wC)C_LXfgLleIBR0>A`02amf=f zaHl2LwDvWvi_JWr>{x$r=jl~d$#74fE5 zJ>F&0b$yXqX|t^U_oW#GFn&TLdE4dE|Ddsu8XPs(Zj56pvpI`Zbdyx0?y1$+TD9pN z-)Tx@t7=ff7Wz5MuEwT-IGW>D;~ihg^{R(e$Db>Ilohu|!}AuAy}HaYN=%+(1QXeR ztMRM~)?SD4rEZp%0pC}E6NtD-`_KIX)V*HAGy27-km??t=QPDnZ? zrH`dMVF(AS@c4h#wj;|cHt>q)`N8PMSPGKzlTA-8kY6(7YL!v8at{D86iCn4!>1)! zbJi?L8>sV^eM2&${mn)@DycAscd4VJMnYtO54f062vb^XH4>o?_;qnQcXDtn7USEl zE1{{VSiNY9qMDv@lXw!g$Wzoz*|DkW|J<7L(B+od!YrB|?J#vY+VSMgHs0mp>cN$* zT$ZJd;FQtAD3#`=fWZ$I9>XBQi<61>IvxYBOilA5+?TBQ5q_s<8Q zn@3JjV6#p*7z;=)yuqTANPnjbXgnxS5>YIVe5w~xQo=JO6y_o(ooAa!R8A$NzF^jB zDpp?jNliWO8aGvtoy`VcYd1GxC9IaiqmCi))%~0kq<1wj8PTk+S-}+tHSGo8>Bn3Vbi4^%JEBG$Jyzr8xri%bp-uYFHf4C#dqda6wq484#K zve}(8UnFMjs2-W)QP|cmk7@wUH7j^VkBW9c84nK4)Xkee2~DYQlX`6|`FsQDzI*?j zPzf6Txxt%Ug}ZH@5Ut~cc*Uab(jK5q-xFSIdDn-v zh6d|Z(ZZJ7xUq&olCuQ0VMs{-BzfQ_~OX| zLT6FcC6D#{T|h`f>4g+&SSU5S0$^Z>DGf#17B~{m>t{-9UY=GafzcB@GRc|lxX1Ck zt9*7F`DF-)v206XTSbj$MZI@&_)4*yESgCZuC@l3vSgF4Y*GJ@39UlDUoZ#J%EtPV zp(CS1D`B9JNrgjZKBYA9L47C(sBd}V4Jz@N!O%V*iO1=)XAxJIZHiOO5{KG=es`LD z?``-~Kw9t26S3>%j?^sh?83>32daz%@WkX%(x`0bEW2~o;$_!XixG8n&PdPC4+1g> z!t~F;Hf$^bx|iYoW&9-}m_u9t4o;nAJS^bt2@WM^D;|l!x-jTO!?ZS$Sgb9^lK>u> z(OJnzO6|Rqz_;s-Uv!&DUx6X9Gbs+#mtAt6=Ym86A2G9nN^CHHwE}XDR2w_OdS*d9 zST+AGRZgF6l`qnP_ zZ-dAt5P7O*vMTvB)1kMZLoU_la1`kS4`BoOWMlX$vjPO0b? zGVYdsn!2-J_|}|$c0#7Apz4RelTI`Tn*X>g25Kw8oro**Z7SRuv>1^2rmsp$WWfhi z?wGWV#)|6}vw)X(?zAJlMKyUc!z&TiUYPfD%Yp{?AHBVHv)0-i_sNS_nold3mH*ru zck${jw16$wst30A8Mr~|1a9QeUj^NN^u*gi371`_R65TL8nz~|YN{+Y>1&T5DeTHH zdZL6i=n|iIpkR&d)@s34q99#dQ}>t3iLWENV$_+7v=99B$rFl;Uz&6rSCX;OS#5~; z?tyh*#?raTAl-;o{t%>$;OOY;{AJ@@-yUIrlt0Xp$YIT7LB{1w3h6dALngcDJwcVf zl&l3&x@$EK7h88R^`Wx;Zff{%2}>rG5=-u)tztm2vvS;mBnD73IG}z_QTbs=7FxInLMu5 zzGwQgk@rVwVlm>He28zV?1M5H0U_5r5{Xg-)Ku~XTs9me96_h@Ln`m)l&Loneqiep zV>4x=CFWTR{V<^#GF#gSFVtAfw-UCvU(;qa&yvF;(3i!%7m_(7)k-@xV0Ew%0j=K- zB=i?Nq0L4Pm!yj&O(uBnQ|CDWs}tP%M{Y8{6^asDe|di{Ib~4&xvdb~LEq=&MCkb7 z8GVT`@IqJ}r{PUVtCC=p;{9wPqrWV%`sW6V^r;TS=2d6<9ISius5~AQ+192(Lm1~F z`QDX!cP=sgKwR2FXo7+qsaj!S|Drt-KcO#`O%HFHaqO$K1r721xtY<==*TcRHST3m zdDXfa3kH*OvCZcekzBG*46vTOk8%Ug8*o0JIyWTj9BQT!*g#w+jg!vgB^M`w2mU4j zo%kk=Y)J$56iX}X;_iLmaWC7aEqRRwlFKAr<6V0PHL}5zCo*f?Zb&GLV|^Z8rAL`j zS^I@**15GHaB^!>A!52BLKn+%*(~SeFAxv|IzqWhty1NY7*c{t z!pG@)qd%yfmuHz_86a__xVzU4xvV^>B~}PRY*Pe^fBa}Cxr-;r6{p~T`b@~9szMU+ zYcEQ^N6PZjhnIG}EGsPnEzkZO;xs7d<%%fkpzdV{IsZ_p0CmZCRL6w(A6wSWn^<=s zfEIzvxURRnSP^%>j#_(7+idBP7ODF7dm+6iNLkz8FO)ib!m1?;aypcj0SbLM5l=&5 z%Ck5Cv;v^rQtf)GR;Gg2Jq?r+AzuqYfj|JpdG)UkZ@EnHyQoCOT_P~AivZhR$g*MN}}q9o;Y-b9%eXxy3kEk zc#(4AcEMvde*y)6IkxU#YxqAtC(4srY0bm2>Wm=Y>$N$m=pfMGrKp;123=Ecc=;eN zRSI_IAzv<_?t&P^C2XxO$Y->j`?BXmQJee7i}#Nk{+*i33_%fiLoDKscz8&N>BPhG z-q7JbCRxGx*TdE}v?%WkVwF`LMqbMN9I=+r7>+ow$>X>|Pyjm#Z(lx8P1no=c zLnUKEj%bQy7MnMuGa4I;+r#<1-AG3$?o4CDwNHFPEcWY0>D?PlJm6)b8h37qpV#o< z91|i}(dh^BFFR!#6myUrpAT*<@v&Q>0wQbI!DPFYH6`ts$Gb_lCHeG7JJtTIe;Cn~ z9-(Oyh+v|egS4PPD(!tKD2th6kBXs36yg5GED4V;#FQl3HU$en&xtFJe&;gphy^S2 zsjC`&tx)2uWQIyav7b{BszhO!hJ&xYNQKlq7)LY9!x7VthBw0M*o=D@9+MeoiEbj! z%R)d{$j0pajR{yq)Ca?IO$6-zqIRZbPVH&}V5WmFinPVL9Nnyue=}K0+=1VG7Q-71 zUGQ7&$clw1O03edwg_h?gTNENRLaNV`@*|Ei=I&h#UO+Wta?N02i4@L$7tHc2bC*g zet6d|Dr=h}?VrI>9hXb{$!7fvB(GUp<`t%;B9*AAsf(lHcfhHWXk#3!kNPKFCXb+I z*?=RKlRJ{T#J%*>LP|nTrW=-dw4jAv0d_SzTf!`r$D;IRCM}enmlu^os`o@>1xPx# zS(tQYcdm5f{+eX0*cIVB`QvG_Ynm!P{$_YV&#+n!E&#D=`q(ESUq--Q-C%jIiScJ~ zG+vxkH0H!vheoUAaBZLKU74_hQCkM;wIQ;En_H#IVI6^}m-eRFuFa8{wFWQ#p8!Mf zRsZ=X4qQr+&{0YKN%0(<9~en2RoKA&&|`6JZSrXfEy^SF@VN;CLGzZL6gv)iMUngq z4?^sPGi#@=&|$;zshQ0A{g~reRa!8-QTWId(-u1YU{0kz5wsnPNztoLGc1jsBU88# z%o+0iJVDu$@aD{lY;(EJ9e-_psW$)1Y9e8ICWCLt&UaRxulDjEG4h7{rViaKPfAs# zHi|kwI3L-iZ8ap3Wd1BiX9*bk6BE1OC`sgJ_93^7DJ4ks9ZU7m=G;M*8dc>-H7}*G z-)zLJ3i(ySy7~p!x-L+hkl2X(K@0Ak^*>) z&nP~~pq)w)uNu2$e&&roM`zeSF0A8V3}?k^>rnwwTbEOEZ0u%V3o_WZK%}X3W(|d~ zMLX{?>1F*-syU;O1sGOd)PP?!RMnw_8*$@#!x`g?8b*TBW5p?tt&LZ3%!3|wedIFk zJ!z2}yN9LmHtVfq%fh}2O?iIa%34X^e-#Z?@JWSy9o8MA`RJVxneqk5_eQq9#kBNS z@k~Y2z)B+a2P#?wIp`RFYeRwLa>_F^K(|%pg@2K;ITDB7P?m3OS=x#n*4Hds^<2!6 z;J_BdXeV$FAqcZf!kBS;2}-$9^Cf$vSdNiUKgT)j#j{64I)Ui?OUljZ zEccGAC7e4cX>@K|gk)<{6(8WDN4&n)I3`{GaJKEgs;?31*eW%ga>7+BVAotVHf8c| z*4^~A&4`_maGGbaOV{>QI9hJuGuX!h?)YPnNZ#5J#EwLB>dyaxXH>tgINv&1{7Tul z`{U}4yG4hEN(XETi25jRD%W_zy4PMAoV^5K~b_EN-q-mll~o8X=l@ak8Eu|%T6 z$}ZjvA=r^E^3LCZYIE0tj;<|ddor4!>z;LJ%=JK1ZO3@w3yWuQyj1ybOXW#Z1NQT% z`Owkh`vR7mRrlQ^Tk-8B%hHwVx8yeToE9CXEiMO+@bWBH0em+eKBNFwzjaW8_<)N# zzV;SAg*_`mNtK5Jx>GHx}G-LoM$h(qA2ATRYVW0 zMaL8WJ+nieInEQ4?Q+ZAVS>O8nsU+z62x&!766kF_-I!`RG$~)BOCMD$)aKU5UWZm z@oEh;q41`X>s~wr0AL6aP^M@&3Y_28gGPNGr*dN(x*z&Hb~tgND2XZr}3ez2~{9NtJuPFDlqd%Fb&h`LlFc!{psty_T)AB~sWN`8@63 zm`^VF)5qwO&OMX74836X&%gAswhTI?PHY>roVECLaL;;*QJ{n<4}ax8C+W?hn---N z?aYK8m;2#aP3ujk)&z}@TjbrN{bN|f7iFO9dMx5I!R2m9A*K@$is>eQlh+z{HO@`Q zGd%+oy9m;`AGTQQk%$uXq0-@1x7;i4Jj!krpFn9*fc11^E7dr@L*__r`jfW<)p8e1 zcTDb^bijWL@sD0;tpB^b%-Ih$aqTBnzI3boz$ZW|5E2tk^?`5?1QZ>+EC2dZUQgCPjO-apaK=50P-hS*{HN1$?WafIv-Jh~*sMB8jlU zX7|Xd&-CDO-Y8v(6$DUg)Uia{{MA|7%5Lp&NY~jq&)A^73PjwcW~1BQ@x&j@q3k_# zo#!cZ_z7UwUoy#+iln8^_#!Eb56PP|`3UCTJRYczs>^II@tS4p_4zxY6NZ{3Qe=7^ zA=*zbaB~?Tz9(g+&ZO`Os3B&Vna&Ifz@o}-&_T<>XsTeH?vt6dMsESvun|fW3|#ftoXzhz*_dT zTP}DZxk!uXku4~uv@1~dd6wmt^d8^P?zui$>g>`D+nAf(aVpJ;%ckIq_N1i5oN?^S z!s$E*<^oG8^q5g})_I%YvF6BS_$DP{?jV2gF2AS&yS`R@VNiU2)bz-;p)4uP>)B!b z0a%7C^vr>wkI{AP(ssIBjSK7a3_IZOJ(UX#XBlG*QZDOriT=fZ6NK)tVLd_V>cPoK zJrs*1fZPOn$TNM?pD(Cv#EspXh&4Qg&bP{*j`S*44xji9S4T!vwuINwOVm9LvPvW9 zaRt=%l0+gRhNjCJ2H#(kLNhC&3EUhSE`-z?wa#Kh1#sXOx02OKe5-}W;uO%}()W!b z)Jmae_^Gqxv`Mh|mvp+a2;A{*&)C>B4tO*eZTkaeXwRXc8ov5Mr5;17zLT~WUN}YH zxR0AGWF9Ul$hrWzf{?$f_hxaVQtk6ebM8;m z=kMbCqy`UmOGVZEDECS`Jq$;Z>J)ScaV?W z5G|MhH?SrDezwol4DzZQFDl7mXS~pkJ_!`&F%yL&&Tqtsc*MjASV-aSoGk0-Xi3Kco zX7mQ4ahofZ-|bVH6EPRbLdSE>rukdK6I+1R5!_>A>cZ3^zcLX_43WH>tjFiCvHl$O zSXwdO%jztAjjKOV#`Kslf3bBQ+f3WQb}cjDr#tD2^46Ih)wBJKsbfFImDEcgkGCP9SEW5&o#ECQ_n6+?>iS zO7iJN=v22jtc{dbP@QSG-`lHyWwAw4uz#njBgX008;d;7JUgqFe8f(^(1uys-B?ge z@hQa1-=S+tHzWc?O3u?jO6(d*8{@`|Echst&B2mgy59ySEmoeTSr9mm8!lk;jlM3qON>a_ zU#WXxGzR_bT>NxIYj)*U3oDPayBD>HGJg%}*$K~TFX?Ic9aLl)+fHJ@?G4WtZ{5w^ ziX7%)#tI$$eW6@~J3|Bdp7BsGf!f1;qwv+=5!OUGa-Hfe^y0P2;V1qUd3q0iMwLp&Ix72ejSjxv75bliN2m zZ~>v0_ou~fkaw9&*S_7wj|8HKG6-VM#^w+++4%p*(pk7Q{r!JmMM@fp(E`#rx{(;& zEgh25-5mqQ5T(021V)#1cXxwyNawxJ?|c6TyRMz{dY^Ni@z}1khjD39%8lJ0DJeIm zDl)0sf^iH<&ncnnA0*7}SRVwJ3(yZ>-(VxwDeYqxcv=M}+tn1C&EZs*`O+a&HkDau zzBd(;rgJP_vLrL$G`7dQQ+uKu*PNV9O1KjqToodsxoF1_xaSGv0aXqky>1-vBBHfg zn7$$!X=o8d;>0DTdr9ZVKyZG#vUAy#lNj_*g~u`*(3cJLw?~WVV6)3t#xZpw8LZQD z=)joQZLnTZX?5WnIpqQW(#AfwrAiCZ2;Aa^>~Apel7uI33U8sL*k6k#uNf|-63Obd zFwSB&@jClCeafWn-|ufx;aY7a1Q$Y08Kj5EEx2@$Y4jfif2et)2%5$y5;B05)?Req z|3SDHJ>vZ2e&-UvtBq;k&FE}}GL|1e-IYE#Vx`YepFie%y6bgP%|1AqD2&vv9rnYUfj5~2Hlt*XRqPg#%2;?qyvB%%|OjLjNr<*<3!{;=|2l1(0cS!CxTmE{fv4i}={1p(a@lhZO3_q>--#9+IF%mp>#0pzJsi?Xb zLGx7NYVt|VQ1d1Yuf#9BDbQxQo&Az{%w#9@)J_*z42l|^wM|FKhwB$QUuyEL zt?VzK8n)goHKR?AYiv&$+GtMxhN?yCnfJs%R{~RHh|(q)y24KH$z5;a2dy6QpgnAw zyJ;Co>|qZjSDK6kZN!wZfP*L;(|xx6QHB=q^W4c(ir{Ce@50SJ*hIJP*_CpkuCPyS zSJ~j2p!d28R9aut7}twBciZLgSTD)?Nv>0as55{qjbPosWfBd_4 z<<8D#6sM6CN`<|T*xuW+-I{M?xwf$xS4Z6?AAB4Y4jx&GH7vaBQ%IN93o z_)K_~0GEKN5ybjn$qK5e-8YX+I<2j>$tS37<0aNUif87y8ldiIrvNtSrZRem;%T?-$MWO6#{Jr|nqjM$SGCK#Cu@e+^ zi239XIh1l~T#=q=!B&eSjbUOPF4sem$q56vIg<;QU)*-|MFe1Z`6i}xHYkM4^gq4i zG(I?4&?MgMa-K&NXiK_spK6eQ%-N)+{^qhNe%908!%vlL&sY_fVrBA!J1YcPGtMUE zCNa68T2X4)8qsG~%@*G$PcqsBk6uA==@9$z(>HK3pX>5RET-K2F}1?@{tYt`!ak*T z0u3JXQro&G)})udLHgF=u7mu|lP^17C%9%d)?apn1I(>#_cv#{*On_817R)Q3m=b_ zy(l1!NcCjGkz6%Y<%@+wdN!U4_he?0Z1bP@cj;I9{=lFncnrAV^TXIIgyCQUX9dak zyvE0N`*lm`Id!Du{qB1k1&T|(U7Ds%^u@8g&!u|BHcB9E?HKRanM?^hozg7!)8RlX zV5sq7NFL+%#m2uhF}9VU_sTdQ4?JfW#FgG>R47TcK^P3{DYAmvGYPm{g;fNl)~i~> zQ)%tv2Ohh5xF5(xLi+F~|NQ%-+~@z9FzbE8JCt_wqA>?>;`5Ypb?lGkVa`XvvtI%h zfkE!%jau9O!X&%92{)Ta)j(6x1J7IdBcjk>%%-0EA2YPyTw zkUw-J|J@exSPYBEVh(bguvzpkYB}yc_7ob$kAdIy?sRHnIj~)#ao{++vg{$ZM=rKc zZwws(>hgd^w1sA@X1YBa0h|8|=eUin4m; za1=w1By-LS=J7l|`M0k|Ppllu;Z3JkQz3E-rRP`2B_oCd~yPdnk>8HBX?<^|x&z1rte)T#s`!FmzmM^@jz$>9}|vX+2>p_n+AR6jNM zm9db7eOGO$2hf^2=)0{1=hyDWcbcKY+)l%2-PBi-5HxK`r_|!k%QyQRF(dgcTQ4Ck z=7bZ|tA&uw^CR_n+Ho6oX>us7v-Me^)gsX=>dzhTMo>^nj+!ApF{ib}UjHVHtxYyy z=u@sbL`6^f?d8yRoE~xH@z&7*V{32=R#k2-yl~|Eedf}@)I%mZgWl2xYtne>NNdRQ zA|m0GztmUF4-bM~6uXZE)@(}JgHF^*siG8a4tMQpjgE}l7#Z zQ|EO3MrBl2CHzt!;~VB-H)rDo2kT!i)fmqP$3>p6Mws>dzvh4wPbLPqn9r*RlqK3e zX`9wwYvEbH$l!HP!Ke(n@1qjkiN4bAu1Nj~s;d5cPKNW|{ew5aez?n%jY*w$ zQoVYx`<#$Cr&nKELFZlXQ-G|~nj>RBuPIFWz1Vi}`b%}-zxqX6U!!~wE+59JyP&#} zdGr=HluAn61vP8k3C#N9T2_W{PMyESXK-lwC#T0w6DFON6U4<=wTlAW zPZ_b|R)+TyaeD|IdZBl*zXki?enTQPEVC%-NCGeDLHHSAr-43M>^9MG!P8q{ry|)l zT76DSi&Da^PW$(NeHWxFssdDWIw#jIeDJcDxjxyZj6EcSOm!uGJl=j|pP7KH%#eM- z^ct1-vvxqot8bX1bDk0R>7qI3ao=}fHWKPMr}62%1?5>zLeuK#$%2?G?wTYAz*)dY1k7;R{m~fKL zWTTBI5ilq))g@mr)s=*ue3&TgN=58-Zl z@LB<1i_MMMFRpbiI~I-i33}@O7IZf<{%mEV-B7d_=chF4qdl4}%M-4rW;4o~Xtl}J zwGzW)%08*X8EWdHGKPNk`A35U>fY;yoN0E(3BJE(>Cvkpg>#HF{yc3(ua%3wPwK%i&3y^2^2l|DVXjozgrk6+jaM>2o% zsFaTk!zyZN^nD@fN+Frl40nX@IcV#ePiYXobfLgih13; zor@!e-adc9S<7!6X%t<2;=C;ZjbnZ`@m7SuiRt<5LY_v4@f4VY>U<*g_=l?4v(J}FGj%uYid>yjLK?vZU-5({aU-1~a0oT+2u5KmKHfwgV9PihNR~T9XZ&<0x z!9e2xX&8F=nWeS|#--#&#>dUU-TuNw*VlKa5iT6hOgrqAQG#mGC>({lQuWV{o){AT zbOsrh3b1Vx2@Y2CG>5mH`5{jCdXw|L3{uffRnlOB#L-!&U2t0qS;RJhv2whi`&w!Y z8Lv^MaGX6KHm_0Wf$i?@x3>Skl!9)!<=B(B3C;w5iCPExRy~Uc7`SY{CcC$E z1W-Uq9Sq~1W^lp#n3ws|y;I)^czATYxk;BRc6i(=5FPjGKTIey*hs}DRS+*bUrg$- zNlrq*#htiqu?2kkJ*o&L@{VC_%6N)_d-xF6x;Br}W(y(DiAoIp#R$VkM>f)`_hj!$ zUx;hlEQ~9C*Ue%8XJY1)A@Cvx+9ynA>8^~jzgFK>rZMz0zI0wT7U8?iA})B@up}b- z=WCGwQFL}aE}Rp;r_h?WQs!C_xa%9nKG?Xsb6gUbm1^5uD)|nbrmpN>dc%tPrs#OOAGRb)1n!6WeVEq3>LnD-Cp2J4iQuOKmDwwuet@suz{g4CKjbk$U7N*=Q$)NhE1qug$$l;mEpDE;9` zV)|gXT5*Z*a~~#29vQadcLJW0f;Q79>U{l@Tj-s#>S}!DlBD8zBt6#_Px#!?eQsD| z@y32$B-8nC9#GpyyikiK&yy*3^h7j>7~99Kq_ zzc?+Daq%XJ?OL1c_bMrn8%nhPR{y4Ai;OGz>FmAtGQi_fN3#2j04S4TP;7jf@EJ=IKQs#4hD#EyquV1W*wDX0r_}Li z>;XsqM^oyq&Y>F42jJf%?|%lHe{~f>xWKyt{D$6aHj)LyjS{QPA`@nmScVGO&d!}M zsX{FvR~nV&rtwdb%d#r4Ro<=Bj#FQq>X+M`yrOrLrjA{?71Q#n(*@-v3%J8%UPWaY zi7A-=@*{c+S;yh259l-mckP_miB2pb!?e^OwBe;cELMTGrB~GDN@?&I6Rb|T+`aS0j>_GdsdUeH>w@URarB3jH(acd~l|;~NHGVz< z^{-UsyiSw*c4Y_P<--v-$AqVq595v@u#YXrk*&+r&dawCrD+|~0(7aIYpNGi_}No zTvCDuEZMK#4&~K~V2O8sQZs*NxU>ImybcnXQw-33DW)`6UupJH?&e)SnF&v`7@zw_ z#dS$Ws*oNr;6tLSnH9E{sb&5YZyCJ?&CCf;od`^t`@Fev!e3}^AL);kR6Czre-A~$ z^R_Nugwxm=Hu?Qc~6gJhlU?IXsP}(zn}_+Te}&tCN>17emFo=f)qEImq91?zU-swYX^^N z6iVi@U-2SrkHpN&E)_x175)xel0(kG!};f(_6oUo+G-tio}0s z7qaO46gu5Qz}0}CTg-zLRyRps5-a`HEZDa%@=c6*y}pCo1!d?uR$s{#zUd!P?RVEz zN8BIx&z>O7iKIe_V%a#P!Z2a{sX4e;|CXuJG$6NH^oN&MUdYY=Mr&Yh?`<$A0kSe7 zH5WMv?HKkZJK`zV@d!#wc$1Rkz+D@IxEZ3orR@GRkE?7U$J}Mt?Vx6#NBsVS+zMp)DkH1FW~-$9(FCB{H-5L8WXLp zc~ny58tdW#4M33OcEL}7RhZ71!!JP9_Y{$Vs8u&Mwco!niFA8ty z(jPJwl>e%RZ1(Ui+g9@hWs>91=1$W9b5nK=R#~<>aAIUqQW>{MT~AORJMLrD^F^lI z57O4QFHRdbzQ-{h{m{m7jS(m=V|qRD-r$4LMjb`Gy{Gj7nyn4q*84Z`Y)4@_ZWOHiKtwb(NCQ&<++gAUkw9!ei~O(CPXZS6*aGi zY}V4a{j_YZECFcO%+p_3YRy@}dnZ)jCLW?45Juy1a6y{2WDE|hDTkN^fJKR<4^-?y zbjcX`W4nHEe(oanx7tYMirqlUj}*8hU^pf?JRmC-9K%w8BDh(ATMZ=t=6PSK5Y_?p zxpQ0sz4Qq&n(FU6BAer2;e8xW6Uf1?_DZ8?)^8)lXO3RX$dB%(MG4)7GoBk`WpRKRh{?J`u)C|u?*d+W=!acaIuw~ zraEGWhuaXpSI4f9GiK%c!OF&BcN`u;A562!2n2c~i6)HT% z(FgE3j(Wf&qUoQQ?-u@n{?-zl804Il_=-N+_08j=w`F2QEoW<8V^t?y0IKdJ?5X2H z(qd{WXn$viF_Pg>{fK!X7 zpsrvtRp(M=_mT#x1rF9#{R&G5c(pn!ZLPKgt#{qxQc>6c3P>g5(=^*|f9{VJ*8C^afmLsiZFB7bUl~Uy261Ae1&Hg!MWy-gATP$8=(6 zvl_l#*{yLrj&MsUvMR{Sxd7i5+WIT<@UzIDkcg7QrIg7j_vfK!RxYmi&52oK=H)w_ zy}Lz|%&d=l_faxtK10vca^)BdKCaa#NjsFm2T9apDDB)%lEaxji;c;fAV0F&q=)MNVqs^JfTf7O za*CzP)zBg(46DM^t65EWulAcXaHrM4*{Wx*WHi9wsEOYc+TNjll56XZX}CTKqoFU4 z#i#zJAR&xTK=m$}DZiNG-L>LvK4zcI=ecgrDwGa0F--~FdTC;YS34CLJckop6E5jR zo<*Ze&%E5UrA`*Ca*pO1Ul#VH#Xkg`LQaua!cB6oNWZ~&BCNSW29UL!Gx?Xkcc9OaZedu zCF9Jl*%pa3t%=~+*bS7lLJ_D=`*ICiEiE~;b8>;|!g;=lNSS(iEovhwe{Qnd3s8W! z-IAZ5w4u9rGwUCfeP0@XMtTK8iz<88did4GR5sy$(EnzN?7J$#vQ=+uzEQ}Gl>}P| zhSGuOREtJTfE#mn zX?gMT%8{Dv#b@ZkeSI?U8yB{cwd(n~hr|LpY+7d0R9K09jI)s$hlyGG1dXfp6qUZr4c@&%|Oo$2^u* z-*oJs4_HOluS-@Dm?{jcIPp}XY37hB&r;p&V{tj zHgcFbgUlJ3)7Ro2E2cV_#=}t1y!Mute#WP(WqeZ@|BHP0H~{zG{_f)M zHcT33aYgl@D^0bkH6Beu2~uLA#G?|MA(cn+6JL+hFZ1 z^NCFcRAap2VuWbxM{Y_qsQ~B;!KeC9=*YPGyQE6v3|aizp8nok>#Aq7{$3qp>-VS) z(YM)+A|Ezyd5xu4IwImbv+Atit?r3QpZ|t`)H*3tEs8Ml4IMUyWGk5wRTRa7i}T8U z=>04daG}xF*ta=>G(W;WT?nG#{tV)lPe%goDmsd)LEXXziZ=0f?@fo?hKI|8KNPq$ z{h|n|;_-hsKZ|~o!Po`9VCqJk&@lriHu+=f_zXF9feE14Z0i>wc^_17pYM|^nxQp) z-*&Y0LHeEU`XdjjQo+%VpB6QxLbA$~oGe%R7szjeTx%#8Vh0OmW(Qb0f-9BwK5ugN zpAZ75#U-pb=Z^1udM6q_ZErde4MykiR>W?a^ZELSkZVY8s5Ss=G=o7z7*U`0@D73s zD)b?qzZkU@(VT`Pi4qJoxbmYZ({EQAkxrY_HDJn87mAl7=$!A%zgy;|8=(WT7>Jdx z$)f03HBZ$aaX`Cv1R>n63@kCDZ-IBWau{OYW|rqLkr;Ex!a`7fykzpg`+~M?UUW$n zZd7D<+#}yECvlNHZtZU_8BpwK8iJ&yn`YE26LQ0{Y}LyEr20HSLKarO#NY2RSg3So zfD%Xf&|e%rKDsl|S^k0~Y>xms`@M3)cbVPZ`lE&+E-7V>0%rWs{4sTYSBUvZ0E@BJ z1Qs2u3cs&aAki4(?e#fzfRx^%naTx)j&YA~{{;#& z?n)k3eA0konC7kqT#weE-DOgv;uC@g9fe8UyQMx&Hpr zz;gPMmg%(phR=x!FShBPv??t;aGr&YQq!PPA%X}LTvQ2cXR_+EX=$Qu?I|A)gDP+Em6R_w}t&82Y zy>WF-V90S`S`Oz>+c{Xjq zdr%=^Zpp|oJoZT>pa`&A;rs+oW9v)#4f`due<4x@{$XiWffdMZovWCQa^Pd^bmf>b(fUK;>#6T__mxuP0?SHZ1 zlLYY*H>D@W)a9?s00#M)TA&_8VM*$zyiyv_aKg%R+rygL+id3y{k?+?o4A-J-;_Lb z(8pOuasaMwQhf0~P-Qp^UfQY76)~XU+OgrPXBp16OwZ;18lBi7312fH2z1=ba>R%& zIIKxR0eyC%^OIU%oQ^06_Jq9^o;>5iXeTVVL?;KE;AX*U0Vj@)d3&DeqS`xJ8Sd?T zGnr^^FQ3C;4Lnyvfjwn>s zjOI=2Y9e)S273BNnx0>4TJiHMT9r<<&FJB%9rk;7*-Zt1h>N-|!-)d!(}3>^-{u&{ zy+(_jo!E&>z9dp2{lW8!7&rHgdDvs#Ug$Ju+Hp8ML+aBAd&=kw&&}Qwx&h|^nbN`^ ze!{-{3A$uMxcK^T&6F&Gzmw*}nmrcg z62zxMLP7tCL`y0@A}RZ!_ad4&QBXgKC0D1_!}>P_h%$LjYb7PvvMyU0sK?GyX3S7l z#KlDz`n-2N=gOM-$votgw|)1j7D_G=7Y}X0zyF1s&w0# z&z&boJHIlM4CU#X1xO~>R72)&Y`lz03o^cIi1&)v2jqn2##64>*{Ocn?A}RX0R0z? zM}xo0BR;Y5n@l40xh0d7R)?rd)H6`MoPr&A{G*tvkte6r3Jh8C5xyXF;Z(JfwzZKh zxO#H$-4pSv8zKXkYJIo+!NbjrZ0)Tx&Z8r#rCOB(Dx)U3l@St`^5sL~^ zrsM>EEx_$CCR6t@4tr3|CgY@Yzr34wz?I_}SvPyx0f^YvT0#QvcL>=RA}&M>20=&v zb(dz6&?8E%=pEkJ%uB#31NlBzq^X^21a^nch=e8YTMan~VWG zA`$|x2?UL-)zTvGv}OPOA)s?qa9FtU&l0S>Z9vrcQY88h;AW&_nb>;^37)& z)z8!e31{2 zV*W^SfA|%l8-txMahycxFhBTaC0-&t3V}^5Gwe;p*uu;{c47hg~PgSShq}mRHZ~Z*~N8{RO|bVYv9?Eudd6oe-22J zkvqvRhb)ZZ9v_ZV?KYz|*`+kI6j$0Y`B(R0Vp1yxvX#d;*9{}5B~?s`c*NH>KG?}* zFOT5oF_ZeMS#CGh-+p&55o|V^{dS%36|qK6IWlLbFR0a>>57Y9Ih0a2(~xPLA@2-c z?3*t4Y8WX}TZ8I>1szxprNtj%+AZGZAMLC`A|e0&DDs?E7n5KW=R<`QO@iYLGn{qA z+H4YQ%6b==}lDD>lxtXC$(xj zzO-Jl{6?xR{!2VZvm^|EzIRjn!N!)Te#lliohkQULr(4iH0mNpI&5q5M!#%d3>B-M zaG2cnWW1+XPwN&^BX2`aeWkwP`}U1vM`TH~)q3PHM6;ZA z<^&XIe=BD0?vY~Fry}~^W``(<@q&|#bhf0ta@CTW@j9Xrjqb=0fK6xK>+Q|mK{i70 zP7}~4(-4so_=-DOgS47RYYyYX|K>V^knGl{9Mk`4;bp~Z0Xya?%~$y}s8=m=Wa}dz zK=h1X{XO*}*((t)+Kp_4eu02TtqU}}KREah5DEeow0bp#Y{EbaF9h%c#**!r@4NrZ z)Og}NBGpygSZ=F1Z(MLh;HL+!33%h9gwlcem2P=gv^jfR8izaevTM&-dL}mI99?)t zp)eY6GOOs#Iz0BsQmR)I!%?6laY#Qg?c8uodeak&$MTISDPbK|%1f~ZOz?qc%_FVf z!m8~>JN{P8E54EP8_lWqTD*^qNQTs3^9{8l5|6pu8XheqT?LMQ9*Q;rqT9qwoYUyp zkpJ?1WzFFdR6mgCX(W5P;kApiQ;$Q1=-h77n}f~824k~a#JnzCg8eEpexy&lA`-&F zbJj(M_~md4&6}2wDV-j_t*WIJ#K5>L=>!_N<_msWU@Pl}s6>Mci8iVK_&$(#B=!Q^ zN!??nkP(bo&&%2HSjXcff|;4rXo7Z9X|@PclRtV@307b6A1HPb%!&IX1qL^B3rY(C zK4TT?_eTHw+y0M6v4q;Wxi>ytX6$n1nm&4m7(VQP4lau!p zf(Zo)&6HWcy+$4GwH)5TrBb9|bfzq+=wXMmc|*->P9_(2=2!hCtbww|$ofjPYmrig zPPWgwJGCtaES)S4jUnf)#tGL6@4k6#Sq_x)MQ2u8Xs(@m6HiN6f?({_=U@C9FOOUw zKCCoT1p1h3&sxMj+k}0@;8@QI`q#m{;``$S6xX-$x3Jz>zipe-7L;`HZw!EATC%=j zq4ddlh&8)}#wb(z)RLxO9X3$3$p0e396R1PQWa}viip)mtQUL{ZSp~$l%LBWWyvdSO#{ITFyZ!mC{VuYJ&&qit1znFY3h2>A zGWsI@CRbu@{jRlQX*$j68WDm1&fP{Gjkz!xc+;65XF zcOhY38Rpw?-9cYIQt#eqU;|zIy8}6ZcSo;U(gj<=aW*Q*cSalmiH0;jABC~i8wtbQ zaI9=t`l!*gcL8rlrC722F;6@r+%qqE-Lo%C5~=ivRcGU&BN6?MBL95q_;cd|ho7GI z0M-k!h0M|>n(2U30!=!6>VKrE1^?RPj_g)jC(2iH*s(_A;%Pip$f*0kdDcpA&ohX; zD(Uq7S;jRY^o>SBMxCFcy<+O6I-<83QOXRlQ6~a-oYS}c`|@pvzh*Ub z8^ACToN;~G{6Yy0y%@tbNVXl*C1;pXU-z#CqQ|VFYvK`}rhrG>jvh^%2_l*z)oE9( zL{`>_hA4sqhs-|j3vb0S**j6pd~!FB+}c_K{OiR5X5omVrnd_|KJ_bkIpRLG*tf>f zmoT9?GxAA6&K(hw+f?#wEu7G5Z*Q4@RCh-1eKpv`0Z6?9B?*#@e_b*t(fguz#VFwB zP{^UKeV`P=Skh0nIH1~Ih~JhCfB>=eSvN9~qDus%I&07*;%oriRbo7I^JRDrKp=uNj5rGHpF0pAwod!w;B8s0__OsU?fp!5hJ%3iWqOFeT^4wc#1cSlNTZs9 zDl^7q8lijN5kB*OJiJg|7bHb`1dE2L3j7mp&=N1 zm|KO(`l)_A+k!Y1dOr-jt8c6+|&oYJV*w)73iCF?y;H#v@`2}F~)=Tf7d zP;m0nY{4?zDreXrlHfpck@71@-rNt>J*LG9$brh#xixBO!nk**)U6!B&waH8B-@UT zj_NeNnax0b?Of|wgjc1b@8?surk=zMq{l=R`=ntfv=GHLQG$PrpZkzFvJ4}`ZIa!S zGX)DSkMg$B&tKeL0_gmAzfSO-L0+qLY5g|pi#9Gug?68^O1`r*9W6E*OOw{dH)95U z4T?w#_~ex-_rN3M_zz_4V;kwOcgRO#siwW@9i9ZU#y0&HO8N_)U}-S{4=m<~jt#%+bS+5LSh9%HabI1DK?$31%ba9G!H3v{;vbhg z!rxN5i&E){QJt4>eqgGhf%kI zua_*<2R$*m{g;pNDMM-%YaYVd#$Wh3S7o!Xpky6hu?G|1{SaX)3e zGrE-;kL#+7^yfAvEelU(r`T<32ZcgrReQI9u)J#H|ti-b$TM ze~5HkqVirN8Fi61Cb3g37-V2)*ZC5vnBr=2x zZdG|D1_e+ipF5zy*#ok8!~`dQ9)P|A8(n})cvox7B+6)>u2;Na9s~DiAJ~_h;IB>&>!`x5xPRR z!1~Vp`wFu1B2{SbtKQ3N*b@7>?hRMqpY%`Uyh%X#) zJ3I89`2#Wu(i+U0eUjnR64G+aQKvN{{J%fn0km zw?47B3ciXUbfh<774KT_wNL`}@=?(*y%kfH5*IjSGl$m%ReZwHAdy_L&u{n=I#-Q{ zgEHGNF-%r`z*2o98qy0l`(@1X{bZ+j#5K714Fs*JO6&ldw0HRKGp={W4Gb^_7~8;k zgTuXdoSFNIwqR%R?BA;Xm@&Q{*@kKn*?MaGDAKkNfAzy_9-e-gEIiC~hs71S zEL;2lZ)|0OCU-YuUIxaO3?^s}#F*^5f0#-Yw-vrlyUt8b;v`T}A?k7y5PJTPVoH}V z-+z2RY1Q|xQoq@W7kjjVW@BtnL4`*H2B0d;1rpKyZ2u^6_Bpo~F^5WqM|#ObJsyDv zl;)X+_kp4+W2ZNt}irfE0}om1r+dqtxRc<3iN&XG%Rsi(v7c z4(j&znZw#OObyvK)`44F@(**0b_xR+GzSKNE!1t=Ur;r=?IqropJ$-f$PECY$9lrbF>|9hhEI3bQ!_5+oV14^B9Yh!Pk8z{_LH1wFg!RV<0h|+dVTM^Q)q^PGs5!r8qTEn_G{q~UMp}#b;vV(An`RK zR4_U@+bVm$8%NJM;;(HP_9WF-ahA_#r#C=$G6~hG3AJpV4F$#(mRHLO+x;(o zGalZvZ^|0VKHl%nJMnFz;ZUi?(&NagQpxS8_Xa1IOD$syV{}eV?*=HLnCk|mQR(B7 zV#kqy*D{fWY5@24kP;w*8DlB3`RpK{yH8~L(RG$ZN;!NqMoj>`vfSYG-ML0ow$mq} zksmQYxHl@MqG&$1yyi>W9U~O3W4miT%fVL0+6#YH``xEiZ?l^@(Ee%&qY7K_FX|s~ zc%_P;BaE`z{2OOTj1Nc&6q2!oLh%QB9m2Ox4p-@M%y0@peL0cxX z20TCutzjE_wb-u1AeM@~)78}ssvjCnSAPL;8qG21UolyO515~uhCO08ov>VD(Qkc! zcbKX;BA+H0_GR7$P_r*#ipAYfK}mO3uFjMD@$KR}rjKej6H$^Kl?+BT(ku#vS7Q79 z^f}fe{CBN^JyD8{>CtH1yZ?eNWJU~slew;54kKSaVczWx>co{QhzSDU|$^hU0Dp_SSG^0EG7$I#yj zxe6`ME`IMOLo-*n)8G+ndZWRk1lNk$%vTaEspH>Q#~%GxqC1l;;o!>elet9j1NF0> z2s;6qre>k2l;jv*Y6v7Bi@`8y(IaQtOnKgTbFr zR$!~eRV>}je#0BheW)(a=@+{WuejYdo}XwD(#dnJHm@d<%0P~h?0o)CXu7FKyAPf* zCsX`HF8g>aeu;27ICOiSrSgz35h#+|8z|_=w)id9%`$7#V&1Cn2U#@*<-w+*tFF!N zDu5Xso!o;Y^T*tc>B`UwWFjrgI8PIv4dm3?{W@OpB-~{v8H`ZB`T&3*G^MP~n8~l} z8G&zFAv#sigfGDe$IbG)4p)@-ftG}>Jsf5oT*ZsPNsP_&bvGWsDG1Eh%F^)W4>I3 zw;5E2rTrnxj7Ta;;rkES#QtUk&MYQCo@RIUHue=}Ne{m>FC&?%%{vFD2tN9pgAI}0 z->s59yKbv$BP-F`cL!geMdA>?-Qduv22l%6b*R zUq5+a`+24>?La6f+awb0s@%EY20h%gq2Nu>|O9E-0RAC?X7&c!3@qeeRDqT&0qRp-*_$J z4*!x^JO@H@&8%z~kZ#+(b9++a;kXdQ&%;HEu!&`L)n8%L*6YdjIseBT24K5(6Rn@| zzVGquuWO7_(IvkG=5mgKaV(L$dYt=YY}mO+!}$F9@jAkqx63wofuiR|Ivau?GY!v7 z{r@m~A}vHF6HzGl{BtxoddEv)+4$%ZwM#Z~8}QKup)hJA73#q2k8*YrjUDIv{&{ue z>=QMoUIblmn9tv*wb_W9Id4*|b*la*IA8EMo87r9_>cA7!GtRjrHyj5#S?0zH(^q3 z+r&gFb?%xe80=s9nRH>P`&`cXLlN?7Mf%T3Y41U6$+cD5E>kkrf~U}EhV^adA)A$v zg}}y@wnlYN9P?dkD;sYxISy00sj2PAmvofjPj3!$yR+#)QN6E7KWY>SM!lt^{i zVUWTu$s@b!#?{w+^uqik|DhXJ`G8(KN&!6*Nu6&)UgK08g71^213K^HHTklxgjs1` z!_!iZa6AG8ohkG|vR`piiP7K)mSB-4TD^{RVMc1aErTBJsVc-!|F~|64 z@XfRWGhBl~NUk+MVUUKiwio2tMO0uT*J)v#ae@;|BNZbtNv?b=D!*&XKF-GMHtPKh zheTX}l?5Y7BKxa%N0i}YcywN)e=ZO@JZAfsF`fDYgyW88^2r0bAL)e9_$M8q;vq3J zJ#KHG^59-?yZSidX+Ia3mcjFzw>}+O>Tai0pGU?xwLCqSx64>=&V{QGqxUp7^EtNH zsv3htqJck%NS94}+A*>tycjoH&FORJ|o@oBjK@1drM%a%_z;hahoH>Pk<2*ClM? zY|dAv-nRD27@NjeGH@bonyG($aQp3bJ_f4iXMp5DGQNaT<4h3X< z+ccP!p{%Vzoc`m`B;Hq`K|x2x$FLCGiu+j znypw3v9+k!JBY1CRcn@Nswh%o)*eAot42gyYOjWxtyLp-?AEHSHKS_pRh05RdB6X} zH^1ijJm-0?`#SeIxpSZE%C_?Me#D>mo0%Tk-xK%ZEEnwqWP`gD7WNw3ApaAr*Qe+N za{KZc&DEG35NC=G9Z^UE|LhGSxcnaim!91xrrcQ-(jx*pe)#Pl};t{KV9v3|MkR$B#H*gr%CxCNxUm;V*PeiY+=XPYf8%sM)e+aUWy z%SeHzQcS?g#SR4FlmS$yzDTUks1(v&==1sj4hphmJ$gyP3?_!kVyf{%4j7=ZlI1UV z)-3=SGc7oBOP5*<#4)d7;U{2Tu=ra11>Wb3VrtrHjMi!6xyzw%Ev~MaJ)vQGNubsT z2J!ZREtt0li|u>8dOd$4`I86Rn8UwZ=11_nWO(z&S98hLe`c1KKi~J!anF?v)ggBF z$sXe=QeD~qk%nj=L{0Ya1nufCsy;@&)?!f zjLb6r zctiG!pz_U$oUFw4H>=z7N^^q~5G?_#sQGP{^?>D554n_6^j+#{@7#rfG*;_`8^>PS zKQ|iDY4-aBEtj)j7H^ZjuSHDFf-n7t)ibvf z$zMBKxuvC=U5iF8dx=kpUW4hUH-qaMu=T$PBXeQ>)OD2$ggV4m3yG2K?eOa(@oFxj zOxn&|#I=95ncwOA>I`1*2o%5-LeyaCdr{Jy(~IhDHGvz(rdgrbWY5DsjnLAUG$|CN z+_~dppl0@nUu{r&&|WK0ba&D&H(?Q+%JEb&)a=e>`;RBD95dc|^{wD*! zUyMp;Y;Es|*C%xA~@SQ zj@IuyL%kj=rGped)TDF^ncT0xXpS^^YM0~Ar&#Lv<@ zM2&Wp%rB*917)tF&b2bXE1? ziY45`ixX>cwXFcGZaq*Ic_Ok4?zdC`e|bD@^Jl8Kq}g&Z7QxK449x+YqE+$Qp;_tl z`6&Xa88vAt3>*Uye7z0Awh^@Ld}{64soy=|He`Unf7@QZ9Xze+O5wv+i1EH0wot5R zVVc&%C}QveulR%eKp3!ZWR%v}>2iqke$oEbG9ASy_Hdo$EHcwi0((omTe`R>X6*fa zp)9>;!mW~k(Wf>%70%F@*Gj;C4M94028v`zHs7E6vi}#*=7(2qW55tMNZy)e0&OI% z&Oc_!JkHJDlZ2mEqYJ!C0RhTwk1qaDBE^HYlIq&V4KF0!{Z=S}eHa(~f&T-4aG!i| zXynBWYmcG8-QB{J_H(YqtFpZTGEnV^NtK+sid#f-v1|U|xXCYbZnkfOBz|A$^4(V} zgeTS>?dJW!-SaZaxYH1~>+zJoT{|KZ_~X$JbEe>aV{2)~SLAH#uV_Q!nBH|9)P82X zJGvDcK74)vEOePP^nUHf)P-$c|4f<4O|+_|d|ISsZZsh)m!IfW%j1j|{^cF_H&})z zkS|jk_5k^O;?(~8tN*#c`vKcgL5I$B2}PTw!8I9<5b_rrLKY6YoAJaaCLKj-MR?(I zpn0W~DwefA#f!WUIj$Di-1COy=*<9n0F@5st+on8bAY#Fz`naMg# z&jYlFJ72vT0pXXvH>uN$V3$%l3}{+D{@)`v0dc%iagh!-bIB6!c8_{XHZiH&Q?GZc zDgM!&8PMA^C2_<~^bH0$-)aMW)3^h$1Oi=tSHtGJ(h!h4AKL$Ug52VY$;O-b{0%pW zYnN0l^Bd7ek87-f2T$JvnnDgIj#NX9=ro;;FC`QY{ODIBlf-he`3M>%$ zo;uir1Fl|7fQW->IPT0JU=ch{<;VQ#8d6b_%HAQ($Oalnb4&&h`zDcUhct(1_dTV> zFiJq137P}$ShHi1!j!T-*ONm=4i9GH4t77hw!4<>mO+2nr?hGYAZR6EUahCG>T!B> z;vG~o&azH>Yb-h>|J67~{;sm}{l@QvrlZl_fkAc}d`V#h0Os-|fG`vS@R_SE ztX!2YeXYdpvnU(ANkuy8vUKTCtIstOe27fqf->d&cC{vfrC!jyg2XdX9pIfoI)66G zm29=y{Fn-Qv<(^J8L)_oIeK+&Zw;c4pg4jQtT15O-@3UPCEGH+6?VD-G;=${<*NPj z$b*&bs~dm*8zSAU6sWU)3&k9Umnkn!BLAdv?p`kRjbEbVs+grm7qgix_ZrP9JX!Her z?@5Df^Z69J2x9V{oLgbx+iWsQZX3?}`xygP{5ZSM!!Hg1xA-jsLH{h@+e36&a038M zC?9~P%qrQg+6HFnseO@#alw1kP*GzYSmkB>OOJj~ZIn^}&tmR$_OZ=1*#}cD(B*PJ zLWw1o2JbSr49u*&G&W#r>0WJG4$EOsM1F&A$7ve&fl7_#WhXf9FeFt5W%8u3^C31X zRmRwz4e-_-`dgMHI>i8%?}@3_2CP}$?XgnJ;182sKiuDzKD*1Y6=EA@d9C49PW=M! zbX$j;62!%yywn$P#15;r8~a)d@Rnns6A(Dl#a4<HNhQ=zl`n0vp7PR|K%6 z&Uf`ap`eS5%VP6%E|{I9=?HA!!1csT-YW+;3-9~g=swj08!K@0kd0QlOv64Yx|WB# z0%^kj9dLZinXoK`qL}q&(%i(j`A*xkMG5m+%o&;7)JtBj?ItU8UUjVK_TJqopEZ5Q z+Z~<3O72qF<|7xG9xkOng%p9frek;h=)eAs&YC6B70M6DNZ7mJzct5k?Hvs|A{b$h zx?F{jgR0*6snueIUq{!)nMIl;tQJQ%4%1`mgAEW>!#wj_9-)(tf)qNd|H4W1sshfS zIQRY)H8|NySl);w)V@&hgo`iOyqx-R)j1mVLnRaLm+KHp%huRlOv57EuU(+=G zNt{P0>^BL_TCl^ovs+9my%V`xrd7ethMb(->#%cDMhyTMuO30*#GV{QaJS6aB~Z2* zq~0KYDll+Se4x@~nY5rF)4^dyYfxu&3uFyuLQ?kC=|9_>IZq2gatkBiTgX!K@Ys0A zn+(sC-@CX0-M>L~eo9S)dOcB312_Ov4+krSYKK$mwsDzPlUbF2FtWia#OU`nz6eG* z9go^*(w@S8Dr0wav=k#%MA*QAOmcgq9Rm$Sz#LEnMSD3pr=QP4^FaxHK*<+Tk5vK7w{VExYw$vU>K2$`j>JTJL#jgo-h zB@aM@DscrbgM=P#R!9xe_i1ibIwgRE75o3CWSYKAv-rN54v+zW9;Y35_qJr0{VAwr z3HNRsog-&<<7H#tRnaU>gMihhPwB=&UtIa$c1NpChd5$R{@tHWEPqh*s_ecRvZV-Zcm zWVBbbe}B4RZIj!4{+%Y-5<34+WQ_hbMK!T>ipKyzn~vXtw80_%Uo*|EvP6- z9<5!JI;Ia00CuTT?J#^UzPk29$Tlhrx>}GJ&7s4@DzV!LH`!7fD9!+)wwn>1(e?=n zI3aC=3Vks)PCx_QHT*ML!h920+6R(J@fP5P2!AYbGE*M(Oy_b#cStj$_^!}mo0 P1AKI~4YbPcScm-=eWKC$ diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/xxx-job.png b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/images/xxx-job.png deleted file mode 100644 index 6658b8e8520d2769a69e2ba913f149c235d3bd4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25256 zcmbq)g`NbW7Jz(#^ooAfbeSbk~5u(CL7b0@B?eEq;UV zz4ssZo`)D<9)2hG*?X$7iG_lKf~%^csDpy?ln42G2;({OEAwB3Bl6o5 zPaS1>lZ{0WErt6b0HcQ0gdRPa>Yo{RpMD=}U`LK*glPiCK~`Bs{+H@Q7Un72(9x@gWP#JW z*`B4V;-U`X#6tFwZ3X1`B=^RYf&7L8RN~<=ZJl$K#R#-&W80FV_jOt(BCn*aVsDU> z8d>}IT>8aA3s9P3xXpl=x_bNI7|HR5I~fT{We6i)xm#h9R0Jc(UqFJ~fU}q$!H|BG7QfopCn+IW znEw1n1;Ca7Viu-%t@EI$#wcUI(tB>7EgQ>to@Z2^Q?)&swnENDJij3eZ+59ET!&|& zRhv~zG*mPc^VXBef@ZZe-TVD)$%dXJr9ZHsGT&k#3l<4?wgT$jCn>UVWW0|LMn^ul zUXk$Bf|BU#d%p7vG8O@X{G@IwJo8?e=-?}2O4d8KiVn)?JNkH95eh5kPAHP`_P}sbh@l(_F{aC|yE(`jifVz}sr=8oVMPkXf9^@b51Z$%v zs=S#ktXw#ow`^B#?iJ?EyomY8Y}euS*h4OEj4d@!-U%s?pJ`aJu0+ZJ1lu!;XEq-u zuRm_<6K|f%BO`%ZRV5?#SIhBi#UZH;_ z_EJL;a+?y#DgD(*-wt?EOgcz*AjIL5uCQl9i*ur{i8lr09tZxCd(t^a^r&Nk!kzO8 zfV07ZuiZ8ZswL0T!9nJlncG7;_++;WWTVCS#3BZ(nZ%iq6KAz|4m9TMR&1dx$GXfR z5x()ILUh)A@TS>v@t{h6`889VlCievqK0J|ZF3jp;z4z9Bm`hByZ|-vBstE=>sOBi z&2Nl#8v%s4XtHFQYq z$3b6odS)%tU-sEeHz$qy#Z+UnR%}O-nf3lKxL?&h>hc%S#Gsd%$;*M*%0?Q5%`6)X}DyJX^FP@JjBK6DHk9)ljDy z_#D~%-RfEJkJIuqs&mrukWurzHGa@uPPJRy4oi5e)JnlDCnm$Yt=w+{8r3p7xu)p! z1S=}%n+BszpAfFED2fce1uN7%hL{v9%JAd+h2;wD4NARaW#-6ov&B95ldp@w86ky%^ z9-;6d$BF*Yezv-vY&ph|j`x5QoEFPkbN7S6A7Q%AykZgCXNj#uw7(ms!KmnzE==!> zDe|fbHPDtYvUoTcQ4@Y*!B+2#ZB5$?RB6Bkc-$6nov;FW`OSb57F)_!(|=kK#<4*& znY9b~p)Z?tE1RHYjB-tF{LduRh3blSV!RmMjmjiQ*|0$oUf2e=T<#4ml#xM+X2PtZrdvwQ)1@e! zR2wDVx)J=0!%sy~>CadTpHD8(+I-ODQ4Dj7hLK;6e{}aDVEch(o%J%wd~G(<8)6N6?S|p1 zo8K!8;Nxy?CZ!#iC@dPX?}~KlBxzj+g~mbgG-_Akq7rTgmmUZG?7u;q$Vdbp;bk-R z=m`FRNTIPY*JgBt%+LM+oO)QWPKkS*XpW1)WbuMMSD#d}Y)_t7!14Ryh1w{>S#)j+R$7PbVPMCn|YBCNezk3 zs$l?cz4+Ow;Gyf-t4wY2eU7CHw1w91+EH?UEBne$a(M&;uW6GW`2TeL&K1}R+3zzo z>$1n7$;Y%7*|sov&?e-~U=L`zWj5oG2=(QhU~GF3$INsNeCr*Z7*U@29NIjOY) zFkkAzbaQ#!IWhydpsxc+CZUF_45L&B9P_5hu?PMVMy7B8juUDXuc_U5Z`ek5W3QX( zl7-A3YX?-@lSbkkVxGrCvQJY!Z32Xd1{bCiELgh<)!bqJ@5mk(_qhW0_MhcbT70A*pKIQj; ziGkIHHb%n}ku(4OQ@I78BwOkli}{;iakDB>h!o2p6yb->CV^E~kbko@PIt$z)09B$xI*sdkGP^%K#Ei19Yo|*@tJ)NMK|>Jr{6L(R1adkdjzgI zz^V4hWb$prMBn+LpZ@})yfpvjRB0H~WS6ra1(QYwA5*v^qu5?>)cu!(k0B+w-kQG$ z%Wf9uNFB#wKYWYjbXHm-?jXYirklm#F79-$Q(LsbZpI}M`sbyATX_d@>CdxMxm|Ga z%&)#Sh-F%0qs5pASHm9V(z}5oV|WV*5d7j1yWtc1eAM>&Zb^vB_~g5mm(|-D767wk zs`Jz4Et)>45<2H#hdG^NpRrA89cwgOw0fVdGNq1Fb)jRWLc1RGw{)0LJh3+F=Z1_= z-GQ(^#dtmCYGauDA13EUIFHsF1`(|1R42ik;OwT%cg6?{0Po01o~jfF=mu22$CX0M$V9n)By{01+@e3dtEEtC~zs#e$s zO_+f&!*p^JN0&D33#j^=@;MJUM+P{>zvlFfUBZ||r}ab3=GbAY^t~Ahc;^||A_>5d zti`0`_K0LP3fsex=oj(dcw=!%sbLuazWaGesSv9~AJ~p0d!dW^svOKDBT-~TYt23! zx1VWTbXtcVTaebtXGOTP;b?*InsMN6wZ5?g8F)00=ffa$7drk5hmdC#W2-lKaj$$p z{RU(>?1Ul)P=)0(vMok^>TYagJlUb|YW|TCv2>%nvQsmd^&Zc{r*C7WttqM_vQSW) z8k4N8hbEqePry=dO+4p!8c%k@Q_CW|^=)h*Bl+)F>y8E#W~_(-rufC+{arpN}=EjuJ>StRLoN}Hu34#hr&`_;lT*Gl%06h&k@3>+pe z1o|W-ifWK@YiAp8So(^Yjma>&b5`UH&l`9XKI`Jphz?>lq&)Gk$QbkKfTE5{0878^ z=P8CzA4yGZ)P?;j=c7~{_u@0-k`Bcc>;P z>9*|ESPX_#@YQTR+Qnb;uc|=M@_!3O$muS@Xt>3c#iH#|@l^?Rlv5cizoB$hb{sbW z-EP>#4d=U6ripq+8^}-eyzD*YCwrB4HCo@+3O4dp1TcL5jbE-Jc1tU>)fGhZ9Km_tBc<55$;;sT zE&RTR6=oDjz3;3#e;^s6fGeyKwZ%{60T-K(Swd4zBqg<@)Y)?>oDd(Y?X=>3JHFEL?X%l}xL>JiM@AgugKs^2mOQte(-jT3cG1R{3b9tc5!uDHNmV zN8-c_XMerCy?(DlVngvr!n&-lGbJYrlw=Nu<&;+O@3f_U#I_8@R*$OoU_)@Io$9Sb zUtk-|#}|IGJs6Q;J>{8%nh%$K4V9iGe@bo5h4#gDb32Iw6Q4AUry=~h>8noQ=`1RG-ul%L2(ta3t>Cd{I7^T` zH6Hbnk*;i|ui$eXl}dP1g|>5*04MqV$-WghJF^OW2F_#1=dOy+eV27MoNUVRt#ObV zjCS91oVkpP@3ciyIlb?S=ujVQkc@Y85fq+&sM|8ZxwX|6TaN8JQ%6F3<#XMF4GTo? zv0g-cm%;yShELRDVoyT@-rZ-Yj;ATB^3NR=plwm&#CY;K&PSg@4UHc@odR9EpMNuPjFzDHN_!)*kT^!d&Uax_%P|pWl*<5n{%R z{?out>!2)u12j3{?ol+K^=rv}JEBW$BlcL+NL4kIYspCTEV8`bCcCe^(=U4V;h-Gg z2{j2Kp%Ici1z}V*g!|PTaLW_iNGg+!xY4q=HxXqElDE)8w z!&b$PF>nQGH+$FCZC!DjMW^eQGa_0>H9u*#v&oZ}y#0&r=&Ev$#+T44^%sMaRlH=T zn_b~X@PJM?$>a_Ji^*8u=1g&{}NCW~ij! zZePg98+uUI`Q6e_Z_)Zhkk(CT(dXRDooLWp?U zvas5Idp_fXRo~ z{!f@TxH}R2{=1pMj!Sx#b!-;tLL_%1e3q;S&ucEZE2Py`M=X<%Bhs*wW;rRG1}DO- z3|CcpJ;CMkZ-M|d#MV8CxsbMGGLa6>x|Rd(AGT46=ru0G-sSrt&hOX?J? zun{$PW*&j%GfJ?L>NW00j}`*V47mbq4!z8}*^GZGPUkhMBU{IC`SU*Qs5Vhj9_u}3 zvZO$=EwbKYs4@}SR=DU=j+UhWh4C5wN>yBgAH!e%l)Y-pF`00=$rsCf;)z`ESWYIR z6Z?sQjVHcN8nUIoq6@is9uL-b-$|mcV!Q-(H&o;HgLxqT`k7qX>BlTfAgwkGM*Q2{Z}W-=T@fyjEM_-%`_Cx0y!i3-{hVc50WN7eUHx;fX4o9SJ^j>|xXd8b;AElDZ+h@(9g0;QSkn{=Wg9=#0WwwRYrY$M=eZ2G*`ETDpWW9k& z_tJ?Oq$xB|b`u7f>MMPVA}OHlNKnTaaWffhPxL040CiTn#W!>(*Hx2%*uG}+Djp?@ z+jRDksYeZy`)U4fA8A2+y1zzrj@`G5UXpfN@RA8Y!kryrlM-G51{qptbrO#FZh7SAUnH2E!*dRAm+xSt%@pTt&o)=tU z)*fykAWLjCf4d937>C4RG%3ah${@2E$G^po%%hNKRzZd5a|HHriAw04x-5u!Y2f#e zT&~LgepT60x&|5yuJmDEXL_(X{t)YpS@$N*!?Ljd`b`(gecrbyU_1sMxQ5`9Uqg)& zY31UM2E0RWyYA&N$}+d)6N48a!GM?OUtH*0TJRVeND@|OUp(^olCU^Z;0>%+sQB#( z^)qeJA93TCI0s`A2~MUYS=i{`UWkRzfV1nXzp4EUh8en{Hs@1y438EeA=Ji7g73L2#q8q+qP9yoz9cA*;O1EJ*%dS`{ zg?lmk2;jdQH(%o3@~nn5SKsr^Y>R4nXVliPbarNmTN&DiolMF2jG1QUKtp#zg)WM0 z+hvckO8vf1Inief64)mno#Hp&966XiaJqDoOTRG{ee%`#hmk{DMU0hkwRgHz{5ndI z2*q{TDUzIgUPaO`a{RGRqc6k8{HeYub*Lodn0j9X1>NEzxlPt%_(hsWH-$`Fx=%?- zB#6XonQJYmF78yZ4(_CyPc*!{5hU6df+!+GVz4UT5q0a>#ip%hc;GfQ+;CKmyP!?L z_t-oSmIMMPdMq$d9ZKL=VrMUkT#`knv*PXR9!zzz9lcyQ`IUEj@;7{}ENNJ3+j2X* z11~{=G~sX>KCjLgITv_ayD8XAM%`y?{G4-8T!11MzS*o}a#)s(Fdy)>A+1KD-+w~o zQ&P5VD(n-p88GwQTV=RkO=ZBepj1qYnwCY06d_mcuwUm1YLsNEpiT^1D$!qR&xWfX zG?sR|3iV4tH%H$+y6LV&Zi?}(oJ7|p46?6_L^~$SCnx?0HY{}t{CKgZIaJ-`nY0vO zpD)NV8Fu1*be4_l@7^dzwx72&rio-3qzF9W2qKvO)bv%7GlG@9U^%U2>NeOm`*;)SYMlM9ync2Tlksa9{YA zN{aE1``fOcq`n^@dA6^@{b2rt8v#g&SfzIEz3jCzEJ%&{lbBhDfI?d0CO=L}MNKSN zOEi>Ttx>r~OO4XlG{nT)>#hM+U;hySBckUVAk=WEmUexqkg|k5T_; zYOOfi6FzagPfji`NJE^w@pydHGUbnF(#!dX6A!($xs9JBr5|8QkSb4bHSakstU@;XX7V|_h;ProCZjuoAloj|7BDjhP;&h z+TE~6Gj9NX!uHbxAt}Y4I!uBiJo@5Patu6vsK`8H63#~X;;Gy4le0x$=lhC+Ij;7( z1YTz06jE4;=i0~JOBh{}9@#L{&&ZLDJIV_3hIL5#@S6M)p{Xd{+y`o@(s;3xR>wY{ z8$c!-n6w(3>TT*>iu+Rkm=&%3#31(O`it`m?%6v5R~jNPey`sHJM1DT*Lei4)FE&$ z)^;O~Ku{k?oBVGi2WTS9I*UJ%%LftrypOH>-6Hh9?JpA9;)^ z247??XAfTa|{OT4I=#>aWKlYT4l98#fx4@p3ihoXdD!0V6Vc}RL_w{o~9w39=noaBT$ZvoPbZ@G6WP{#F6 z#Ahh2p&WiC0-ZLElogH0UvOvEH-%FMFwV{cYL~zmMWGagG~C4Vh|95r-UUX9g+}tQ5?4nYuoSM_;+tyIO3e{(ubEFl zmakdOu%YqW-o9Uy+t8UAu1x4(?oxnc!K#6}zng#k z&ecicE#lP=iu3;qlXceq`sF-f=5npXq_*8`gV{*cffES>%Q5pZZ3v4|D@*C1 zR8%H*L+wa@LJLy;NT1R`qMWD57FZTufLr}?XnP$mxTQd+5~&zbJW8$v8+99GlJ9s* zx7n0urNqLlUinZvxfg;1WuHnqv9_NgVG@YkT}liN$88xJ4oJvA^+;Q+Po6VQT7qbR zM4@xNAXoL2jO<5hR3y2-yJ)NYyjcv-BKi-;SpZe>CW8h^GAW>lQy0HT&nkaplQb=N z!sx)qb`5y<#Mz_Rf+oEq)R`u|a~YaYh14Kr8TTBW${QnUuPJ|zt*DH@YoBC5Hl^Os zq|{~X)#abh>y(+515{w?d*_Ag{L60n-PYYqS6y63QCx~_t-;zqvT^TD%z8jb87N_U zS4>1yr;ImtUZojw)YCBKQY83mOa>Cg;qS}5Wu&UXlK!>_Z(C0Ccx97dXIc0Qekaj# zb&+86H_y%;QQ1ved3gjHq4LGGPA10O>YEQnqL@+=LG4VzfhO+R`FxQhntgXoWVN0A zLZ&m&nb77o{x_qj}XZtbdZlJ5^6rk1vR#YNnf-NKwo>%mj1*Nptu;R zc?j!absm>sSI84d3Fjeqkq-$MYs0x+Ir?z9EB8o}hPO;$Z+xCp<(AjePK@NDRyMMj z=LwE;i%H8Ywx@F~w-#Bf*J_l1%d_J4_IF`C~MNuBA*1f;8Ti?% z=-ssdVks)BygQFy zM}9d$4~Vt=E){+s%4%}N4KKfZdQbynetHD@8C*WOwTM&v-K;+n!f3L`3FM8Hk&$Xy z%&cHcrw<_T%KK%W_HcdI{!Ke-yKHer_W}Jknf2`2*Z{Q#>QWiGV|3o0$lzoJvd;eN zWJZXJdpe14x=-T#Fkuok@uecOu~{M5>K$;dSmdk?Qyhi#7VVru;#XDz4|K&`{gz{h zR$CK<=lB7fHRhc>B$GP%GGdp=J{0AI7m0=B3$`WssV3%|#DIqBroFy_ZI;(B9l1I9 zl^M&;8}*L<<}y9oZEE=@B*N=C;`Wi>x1W5{!ixuOXI|agV;tS$xCV}gB(#im@WM#o z_xvd$BryIAdlEZtVPP4YZYbq9S_)RDqlS$vahlNOJ6zf~5IH$>%!Ax;L^>)~3w=q7 z>%+X>6N(c~2=NW-(D}>!33YJxq$cR8kJ~#ny8$&$;*EBsUQ;&k2EHfdfxVPI!hb6` zMGkHap0SehlRmDE$>?m_uB}*MPpPOW^z=auYOrcuHjCnL0j&ihBaz}U5})zs(%ebF z5lP_B(7Cx7q`p41enbV}v3dYemrp`xaeXdhH|{@&d2Sf0+P^kC>Z0!XFn)CoI&-@xIt4FmduU1$8dqOKo}tc6^!LaCVLFXT}aOvLZ9cI0J&^ zsxcxAguQH7#oL%}q*J(%Ob1lpnNNLB-Eo$*=I=_v`sYHkj9QcJ>T_f6vVDm~(Y@D_ zg1n>hkp+O~4%m25(VigZe|%P%`%BIByX@F4jIQp*g~bxGk=3h?2GV(etZBf2z4q^C zSacJ8ELk`DOEN4~8{Ep{3Ik~#ai&(dB$*1B~N??f}nC}W_UN3GP6JIpv3 zLTz3+HtA7Ug_`ds+xL8%gl)3J1frdL;9045V@T$+MZ?l#Id)ht%|Tsm9U}{JHq_M zjiQm&JgC{e{%Rt$G1gCi0Ca0w*t0C!T~%m!aBz2EirLhwgXlRi~Wkhb6ejS zLbyB1wuG8W%visXsv>cgx4_wyfLH*nup|-YN}!#9k0}15kD-jIXT_>VUOr-4wU%>R zpdMT2In}XSb{Yf-ss%`z5m?cZ#gdSjnMDI21Qp2?Oyb{m60Z(%*<-yK-ihMqSf^kZ48fk{GFQ z5XLWKhzy!g8+j&t(!X$6b+f@<6@JHTw9GCRi+vdB2E3n&n-!O0H&sQRrhol{r-qsk z8AHj|aOvBAnbT^e2EPk`aD(M;0)n z`u@7YhHMh~FMHLeo9n_87 zijX9Lw?X<|4y}PaHhG@>YI5k?F6V(xA`;69PhaI{KtDue* zyp3jK7cyyw8svU%a<#}S^#I*pw6VFDU9uvDJ8)D4HXquF{sX300INCAvu+3QXcZ;5 zbr^yk3!SQNIvAx!R8U)d8P8SJ>3KLe(Xaz|mSewXURqw#jlW`Pl39TDMf0YO5(GIF4;}hDc z$i1{a+4xt|p%r70`b{PFM(|2b5Mxt4_5%k1qL--H zouGQGWo_dI0o%RvS3tIPJV_&BPwVrg`tYg zHUT@SxIF)0U=+A8Z>LENrd>$ZrY)iEi*Ay>#k+tpXt zzel@vM_FidE4M(4W7DV@ubZ>4p}dr@UD=kW7{*QE`Z|wjuZBKPQC%cn3fC~*&C-!FchmIR$WCIhC@G>DGb}y&&wyx!xyLr=Y?fJ|goJ&<* zL__gu;DT!W`#(6+8L54!Xqb$oO57&TgM>tNUExZ0?b?~SsLqp830v6=0B6YvsuULp zD&Az>8El;ZX>oXEX>Jl0k|=BJLLrEpS)`2h_QOdDpJ^k3Ze)idHg+=N8@KRgv0BCK zQK6OSHxKOcmj(#6NfGs9q0S3IR%>~wi9yh=f_7TXqw%aBWvvj0jt%0=y8~~!#9BP6 z9*Fs13@F_3)v|OQcJK&{6;zxT7$Pc=qQ?uvei=mPn&5&CZ+&T#le@tJKrucC7q+8j zn>=v!Y+4ueF%7!8+*y`9t^BIkjafN<=46J} zBYYeP!SwF=e9h_-2UKFmA6+RQoe>MrC_7Q|bW}t>WBz3qo#~N4@!V3H#grt|u_!)E zzFnyK9xiVj_DkuF<52S9%0z3ShB&v?jI=KZJfuk>GF{V(meMS0#qSO8tz;@P-wrrM z4xTEVa_GMDi8r@`_IlT~M-)r`SgoQ?2O#K!cF~t4l!^+j+&sYn~{D#+PC* zHhU!Nc&MkF=shZ~9_{E-Xj>Vd54T^9n=zFp2HuGO>#B!Q6H9QtXGe7v4H@M&GU8gn zd)}Qo=-sYV$8;Q1Dc0D)Pt>$7HTC1PZT0T8G%3$wSdUNxtFGCAqp_f07ct(&pV~b} z!5oiT2^s9coLurVO~x_Lg4fbrC0;!zRV8}eCsiI}m-J)%`cqj5bZoM>^GUf6M$YRL z)+}B923WV83!OUxODizmd_+}zh0i~#FFb_MFn5^CwhR{tU1AQkP49(O@WHrz>? z^Tk75hj-xFp5LmBpL~d0RKK}V;}0TzB+TaXV|+Hy{@g#M-=q10W(xcLcw_8UzjQHT zvvp+^#8zqoc)Sg?1s9bHSwcK{Zd#YLBk6}pNqM;Y=DS`4k$WZoh*8i8*zB&wuHhEh zo3jhX(f2({0Dd_DjyAH3Iyy4OZM4iQ6Nyx&&qm{~9F;0C(`5$)xX~1<=3OLY@$RkM z*QgH5hgj{z_X<*9MvLM_Njg^MM`aiG%$s_>OSoU0Axf{Vb^k?;H}|u6W}9L#TBp>s zfAF<50*$T{pO7cbEQ7E1Y%rVPXPZpmjYSM;b!oJsy8I>!=+$lHJ$z_yNWmYDyMefp zcs0k{NUCOF9#b55+Ue$;%F&ISfYD>HVbg0)oOm)C`K7O~h1#YiH6rR*jG~anpjV2c z0VH+^DT&KSMQpqD4ALK~3x;+(`MbYGPAY{$Bf=2vr$(!oX^_UzcI5$_h71Ye@x?j_ z8TR((R24!6)}V)J%C>r_9hS`vr}{$Y<^{m9P-$xeYP`o<%HKrF^I{ zNZc0vR4tgbd5ca?SnQh=3!BZFSpIT8TfM|LH*6-sSJG`(?Ikt`x>gYHIz5ZAr(#Nx znMAEWKnaP=S<9SK;Y5eP`2&^AYf?zdg4!L>>Yd=@;|&)? zFAop5(Y2||umpP{ODyDF=S&uspBrpBbn)om-AN?4GWc)NeKa%vHX+>! z&10yG1Bx!pq~f;Gr(x?T`thEfF~Nj9wx1_4C6plOr{_BibL7&T5=lG|oLpBvsO)?k zGJ%?8u@Eg(ZInOI3{Um0V%`<=DhY+G>fy5e>0h~x*qtUhgD)6FA713vkkKkkkA3X> zPVG7lS5nULB08--Fa>7=)|s%G;=+0S?M9{1aMH>ei4C0ok$6-v+vw@JBoDWVsBL%);H#W1 zE_e%UgtQ31Fg6;~C?N7F{-lD@>1m}>-YK_9+mB#nv+Xq_RIUDq-s10Mt#3rC3VV7U z4+&={cNn0K0peoRV|T5OnUeLtKG zk5$r->hvBP82)&FT+H}(Aw@}7X9bsz$k|X#Gy1N)2MfzcS9gUq=^m4v+ma6zEH-G?zDVx&D~U0d0h}-l zHny^|Pp(N)wbY;VhAh0ogRMx0gnPGG<5K4f790;UT7H*ETxYf}c2Zh1PN^08i?PRg zYZGO*%ei)|4c3VVii0M$nA~;5en5QHG%f7RSabj2*0~6D;bW(MiFJXQ24Xom4+|15 ziw6ke%`W$qP1;myzGA5}uf6`CFmv0QH(q`Jg-VOJrRAbBCW8hod&qgR|1NzSDlt#* z#2571i*#HlJVoCKH0F^&gDeqv|FkRehgT~WUl-fy!$Kyf(It+aT%j&=NWEHPAUxK~ zRmj};OrTx!D3&}T%^A%471?kYiPVx}k!q0cYzziTMSmDDQQ&luKV|n;-0ll%uSdn` zL%sS=7ELB%59_TI#V?WEltivBV?r9FRTFC_s| zkJYwZ-4mRzH5t_K;cCkR9wyx&lAA1%!wH+DNWIi#U z>xk&iCm5@ap3jP=ocIsBzj!}D;l5zV?#6|JJ|+Hq@6_nQ9cJJ`x>@w@#G@i=!4k05 z*a+{hpR^Qc&Wp1h1H>ND}Z_*Oa>NLM=T`(2xQGR}Ariv64ryeiy1U{d42a0}cgc8~ym z?E}-$LwFWUyPfd8)v?FqPe?992YhIIR4~$0^ZZKqv1>Nym>8zmD})umq@DOF+QSBVFR<6t|oHwHr8R@NhP zt1rT+nYwx{gh=fDM4Ia|oXIP|aTY3qOvM(D`Ahm))a%yiDNE4-FzE2cBtT&HtQKVV zd_?I-Uk_iz23x5ZT`Z%@*L(0`Vdhywt&j{-@m903Z}6hXh8VzV9qQ{Y9oWY|4x@P1lNr^3oB%FN;(9S?xeae9w&+Pgl2K%sNUNJ0kJJ;a@ZSsv} zZyIZ#>P_7c&QfnlJ;5jc69Fmwq(H~41GwUqg2G2Cd-rPU9BO^~ijK%&qyK&od)gOQRNvfJqOuiHpSNSzUziYoaD#pO!Rs#A&r>3^=p zpM{gzkiCB|ieG~u!a@JGPBEw+xxfs-qwhe(?#2idIge3z8hOtBXvwV?wFf*2RU!Yg z>;TIN&{aBd!$zN!=$)Q!nZ#ov-kL?@SnYBXTV(0;%n&U*GCo8<^*~@!{Gcx0=FiV0 zN;w@LZf)wb7ijZ*^#YaVq%fr=z^OJ?@q2@CQHiyX)UV(9oV(4ItGyu7Fto^|jR8$k zp0r;v4sD8sHY0x9TLIgGV|&T&-0=dXIDAJ#$C1YU*8!qSY0*+>Ao~K!VhvrVkukJr29;7e2$a<|=aj)ewv|qUZ$OgUDsW{RGX8@C;OlndBR^}OAsxJ+zT#|cLzuSVxTdq0>eG(gWOuy0H>xEVrhyO!Dl(Auu1cHDUqUenD9UoV~orj$I^0N9t zhJ(4kgy{Nw8Ul7e{ux)CydU8&<4`*3T>7yP8PTEV0$P28$J1n(!vyd6Vu#w2@!tfC z+`>}*N;jC7`J^M=zs8SjX9#{_3vyd7&Z%HNyR<@j&rJ5pWp#e*Q9HmAZ_A%p>u;NP zOZ1BsBX65=<33gk#$^5Hx9hF3QM=NxWl}75y$(|VB0b+_Mt}QJs(U`6_Os_GV zqTJw~_qt&1trrVfsS!f&(Cl+*6w&|mZd*(WI>wANJ#}kCaamXq1Q*coVPpAr$IEf1 z8tcXl{5;V)70BkuG-hw@x1qr-Y;6C4#2t*KGGP{9$dalpN@Y|v^P=rUwD8whW7AAE zNik#R^|E58hVel8A2Ua`7Tkc=-(HP>A*ZvI!dbUL?-I(dXMaReQLN;8ChM5~Vodm^eGDul zB3aM7c=(|$I2E-9)hEVlp?9stoCtlsaWS{1u>`2zh-N^RH~(&DqSS!m_=A)l>$4M52junY2I zHD3oW6l>lGZb`dJLFp$%NLQAo8vGI!yE9EGcXmNK&AZ0Bs%o_x`A`R95~TJwytK3wk2;Ctb@E;M({{)+gsRQ#_QPei!XQ8DUR<*$5(g% zX5Ep|!TYg$lfk`rbry5_OV1DlNCRx~Xq>V*jf2n1tSpT*@7It*gg$losNAY7_B|A( zM4#A(;~zkeM7Vcregl3T(rO|}epdYU{?WGZjahRlD`CQI@8LB8^4cCw8yo*l{tKSq zf-#}U@(^RCvs(II z3)5-!kX(#<*0+V3wM+kwZPdwd2n=TExDuDaE}$y)-PHI0LZ30`&Mv&M z{ysO8ua@h~Rp{B0j5JL-M~NH!S(3hs6XYt% zbsE_W0QkL0i)P72dR#Fd^+ode1xhOS6rR*)ek}*NeL8_AV8ZoKkbC1Iu|=^^WQ@b9 z;r533Vc(RYga-sTYFgT7xp>S-M(+ED_paLNN3C(jETH}lkU9IKr55kF={mgCRA6;E zwE(g9YrK;+OXA9G-PhH-=G0eDm2tEGKHSi$^!Ur#(-Ag_Q%3~y?hfxD(&D^<|DtC! zwB!B{5+M{nW~TVaTzUyb7lACiRvXrZre^B{FIvSUyEJNRL&c}1gh``Ml^|sN4>3d} zICMrn25SMaUw!Bre2zJ!o9SFnRq`|%_6Xne+FsSmQZ6qZgDaP=J>vzj&qaM=Imd~9 z-V_m>%F>B`? zKFV~GQZ^Nn&w8f);vWz%zwZ_(+FIdBe`$|_{}#@58R>7GWD!uD`Uc?ozd_<`jLnzE z7O||mL{~2m!VG-OqHxa>8inMNVklMFXul=%#jjO(So$bENU( zap?Bfa`OG|{I&J^F&{|)C*D=JaGJ{_qiog8j+Bk~JI;NiVR2jO(IfiY z!0qIF%YpI1Cd?hriae@fEe7rH3jv7nWV8`pPC+5 z$@}G(YObT^4yaU11{&%juNNS%i35#5K4i4OLk$t>veuAyH^`gMzrn~YO%-##?)Z*$ z;AOBrW@kc`Vl0Uk(Rjr|^79U;VbCj5zQEE0921MAzK%X4>#_S0csLpcpHR1{LWk<> z>ZZ~)YbRQ@!JN8wvTMT@?W0YN(dz*;wBf6iY8rR*#`hyg*@ z!W*866EtOUPBw9CIT=kx&&V>ez#TVrvZN#NIkOmC$O|NB!I)X68FFzSiJSk4owVZB z`K&=M>4qlTh^4uReMIL!Lt}+E3pL)a%^lH@hB>KNkvL6rbxpw(ry6r{54$Y`ZN3qO zNMkMJCHLBvi!^SX8@U-YK&q)<=SK0^%o%Br!Qu2X44^2Ah*{&wRlmglx?&jlZ8P$e zV-(f-``o#dGN0awiSW_Rn#vFS2IYp$C-gV4$vm)FWv?U*mY<2hB z8gn*pd|sD#71L}Yvj|w#c4j7o^YC}sCwILm8cq62Ho^9*ELiz}kE?8ZbfNY&qs5rt zVlu~XFy;LXM%c!^-?B+q=;FB_V^7F>Qv>>NZ~bfvfLa)ohNr2UkL8mioI&N2T-riXnli)49R~ zi4kJR;vMuPXVC?`C+cL*#mR{eKp>w1g=2MIy(495wOCE6v5vuC^dvDGab<&1X)bM! z=R=Qr_o8j`D!#6z-n!1-I=Hlm1@XJ|hvhen8RO)J_Z+o}MgUcA@!y-f2!+S7v=x%) zegg7Oe4+!122E+_@N)d$JvFKyB|CsjFMFNs-l=W!wBQ{JGsE3wWK(-;1V@gS0zgRCU9@vmRB9!WdmK^mu?YJL&m

=r^c0~RiqcFtTmEmnoete&)O&? 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 diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/lib/bootstrap/css/bootstrap.min.css b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/lib/bootstrap/css/bootstrap.min.css deleted file mode 100644 index ed3905e0e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/wwwroot/lib/bootstrap/css/bootstrap.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/GlobalUsings.cs deleted file mode 100644 index dc76af956..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/GlobalUsings.cs +++ /dev/null @@ -1,16 +0,0 @@ -// Global using directives - -global using System; -global using System.Threading.Tasks; -global using Lion.AbpPro.BasicManagement; -global using Lion.AbpPro.DataDictionaryManagement; -global using Lion.AbpPro.LanguageManagement; -global using Lion.AbpPro.NotificationManagement; -global using Volo.Abp.Application.Services; -global using Volo.Abp.Authorization.Permissions; -global using Volo.Abp.DependencyInjection; -global using Volo.Abp.Identity; -global using Volo.Abp.Localization; -global using Volo.Abp.Modularity; -global using Volo.Abp.ObjectExtending; -global using Volo.Abp.Threading; \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Jobs/IRecurringJob.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Jobs/IRecurringJob.cs deleted file mode 100644 index 47d2d0a61..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Jobs/IRecurringJob.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace MyCompanyName.MyProjectName.Jobs -{ - public interface IRecurringJob : ITransientDependency - { - ///

- /// 执行任务 - /// - /// - Task ExecuteAsync(); - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj deleted file mode 100644 index d2d5f9ad7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyCompanyName.MyProjectName.Application.Contracts.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - - net8.0 - MyCompanyName.MyProjectName - - - - - - - - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameApplicationContractsModule.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameApplicationContractsModule.cs deleted file mode 100644 index 35c0e2cdb..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameApplicationContractsModule.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - [DependsOn( - typeof(MyProjectNameDomainSharedModule), - typeof(AbpObjectExtendingModule), - typeof(BasicManagementApplicationContractsModule), - typeof(NotificationManagementApplicationContractsModule), - typeof(DataDictionaryManagementApplicationContractsModule), - typeof(LanguageManagementApplicationContractsModule) - )] - public class MyProjectNameApplicationContractsModule : AbpModule - { - public override void PreConfigureServices(ServiceConfigurationContext context) - { - MyProjectNameDtoExtensions.Configure(); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameDtoExtensions.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameDtoExtensions.cs deleted file mode 100644 index 048861973..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/MyProjectNameDtoExtensions.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - public static class MyProjectNameDtoExtensions - { - private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); - - public static void Configure() - { - OneTimeRunner.Run(() => - { - /* You can add extension properties to DTOs - * defined in the depended modules. - * - * Example: - * - * ObjectExtensionManager.Instance - * .AddOrUpdateProperty("Title"); - * - * See the documentation for more: - * https://docs.abp.io/en/abp/latest/Object-Extensions - */ - }); - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Permissions/MyProjectNamePermissionDefinitionProvider.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Permissions/MyProjectNamePermissionDefinitionProvider.cs deleted file mode 100644 index 3d13b2e8e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Permissions/MyProjectNamePermissionDefinitionProvider.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace MyCompanyName.MyProjectName.Permissions -{ - public class MyProjectNamePermissionDefinitionProvider : PermissionDefinitionProvider - { - public override void Define(IPermissionDefinitionContext context) - { - - - - } - - private static LocalizableString L(string name) - { - return LocalizableString.Create(name); - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Permissions/MyProjectNamePermissions.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Permissions/MyProjectNamePermissions.cs deleted file mode 100644 index 38ff13ba6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/Permissions/MyProjectNamePermissions.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace MyCompanyName.MyProjectName.Permissions -{ - public static class MyProjectNamePermissions - { - - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/GlobalUsings.cs deleted file mode 100644 index 4acf2d156..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/GlobalUsings.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Global using directives - -global using System; -global using System.Collections.Generic; -global using System.Linq; -global using System.Threading.Tasks; -global using Lion.AbpPro.BasicManagement; -global using Lion.AbpPro.DataDictionaryManagement; -global using Lion.AbpPro.LanguageManagement; -global using Lion.AbpPro.NotificationManagement; -global using MyCompanyName.MyProjectName.FreeSqlRepository; -global using MyCompanyName.MyProjectName.Permissions; -global using Microsoft.AspNetCore.Authorization; -global using Microsoft.Extensions.Configuration; -global using Volo.Abp.Application.Services; -global using Volo.Abp.AutoMapper; -global using Volo.Abp.BackgroundJobs.Hangfire; -global using Volo.Abp.DependencyInjection; -global using Volo.Abp.Modularity; -global using Profile = AutoMapper.Profile; \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/Jobs/TestJob.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/Jobs/TestJob.cs deleted file mode 100644 index 040eae420..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/Jobs/TestJob.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace MyCompanyName.MyProjectName.Jobs -{ - public class TestJob : IRecurringJob - { - public Task ExecuteAsync() - { - Console.WriteLine($"job 测试- {DateTime.Now}"); - return Task.CompletedTask; - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj deleted file mode 100644 index d69edf816..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj +++ /dev/null @@ -1,27 +0,0 @@ - - - - - net8.0 - MyCompanyName.MyProjectName - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameAppService.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameAppService.cs deleted file mode 100644 index bd67dcddb..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameAppService.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - /* Inherit your application services from this class. - */ - public abstract class MyProjectNameAppService : ApplicationService - { - protected MyProjectNameAppService() - { - LocalizationResource = typeof(MyProjectNameResource); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationAutoMapperProfile.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationAutoMapperProfile.cs deleted file mode 100644 index d39e6a5f4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationAutoMapperProfile.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - public class MyProjectNameApplicationAutoMapperProfile : Profile - { - public MyProjectNameApplicationAutoMapperProfile() - { - - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationModule.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationModule.cs deleted file mode 100644 index bbc5b2e90..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyProjectNameApplicationModule.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - [DependsOn( - typeof(MyProjectNameDomainModule), - typeof(MyProjectNameApplicationContractsModule), - typeof(BasicManagementApplicationModule), - typeof(NotificationManagementApplicationModule), - typeof(DataDictionaryManagementApplicationModule), - typeof(LanguageManagementApplicationModule), - typeof(NotificationManagementApplicationModule), - typeof(MyProjectNameFreeSqlModule) - )] - public class MyProjectNameApplicationModule : AbpModule - { - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => - { - options.AddMaps(); - }); - - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/Properties/AssemblyInfo.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/Properties/AssemblyInfo.cs deleted file mode 100644 index 485087e5b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Application/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,2 +0,0 @@ -using System.Runtime.CompilerServices; -[assembly:InternalsVisibleToAttribute("MyCompanyName.MyProjectName.Application.Tests")] diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/DbMigratorHostedService.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/DbMigratorHostedService.cs deleted file mode 100644 index 3d79ea7bd..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/DbMigratorHostedService.cs +++ /dev/null @@ -1,47 +0,0 @@ -using Volo.Abp.Data; - -namespace MyCompanyName.MyProjectName.DbMigrator -{ - public class DbMigratorHostedService : IHostedService - { - private readonly IHostApplicationLifetime _hostApplicationLifetime; - private readonly IConfiguration _configuration; - private readonly IHostEnvironment _hostEnvironment; - public DbMigratorHostedService(IHostApplicationLifetime hostApplicationLifetime, - IConfiguration configuration, IHostEnvironment hostEnvironment) - { - _hostApplicationLifetime = hostApplicationLifetime; - _configuration = configuration; - _hostEnvironment = hostEnvironment; - } - - public async Task StartAsync(CancellationToken cancellationToken) - { - using (var application = await AbpApplicationFactory.CreateAsync(options => - { - options.Services.ReplaceConfiguration(_configuration); - options.UseAutofac(); - options.Services.AddLogging(c => c.AddSerilog()); - // https://github.com/abpframework/abp/pull/15208 - options.AddDataMigrationEnvironment(); - })) - { - await application.InitializeAsync(); - var conn = _configuration.GetValue("ConnectionStrings:Default"); - Console.WriteLine("ConnectionStrings:" + conn); - var s = _hostEnvironment.EnvironmentName; - Console.WriteLine("EnvironmentName:" + s); - await application - .ServiceProvider - .GetRequiredService() - .MigrateAsync(); - - await application.ShutdownAsync(); - - _hostApplicationLifetime.StopApplication(); - } - } - - public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Dockerfile b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Dockerfile deleted file mode 100644 index 322f8f344..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM mcr.microsoft.com/dotnet/aspnet:8.0 - -# 创建目录 -RUN mkdir /app - -COPY publish /app - -# 设置工作目录 -WORKDIR /app - -# 设置时区 .net6 才有这个问题 -ENV TZ=Asia/Shanghai - -# 设置环境变量 -ENV ASPNETCORE_ENVIRONMENT=Production - -ENTRYPOINT ["dotnet", "MyCompanyName.MyProjectName.DbMigrator.dll"] - - diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/GlobalUsings.cs deleted file mode 100644 index 4f12f5b62..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/GlobalUsings.cs +++ /dev/null @@ -1,19 +0,0 @@ -// Global using directives - -global using System; -global using System.IO; -global using System.Threading; -global using System.Threading.Tasks; -global using MyCompanyName.MyProjectName.Data; -global using MyCompanyName.MyProjectName.EntityFrameworkCore; -global using Microsoft.Extensions.Configuration; -global using Microsoft.Extensions.DependencyInjection; -global using Microsoft.Extensions.Hosting; -global using Microsoft.Extensions.Logging; -global using Serilog; -global using Serilog.Events; -global using Volo.Abp; -global using Volo.Abp.Autofac; -global using Volo.Abp.BackgroundJobs; -global using Volo.Abp.Localization; -global using Volo.Abp.Modularity; \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj deleted file mode 100644 index 36588ff2c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj +++ /dev/null @@ -1,34 +0,0 @@ - - - - - Exe - net8.0 - - - - - - - - - - - - - - - - - - - - - - - - Always - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs deleted file mode 100644 index a4ab1356f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyProjectNameDbMigratorModule.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace MyCompanyName.MyProjectName.DbMigrator -{ - [DependsOn( - typeof(AbpAutofacModule), - typeof(MyProjectNameEntityFrameworkCoreModule), - typeof(MyProjectNameApplicationContractsModule) - )] - public class MyProjectNameDbMigratorModule : AbpModule - { - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => options.IsJobExecutionEnabled = false); - ConfigureLocalization(); - } - - /// - /// 多语言配置 - /// - private void ConfigureLocalization() - { - Configure(options => - { - options.Languages.Add(new LanguageInfo("ar", "ar", "العربية")); - options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); - options.Languages.Add(new LanguageInfo("en", "en", "English")); - options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)")); - options.Languages.Add(new LanguageInfo("fr", "fr", "Français")); - options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); - options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); - options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); - options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); - options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); - options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); - options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsch")); - options.Languages.Add(new LanguageInfo("es", "es", "Español")); - }); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs deleted file mode 100644 index 38c837164..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs +++ /dev/null @@ -1,45 +0,0 @@ -namespace MyCompanyName.MyProjectName.DbMigrator -{ - class Program - { - static async Task Main(string[] args) - { - Log.Logger = new LoggerConfiguration() - .MinimumLevel.Information() - .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) - .MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning) -#if DEBUG - .MinimumLevel.Override("MyCompanyName.MyProjectName", LogEventLevel.Debug) -#else - .MinimumLevel.Override("MyCompanyName.MyProjectName", LogEventLevel.Information) -#endif - .Enrich.FromLogContext() - .WriteTo.Async(c => c.File("Logs/logs.txt")) - .WriteTo.Async(c => c.Console()) - .CreateLogger(); - - await CreateHostBuilder(args).RunConsoleAsync(); - } - - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureLogging((context, logging) => logging.ClearProviders()) - .ConfigureAppConfiguration - ( - otpions => - { - var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - - var appSettingFileName = "appsettings.json"; - if (!environment.IsNullOrWhiteSpace()) - appSettingFileName = $"appsettings.{environment}.json"; - - otpions.AddJsonFile(appSettingFileName, optional: true); - } - ) - .ConfigureServices((hostContext, services) => - { - services.AddHostedService(); - }); - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json deleted file mode 100644 index 12bc0f07a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ConnectionStrings": { - "Default": "Data Source=localhost;Port=3306;Database=MyCompanyNameMyProjectNameDB;uid=root;pwd=1q2w3E*;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true" - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/tempkey.rsa b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/tempkey.rsa deleted file mode 100644 index 494c2013e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/tempkey.rsa +++ /dev/null @@ -1,13 +0,0 @@ -{ - "KeyId": "f788zGVUZh9H-HbWL1S-Mg", - "Parameters": { - "D": "F19hbC5PLO872DszGiJnVoU55ee7XGXmNf0KEKndJ/uGBv5lWklXA0QF80h1ytWXde0jV5isQPB1t7mPhRQlDoDTkywLi1CeOgBPbxzHEfLjZZ5c4olfeX0IJX9BDqgUntY0H1a/+Om/eDu4OZUz3EIJFFZBgz46YZSyTT6ZDvAEdpC/o66sNJmxvJIp+8zVoVDSqBUzxmc+oEamXLg7r2jdymxJMxau1kQFxEGLOrJnNxGsEe8UrYA3qSsm8m/Xg4uOh7RYgnuEEt88+KTvRq+CAMWhN3YNLtOJ3NmXowwE7e1Ma+jih9+UVfxZn14P5+SOJbQ2bYV2sCV+2vBiCQ==", - "DP": "oPiGO/qdOQfFEAS9fMInQnsrNylIZVpDYEVoDJ6/jQfE/IpuwxGcmsaGvCob3SKxZiJRLCWpwJYo1hCh/JOSVGWMkVyELky56nbbkkV5ymKLSGZ4JoetdQs+GchnPdR+k2P9Ij1Kjk13ylubN3htzNhcBASJpOfSEv5pPVzGKX0=", - "DQ": "z6imxLABHkyftbfUUtpeOlPanEHgpuIjmUdp3T1Ju1jziE63UEhuj0GPAXOF17uYxixwYE8JhOJ7+TyIK9oZeI3zH2OzJqQh8f5PCQ/E+0ULXZDeNV/ShDLCTufu3Fis9Rt64uTp/H/l21oMQ79jc0ysa8DTz1ReJLRc5qjL41U=", - "Exponent": "AQAB", - "InverseQ": "ieZcvSt5XYukKJKhXpv5Dm/1RD7iH88cZnhLSTEVTMoOUHoYWmApY5pNLGahbfjA9bxnkBWDYex/i7wE9uNNY5CsA6ovUaQLVJDt3kHvR9W+9QtN8D6jjG2TuRbbOdEg4RqhfjUaDfDIgTJX2Wxc8U98FOvOyGw1HzwUPFZKecM=", - "Modulus": "vk4z1Bmtmbo+gxITcY+FIlXzcO2wTOGlOXK5GMYj/6PUMFt7lbqkc72AkPsrAo5/JE8LYLhWj7fzSKbjvtowHCz5m2t+FlUYmuiKpvvnJsTqvQrckNlbZ1nm071q5PhP3Dar/OksfBhPtAX+c3+NjDnM/w53ccJJNaBDO/s9JYoN7vH5n6ed1pMSK71hmg4MPsxChcnc1f1PpnG2mqyJ253+GEUbj/kRyeBSmCCr9aadov2ZzxIKVaFNagJEHOzanQmorSLpP25GfOHCuy27Zkef94V/qU9elzjbH4uIKslVGx5T6H99TYh0sUGu11NytYJa5WNAZWow95CzurC2vw==", - "P": "4GMCQy+XTNzR5TsgFcdAZv2K6TcQR13fHVvPoxQp/b32V5YUJOBFEUAtqociy5ro4+KzpXP5WPSk1ZtznGKuNZyLq8gTnhpB3rwd0sdo4zxKnQ5nu+n1UhlhWNxg5A9V5TaciUAyPrHWJfLoYTQWygNTgJELQH5zZXi2ihC2uiU=", - "Q": "2R36pamnLAJggkPJxiW5qH6HizZ+bkQVg0BBftMLzkAM8Y9CwTW75GRUzGEJFpMckkw0GZSYb1Uwl3DVUpkcQ8LZ91IPYdPpDlYUshhIxl184M55pnO14besKxJtMZ64zhHKVAR2pBMO0n6W4/1iBXkkQqyPViJxdfvXPJMBbhM=" - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/GlobalUsings.cs deleted file mode 100644 index 4146a61f8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/GlobalUsings.cs +++ /dev/null @@ -1,39 +0,0 @@ -// Global using directives - -global using System; -global using System.Collections.Generic; -global using System.ComponentModel.DataAnnotations; -global using System.Linq; -global using System.Reflection; -global using System.Text; -global using System.Threading.Tasks; -global using Lion.AbpPro.BasicManagement; -global using Lion.AbpPro.BasicManagement.Localization; -global using Lion.AbpPro.Core; -global using Lion.AbpPro.DataDictionaryManagement; -global using Lion.AbpPro.LanguageManagement; -global using Lion.AbpPro.NotificationManagement; -global using Microsoft.Extensions.DependencyInjection; -global using Microsoft.Extensions.Localization; -global using Volo.Abp; -global using Volo.Abp.AuditLogging; -global using Volo.Abp.BackgroundJobs; -global using Volo.Abp.Data; -global using Volo.Abp.DependencyInjection; -global using Volo.Abp.FeatureManagement; -global using Volo.Abp.Identity; -global using Volo.Abp.Identity.Localization; -global using Volo.Abp.Localization; -global using Volo.Abp.Localization.ExceptionHandling; -global using Volo.Abp.Localization.Resources.AbpLocalization; -global using Volo.Abp.Modularity; -global using Volo.Abp.ObjectExtending; -global using Volo.Abp.PermissionManagement; -global using Volo.Abp.SettingManagement; -global using Volo.Abp.SettingManagement.Localization; -global using Volo.Abp.TenantManagement; -global using Volo.Abp.Threading; -global using Volo.Abp.Timing.Localization.Resources.AbpTiming; -global using Volo.Abp.Validation; -global using Volo.Abp.Validation.Localization; -global using Volo.Abp.VirtualFileSystem; \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ar.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ar.json deleted file mode 100644 index 3e5227a91..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ar.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "culture": "ar", - "texts": { - "Menu:Home": "الرئيسية", - "Welcome": "مرحبا", - "LongWelcomeMessage": "مرحبا بكم في التطبيق. هذا مشروع بدء تشغيل يعتمد على إطار عمل ABP. لمزيد من المعلومات ، يرجى زيارة abp.io." - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/cs.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/cs.json deleted file mode 100644 index 5a0bbf613..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/cs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "culture": "cs", - "texts": { - "Menu:Home": "Úvod", - "Welcome": "Vítejte", - "LongWelcomeMessage": "Vítejte v aplikaci. Toto je startovací projekt založený na ABP frameworku. Pro více informací, navštivte abp.io." - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/de-DE.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/de-DE.json deleted file mode 100644 index aca4528c7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/de-DE.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "culture": "de-DE", - "texts": { - "Menu:Home": "Home", - "Welcome": "Willkommen", - "LongWelcomeMessage": "Willkommen bei der Anwendung. Dies ist ein Startup-Projekt, das auf dem ABP-Framework basiert. Weitere Informationen finden Sie unter abp.io." - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en-GB.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en-GB.json deleted file mode 100644 index d2ca0793a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en-GB.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "culture": "en-GB", - "texts": { - "Menu:Home": "Home", - "Welcome": "Welcome", - "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io." - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json deleted file mode 100644 index 9a176ff38..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "culture": "en", - "texts": { - "Menu:Home": "Home", - "Welcome": "Welcome", - "Test": "Test", - "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io.", - "Permission:Query": "Query", - "Permission:Create": "Create", - "Permission:Update": "Update", - "Permission:Delete": "Delete", - "Permission:Export": "Export", - "Permission:Enable": "Enable|Disable", - "Permission:SystemManagement": "SystemManagement", - "Permission:AuditLogManagement": "AuditLog", - "Permission:HangfireManagement": "BackgroundTask", - "Permission:CapManagement": "IntegratedEvent", - "Permission:ESManagement": "ESManagement", - "Permission:SettingManagement": "SettingManagement", - "Permission:OrganizationUnitManagement": "OrganizationUnitManagement", - "Setting.Group.System": "System", - "Setting.Group.Other": "Other", - "DisplayName:Setting.Group.Other.Github": "Github", - "Description:Setting.Group.Other.Github": "Github", - "Enum:TestType:Created:1":"Created", - "Enum:TestType:Cancel:1":"Cancel", - "Enum:TestType:Delete:1":"Delete" - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/es.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/es.json deleted file mode 100644 index 31b4b59e2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/es.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "culture": "es", - "texts": { - "Menu:Home": "Inicio", - "Welcome": "Bienvenido", - "LongWelcomeMessage": "Bienvenido a la aplicación, este es un proyecto base basado en el framework ABP. Para más información, visita abp.io." - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/fr.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/fr.json deleted file mode 100644 index e76eac0c7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/fr.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "culture": "fr", - "texts": { - "Menu:Home": "Accueil", - "Welcome": "Bienvenue", - "LongWelcomeMessage": "Bienvenue dans l'application. Il s'agit d'un projet de démarrage basé sur le framework ABP. Pour plus d'informations, visitez abp.io." - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/hu.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/hu.json deleted file mode 100644 index c7b6a33a0..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/hu.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "culture": "hu", - "texts": { - "Menu:Home": "Kezdőlap", - "Welcome": "Üdvözlöm", - "LongWelcomeMessage": "Üdvözöljük az alkalmazásban. Ez egy ABP keretrendszeren alapuló startup projekt. További információkért látogasson el az abp.io oldalra." - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/nl.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/nl.json deleted file mode 100644 index 9ba8da474..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/nl.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "culture": "nl", - "texts": { - "Menu:Home": "Home", - "Welcome": "Welkom", - "LongWelcomeMessage": "Welkom bij de applicatie. Dit is een startup-project gebaseerd op het ABP-framework. Bezoek abp.io voor meer informatie." - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/pl-PL.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/pl-PL.json deleted file mode 100644 index 33412f307..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/pl-PL.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "culture": "pl-PL", - "texts": { - "Menu:Home": "Home", - "Welcome": "Witaj", - "LongWelcomeMessage": "Witaj w aplikacji. To jest inicjalny projekt bazujący na ABP framework. Po więcej informacji odwiedź stronę abp.io." - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/pt-BR.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/pt-BR.json deleted file mode 100644 index 8c818a07a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/pt-BR.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "culture": "pt-BR", - "texts": { - "Menu:Home": "Principal", - "Welcome": "Seja bem-vindo!", - "LongWelcomeMessage": "Bem-vindo a esta aplicação. Este é um projeto inicial baseado no ABP framework. Para mais informações, visite abp.io." - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ru.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ru.json deleted file mode 100644 index 8464e4434..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ru.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "culture": "ru", - "texts": { - "Menu:Home": "Главная", - "Welcome": "Добро пожаловать", - "LongWelcomeMessage": "Добро пожаловать в приложение. Этот запущенный проект основан на фреймворке ABP. Для получения дополнительной информации посетите сайт abp.io." - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sl.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sl.json deleted file mode 100644 index a066ef26b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sl.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "culture": "sl", - "texts": { - "Menu:Home": "Domov", - "Welcome": "Dobrodošli", - "LongWelcomeMessage": "Dobrodošli v aplikaciji. To je začetni projekt na osnovi okolja ABP. Za več informacij obiščite abp.io." - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json deleted file mode 100644 index 2cc911e48..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "culture": "tr", - "texts": { - "Menu:Home": "Ana sayfa", - "Welcome": "Hoşgeldiniz", - "LongWelcomeMessage": "Uygulamaya hoşgeldiniz. Bu, ABP framework'ü üzerine bina edilmiş bir başlangıç projesidir. Daha fazla bilgi için abp.io adresini ziyaret edebilirsiniz." - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/vi.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/vi.json deleted file mode 100644 index c115a3572..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/vi.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "culture": "vi", - "texts": { - "Menu:Home": "Trang chủ", - "Welcome": "Chào mừng bạn", - "LongWelcomeMessage": "Chào mừng bạn đến ứng dụng. Đây là một dự án khởi nghiệp dựa trên khung ABP. Để biết thêm thông tin, hãy truy cập abp.io." - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hans.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hans.json deleted file mode 100644 index 497f63ef1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hans.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "culture": "zh-Hans", - "texts": { - "Menu:Home": "首页", - "Welcome": "欢迎", - "Test": "测试", - "LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 abp.io.", - "Permission:Query": "查询", - "Permission:Create": "创建", - "Permission:Update": "编辑", - "Permission:Delete": "删除", - "Permission:Export": "导出", - "Permission:Enable": "启用|禁用", - "Permission:AuditLogManagement": "审计日志", - "Permission:SystemManagement": "系统管理", - "Permission:HangfireManagement": "后台任务", - "Permission:CapManagement": "集成事件", - "Permission:ESManagement": "ES日志", - "Permission:SettingManagement": "设置管理", - "Permission:OrganizationUnitManagement": "组织结构管理", - - "Setting.Group.System": "系统", - "Setting.Group.Other": "其它", - "DisplayName:Setting.Group.Other.Github": "Github", - "Description:Setting.Group.Other.Github": "Github", - "Enum:TestType:Created:1":"创建", - "Enum:TestType:Cancel:1":"取消", - "Enum:TestType:Delete:1":"删除" - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hant.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hant.json deleted file mode 100644 index 7622bcf6a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/zh-Hant.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "culture": "zh-Hant", - "texts": { - "Menu:Home": "首頁", - "Welcome": "歡迎", - "LongWelcomeMessage": "歡迎來到此應用程式. 這是一個基於ABP框架的起始專案. 有關更多訊息, 請瀏覽 abp.io.", - "Permissions:Query": "查询", - "Permissions:Create": "创建", - "Permissions:Update": "更新", - "Permissions:Delete": "删除", - "Permissions:Enable": "启用|禁用", - "Permissions:AuditLogManagement": "审计日志" - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectNameResource.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectNameResource.cs deleted file mode 100644 index b48d5f53d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectNameResource.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - [LocalizationResourceName("MyProjectName")] - public class MyProjectNameResource - { - - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs deleted file mode 100644 index 4023787f6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace MyCompanyName.MyProjectName.MultiTenancy -{ - public static class MultiTenancyConsts - { - /* Enable/disable multi-tenancy easily in a single point. - * If you will never need to multi-tenancy, you can remove - * related modules and code parts, including this file. - */ - public const bool IsEnabled = true; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj deleted file mode 100644 index 3754962cd..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - net8.0 - MyCompanyName.MyProjectName - true - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainErrorCodes.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainErrorCodes.cs deleted file mode 100644 index 68e823b6f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainErrorCodes.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - public static class MyProjectNameDomainErrorCodes - { - - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedConsts.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedConsts.cs deleted file mode 100644 index f0d1e2c09..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedConsts.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace MyCompanyName.MyProjectName; - -public class MyProjectNameDomainSharedConsts -{ - /// 名称空间 - public const string NameSpace = "MyCompanyName.MyProjectName"; - /// 默认语言 - public const string DefaultCultureName = "zh-Hans"; -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedModule.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedModule.cs deleted file mode 100644 index d3add1c3b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedModule.cs +++ /dev/null @@ -1,44 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - [DependsOn( - typeof(BasicManagementDomainSharedModule), - typeof(NotificationManagementDomainSharedModule), - typeof(DataDictionaryManagementDomainSharedModule), - typeof(LanguageManagementDomainSharedModule), - typeof(AbpProCoreModule) - )] - public class MyProjectNameDomainSharedModule : AbpModule - { - public override void PreConfigureServices(ServiceConfigurationContext context) - { - MyProjectNameGlobalFeatureConfigurator.Configure(); - MyProjectNameModuleExtensionConfigurator.Configure(); - } - - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => - { - options.FileSets.AddEmbedded(MyProjectNameDomainSharedConsts.NameSpace); - }); - - Configure(options => - { - options.Resources - .Add(MyProjectNameDomainSharedConsts.DefaultCultureName) - .AddVirtualJson("/Localization/MyProjectName") - .AddBaseTypes(typeof(BasicManagementResource)) - .AddBaseTypes(typeof(AbpTimingResource)); - - options.DefaultResourceType = typeof(MyProjectNameResource); - }); - - Configure(options => - { - options.MapCodeNamespace(MyProjectNameDomainSharedConsts.NameSpace, typeof(MyProjectNameResource)); - }); - } - - - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameGlobalFeatureConfigurator.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameGlobalFeatureConfigurator.cs deleted file mode 100644 index 8bb82664b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameGlobalFeatureConfigurator.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - public static class MyProjectNameGlobalFeatureConfigurator - { - private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); - - public static void Configure() - { - OneTimeRunner.Run(() => - { - /* You can configure (enable/disable) global features of the used modules here. - * - * YOU CAN SAFELY DELETE THIS CLASS AND REMOVE ITS USAGES IF YOU DON'T NEED TO IT! - * - * Please refer to the documentation to lear more about the Global Features System: - * https://docs.abp.io/en/abp/latest/Global-Features - */ - }); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameModuleExtensionConfigurator.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameModuleExtensionConfigurator.cs deleted file mode 100644 index 487fd9e94..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameModuleExtensionConfigurator.cs +++ /dev/null @@ -1,67 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - public static class MyProjectNameModuleExtensionConfigurator - { - private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); - - public static void Configure() - { - OneTimeRunner.Run(() => - { - ConfigureExistingProperties(); - ConfigureExtraProperties(); - }); - } - - private static void ConfigureExistingProperties() - { - /* You can change max lengths for properties of the - * entities defined in the modules used by your application. - * - * Example: Change user and role name max lengths - - IdentityUserConsts.MaxNameLength = 99; - IdentityRoleConsts.MaxNameLength = 99; - - * Notice: It is not suggested to change property lengths - * unless you really need it. Go with the standard values wherever possible. - * - * If you are using EF Core, you will need to run the add-migration command after your changes. - */ - } - - private static void ConfigureExtraProperties() - { - /* You can configure extra properties for the - * entities defined in the modules used by your application. - * - * This class can be used to define these extra properties - * with a high level, easy to use API. - * - * Example: Add a new property to the user entity of the identity module - - ObjectExtensionManager.Instance.Modules() - .ConfigureIdentity(identity => - { - identity.ConfigureUser(user => - { - user.AddOrUpdateProperty( //property type: string - "SocialSecurityNumber", //property name - property => - { - //validation rules - property.Attributes.Add(new RequiredAttribute()); - property.Attributes.Add(new StringLengthAttribute(64) {MinimumLength = 4}); - - //...other configurations for this property - } - ); - }); - }); - - * See the documentation for more: - * https://docs.abp.io/en/abp/latest/Module-Entity-Extensions - */ - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Users/Dto/UserOutput.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Users/Dto/UserOutput.cs deleted file mode 100644 index 8908c5dc4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Users/Dto/UserOutput.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace MyCompanyName.MyProjectName.Users.Dto -{ - public class UserOutput - { - public Guid Id { get; set; } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/IMyProjectNameDbSchemaMigrator.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/IMyProjectNameDbSchemaMigrator.cs deleted file mode 100644 index e39e61729..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/IMyProjectNameDbSchemaMigrator.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace MyCompanyName.MyProjectName.Data -{ - public interface IMyProjectNameDbSchemaMigrator - { - Task MigrateAsync(); - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs deleted file mode 100644 index 6d9f8c26e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs +++ /dev/null @@ -1,204 +0,0 @@ -namespace MyCompanyName.MyProjectName.Data -{ - public class MyProjectNameDbMigrationService : ITransientDependency - { - public ILogger Logger { get; set; } - private readonly IDataSeeder _dataSeeder; - private readonly IEnumerable _dbSchemaMigrators; - private readonly ITenantRepository _tenantRepository; - private readonly ICurrentTenant _currentTenant; - - public MyProjectNameDbMigrationService( - IDataSeeder dataSeeder, - IEnumerable dbSchemaMigrators, - ITenantRepository tenantRepository, - ICurrentTenant currentTenant) - { - _dataSeeder = dataSeeder; - _dbSchemaMigrators = dbSchemaMigrators; - _tenantRepository = tenantRepository; - _currentTenant = currentTenant; - - Logger = NullLogger.Instance; - } - - public async Task MigrateAsync() - { - var initialMigrationAdded = AddInitialMigrationIfNotExist(); - - if (initialMigrationAdded) - { - return; - } - - Logger.LogInformation("Started database migrations..."); - - await MigrateDatabaseSchemaAsync(); - await SeedDataAsync(); - - Logger.LogInformation($"Successfully completed host database migrations."); - - var tenants = await _tenantRepository.GetListAsync(includeDetails: true); - - var migratedDatabaseSchemas = new HashSet(); - foreach (var tenant in tenants) - { - using (_currentTenant.Change(tenant.Id)) - { - if (tenant.ConnectionStrings.Any()) - { - var tenantConnectionStrings = tenant.ConnectionStrings - .Select(x => x.Value) - .ToList(); - - if (!migratedDatabaseSchemas.IsSupersetOf(tenantConnectionStrings)) - { - await MigrateDatabaseSchemaAsync(tenant); - - migratedDatabaseSchemas.AddIfNotContains(tenantConnectionStrings); - } - } - - await SeedDataAsync(tenant); - } - - Logger.LogInformation($"Successfully completed {tenant.Name} tenant database migrations."); - } - - Logger.LogInformation("Successfully completed all database migrations."); - Logger.LogInformation("You can safely end this process..."); - } - - private async Task MigrateDatabaseSchemaAsync(Tenant tenant = null) - { - Logger.LogInformation( - $"Migrating schema for {(tenant == null ? "host" : tenant.Name + " tenant")} database..."); - - foreach (var migrator in _dbSchemaMigrators) - { - await migrator.MigrateAsync(); - } - } - - private async Task SeedDataAsync(Tenant tenant = null) - { - Logger.LogInformation($"Executing {(tenant == null ? "host" : tenant.Name + " tenant")} database seed..."); - - await _dataSeeder.SeedAsync(new DataSeedContext(tenant?.Id) - .WithProperty(IdentityDataSeedContributor.AdminEmailPropertyName, IdentityDataSeedContributor.AdminEmailDefaultValue) - .WithProperty(IdentityDataSeedContributor.AdminPasswordPropertyName, IdentityDataSeedContributor.AdminPasswordDefaultValue) - ); - } - - private bool AddInitialMigrationIfNotExist() - { - try - { - if (!DbMigrationsProjectExists()) - { - return false; - } - } - catch (Exception) - { - return false; - } - - try - { - if (!MigrationsFolderExists()) - { - AddInitialMigration(); - return true; - } - else - { - return false; - } - } - catch (Exception e) - { - Logger.LogWarning("Couldn't determinate if any migrations exist : " + e.Message); - return false; - } - } - - private bool DbMigrationsProjectExists() - { - var dbMigrationsProjectFolder = GetDbMigrationsProjectFolderPath(); - - return dbMigrationsProjectFolder != null; - } - - private bool MigrationsFolderExists() - { - var dbMigrationsProjectFolder = GetDbMigrationsProjectFolderPath(); - - return Directory.Exists(Path.Combine(dbMigrationsProjectFolder, "EntityFrameworkCore")); - } - - private void AddInitialMigration() - { - Logger.LogInformation("Creating initial migration..."); - - string argumentPrefix; - string fileName; - - if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - { - argumentPrefix = "-c"; - fileName = "/bin/bash"; - } - else - { - argumentPrefix = "/C"; - fileName = "cmd.exe"; - } - - var procStartInfo = new ProcessStartInfo(fileName, - $"{argumentPrefix} \"abp create-migration-and-run-migrator \"{GetDbMigrationsProjectFolderPath()}\"\"" - ); - - try - { - Process.Start(procStartInfo); - } - catch (Exception) - { - throw new Exception("Couldn't run ABP CLI..."); - } - } - - private string GetDbMigrationsProjectFolderPath() - { - var slnDirectoryPath = GetSolutionDirectoryPath(); - - if (slnDirectoryPath == null) - { - throw new Exception("Solution folder not found!"); - } - - var srcDirectoryPath = Path.Combine(slnDirectoryPath, "src"); - - return Directory.GetDirectories(srcDirectoryPath) - .FirstOrDefault(d => d.EndsWith(".DbMigrations")); - } - - private string GetSolutionDirectoryPath() - { - var currentDirectory = new DirectoryInfo(Directory.GetCurrentDirectory()); - - while (Directory.GetParent(currentDirectory.FullName) != null) - { - currentDirectory = Directory.GetParent(currentDirectory.FullName); - - if (Directory.GetFiles(currentDirectory.FullName).FirstOrDefault(f => f.EndsWith(".sln")) != null) - { - return currentDirectory.FullName; - } - } - - return null; - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/NullMyProjectNameDbSchemaMigrator.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/NullMyProjectNameDbSchemaMigrator.cs deleted file mode 100644 index 406ff7e77..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/NullMyProjectNameDbSchemaMigrator.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace MyCompanyName.MyProjectName.Data -{ - /* This is used if database provider does't define - * IMyProjectNameDbSchemaMigrator implementation. - */ - public class NullMyProjectNameDbSchemaMigrator : IMyProjectNameDbSchemaMigrator, ITransientDependency - { - public Task MigrateAsync() - { - return Task.CompletedTask; - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/GlobalUsings.cs deleted file mode 100644 index 1bf0ac447..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/GlobalUsings.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Global using directives - -global using System; -global using System.Collections.Generic; -global using System.Diagnostics; -global using System.IO; -global using System.Linq; -global using System.Runtime.InteropServices; -global using System.Threading.Tasks; -global using Lion.AbpPro.BasicManagement; -global using Lion.AbpPro.DataDictionaryManagement; -global using Lion.AbpPro.LanguageManagement; -global using Lion.AbpPro.NotificationManagement; -global using MyCompanyName.MyProjectName.MultiTenancy; -global using MyCompanyName.MyProjectName.Users.Dto; -global using Microsoft.Extensions.DependencyInjection; -global using Microsoft.Extensions.Logging; -global using Microsoft.Extensions.Logging.Abstractions; -global using Volo.Abp.AutoMapper; -global using Volo.Abp.Data; -global using Volo.Abp.DependencyInjection; -global using Volo.Abp.Domain.Services; -global using Volo.Abp.EventBus.Distributed; -global using Volo.Abp.Identity; -global using Volo.Abp.Localization; -global using Volo.Abp.Modularity; -global using Volo.Abp.MultiTenancy; -global using Volo.Abp.ObjectMapping; -global using Volo.Abp.SettingManagement; -global using Volo.Abp.Settings; -global using Volo.Abp.TenantManagement; -global using Volo.Abp.Uow; \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj deleted file mode 100644 index d45e9c7a0..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyCompanyName.MyProjectName.Domain.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - net8.0 - MyCompanyName.MyProjectName - - - - - - - - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameConsts.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameConsts.cs deleted file mode 100644 index b6fa3d115..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameConsts.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - public static class MyProjectNameConsts - { - public const string DbTablePrefix = "App"; - - public const string DbSchema = null; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs deleted file mode 100644 index a644cadce..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - [DependsOn( - typeof(MyProjectNameDomainSharedModule), - typeof(BasicManagementDomainModule), - typeof(NotificationManagementDomainModule), - typeof(DataDictionaryManagementDomainModule), - typeof(LanguageManagementDomainModule) - )] - public class MyProjectNameDomainModule : AbpModule - { - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => { options.IsEnabled = MultiTenancyConsts.IsEnabled; }); - Configure(options => { options.AddMaps(); }); - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainService.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainService.cs deleted file mode 100644 index c5973e0fd..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainService.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Volo.Abp.EventBus.Local; - -namespace MyCompanyName.MyProjectName -{ - public abstract class MyProjectNameDomainService : DomainService - { - protected Type ObjectMapperContext { get; set; } - - /// - /// 工作单元管理器 - /// - protected IUnitOfWorkManager UnitOfWorkManager => - LazyServiceProvider.LazyGetRequiredService(); - - /// - /// 领域事件总线 - /// - protected ILocalEventBus LocalEventBus => - LazyServiceProvider.LazyGetRequiredService(); - /// - /// 分布式事件总线 - /// - protected IDistributedEventBus DistributedEventBus => - LazyServiceProvider.LazyGetRequiredService(); - - /// - /// 对象映射器 - /// - protected IObjectMapper ObjectMapper => LazyServiceProvider.LazyGetService( - provider => - ObjectMapperContext == null - ? provider.GetRequiredService() - : (IObjectMapper)provider.GetRequiredService( - typeof(IObjectMapper<>).MakeGenericType(ObjectMapperContext))); - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Properties/AssemblyInfo.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Properties/AssemblyInfo.cs deleted file mode 100644 index 48ac31e9f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,3 +0,0 @@ -using System.Runtime.CompilerServices; -[assembly:InternalsVisibleToAttribute("MyCompanyName.MyProjectName.Domain.Tests")] -[assembly:InternalsVisibleToAttribute("MyCompanyName.MyProjectName.TestBase")] diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Settings/MyProjectNameSettingDefinitionProvider.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Settings/MyProjectNameSettingDefinitionProvider.cs deleted file mode 100644 index 5110a1a95..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Settings/MyProjectNameSettingDefinitionProvider.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace MyCompanyName.MyProjectName.Settings -{ - public class MyProjectNameSettingDefinitionProvider : SettingDefinitionProvider - { - public override void Define(ISettingDefinitionContext context) - { - //Define your own settings here. Example: - //context.Add(new SettingDefinition(MyProjectNameSettings.MySetting1)); - OverrideDefalutSettings(context); - } - - /// - /// 重写默认setting添加自定义属性 - /// - private static void OverrideDefalutSettings(ISettingDefinitionContext context) - { - - } - - private static LocalizableString L(string name) - { - return LocalizableString.Create(name); - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Settings/MyProjectNameSettings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Settings/MyProjectNameSettings.cs deleted file mode 100644 index 77676002f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Settings/MyProjectNameSettings.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace MyCompanyName.MyProjectName.Settings -{ - public static class MyProjectNameSettings - { - - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/EntityFrameworkCoreMyProjectNameDbSchemaMigrator.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/EntityFrameworkCoreMyProjectNameDbSchemaMigrator.cs deleted file mode 100644 index 68cebdbc6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/EntityFrameworkCoreMyProjectNameDbSchemaMigrator.cs +++ /dev/null @@ -1,27 +0,0 @@ -namespace MyCompanyName.MyProjectName.EntityFrameworkCore -{ - public class EntityFrameworkCoreMyProjectNameDbSchemaMigrator - : IMyProjectNameDbSchemaMigrator, ITransientDependency - { - private readonly IServiceProvider _serviceProvider; - - public EntityFrameworkCoreMyProjectNameDbSchemaMigrator(IServiceProvider serviceProvider) - { - _serviceProvider = serviceProvider; - } - - public async Task MigrateAsync() - { - /* We intentionally resolving the MyProjectNameMigrationsDbContext - * from IServiceProvider (instead of directly injecting it) - * to properly get the connection string of the current tenant in the - * current scope. - */ - - await _serviceProvider - .GetRequiredService() - .Database - .MigrateAsync(); - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/IMyProjectNameDbContext.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/IMyProjectNameDbContext.cs deleted file mode 100644 index b58692f17..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/IMyProjectNameDbContext.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace MyCompanyName.MyProjectName.EntityFrameworkCore -{ - [ConnectionStringName("Default")] - public interface IMyProjectNameDbContext : IEfCoreDbContext - { - - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs deleted file mode 100644 index d989f984b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs +++ /dev/null @@ -1,78 +0,0 @@ -using Lion.AbpPro.DataDictionaryManagement; -using Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates; -using Lion.AbpPro.LanguageManagement.Languages.Aggregates; -using Lion.AbpPro.LanguageManagement.LanguageTexts.Aggregates; -using Lion.AbpPro.NotificationManagement; -using Lion.AbpPro.NotificationManagement.Notifications.Aggregates; - -namespace MyCompanyName.MyProjectName.EntityFrameworkCore -{ - /* This is your actual DbContext used on runtime. - * It includes only your entities. - * It does not include entities of the used modules, because each module has already - * its own DbContext class. If you want to share some database tables with the used modules, - * just create a structure like done for AppUser. - * - * Don't use this DbContext for database migrations since it does not contain tables of the - * used modules (as explained above). See MyProjectNameMigrationsDbContext for migrations. - */ - [ConnectionStringName("Default")] - public class MyProjectNameDbContext : AbpDbContext, IMyProjectNameDbContext, - IBasicManagementDbContext, - INotificationManagementDbContext, - IDataDictionaryManagementDbContext, - ILanguageManagementDbContext - { - public DbSet Users { get; set; } - public DbSet Roles { get; set; } - public DbSet ClaimTypes { get; set; } - public DbSet OrganizationUnits { get; set; } - public DbSet SecurityLogs { get; set; } - public DbSet LinkUsers { get; set; } - public DbSet UserDelegations { get; set; } - public DbSet Sessions { get; set; } - public DbSet FeatureGroups { get; set; } - public DbSet Features { get; set; } - public DbSet FeatureValues { get; set; } - public DbSet PermissionGroups { get; set; } - public DbSet Permissions { get; set; } - public DbSet PermissionGrants { get; set; } - public DbSet Settings { get; set; } - public DbSet SettingDefinitionRecords { get; set; } - public DbSet Tenants { get; set; } - public DbSet TenantConnectionStrings { get; set; } - public DbSet BackgroundJobs { get; set; } - public DbSet AuditLogs { get; set; } - public DbSet Notifications { get; set; } - public DbSet NotificationSubscriptions { get; set; } - public DbSet DataDictionaries { get; set; } - public DbSet Languages { get; set; } - public DbSet LanguageTexts { get; set; } - - public MyProjectNameDbContext(DbContextOptions options) - : base(options) - { - } - - protected override void OnModelCreating(ModelBuilder builder) - { - - base.OnModelCreating(builder); - - builder.ConfigureMyProjectName(); - - // 基础模块 - builder.ConfigureBasicManagement(); - - // 消息通知 - builder.ConfigureNotificationManagement(); - - //数据字典 - builder.ConfigureDataDictionaryManagement(); - - // 多语言 - builder.ConfigureLanguageManagement(); - } - - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContextModelCreatingExtensions.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContextModelCreatingExtensions.cs deleted file mode 100644 index b7f02aa18..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContextModelCreatingExtensions.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace MyCompanyName.MyProjectName.EntityFrameworkCore -{ - public static class MyProjectNameDbContextModelCreatingExtensions - { - public static void ConfigureMyProjectName(this ModelBuilder builder) - { - Check.NotNull(builder, nameof(builder)); - - /* Configure your own tables/entities inside here */ - - //builder.Entity(b => - //{ - // b.ToTable(MyProjectNameConsts.DbTablePrefix + "YourEntities", MyProjectNameConsts.DbSchema); - // b.ConfigureByConvention(); //auto configure for the base class props - // //... - //}); - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEfCoreEntityExtensionMappings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEfCoreEntityExtensionMappings.cs deleted file mode 100644 index 22cc3958b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEfCoreEntityExtensionMappings.cs +++ /dev/null @@ -1,40 +0,0 @@ -namespace MyCompanyName.MyProjectName.EntityFrameworkCore -{ - public static class MyProjectNameEfCoreEntityExtensionMappings - { - private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); - - public static void Configure() - { - MyProjectNameGlobalFeatureConfigurator.Configure(); - MyProjectNameModuleExtensionConfigurator.Configure(); - - OneTimeRunner.Run(() => - { - /* You can configure extra properties for the - * entities defined in the modules used by your application. - * - * This class can be used to map these extra properties to table fields in the database. - * - * USE THIS CLASS ONLY TO CONFIGURE EF CORE RELATED MAPPING. - * USE MyProjectNameModuleExtensionConfigurator CLASS (in the Domain.Shared project) - * FOR A HIGH LEVEL API TO DEFINE EXTRA PROPERTIES TO ENTITIES OF THE USED MODULES - * - * Example: Map a property to a table field: - - ObjectExtensionManager.Instance - .MapEfCoreProperty( - "MyProperty", - (entityBuilder, propertyBuilder) => - { - propertyBuilder.HasMaxLength(128); - } - ); - - * See the documentation for more: - * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities - */ - }); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs deleted file mode 100644 index 581c5620c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs +++ /dev/null @@ -1,34 +0,0 @@ -namespace MyCompanyName.MyProjectName.EntityFrameworkCore -{ - [DependsOn( - typeof(MyProjectNameDomainModule), - typeof(AbpEntityFrameworkCoreMySQLModule), - typeof(BasicManagementEntityFrameworkCoreModule), - typeof(DataDictionaryManagementEntityFrameworkCoreModule), - typeof(NotificationManagementEntityFrameworkCoreModule), - typeof(LanguageManagementEntityFrameworkCoreModule) - )] - public class MyProjectNameEntityFrameworkCoreModule : AbpModule - { - public override void PreConfigureServices(ServiceConfigurationContext context) - { - MyProjectNameEfCoreEntityExtensionMappings.Configure(); - } - - public override void ConfigureServices(ServiceConfigurationContext context) - { - context.Services.AddAbpDbContext(options => - { - /* Remove "includeAllEntities: true" to create - * default repositories only for aggregate roots */ - options.AddDefaultRepositories(includeAllEntities: true); - }); - Configure(options => - { - /* The main point to change your DBMS. - * See also MyProjectNameMigrationsDbContextFactory for EF Core tooling. */ - options.UseMySQL(); - }); - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameMigrationsDbContextFactory.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameMigrationsDbContextFactory.cs deleted file mode 100644 index b410a0c9c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameMigrationsDbContextFactory.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace MyCompanyName.MyProjectName.EntityFrameworkCore -{ - /* This class is needed for EF Core console commands - * (like Add-Migration and Update-Database commands) */ - public class MyProjectNameMigrationsDbContextFactory : IDesignTimeDbContextFactory - { - public MyProjectNameDbContext CreateDbContext(string[] args) - { - MyProjectNameEfCoreEntityExtensionMappings.Configure(); - - var configuration = BuildConfiguration(); - - var builder = new DbContextOptionsBuilder() - .UseMySql(configuration.GetConnectionString("Default"), MySqlServerVersion.LatestSupportedServerVersion); - - return new MyProjectNameDbContext(builder.Options); - } - - private static IConfigurationRoot BuildConfiguration() - { - var builder = new ConfigurationBuilder() - .SetBasePath - ( - Path.Combine - ( - Directory.GetCurrentDirectory(), - "../MyCompanyName.MyProjectName.DbMigrator/" - ) - ) - .AddJsonFile - ( - "appsettings.json", - false - ); - - return builder.Build(); - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/GlobalUsings.cs deleted file mode 100644 index aa3235366..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/GlobalUsings.cs +++ /dev/null @@ -1,35 +0,0 @@ -// Global using directives - -global using System; -global using System.Collections.Generic; -global using System.IO; -global using System.Linq; -global using System.Text; -global using System.Threading.Tasks; -global using Lion.AbpPro.BasicManagement.EntityFrameworkCore; -global using Lion.AbpPro.DataDictionaryManagement.EntityFrameworkCore; -global using Lion.AbpPro.LanguageManagement.EntityFrameworkCore; -global using Lion.AbpPro.NotificationManagement.EntityFrameworkCore; -global using MyCompanyName.MyProjectName.Data; -global using MyCompanyName.MyProjectName.Users; -global using Microsoft.EntityFrameworkCore; -global using Microsoft.EntityFrameworkCore.Design; -global using Microsoft.EntityFrameworkCore.Storage; -global using Microsoft.Extensions.Configuration; -global using Microsoft.Extensions.DependencyInjection; -global using MySqlConnector; -global using Volo.Abp; -global using Volo.Abp.AuditLogging; -global using Volo.Abp.BackgroundJobs; -global using Volo.Abp.Data; -global using Volo.Abp.DependencyInjection; -global using Volo.Abp.EntityFrameworkCore; -global using Volo.Abp.EntityFrameworkCore.MySQL; -global using Volo.Abp.FeatureManagement; -global using Volo.Abp.Guids; -global using Volo.Abp.Identity; -global using Volo.Abp.Modularity; -global using Volo.Abp.PermissionManagement; -global using Volo.Abp.SettingManagement; -global using Volo.Abp.TenantManagement; -global using Volo.Abp.Threading; \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231220045158_Init.Designer.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231220045158_Init.Designer.cs deleted file mode 100644 index 21c317c24..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231220045158_Init.Designer.cs +++ /dev/null @@ -1,1991 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using MyCompanyName.MyProjectName.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore; - -#nullable disable - -namespace MyCompanyName.MyProjectName.Migrations -{ - [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20231220045158_Init")] - partial class Init - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) - .HasAnnotation("ProductVersion", "8.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 64); - - modelBuilder.Entity("Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionary", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Code") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.Property("DisplayText") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("AbpDataDictionaries", (string)null); - }); - - modelBuilder.Entity("Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionaryDetail", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Code") - .HasColumnType("longtext"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("DataDictionaryId") - .HasColumnType("char(36)"); - - b.Property("Description") - .HasColumnType("longtext"); - - b.Property("DisplayText") - .HasColumnType("longtext"); - - b.Property("IsEnabled") - .HasColumnType("tinyint(1)"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("Order") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("DataDictionaryId"); - - b.ToTable("AbpDataDictionaryDetails", (string)null); - }); - - modelBuilder.Entity("Lion.AbpPro.LanguageManagement.LanguageTexts.Aggregates.LanguageText", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("CultureName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasComment("语言名称"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasComment("名称"); - - b.Property("ResourceName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasComment("资源名称"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasComment("值"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "ResourceName", "CultureName"); - - b.ToTable("AbpLanguageTexts", (string)null); - }); - - modelBuilder.Entity("Lion.AbpPro.LanguageManagement.Languages.Aggregates.Language", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("CultureName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasComment("语言名称"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasComment("显示名称"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("FlagIcon") - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasComment("图标"); - - b.Property("IsDefault") - .HasColumnType("tinyint(1)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("IsEnabled") - .HasColumnType("tinyint(1)"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("UiCultureName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasComment("Ui语言名称"); - - b.HasKey("Id"); - - b.HasIndex("CultureName") - .IsUnique(); - - b.ToTable("AbpLanguages", (string)null); - }); - - modelBuilder.Entity("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.Notification", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Content") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("MessageLevel") - .HasColumnType("int"); - - b.Property("MessageType") - .HasColumnType("int"); - - b.Property("SenderId") - .HasColumnType("char(36)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.HasKey("Id"); - - b.ToTable("AbpNotifications", (string)null); - }); - - modelBuilder.Entity("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.NotificationSubscription", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("NotificationId") - .HasColumnType("char(36)"); - - b.Property("Read") - .HasColumnType("tinyint(1)"); - - b.Property("ReadTime") - .HasColumnType("datetime(6)"); - - b.Property("ReceiveId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("NotificationId"); - - b.ToTable("AbpNotificationSubscriptions", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ApplicationName") - .HasMaxLength(96) - .HasColumnType("varchar(96)") - .HasColumnName("ApplicationName"); - - b.Property("BrowserInfo") - .HasMaxLength(512) - .HasColumnType("varchar(512)") - .HasColumnName("BrowserInfo"); - - b.Property("ClientId") - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("ClientId"); - - b.Property("ClientIpAddress") - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("ClientIpAddress"); - - b.Property("ClientName") - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasColumnName("ClientName"); - - b.Property("Comments") - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("Comments"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CorrelationId") - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("CorrelationId"); - - b.Property("Exceptions") - .HasColumnType("longtext"); - - b.Property("ExecutionDuration") - .HasColumnType("int") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime") - .HasColumnType("datetime(6)"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("HttpMethod") - .HasMaxLength(16) - .HasColumnType("varchar(16)") - .HasColumnName("HttpMethod"); - - b.Property("HttpStatusCode") - .HasColumnType("int") - .HasColumnName("HttpStatusCode"); - - b.Property("ImpersonatorTenantId") - .HasColumnType("char(36)") - .HasColumnName("ImpersonatorTenantId"); - - b.Property("ImpersonatorTenantName") - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("ImpersonatorTenantName"); - - b.Property("ImpersonatorUserId") - .HasColumnType("char(36)") - .HasColumnName("ImpersonatorUserId"); - - b.Property("ImpersonatorUserName") - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("ImpersonatorUserName"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.Property("TenantName") - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("TenantName"); - - b.Property("Url") - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("Url"); - - b.Property("UserId") - .HasColumnType("char(36)") - .HasColumnName("UserId"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("UserName"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "ExecutionTime"); - - b.HasIndex("TenantId", "UserId", "ExecutionTime"); - - b.ToTable("AbpAuditLogs", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AuditLogId") - .HasColumnType("char(36)") - .HasColumnName("AuditLogId"); - - b.Property("ExecutionDuration") - .HasColumnType("int") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime") - .HasColumnType("datetime(6)") - .HasColumnName("ExecutionTime"); - - b.Property("ExtraProperties") - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("MethodName") - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasColumnName("MethodName"); - - b.Property("Parameters") - .HasMaxLength(2000) - .HasColumnType("varchar(2000)") - .HasColumnName("Parameters"); - - b.Property("ServiceName") - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("ServiceName"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("AuditLogId"); - - b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); - - b.ToTable("AbpAuditLogActions", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AuditLogId") - .HasColumnType("char(36)") - .HasColumnName("AuditLogId"); - - b.Property("ChangeTime") - .HasColumnType("datetime(6)") - .HasColumnName("ChangeTime"); - - b.Property("ChangeType") - .HasColumnType("tinyint unsigned") - .HasColumnName("ChangeType"); - - b.Property("EntityId") - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasColumnName("EntityId"); - - b.Property("EntityTenantId") - .HasColumnType("char(36)"); - - b.Property("EntityTypeFullName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasColumnName("EntityTypeFullName"); - - b.Property("ExtraProperties") - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("AuditLogId"); - - b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); - - b.ToTable("AbpEntityChanges", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("EntityChangeId") - .HasColumnType("char(36)"); - - b.Property("NewValue") - .HasMaxLength(512) - .HasColumnType("varchar(512)") - .HasColumnName("NewValue"); - - b.Property("OriginalValue") - .HasMaxLength(512) - .HasColumnType("varchar(512)") - .HasColumnName("OriginalValue"); - - b.Property("PropertyName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasColumnName("PropertyName"); - - b.Property("PropertyTypeFullName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("PropertyTypeFullName"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("EntityChangeId"); - - b.ToTable("AbpEntityPropertyChanges", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsAbandoned") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false); - - b.Property("JobArgs") - .IsRequired() - .HasMaxLength(1048576) - .HasColumnType("longtext"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("LastTryTime") - .HasColumnType("datetime(6)"); - - b.Property("NextTryTime") - .HasColumnType("datetime(6)"); - - b.Property("Priority") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint unsigned") - .HasDefaultValue((byte)15); - - b.Property("TryCount") - .ValueGeneratedOnAdd() - .HasColumnType("smallint") - .HasDefaultValue((short)0); - - b.HasKey("Id"); - - b.HasIndex("IsAbandoned", "NextTryTime"); - - b.ToTable("AbpBackgroundJobs", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureDefinitionRecord", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AllowedProviders") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("Description") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("GroupName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("IsAvailableToHost") - .HasColumnType("tinyint(1)"); - - b.Property("IsVisibleToClients") - .HasColumnType("tinyint(1)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("ParentName") - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("ValueType") - .HasMaxLength(2048) - .HasColumnType("varchar(2048)"); - - b.HasKey("Id"); - - b.HasIndex("GroupName"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpFeatures", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpFeatureGroups", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("ProviderKey") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ProviderName") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey") - .IsUnique(); - - b.ToTable("AbpFeatureValues", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Description") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsStatic") - .HasColumnType("tinyint(1)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("Regex") - .HasMaxLength(512) - .HasColumnType("varchar(512)"); - - b.Property("RegexDescription") - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("Required") - .HasColumnType("tinyint(1)"); - - b.Property("ValueType") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("AbpClaimTypes", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("SourceTenantId") - .HasColumnType("char(36)"); - - b.Property("SourceUserId") - .HasColumnType("char(36)"); - - b.Property("TargetTenantId") - .HasColumnType("char(36)"); - - b.Property("TargetUserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") - .IsUnique(); - - b.ToTable("AbpLinkUsers", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsDefault") - .HasColumnType("tinyint(1)") - .HasColumnName("IsDefault"); - - b.Property("IsPublic") - .HasColumnType("tinyint(1)") - .HasColumnName("IsPublic"); - - b.Property("IsStatic") - .HasColumnType("tinyint(1)") - .HasColumnName("IsStatic"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("NormalizedName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName"); - - b.ToTable("AbpRoles", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ClaimType") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ClaimValue") - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.Property("RoleId") - .HasColumnType("char(36)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AbpRoleClaims", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Action") - .HasMaxLength(96) - .HasColumnType("varchar(96)"); - - b.Property("ApplicationName") - .HasMaxLength(96) - .HasColumnType("varchar(96)"); - - b.Property("BrowserInfo") - .HasMaxLength(512) - .HasColumnType("varchar(512)"); - - b.Property("ClientId") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ClientIpAddress") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CorrelationId") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("Identity") - .HasMaxLength(96) - .HasColumnType("varchar(96)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.Property("TenantName") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Action"); - - b.HasIndex("TenantId", "ApplicationName"); - - b.HasIndex("TenantId", "Identity"); - - b.HasIndex("TenantId", "UserId"); - - b.ToTable("AbpSecurityLogs", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AccessFailedCount") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasDefaultValue(0) - .HasColumnName("AccessFailedCount"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("Email"); - - b.Property("EmailConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("EmailConfirmed"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsActive") - .HasColumnType("tinyint(1)") - .HasColumnName("IsActive"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("IsExternal") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsExternal"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("LastPasswordChangeTime") - .HasColumnType("datetime(6)"); - - b.Property("LockoutEnabled") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("LockoutEnabled"); - - b.Property("LockoutEnd") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("Name"); - - b.Property("NormalizedEmail") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("NormalizedEmail"); - - b.Property("NormalizedUserName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("NormalizedUserName"); - - b.Property("PasswordHash") - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("PasswordHash"); - - b.Property("PhoneNumber") - .HasMaxLength(16) - .HasColumnType("varchar(16)") - .HasColumnName("PhoneNumber"); - - b.Property("PhoneNumberConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("PhoneNumberConfirmed"); - - b.Property("SecurityStamp") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("SecurityStamp"); - - b.Property("ShouldChangePasswordOnNextLogin") - .HasColumnType("tinyint(1)"); - - b.Property("Surname") - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("Surname"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.Property("TwoFactorEnabled") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("TwoFactorEnabled"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("UserName"); - - b.HasKey("Id"); - - b.HasIndex("Email"); - - b.HasIndex("NormalizedEmail"); - - b.HasIndex("NormalizedUserName"); - - b.HasIndex("UserName"); - - b.ToTable("AbpUsers", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ClaimType") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ClaimValue") - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AbpUserClaims", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserDelegation", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("EndTime") - .HasColumnType("datetime(6)"); - - b.Property("SourceUserId") - .HasColumnType("char(36)"); - - b.Property("StartTime") - .HasColumnType("datetime(6)"); - - b.Property("TargetUserId") - .HasColumnType("char(36)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("AbpUserDelegations", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("LoginProvider") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ProviderDisplayName") - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("ProviderKey") - .IsRequired() - .HasMaxLength(196) - .HasColumnType("varchar(196)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("UserId", "LoginProvider"); - - b.HasIndex("LoginProvider", "ProviderKey"); - - b.ToTable("AbpUserLogins", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => - { - b.Property("OrganizationUnitId") - .HasColumnType("char(36)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("OrganizationUnitId", "UserId"); - - b.HasIndex("UserId", "OrganizationUnitId"); - - b.ToTable("AbpUserOrganizationUnits", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("RoleId") - .HasColumnType("char(36)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId", "UserId"); - - b.ToTable("AbpUserRoles", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("LoginProvider") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("Name") - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.Property("Value") - .HasColumnType("longtext"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AbpUserTokens", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Code") - .IsRequired() - .HasMaxLength(95) - .HasColumnType("varchar(95)") - .HasColumnName("Code"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasColumnName("DisplayName"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("ParentId") - .HasColumnType("char(36)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("Code"); - - b.HasIndex("ParentId"); - - b.ToTable("AbpOrganizationUnits", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => - { - b.Property("OrganizationUnitId") - .HasColumnType("char(36)"); - - b.Property("RoleId") - .HasColumnType("char(36)"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("OrganizationUnitId", "RoleId"); - - b.HasIndex("RoleId", "OrganizationUnitId"); - - b.ToTable("AbpOrganizationUnitRoles", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionDefinitionRecord", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("GroupName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("IsEnabled") - .HasColumnType("tinyint(1)"); - - b.Property("MultiTenancySide") - .HasColumnType("tinyint unsigned"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("ParentName") - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("StateCheckers") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("GroupName"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpPermissions", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("ProviderKey") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ProviderName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") - .IsUnique(); - - b.ToTable("AbpPermissionGrants", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpPermissionGroups", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("ProviderKey") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ProviderName") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2048) - .HasColumnType("varchar(2048)"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey") - .IsUnique(); - - b.ToTable("AbpSettings", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.SettingManagement.SettingDefinitionRecord", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("Description") - .HasMaxLength(512) - .HasColumnType("varchar(512)"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsEncrypted") - .HasColumnType("tinyint(1)"); - - b.Property("IsInherited") - .HasColumnType("tinyint(1)"); - - b.Property("IsVisibleToClients") - .HasColumnType("tinyint(1)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpSettingDefinitions", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.HasKey("Id"); - - b.HasIndex("Name"); - - b.ToTable("AbpTenants", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.Property("TenantId") - .HasColumnType("char(36)"); - - b.Property("Name") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.HasKey("TenantId", "Name"); - - b.ToTable("AbpTenantConnectionStrings", (string)null); - }); - - modelBuilder.Entity("Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionaryDetail", b => - { - b.HasOne("Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionary", null) - .WithMany("Details") - .HasForeignKey("DataDictionaryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.NotificationSubscription", b => - { - b.HasOne("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.Notification", null) - .WithMany("NotificationSubscriptions") - .HasForeignKey("NotificationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) - .WithMany("Actions") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) - .WithMany("EntityChanges") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) - .WithMany("PropertyChanges") - .HasForeignKey("EntityChangeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany("Claims") - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Claims") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Logins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => - { - b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) - .WithMany() - .HasForeignKey("OrganizationUnitId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("OrganizationUnits") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Roles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Tokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => - { - b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) - .WithMany() - .HasForeignKey("ParentId"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => - { - b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) - .WithMany("Roles") - .HasForeignKey("OrganizationUnitId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.HasOne("Volo.Abp.TenantManagement.Tenant", null) - .WithMany("ConnectionStrings") - .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionary", b => - { - b.Navigation("Details"); - }); - - modelBuilder.Entity("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.Notification", b => - { - b.Navigation("NotificationSubscriptions"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => - { - b.Navigation("Actions"); - - b.Navigation("EntityChanges"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.Navigation("PropertyChanges"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => - { - b.Navigation("Claims"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => - { - b.Navigation("Claims"); - - b.Navigation("Logins"); - - b.Navigation("OrganizationUnits"); - - b.Navigation("Roles"); - - b.Navigation("Tokens"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => - { - b.Navigation("Roles"); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => - { - b.Navigation("ConnectionStrings"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231220045158_Init.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231220045158_Init.cs deleted file mode 100644 index 333087442..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231220045158_Init.cs +++ /dev/null @@ -1,1311 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace MyCompanyName.MyProjectName.Migrations -{ - /// - public partial class Init : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterDatabase() - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpAuditLogs", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - ApplicationName = table.Column(type: "varchar(96)", maxLength: 96, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - UserId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - UserName = table.Column(type: "varchar(256)", maxLength: 256, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - TenantName = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - ImpersonatorUserId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - ImpersonatorUserName = table.Column(type: "varchar(256)", maxLength: 256, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - ImpersonatorTenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - ImpersonatorTenantName = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - ExecutionTime = table.Column(type: "datetime(6)", nullable: false), - ExecutionDuration = table.Column(type: "int", nullable: false), - ClientIpAddress = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - ClientName = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - ClientId = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - CorrelationId = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - BrowserInfo = table.Column(type: "varchar(512)", maxLength: 512, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - HttpMethod = table.Column(type: "varchar(16)", maxLength: 16, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - Url = table.Column(type: "varchar(256)", maxLength: 256, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - Exceptions = table.Column(type: "longtext", nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - Comments = table.Column(type: "varchar(256)", maxLength: 256, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - HttpStatusCode = table.Column(type: "int", nullable: true), - ExtraProperties = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpAuditLogs", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpBackgroundJobs", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - JobName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - JobArgs = table.Column(type: "longtext", maxLength: 1048576, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - TryCount = table.Column(type: "smallint", nullable: false, defaultValue: (short)0), - CreationTime = table.Column(type: "datetime(6)", nullable: false), - NextTryTime = table.Column(type: "datetime(6)", nullable: false), - LastTryTime = table.Column(type: "datetime(6)", nullable: true), - IsAbandoned = table.Column(type: "tinyint(1)", nullable: false, defaultValue: false), - Priority = table.Column(type: "tinyint unsigned", nullable: false, defaultValue: (byte)15), - ExtraProperties = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpBackgroundJobs", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpClaimTypes", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - Name = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Required = table.Column(type: "tinyint(1)", nullable: false), - IsStatic = table.Column(type: "tinyint(1)", nullable: false), - Regex = table.Column(type: "varchar(512)", maxLength: 512, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - RegexDescription = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - Description = table.Column(type: "varchar(256)", maxLength: 256, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - ValueType = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpClaimTypes", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpDataDictionaries", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - Code = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - DisplayText = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Description = table.Column(type: "varchar(1024)", maxLength: 1024, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ExtraProperties = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - CreationTime = table.Column(type: "datetime(6)", nullable: false), - CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - LastModificationTime = table.Column(type: "datetime(6)", nullable: true), - LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - IsDeleted = table.Column(type: "tinyint(1)", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - DeletionTime = table.Column(type: "datetime(6)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpDataDictionaries", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpFeatureGroups", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - Name = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - DisplayName = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ExtraProperties = table.Column(type: "longtext", nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpFeatureGroups", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpFeatures", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - GroupName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Name = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ParentName = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - DisplayName = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Description = table.Column(type: "varchar(256)", maxLength: 256, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - DefaultValue = table.Column(type: "varchar(256)", maxLength: 256, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - IsVisibleToClients = table.Column(type: "tinyint(1)", nullable: false), - IsAvailableToHost = table.Column(type: "tinyint(1)", nullable: false), - AllowedProviders = table.Column(type: "varchar(256)", maxLength: 256, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - ValueType = table.Column(type: "varchar(2048)", maxLength: 2048, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - ExtraProperties = table.Column(type: "longtext", nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpFeatures", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpFeatureValues", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - Name = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Value = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ProviderName = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - ProviderKey = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpFeatureValues", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpLanguages", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - CultureName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false, comment: "语言名称") - .Annotation("MySql:CharSet", "utf8mb4"), - UiCultureName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false, comment: "Ui语言名称") - .Annotation("MySql:CharSet", "utf8mb4"), - DisplayName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false, comment: "显示名称") - .Annotation("MySql:CharSet", "utf8mb4"), - FlagIcon = table.Column(type: "varchar(128)", maxLength: 128, nullable: true, comment: "图标") - .Annotation("MySql:CharSet", "utf8mb4"), - IsEnabled = table.Column(type: "tinyint(1)", nullable: false), - IsDefault = table.Column(type: "tinyint(1)", nullable: false), - ExtraProperties = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - CreationTime = table.Column(type: "datetime(6)", nullable: false), - CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - LastModificationTime = table.Column(type: "datetime(6)", nullable: true), - LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - IsDeleted = table.Column(type: "tinyint(1)", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - DeletionTime = table.Column(type: "datetime(6)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpLanguages", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpLanguageTexts", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - CultureName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false, comment: "语言名称") - .Annotation("MySql:CharSet", "utf8mb4"), - ResourceName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false, comment: "资源名称") - .Annotation("MySql:CharSet", "utf8mb4"), - Name = table.Column(type: "varchar(256)", maxLength: 256, nullable: false, comment: "名称") - .Annotation("MySql:CharSet", "utf8mb4"), - Value = table.Column(type: "varchar(256)", maxLength: 256, nullable: false, comment: "值") - .Annotation("MySql:CharSet", "utf8mb4"), - ExtraProperties = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - CreationTime = table.Column(type: "datetime(6)", nullable: false), - CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - LastModificationTime = table.Column(type: "datetime(6)", nullable: true), - LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - IsDeleted = table.Column(type: "tinyint(1)", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - DeletionTime = table.Column(type: "datetime(6)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpLanguageTexts", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpLinkUsers", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - SourceUserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - SourceTenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - TargetUserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TargetTenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpLinkUsers", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpNotifications", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - Title = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Content = table.Column(type: "varchar(1024)", maxLength: 1024, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - MessageType = table.Column(type: "int", nullable: false), - MessageLevel = table.Column(type: "int", nullable: false), - SenderId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - ExtraProperties = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - CreationTime = table.Column(type: "datetime(6)", nullable: false), - CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - LastModificationTime = table.Column(type: "datetime(6)", nullable: true), - LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - IsDeleted = table.Column(type: "tinyint(1)", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - DeletionTime = table.Column(type: "datetime(6)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpNotifications", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpOrganizationUnits", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - ParentId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - Code = table.Column(type: "varchar(95)", maxLength: 95, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - DisplayName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - EntityVersion = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - CreationTime = table.Column(type: "datetime(6)", nullable: false), - CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - LastModificationTime = table.Column(type: "datetime(6)", nullable: true), - LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - IsDeleted = table.Column(type: "tinyint(1)", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - DeletionTime = table.Column(type: "datetime(6)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpOrganizationUnits", x => x.Id); - table.ForeignKey( - name: "FK_AbpOrganizationUnits_AbpOrganizationUnits_ParentId", - column: x => x.ParentId, - principalTable: "AbpOrganizationUnits", - principalColumn: "Id"); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpPermissionGrants", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - Name = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ProviderName = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ProviderKey = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpPermissionGrants", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpPermissionGroups", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - Name = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - DisplayName = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ExtraProperties = table.Column(type: "longtext", nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpPermissionGroups", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpPermissions", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - GroupName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Name = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ParentName = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - DisplayName = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - IsEnabled = table.Column(type: "tinyint(1)", nullable: false), - MultiTenancySide = table.Column(type: "tinyint unsigned", nullable: false), - Providers = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - StateCheckers = table.Column(type: "varchar(256)", maxLength: 256, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - ExtraProperties = table.Column(type: "longtext", nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpPermissions", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpRoles", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - Name = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - NormalizedName = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - IsDefault = table.Column(type: "tinyint(1)", nullable: false), - IsStatic = table.Column(type: "tinyint(1)", nullable: false), - IsPublic = table.Column(type: "tinyint(1)", nullable: false), - EntityVersion = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpRoles", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpSecurityLogs", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - ApplicationName = table.Column(type: "varchar(96)", maxLength: 96, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - Identity = table.Column(type: "varchar(96)", maxLength: 96, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - Action = table.Column(type: "varchar(96)", maxLength: 96, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - UserId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - UserName = table.Column(type: "varchar(256)", maxLength: 256, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - TenantName = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - ClientId = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - CorrelationId = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - ClientIpAddress = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - BrowserInfo = table.Column(type: "varchar(512)", maxLength: 512, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - CreationTime = table.Column(type: "datetime(6)", nullable: false), - ExtraProperties = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpSecurityLogs", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpSettingDefinitions", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - Name = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - DisplayName = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Description = table.Column(type: "varchar(512)", maxLength: 512, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - DefaultValue = table.Column(type: "varchar(256)", maxLength: 256, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - IsVisibleToClients = table.Column(type: "tinyint(1)", nullable: false), - Providers = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - IsInherited = table.Column(type: "tinyint(1)", nullable: false), - IsEncrypted = table.Column(type: "tinyint(1)", nullable: false), - ExtraProperties = table.Column(type: "longtext", nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpSettingDefinitions", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpSettings", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - Name = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Value = table.Column(type: "varchar(2048)", maxLength: 2048, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ProviderName = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - ProviderKey = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpSettings", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpTenants", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - Name = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - EntityVersion = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - CreationTime = table.Column(type: "datetime(6)", nullable: false), - CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - LastModificationTime = table.Column(type: "datetime(6)", nullable: true), - LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - IsDeleted = table.Column(type: "tinyint(1)", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - DeletionTime = table.Column(type: "datetime(6)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpTenants", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpUserDelegations", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - SourceUserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TargetUserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - StartTime = table.Column(type: "datetime(6)", nullable: false), - EndTime = table.Column(type: "datetime(6)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserDelegations", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpUsers", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - UserName = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - NormalizedUserName = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Name = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - Surname = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - Email = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - NormalizedEmail = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - EmailConfirmed = table.Column(type: "tinyint(1)", nullable: false, defaultValue: false), - PasswordHash = table.Column(type: "varchar(256)", maxLength: 256, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - SecurityStamp = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - IsExternal = table.Column(type: "tinyint(1)", nullable: false, defaultValue: false), - PhoneNumber = table.Column(type: "varchar(16)", maxLength: 16, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - PhoneNumberConfirmed = table.Column(type: "tinyint(1)", nullable: false, defaultValue: false), - IsActive = table.Column(type: "tinyint(1)", nullable: false), - TwoFactorEnabled = table.Column(type: "tinyint(1)", nullable: false, defaultValue: false), - LockoutEnd = table.Column(type: "datetime(6)", nullable: true), - LockoutEnabled = table.Column(type: "tinyint(1)", nullable: false, defaultValue: false), - AccessFailedCount = table.Column(type: "int", nullable: false, defaultValue: 0), - ShouldChangePasswordOnNextLogin = table.Column(type: "tinyint(1)", nullable: false), - EntityVersion = table.Column(type: "int", nullable: false), - LastPasswordChangeTime = table.Column(type: "datetime(6)", nullable: true), - ExtraProperties = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - CreationTime = table.Column(type: "datetime(6)", nullable: false), - CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - LastModificationTime = table.Column(type: "datetime(6)", nullable: true), - LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - IsDeleted = table.Column(type: "tinyint(1)", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - DeletionTime = table.Column(type: "datetime(6)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUsers", x => x.Id); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpAuditLogActions", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - AuditLogId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - ServiceName = table.Column(type: "varchar(256)", maxLength: 256, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - MethodName = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - Parameters = table.Column(type: "varchar(2000)", maxLength: 2000, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - ExecutionTime = table.Column(type: "datetime(6)", nullable: false), - ExecutionDuration = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "longtext", nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpAuditLogActions", x => x.Id); - table.ForeignKey( - name: "FK_AbpAuditLogActions_AbpAuditLogs_AuditLogId", - column: x => x.AuditLogId, - principalTable: "AbpAuditLogs", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpEntityChanges", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - AuditLogId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - ChangeTime = table.Column(type: "datetime(6)", nullable: false), - ChangeType = table.Column(type: "tinyint unsigned", nullable: false), - EntityTenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - EntityId = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - EntityTypeFullName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ExtraProperties = table.Column(type: "longtext", nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpEntityChanges", x => x.Id); - table.ForeignKey( - name: "FK_AbpEntityChanges_AbpAuditLogs_AuditLogId", - column: x => x.AuditLogId, - principalTable: "AbpAuditLogs", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpDataDictionaryDetails", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - DataDictionaryId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - Code = table.Column(type: "longtext", nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - Order = table.Column(type: "int", nullable: false), - DisplayText = table.Column(type: "longtext", nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - Description = table.Column(type: "longtext", nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - IsEnabled = table.Column(type: "tinyint(1)", nullable: false), - CreationTime = table.Column(type: "datetime(6)", nullable: false), - CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - LastModificationTime = table.Column(type: "datetime(6)", nullable: true), - LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpDataDictionaryDetails", x => x.Id); - table.ForeignKey( - name: "FK_AbpDataDictionaryDetails_AbpDataDictionaries_DataDictionaryId", - column: x => x.DataDictionaryId, - principalTable: "AbpDataDictionaries", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpNotificationSubscriptions", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - NotificationId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - ReceiveId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - Read = table.Column(type: "tinyint(1)", nullable: false), - ReadTime = table.Column(type: "datetime(6)", nullable: true), - CreationTime = table.Column(type: "datetime(6)", nullable: false), - CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - LastModificationTime = table.Column(type: "datetime(6)", nullable: true), - LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - IsDeleted = table.Column(type: "tinyint(1)", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - DeletionTime = table.Column(type: "datetime(6)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpNotificationSubscriptions", x => x.Id); - table.ForeignKey( - name: "FK_AbpNotificationSubscriptions_AbpNotifications_NotificationId", - column: x => x.NotificationId, - principalTable: "AbpNotifications", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpOrganizationUnitRoles", - columns: table => new - { - RoleId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - OrganizationUnitId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - CreationTime = table.Column(type: "datetime(6)", nullable: false), - CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpOrganizationUnitRoles", x => new { x.OrganizationUnitId, x.RoleId }); - table.ForeignKey( - name: "FK_AbpOrganizationUnitRoles_AbpOrganizationUnits_OrganizationUn~", - column: x => x.OrganizationUnitId, - principalTable: "AbpOrganizationUnits", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AbpOrganizationUnitRoles_AbpRoles_RoleId", - column: x => x.RoleId, - principalTable: "AbpRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpRoleClaims", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - RoleId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - ClaimType = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ClaimValue = table.Column(type: "varchar(1024)", maxLength: 1024, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpRoleClaims", x => x.Id); - table.ForeignKey( - name: "FK_AbpRoleClaims_AbpRoles_RoleId", - column: x => x.RoleId, - principalTable: "AbpRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpTenantConnectionStrings", - columns: table => new - { - TenantId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - Name = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Value = table.Column(type: "varchar(1024)", maxLength: 1024, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpTenantConnectionStrings", x => new { x.TenantId, x.Name }); - table.ForeignKey( - name: "FK_AbpTenantConnectionStrings_AbpTenants_TenantId", - column: x => x.TenantId, - principalTable: "AbpTenants", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpUserClaims", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - ClaimType = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ClaimValue = table.Column(type: "varchar(1024)", maxLength: 1024, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserClaims", x => x.Id); - table.ForeignKey( - name: "FK_AbpUserClaims_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpUserLogins", - columns: table => new - { - UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - LoginProvider = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - ProviderKey = table.Column(type: "varchar(196)", maxLength: 196, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - ProviderDisplayName = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserLogins", x => new { x.UserId, x.LoginProvider }); - table.ForeignKey( - name: "FK_AbpUserLogins_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpUserOrganizationUnits", - columns: table => new - { - UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - OrganizationUnitId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - CreationTime = table.Column(type: "datetime(6)", nullable: false), - CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserOrganizationUnits", x => new { x.OrganizationUnitId, x.UserId }); - table.ForeignKey( - name: "FK_AbpUserOrganizationUnits_AbpOrganizationUnits_OrganizationUn~", - column: x => x.OrganizationUnitId, - principalTable: "AbpOrganizationUnits", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AbpUserOrganizationUnits_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpUserRoles", - columns: table => new - { - UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - RoleId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserRoles", x => new { x.UserId, x.RoleId }); - table.ForeignKey( - name: "FK_AbpUserRoles_AbpRoles_RoleId", - column: x => x.RoleId, - principalTable: "AbpRoles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_AbpUserRoles_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpUserTokens", - columns: table => new - { - UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - LoginProvider = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Name = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - Value = table.Column(type: "longtext", nullable: true) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); - table.ForeignKey( - name: "FK_AbpUserTokens_AbpUsers_UserId", - column: x => x.UserId, - principalTable: "AbpUsers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateTable( - name: "AbpEntityPropertyChanges", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - EntityChangeId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - NewValue = table.Column(type: "varchar(512)", maxLength: 512, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - OriginalValue = table.Column(type: "varchar(512)", maxLength: 512, nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"), - PropertyName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - PropertyTypeFullName = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4") - }, - constraints: table => - { - table.PrimaryKey("PK_AbpEntityPropertyChanges", x => x.Id); - table.ForeignKey( - name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId", - column: x => x.EntityChangeId, - principalTable: "AbpEntityChanges", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogActions_AuditLogId", - table: "AbpAuditLogActions", - column: "AuditLogId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogActions_TenantId_ServiceName_MethodName_Execution~", - table: "AbpAuditLogActions", - columns: new[] { "TenantId", "ServiceName", "MethodName", "ExecutionTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogs_TenantId_ExecutionTime", - table: "AbpAuditLogs", - columns: new[] { "TenantId", "ExecutionTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpAuditLogs_TenantId_UserId_ExecutionTime", - table: "AbpAuditLogs", - columns: new[] { "TenantId", "UserId", "ExecutionTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpBackgroundJobs_IsAbandoned_NextTryTime", - table: "AbpBackgroundJobs", - columns: new[] { "IsAbandoned", "NextTryTime" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpDataDictionaryDetails_DataDictionaryId", - table: "AbpDataDictionaryDetails", - column: "DataDictionaryId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityChanges_AuditLogId", - table: "AbpEntityChanges", - column: "AuditLogId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityChanges_TenantId_EntityTypeFullName_EntityId", - table: "AbpEntityChanges", - columns: new[] { "TenantId", "EntityTypeFullName", "EntityId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpEntityPropertyChanges_EntityChangeId", - table: "AbpEntityPropertyChanges", - column: "EntityChangeId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpFeatureGroups_Name", - table: "AbpFeatureGroups", - column: "Name", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpFeatures_GroupName", - table: "AbpFeatures", - column: "GroupName"); - - migrationBuilder.CreateIndex( - name: "IX_AbpFeatures_Name", - table: "AbpFeatures", - column: "Name", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpFeatureValues_Name_ProviderName_ProviderKey", - table: "AbpFeatureValues", - columns: new[] { "Name", "ProviderName", "ProviderKey" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpLanguages_CultureName", - table: "AbpLanguages", - column: "CultureName", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpLanguageTexts_TenantId_ResourceName_CultureName", - table: "AbpLanguageTexts", - columns: new[] { "TenantId", "ResourceName", "CultureName" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpLinkUsers_SourceUserId_SourceTenantId_TargetUserId_Target~", - table: "AbpLinkUsers", - columns: new[] { "SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpNotificationSubscriptions_NotificationId", - table: "AbpNotificationSubscriptions", - column: "NotificationId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpOrganizationUnitRoles_RoleId_OrganizationUnitId", - table: "AbpOrganizationUnitRoles", - columns: new[] { "RoleId", "OrganizationUnitId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpOrganizationUnits_Code", - table: "AbpOrganizationUnits", - column: "Code"); - - migrationBuilder.CreateIndex( - name: "IX_AbpOrganizationUnits_ParentId", - table: "AbpOrganizationUnits", - column: "ParentId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpPermissionGrants_TenantId_Name_ProviderName_ProviderKey", - table: "AbpPermissionGrants", - columns: new[] { "TenantId", "Name", "ProviderName", "ProviderKey" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpPermissionGroups_Name", - table: "AbpPermissionGroups", - column: "Name", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpPermissions_GroupName", - table: "AbpPermissions", - column: "GroupName"); - - migrationBuilder.CreateIndex( - name: "IX_AbpPermissions_Name", - table: "AbpPermissions", - column: "Name", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpRoleClaims_RoleId", - table: "AbpRoleClaims", - column: "RoleId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpRoles_NormalizedName", - table: "AbpRoles", - column: "NormalizedName"); - - migrationBuilder.CreateIndex( - name: "IX_AbpSecurityLogs_TenantId_Action", - table: "AbpSecurityLogs", - columns: new[] { "TenantId", "Action" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpSecurityLogs_TenantId_ApplicationName", - table: "AbpSecurityLogs", - columns: new[] { "TenantId", "ApplicationName" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpSecurityLogs_TenantId_Identity", - table: "AbpSecurityLogs", - columns: new[] { "TenantId", "Identity" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpSecurityLogs_TenantId_UserId", - table: "AbpSecurityLogs", - columns: new[] { "TenantId", "UserId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpSettingDefinitions_Name", - table: "AbpSettingDefinitions", - column: "Name", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpSettings_Name_ProviderName_ProviderKey", - table: "AbpSettings", - columns: new[] { "Name", "ProviderName", "ProviderKey" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpTenants_Name", - table: "AbpTenants", - column: "Name"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserClaims_UserId", - table: "AbpUserClaims", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserLogins_LoginProvider_ProviderKey", - table: "AbpUserLogins", - columns: new[] { "LoginProvider", "ProviderKey" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserOrganizationUnits_UserId_OrganizationUnitId", - table: "AbpUserOrganizationUnits", - columns: new[] { "UserId", "OrganizationUnitId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpUserRoles_RoleId_UserId", - table: "AbpUserRoles", - columns: new[] { "RoleId", "UserId" }); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_Email", - table: "AbpUsers", - column: "Email"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_NormalizedEmail", - table: "AbpUsers", - column: "NormalizedEmail"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_NormalizedUserName", - table: "AbpUsers", - column: "NormalizedUserName"); - - migrationBuilder.CreateIndex( - name: "IX_AbpUsers_UserName", - table: "AbpUsers", - column: "UserName"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "AbpAuditLogActions"); - - migrationBuilder.DropTable( - name: "AbpBackgroundJobs"); - - migrationBuilder.DropTable( - name: "AbpClaimTypes"); - - migrationBuilder.DropTable( - name: "AbpDataDictionaryDetails"); - - migrationBuilder.DropTable( - name: "AbpEntityPropertyChanges"); - - migrationBuilder.DropTable( - name: "AbpFeatureGroups"); - - migrationBuilder.DropTable( - name: "AbpFeatures"); - - migrationBuilder.DropTable( - name: "AbpFeatureValues"); - - migrationBuilder.DropTable( - name: "AbpLanguages"); - - migrationBuilder.DropTable( - name: "AbpLanguageTexts"); - - migrationBuilder.DropTable( - name: "AbpLinkUsers"); - - migrationBuilder.DropTable( - name: "AbpNotificationSubscriptions"); - - migrationBuilder.DropTable( - name: "AbpOrganizationUnitRoles"); - - migrationBuilder.DropTable( - name: "AbpPermissionGrants"); - - migrationBuilder.DropTable( - name: "AbpPermissionGroups"); - - migrationBuilder.DropTable( - name: "AbpPermissions"); - - migrationBuilder.DropTable( - name: "AbpRoleClaims"); - - migrationBuilder.DropTable( - name: "AbpSecurityLogs"); - - migrationBuilder.DropTable( - name: "AbpSettingDefinitions"); - - migrationBuilder.DropTable( - name: "AbpSettings"); - - migrationBuilder.DropTable( - name: "AbpTenantConnectionStrings"); - - migrationBuilder.DropTable( - name: "AbpUserClaims"); - - migrationBuilder.DropTable( - name: "AbpUserDelegations"); - - migrationBuilder.DropTable( - name: "AbpUserLogins"); - - migrationBuilder.DropTable( - name: "AbpUserOrganizationUnits"); - - migrationBuilder.DropTable( - name: "AbpUserRoles"); - - migrationBuilder.DropTable( - name: "AbpUserTokens"); - - migrationBuilder.DropTable( - name: "AbpDataDictionaries"); - - migrationBuilder.DropTable( - name: "AbpEntityChanges"); - - migrationBuilder.DropTable( - name: "AbpNotifications"); - - migrationBuilder.DropTable( - name: "AbpTenants"); - - migrationBuilder.DropTable( - name: "AbpOrganizationUnits"); - - migrationBuilder.DropTable( - name: "AbpRoles"); - - migrationBuilder.DropTable( - name: "AbpUsers"); - - migrationBuilder.DropTable( - name: "AbpAuditLogs"); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs deleted file mode 100644 index b61b968a5..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ /dev/null @@ -1,1988 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using MyCompanyName.MyProjectName.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore; - -#nullable disable - -namespace MyCompanyName.MyProjectName.Migrations -{ - [DbContext(typeof(MyProjectNameDbContext))] - partial class MyProjectNameDbContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) - .HasAnnotation("ProductVersion", "8.0.0") - .HasAnnotation("Relational:MaxIdentifierLength", 64); - - modelBuilder.Entity("Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionary", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Code") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.Property("DisplayText") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("AbpDataDictionaries", (string)null); - }); - - modelBuilder.Entity("Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionaryDetail", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Code") - .HasColumnType("longtext"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("DataDictionaryId") - .HasColumnType("char(36)"); - - b.Property("Description") - .HasColumnType("longtext"); - - b.Property("DisplayText") - .HasColumnType("longtext"); - - b.Property("IsEnabled") - .HasColumnType("tinyint(1)"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("Order") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("DataDictionaryId"); - - b.ToTable("AbpDataDictionaryDetails", (string)null); - }); - - modelBuilder.Entity("Lion.AbpPro.LanguageManagement.LanguageTexts.Aggregates.LanguageText", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("CultureName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasComment("语言名称"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasComment("名称"); - - b.Property("ResourceName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasComment("资源名称"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasComment("值"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "ResourceName", "CultureName"); - - b.ToTable("AbpLanguageTexts", (string)null); - }); - - modelBuilder.Entity("Lion.AbpPro.LanguageManagement.Languages.Aggregates.Language", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("CultureName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasComment("语言名称"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasComment("显示名称"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("FlagIcon") - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasComment("图标"); - - b.Property("IsDefault") - .HasColumnType("tinyint(1)"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("IsEnabled") - .HasColumnType("tinyint(1)"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("UiCultureName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasComment("Ui语言名称"); - - b.HasKey("Id"); - - b.HasIndex("CultureName") - .IsUnique(); - - b.ToTable("AbpLanguages", (string)null); - }); - - modelBuilder.Entity("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.Notification", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Content") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("MessageLevel") - .HasColumnType("int"); - - b.Property("MessageType") - .HasColumnType("int"); - - b.Property("SenderId") - .HasColumnType("char(36)"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.HasKey("Id"); - - b.ToTable("AbpNotifications", (string)null); - }); - - modelBuilder.Entity("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.NotificationSubscription", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("NotificationId") - .HasColumnType("char(36)"); - - b.Property("Read") - .HasColumnType("tinyint(1)"); - - b.Property("ReadTime") - .HasColumnType("datetime(6)"); - - b.Property("ReceiveId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("NotificationId"); - - b.ToTable("AbpNotificationSubscriptions", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ApplicationName") - .HasMaxLength(96) - .HasColumnType("varchar(96)") - .HasColumnName("ApplicationName"); - - b.Property("BrowserInfo") - .HasMaxLength(512) - .HasColumnType("varchar(512)") - .HasColumnName("BrowserInfo"); - - b.Property("ClientId") - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("ClientId"); - - b.Property("ClientIpAddress") - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("ClientIpAddress"); - - b.Property("ClientName") - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasColumnName("ClientName"); - - b.Property("Comments") - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("Comments"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CorrelationId") - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("CorrelationId"); - - b.Property("Exceptions") - .HasColumnType("longtext"); - - b.Property("ExecutionDuration") - .HasColumnType("int") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime") - .HasColumnType("datetime(6)"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("HttpMethod") - .HasMaxLength(16) - .HasColumnType("varchar(16)") - .HasColumnName("HttpMethod"); - - b.Property("HttpStatusCode") - .HasColumnType("int") - .HasColumnName("HttpStatusCode"); - - b.Property("ImpersonatorTenantId") - .HasColumnType("char(36)") - .HasColumnName("ImpersonatorTenantId"); - - b.Property("ImpersonatorTenantName") - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("ImpersonatorTenantName"); - - b.Property("ImpersonatorUserId") - .HasColumnType("char(36)") - .HasColumnName("ImpersonatorUserId"); - - b.Property("ImpersonatorUserName") - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("ImpersonatorUserName"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.Property("TenantName") - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("TenantName"); - - b.Property("Url") - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("Url"); - - b.Property("UserId") - .HasColumnType("char(36)") - .HasColumnName("UserId"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("UserName"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "ExecutionTime"); - - b.HasIndex("TenantId", "UserId", "ExecutionTime"); - - b.ToTable("AbpAuditLogs", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AuditLogId") - .HasColumnType("char(36)") - .HasColumnName("AuditLogId"); - - b.Property("ExecutionDuration") - .HasColumnType("int") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime") - .HasColumnType("datetime(6)") - .HasColumnName("ExecutionTime"); - - b.Property("ExtraProperties") - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("MethodName") - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasColumnName("MethodName"); - - b.Property("Parameters") - .HasMaxLength(2000) - .HasColumnType("varchar(2000)") - .HasColumnName("Parameters"); - - b.Property("ServiceName") - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("ServiceName"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("AuditLogId"); - - b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); - - b.ToTable("AbpAuditLogActions", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AuditLogId") - .HasColumnType("char(36)") - .HasColumnName("AuditLogId"); - - b.Property("ChangeTime") - .HasColumnType("datetime(6)") - .HasColumnName("ChangeTime"); - - b.Property("ChangeType") - .HasColumnType("tinyint unsigned") - .HasColumnName("ChangeType"); - - b.Property("EntityId") - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasColumnName("EntityId"); - - b.Property("EntityTenantId") - .HasColumnType("char(36)"); - - b.Property("EntityTypeFullName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasColumnName("EntityTypeFullName"); - - b.Property("ExtraProperties") - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("AuditLogId"); - - b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); - - b.ToTable("AbpEntityChanges", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("EntityChangeId") - .HasColumnType("char(36)"); - - b.Property("NewValue") - .HasMaxLength(512) - .HasColumnType("varchar(512)") - .HasColumnName("NewValue"); - - b.Property("OriginalValue") - .HasMaxLength(512) - .HasColumnType("varchar(512)") - .HasColumnName("OriginalValue"); - - b.Property("PropertyName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasColumnName("PropertyName"); - - b.Property("PropertyTypeFullName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("PropertyTypeFullName"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("EntityChangeId"); - - b.ToTable("AbpEntityPropertyChanges", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsAbandoned") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false); - - b.Property("JobArgs") - .IsRequired() - .HasMaxLength(1048576) - .HasColumnType("longtext"); - - b.Property("JobName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("LastTryTime") - .HasColumnType("datetime(6)"); - - b.Property("NextTryTime") - .HasColumnType("datetime(6)"); - - b.Property("Priority") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint unsigned") - .HasDefaultValue((byte)15); - - b.Property("TryCount") - .ValueGeneratedOnAdd() - .HasColumnType("smallint") - .HasDefaultValue((short)0); - - b.HasKey("Id"); - - b.HasIndex("IsAbandoned", "NextTryTime"); - - b.ToTable("AbpBackgroundJobs", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureDefinitionRecord", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AllowedProviders") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("Description") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("GroupName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("IsAvailableToHost") - .HasColumnType("tinyint(1)"); - - b.Property("IsVisibleToClients") - .HasColumnType("tinyint(1)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("ParentName") - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("ValueType") - .HasMaxLength(2048) - .HasColumnType("varchar(2048)"); - - b.HasKey("Id"); - - b.HasIndex("GroupName"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpFeatures", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpFeatureGroups", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("ProviderKey") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ProviderName") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey") - .IsUnique(); - - b.ToTable("AbpFeatureValues", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Description") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsStatic") - .HasColumnType("tinyint(1)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("Regex") - .HasMaxLength(512) - .HasColumnType("varchar(512)"); - - b.Property("RegexDescription") - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("Required") - .HasColumnType("tinyint(1)"); - - b.Property("ValueType") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("AbpClaimTypes", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("SourceTenantId") - .HasColumnType("char(36)"); - - b.Property("SourceUserId") - .HasColumnType("char(36)"); - - b.Property("TargetTenantId") - .HasColumnType("char(36)"); - - b.Property("TargetUserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") - .IsUnique(); - - b.ToTable("AbpLinkUsers", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsDefault") - .HasColumnType("tinyint(1)") - .HasColumnName("IsDefault"); - - b.Property("IsPublic") - .HasColumnType("tinyint(1)") - .HasColumnName("IsPublic"); - - b.Property("IsStatic") - .HasColumnType("tinyint(1)") - .HasColumnName("IsStatic"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("NormalizedName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName"); - - b.ToTable("AbpRoles", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ClaimType") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ClaimValue") - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.Property("RoleId") - .HasColumnType("char(36)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AbpRoleClaims", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Action") - .HasMaxLength(96) - .HasColumnType("varchar(96)"); - - b.Property("ApplicationName") - .HasMaxLength(96) - .HasColumnType("varchar(96)"); - - b.Property("BrowserInfo") - .HasMaxLength(512) - .HasColumnType("varchar(512)"); - - b.Property("ClientId") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ClientIpAddress") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CorrelationId") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("Identity") - .HasMaxLength(96) - .HasColumnType("varchar(96)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.Property("TenantName") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Action"); - - b.HasIndex("TenantId", "ApplicationName"); - - b.HasIndex("TenantId", "Identity"); - - b.HasIndex("TenantId", "UserId"); - - b.ToTable("AbpSecurityLogs", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("AccessFailedCount") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasDefaultValue(0) - .HasColumnName("AccessFailedCount"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("Email"); - - b.Property("EmailConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("EmailConfirmed"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsActive") - .HasColumnType("tinyint(1)") - .HasColumnName("IsActive"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("IsExternal") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsExternal"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("LastPasswordChangeTime") - .HasColumnType("datetime(6)"); - - b.Property("LockoutEnabled") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("LockoutEnabled"); - - b.Property("LockoutEnd") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("Name"); - - b.Property("NormalizedEmail") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("NormalizedEmail"); - - b.Property("NormalizedUserName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("NormalizedUserName"); - - b.Property("PasswordHash") - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("PasswordHash"); - - b.Property("PhoneNumber") - .HasMaxLength(16) - .HasColumnType("varchar(16)") - .HasColumnName("PhoneNumber"); - - b.Property("PhoneNumberConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("PhoneNumberConfirmed"); - - b.Property("SecurityStamp") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("SecurityStamp"); - - b.Property("ShouldChangePasswordOnNextLogin") - .HasColumnType("tinyint(1)"); - - b.Property("Surname") - .HasMaxLength(64) - .HasColumnType("varchar(64)") - .HasColumnName("Surname"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.Property("TwoFactorEnabled") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("TwoFactorEnabled"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)") - .HasColumnName("UserName"); - - b.HasKey("Id"); - - b.HasIndex("Email"); - - b.HasIndex("NormalizedEmail"); - - b.HasIndex("NormalizedUserName"); - - b.HasIndex("UserName"); - - b.ToTable("AbpUsers", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ClaimType") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ClaimValue") - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AbpUserClaims", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserDelegation", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("EndTime") - .HasColumnType("datetime(6)"); - - b.Property("SourceUserId") - .HasColumnType("char(36)"); - - b.Property("StartTime") - .HasColumnType("datetime(6)"); - - b.Property("TargetUserId") - .HasColumnType("char(36)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("AbpUserDelegations", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("LoginProvider") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ProviderDisplayName") - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("ProviderKey") - .IsRequired() - .HasMaxLength(196) - .HasColumnType("varchar(196)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("UserId", "LoginProvider"); - - b.HasIndex("LoginProvider", "ProviderKey"); - - b.ToTable("AbpUserLogins", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => - { - b.Property("OrganizationUnitId") - .HasColumnType("char(36)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("OrganizationUnitId", "UserId"); - - b.HasIndex("UserId", "OrganizationUnitId"); - - b.ToTable("AbpUserOrganizationUnits", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("RoleId") - .HasColumnType("char(36)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId", "UserId"); - - b.ToTable("AbpUserRoles", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("LoginProvider") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("Name") - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.Property("Value") - .HasColumnType("longtext"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AbpUserTokens", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Code") - .IsRequired() - .HasMaxLength(95) - .HasColumnType("varchar(95)") - .HasColumnName("Code"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") - .HasColumnName("DisplayName"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("ParentId") - .HasColumnType("char(36)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("Code"); - - b.HasIndex("ParentId"); - - b.ToTable("AbpOrganizationUnits", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => - { - b.Property("OrganizationUnitId") - .HasColumnType("char(36)"); - - b.Property("RoleId") - .HasColumnType("char(36)"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("OrganizationUnitId", "RoleId"); - - b.HasIndex("RoleId", "OrganizationUnitId"); - - b.ToTable("AbpOrganizationUnitRoles", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionDefinitionRecord", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("GroupName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("IsEnabled") - .HasColumnType("tinyint(1)"); - - b.Property("MultiTenancySide") - .HasColumnType("tinyint unsigned"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("ParentName") - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("StateCheckers") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("GroupName"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpPermissions", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("ProviderKey") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ProviderName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("TenantId") - .HasColumnType("char(36)") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") - .IsUnique(); - - b.ToTable("AbpPermissionGrants", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpPermissionGroups", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("ProviderKey") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("ProviderName") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2048) - .HasColumnType("varchar(2048)"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey") - .IsUnique(); - - b.ToTable("AbpSettings", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.SettingManagement.SettingDefinitionRecord", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("DefaultValue") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("Description") - .HasMaxLength(512) - .HasColumnType("varchar(512)"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsEncrypted") - .HasColumnType("tinyint(1)"); - - b.Property("IsInherited") - .HasColumnType("tinyint(1)"); - - b.Property("IsVisibleToClients") - .HasColumnType("tinyint(1)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("Providers") - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name") - .IsUnique(); - - b.ToTable("AbpSettingDefinitions", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => - { - b.Property("Id") - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .IsRequired() - .HasMaxLength(40) - .HasColumnType("varchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime(6)") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("char(36)") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("char(36)") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime(6)") - .HasColumnName("DeletionTime"); - - b.Property("EntityVersion") - .HasColumnType("int"); - - b.Property("ExtraProperties") - .IsRequired() - .HasColumnType("longtext") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("tinyint(1)") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime(6)") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("char(36)") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.HasKey("Id"); - - b.HasIndex("Name"); - - b.ToTable("AbpTenants", (string)null); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.Property("TenantId") - .HasColumnType("char(36)"); - - b.Property("Name") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.HasKey("TenantId", "Name"); - - b.ToTable("AbpTenantConnectionStrings", (string)null); - }); - - modelBuilder.Entity("Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionaryDetail", b => - { - b.HasOne("Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionary", null) - .WithMany("Details") - .HasForeignKey("DataDictionaryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.NotificationSubscription", b => - { - b.HasOne("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.Notification", null) - .WithMany("NotificationSubscriptions") - .HasForeignKey("NotificationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) - .WithMany("Actions") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) - .WithMany("EntityChanges") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) - .WithMany("PropertyChanges") - .HasForeignKey("EntityChangeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany("Claims") - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Claims") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Logins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => - { - b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) - .WithMany() - .HasForeignKey("OrganizationUnitId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("OrganizationUnits") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Roles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Tokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => - { - b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) - .WithMany() - .HasForeignKey("ParentId"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => - { - b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) - .WithMany("Roles") - .HasForeignKey("OrganizationUnitId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.HasOne("Volo.Abp.TenantManagement.Tenant", null) - .WithMany("ConnectionStrings") - .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Lion.AbpPro.DataDictionaryManagement.DataDictionaries.Aggregates.DataDictionary", b => - { - b.Navigation("Details"); - }); - - modelBuilder.Entity("Lion.AbpPro.NotificationManagement.Notifications.Aggregates.Notification", b => - { - b.Navigation("NotificationSubscriptions"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => - { - b.Navigation("Actions"); - - b.Navigation("EntityChanges"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.Navigation("PropertyChanges"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => - { - b.Navigation("Claims"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => - { - b.Navigation("Claims"); - - b.Navigation("Logins"); - - b.Navigation("OrganizationUnits"); - - b.Navigation("Roles"); - - b.Navigation("Tokens"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => - { - b.Navigation("Roles"); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => - { - b.Navigation("ConnectionStrings"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj deleted file mode 100644 index 314a25111..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj +++ /dev/null @@ -1,27 +0,0 @@ - - - - - net8.0 - MyCompanyName.MyProjectName - - - - - - - - - - - - - - - - - runtime; build; native; contentfiles; analyzers - compile; contentFiles; build; buildMultitargeting; buildTransitive; analyzers; native - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Properties/AssemblyInfo.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Properties/AssemblyInfo.cs deleted file mode 100644 index 1a661917c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,2 +0,0 @@ -using System.Runtime.CompilerServices; -[assembly:InternalsVisibleToAttribute("MyCompanyName.MyProjectName.EntityFrameworkCore.Tests")] diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/FreeSqlBasicRepository.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/FreeSqlBasicRepository.cs deleted file mode 100644 index 185fcf3c9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/FreeSqlBasicRepository.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace MyCompanyName.MyProjectName.FreeSqlRepository; - -public abstract class FreeSqlBasicRepository : DomainService -{ - protected IFreeSql FreeSql => LazyServiceProvider.LazyGetRequiredService(); - - private ICancellationTokenProvider CancellationTokenProvider => - LazyServiceProvider.LazyGetService(NullCancellationTokenProvider.Instance); - - protected virtual CancellationToken GetCancellationToken(CancellationToken preferredValue = default) - { - return CancellationTokenProvider.FallbackToProvider(preferredValue); - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/GlobalUsings.cs deleted file mode 100644 index 39a34c3d9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/GlobalUsings.cs +++ /dev/null @@ -1,7 +0,0 @@ -// Global using directives - -global using Microsoft.Extensions.Configuration; -global using Microsoft.Extensions.DependencyInjection; -global using Volo.Abp.Domain.Services; -global using Volo.Abp.Modularity; -global using Volo.Abp.Threading; \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/MyCompanyName.MyProjectName.FreeSqlRepository.csproj b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/MyCompanyName.MyProjectName.FreeSqlRepository.csproj deleted file mode 100644 index 282b91159..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/MyCompanyName.MyProjectName.FreeSqlRepository.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - net8.0 - enable - - - - - - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/MyProjectNameFreeSqlModule.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/MyProjectNameFreeSqlModule.cs deleted file mode 100644 index c68f0cc5e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.FreeSqlRepository/MyProjectNameFreeSqlModule.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace MyCompanyName.MyProjectName.FreeSqlRepository; - -public class MyProjectNameFreeSqlModule : AbpModule -{ - public override void ConfigureServices(ServiceConfigurationContext context) - { - var configuration = context.Services.GetConfiguration(); - var connectionString = configuration.GetConnectionString("Default"); - var freeSql = new FreeSql.FreeSqlBuilder() - .UseConnectionString(FreeSql.DataType.MySql, connectionString) - .Build(); - - context.Services.AddSingleton(freeSql); - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/GlobalUsings.cs deleted file mode 100644 index 486bb158d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/GlobalUsings.cs +++ /dev/null @@ -1,14 +0,0 @@ -// Global using directives - -global using Lion.AbpPro.BasicManagement; -global using Lion.AbpPro.DataDictionaryManagement; -global using Lion.AbpPro.LanguageManagement; -global using Lion.AbpPro.NotificationManagement; -global using Microsoft.Extensions.DependencyInjection; -global using Volo.Abp.Account; -global using Volo.Abp.FeatureManagement; -global using Volo.Abp.Identity; -global using Volo.Abp.Modularity; -global using Volo.Abp.PermissionManagement; -global using Volo.Abp.SettingManagement; -global using Volo.Abp.TenantManagement; \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj deleted file mode 100644 index 3d0f1ae03..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyCompanyName.MyProjectName.HttpApi.Client.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - net8.0 - MyCompanyName.MyProjectName - - - - - - - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyProjectNameHttpApiClientModule.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyProjectNameHttpApiClientModule.cs deleted file mode 100644 index 7ee2697c5..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/MyProjectNameHttpApiClientModule.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - [DependsOn( - typeof(MyProjectNameApplicationContractsModule), - typeof(BasicManagementHttpApiClientModule), - typeof(NotificationManagementHttpApiClientModule), - typeof(DataDictionaryManagementHttpApiClientModule), - typeof(LanguageManagementHttpApiClientModule) - )] - public class MyProjectNameHttpApiClientModule : AbpModule - { - public const string RemoteServiceName = "Default"; - - public override void ConfigureServices(ServiceConfigurationContext context) - { - context.Services.AddHttpClientProxies( - typeof(MyProjectNameApplicationContractsModule).Assembly, - RemoteServiceName - ); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/Controllers/MyProjectNameController.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/Controllers/MyProjectNameController.cs deleted file mode 100644 index c154c52b7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/Controllers/MyProjectNameController.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace MyCompanyName.MyProjectName.Controllers -{ - /* Inherit your controllers from this class. - */ - public abstract class MyProjectNameController : AbpController - { - protected MyProjectNameController() - { - LocalizationResource = typeof(MyProjectNameResource); - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/GlobalUsings.cs deleted file mode 100644 index a6988bb75..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/GlobalUsings.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Global using directives - - -global using Lion.AbpPro.BasicManagement; -global using Lion.AbpPro.DataDictionaryManagement; -global using Lion.AbpPro.LanguageManagement; -global using Lion.AbpPro.NotificationManagement; -global using Localization.Resources.AbpUi; -global using Microsoft.AspNetCore.Mvc; -global using Swashbuckle.AspNetCore.Annotations; -global using Volo.Abp.AspNetCore.Mvc; -global using Volo.Abp.Localization; -global using Volo.Abp.Modularity; \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj deleted file mode 100644 index 1d2950a8a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyCompanyName.MyProjectName.HttpApi.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - - - net8.0 - MyCompanyName.MyProjectName - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameHttpApiModule.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameHttpApiModule.cs deleted file mode 100644 index e7cfc6ef1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameHttpApiModule.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - [DependsOn( - typeof(MyProjectNameApplicationContractsModule), - typeof(BasicManagementHttpApiModule), - typeof(NotificationManagementHttpApiModule), - typeof(DataDictionaryManagementHttpApiModule), - typeof(LanguageManagementHttpApiModule) - )] - public class MyProjectNameHttpApiModule : AbpModule - { - public override void ConfigureServices(ServiceConfigurationContext context) - { - ConfigureLocalization(); - } - - private void ConfigureLocalization() - { - Configure(options => - { - options.Resources - .Get() - .AddBaseTypes( - typeof(AbpUiResource) - ); - }); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/GlobalUsings.cs deleted file mode 100644 index 6832035c9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/GlobalUsings.cs +++ /dev/null @@ -1,6 +0,0 @@ -// Global using directives - -global using System.Threading.Tasks; -global using Shouldly; -global using Volo.Abp.Identity; -global using Xunit; \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj deleted file mode 100644 index 111970e51..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyCompanyName.MyProjectName.Application.Tests.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - - net8.0 - MyCompanyName.MyProjectName - false - - - - - - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestBase.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestBase.cs deleted file mode 100644 index 30a79796f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestBase.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - public abstract class MyProjectNameApplicationTestBase : MyProjectNameTestBase - { - - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestModule.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestModule.cs deleted file mode 100644 index 19d3b40a9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/MyProjectNameApplicationTestModule.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Volo.Abp.Modularity; - -namespace MyCompanyName.MyProjectName -{ - [DependsOn( - typeof(MyProjectNameApplicationModule), - typeof(MyProjectNameDomainTestModule) - )] - public class MyProjectNameApplicationTestModule : AbpModule - { - - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppServiceTests.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppServiceTests.cs deleted file mode 100644 index 7ca7adbb3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/Samples/SampleAppServiceTests.cs +++ /dev/null @@ -1,28 +0,0 @@ -namespace MyCompanyName.MyProjectName.Samples -{ - /* This is just an example test class. - * Normally, you don't test code of the modules you are using - * (like IIdentityUserAppService here). - * Only test your own application services. - */ - public class SampleAppServiceTests : MyProjectNameApplicationTestBase - { - private readonly IIdentityUserAppService _userAppService; - - public SampleAppServiceTests() - { - _userAppService = GetRequiredService(); - } - - [Fact] - public async Task Initial_Data_Should_Contain_Admin_User() - { - //Act - var result = await _userAppService.GetListAsync(new GetIdentityUsersInput()); - - //Assert - result.TotalCount.ShouldBeGreaterThan(0); - result.Items.ShouldContain(u => u.UserName == "admin"); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/GlobalUsings.cs deleted file mode 100644 index 74d9000ff..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/GlobalUsings.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Global using directives - -global using System; -global using System.Collections.Generic; -global using System.Linq; -global using System.Threading.Tasks; -global using MyCompanyName.MyProjectName.EntityFrameworkCore; -global using Shouldly; -global using Volo.Abp; -global using Volo.Abp.Identity; -global using Volo.Abp.Localization; -global using Volo.Abp.Modularity; -global using Xunit; \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Localizations/LocalizationHelper_Tests.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Localizations/LocalizationHelper_Tests.cs deleted file mode 100644 index e9d0706d2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Localizations/LocalizationHelper_Tests.cs +++ /dev/null @@ -1,40 +0,0 @@ -// namespace MyCompanyName.MyProjectName.Localizations -// { -// public class LocalizationHelper_Tests:MyProjectNameDomainTestBase -// { -// [Fact] -// public void Test_LocalizationHelper_L_OK() -// { -// using (CultureHelper.Use("en")) -// { -// var enValue = LocalizationHelper.L["Welcome"]; -// enValue.Value.ShouldBe("Welcome"); -// } -// -// using (CultureHelper.Use("zh-Hans")) -// { -// -// var enValue = LocalizationHelper.L["Welcome"]; -// enValue.Value.ShouldBe("欢迎"); -// } -// } -// -// [Fact] -// public void Test_ToLocalicationDescription_L_OK() -// { -// var test = new {TestType=TestType.Cancel}; -// using (CultureHelper.Use("en")) -// { -// var enValue = test.TestType.ToLocalicationDescription(); -// enValue.ShouldBe("Cancel"); -// } -// -// using (CultureHelper.Use("zh-Hans")) -// { -// -// var enValue = test.TestType.ToLocalicationDescription(); -// enValue.ShouldBe("取消"); -// } -// } -// } -// } \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Localizations/TestType.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Localizations/TestType.cs deleted file mode 100644 index 24eab9814..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Localizations/TestType.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace MyCompanyName.MyProjectName.Localizations -{ - public enum TestType - { - Created, - Cancel, - Delete - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyCompanyName.MyProjectName.Domain.Tests.csproj b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyCompanyName.MyProjectName.Domain.Tests.csproj deleted file mode 100644 index 6e1650511..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyCompanyName.MyProjectName.Domain.Tests.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - - net8.0 - MyCompanyName.MyProjectName - false - - - - - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestBase.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestBase.cs deleted file mode 100644 index f469739e3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestBase.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - public abstract class MyProjectNameDomainTestBase : MyProjectNameTestBase - { - public MyProjectNameDomainTestBase() - { - - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs deleted file mode 100644 index b899fac79..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/MyProjectNameDomainTestModule.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - [DependsOn( - typeof(MyProjectNameEntityFrameworkCoreTestModule) - )] - public class MyProjectNameDomainTestModule : AbpModule - { - - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleDomainTests.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleDomainTests.cs deleted file mode 100644 index e52bb22ad..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/Samples/SampleDomainTests.cs +++ /dev/null @@ -1,40 +0,0 @@ -namespace MyCompanyName.MyProjectName.Samples -{ - /* This is just an example test class. - * Normally, you don't test code of the modules you are using - * (like IdentityUserManager here). - * Only test your own domain services. - */ - public class SampleDomainTests : MyProjectNameDomainTestBase - { - private readonly IIdentityUserRepository _identityUserRepository; - private readonly IdentityUserManager _identityUserManager; - - public SampleDomainTests() - { - _identityUserRepository = GetRequiredService(); - _identityUserManager = GetRequiredService(); - } - - [Fact] - public async Task Should_Set_Email_Of_A_User() - { - IdentityUser adminUser; - - /* Need to manually start Unit Of Work because - * FirstOrDefaultAsync should be executed while db connection / context is available. - */ - await WithUnitOfWorkAsync(async () => - { - adminUser = await _identityUserRepository - .FindByNormalizedUserNameAsync("ADMIN"); - - await _identityUserManager.SetEmailAsync(adminUser, "newemail@abp.io"); - await _identityUserRepository.UpdateAsync(adminUser); - }); - - adminUser = await _identityUserRepository.FindByNormalizedUserNameAsync("ADMIN"); - adminUser.Email.ShouldBe("newemail@abp.io"); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestBase.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestBase.cs deleted file mode 100644 index 23289b966..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestBase.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace MyCompanyName.MyProjectName.EntityFrameworkCore -{ - public abstract class MyProjectNameEntityFrameworkCoreTestBase : MyProjectNameTestBase - { - - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs deleted file mode 100644 index 48ec98300..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreTestModule.cs +++ /dev/null @@ -1,52 +0,0 @@ -namespace MyCompanyName.MyProjectName.EntityFrameworkCore -{ - [DependsOn( - typeof(MyProjectNameTestBaseModule), - typeof(MyProjectNameEntityFrameworkCoreModule), - typeof(AbpEntityFrameworkCoreSqliteModule) - )] - public class MyProjectNameEntityFrameworkCoreTestModule : AbpModule - { - private SqliteConnection _sqliteConnection; - - public override void ConfigureServices(ServiceConfigurationContext context) - { - ConfigureInMemorySqlite(context.Services); - } - - private void ConfigureInMemorySqlite(IServiceCollection services) - { - _sqliteConnection = CreateDatabaseAndGetConnection(); - - services.Configure(options => - { - options.Configure(context => - { - context.DbContextOptions.UseSqlite(_sqliteConnection); - }); - }); - } - - public override void OnApplicationShutdown(ApplicationShutdownContext context) - { - _sqliteConnection.Dispose(); - } - - private static SqliteConnection CreateDatabaseAndGetConnection() - { - var connection = new SqliteConnection("Data Source=:memory:"); - connection.Open(); - - var options = new DbContextOptionsBuilder() - .UseSqlite(connection) - .Options; - - using (var context = new MyProjectNameDbContext(options)) - { - context.GetService().CreateTables(); - } - - return connection; - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/GlobalUsings.cs deleted file mode 100644 index 9c9e9b296..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/GlobalUsings.cs +++ /dev/null @@ -1,11 +0,0 @@ -// Global using directives - -global using Microsoft.Data.Sqlite; -global using Microsoft.EntityFrameworkCore; -global using Microsoft.EntityFrameworkCore.Infrastructure; -global using Microsoft.EntityFrameworkCore.Storage; -global using Microsoft.Extensions.DependencyInjection; -global using Volo.Abp; -global using Volo.Abp.EntityFrameworkCore; -global using Volo.Abp.EntityFrameworkCore.Sqlite; -global using Volo.Abp.Modularity; \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj deleted file mode 100644 index 615bb9466..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - - net8.0 - MyCompanyName.MyProjectName - false - - - - - - - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs deleted file mode 100644 index 9111554d9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp -{ - public class ClientDemoService : ITransientDependency - { - private readonly IProfileAppService _profileAppService; - - public ClientDemoService(IProfileAppService profileAppService) - { - _profileAppService = profileAppService; - } - - public async Task RunAsync() - { - var output = await _profileAppService.GetAsync(); - Console.WriteLine($"UserName : {output.UserName}"); - Console.WriteLine($"Email : {output.Email}"); - Console.WriteLine($"Name : {output.Name}"); - Console.WriteLine($"Surname : {output.Surname}"); - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs deleted file mode 100644 index facdacf2f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp -{ - public class ConsoleTestAppHostedService : IHostedService - { - public async Task StartAsync(CancellationToken cancellationToken) - { - using (var application = AbpApplicationFactory.Create()) - { - application.Initialize(); - - var demo = application.ServiceProvider.GetRequiredService(); - await demo.RunAsync(); - - application.Shutdown(); - } - } - - public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/GlobalUsings.cs deleted file mode 100644 index eaf034e0d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/GlobalUsings.cs +++ /dev/null @@ -1,14 +0,0 @@ -// Global using directives - -global using System; -global using System.Threading; -global using System.Threading.Tasks; -global using Microsoft.Extensions.DependencyInjection; -global using Microsoft.Extensions.Hosting; -global using Polly; -global using Volo.Abp; -global using Volo.Abp.Account; -global using Volo.Abp.DependencyInjection; -global using Volo.Abp.Http.Client; -global using Volo.Abp.Http.Client.IdentityModel; -global using Volo.Abp.Modularity; \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj deleted file mode 100644 index 6bde14250..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj +++ /dev/null @@ -1,31 +0,0 @@ - - - - - Exe - net8.0 - false - - - - - - - - - PreserveNewest - Always - - - - - - - - - - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyProjectNameConsoleApiClientModule.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyProjectNameConsoleApiClientModule.cs deleted file mode 100644 index dfe6cacb5..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyProjectNameConsoleApiClientModule.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp -{ - [DependsOn( - typeof(MyProjectNameHttpApiClientModule), - typeof(AbpHttpClientIdentityModelModule) - )] - public class MyProjectNameConsoleApiClientModule : AbpModule - { - public override void PreConfigureServices(ServiceConfigurationContext context) - { - PreConfigure(options => - { - options.ProxyClientBuildActions.Add((remoteServiceName, clientBuilder) => - { - clientBuilder.AddTransientHttpErrorPolicy( - policyBuilder => policyBuilder.WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(Math.Pow(2, i))) - ); - }); - }); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs deleted file mode 100644 index da497ff1a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp -{ - class Program - { - static async Task Main(string[] args) - { - await CreateHostBuilder(args).RunConsoleAsync(); - } - - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureServices((hostContext, services) => - { - services.AddHostedService(); - }); - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.json deleted file mode 100644 index 133028ac1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "RemoteServices": { - "Default": { - "BaseUrl": "https://localhost:44315" - } - }, - "IdentityClients": { - "Default": { - "GrantType": "password", - "ClientId": "MyProjectName_App", - "ClientSecret": "1q2w3e*", - "UserName": "admin", - "UserPassword": "1q2w3E*", - "Authority": "https://localhost:44354", - "Scope": "MyProjectName" - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.secrets.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.secrets.json deleted file mode 100644 index 7a73a41bf..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.secrets.json +++ /dev/null @@ -1,2 +0,0 @@ -{ -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/GlobalUsings.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/GlobalUsings.cs deleted file mode 100644 index 3af675114..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/GlobalUsings.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Global using directives - -global using System; -global using System.Collections.Generic; -global using System.Security.Claims; -global using System.Threading.Tasks; -global using Microsoft.Extensions.DependencyInjection; -global using Volo.Abp; -global using Volo.Abp.Authorization; -global using Volo.Abp.Authorization.Permissions; -global using Volo.Abp.Autofac; -global using Volo.Abp.BackgroundJobs; -global using Volo.Abp.Data; -global using Volo.Abp.DependencyInjection; -global using Volo.Abp.Guids; -global using Volo.Abp.Modularity; -global using Volo.Abp.MultiTenancy; -global using Volo.Abp.PermissionManagement; -global using Volo.Abp.Security.Claims; -global using Volo.Abp.Testing; -global using Volo.Abp.Threading; -global using Volo.Abp.Uow; \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyCompanyName.MyProjectName.TestBase.csproj b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyCompanyName.MyProjectName.TestBase.csproj deleted file mode 100644 index 0e54a54d0..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyCompanyName.MyProjectName.TestBase.csproj +++ /dev/null @@ -1,34 +0,0 @@ - - - - - net8.0 - MyCompanyName.MyProjectName - false - - - - - - - - - - - - - - - - - - - - - true - PreserveNewest - PreserveNewest - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBase.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBase.cs deleted file mode 100644 index 7afa1165b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBase.cs +++ /dev/null @@ -1,53 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - /* All test classes are derived from this class, directly or indirectly. - */ - public abstract class MyProjectNameTestBase : AbpIntegratedTest - where TStartupModule : IAbpModule - { - protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) - { - options.UseAutofac(); - } - - protected virtual Task WithUnitOfWorkAsync(Func func) - { - return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); - } - - protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func action) - { - using (var scope = ServiceProvider.CreateScope()) - { - var uowManager = scope.ServiceProvider.GetRequiredService(); - - using (var uow = uowManager.Begin(options)) - { - await action(); - - await uow.CompleteAsync(); - } - } - } - - protected virtual Task WithUnitOfWorkAsync(Func> func) - { - return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); - } - - protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func> func) - { - using (var scope = ServiceProvider.CreateScope()) - { - var uowManager = scope.ServiceProvider.GetRequiredService(); - - using (var uow = uowManager.Begin(options)) - { - var result = await func(); - await uow.CompleteAsync(); - return result; - } - } - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs deleted file mode 100644 index d303be6ff..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestBaseModule.cs +++ /dev/null @@ -1,41 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - [DependsOn( - typeof(AbpAutofacModule), - typeof(AbpTestBaseModule), - typeof(AbpAuthorizationModule), - typeof(MyProjectNameDomainModule) - )] - public class MyProjectNameTestBaseModule : AbpModule - { - - - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => - { - options.IsJobExecutionEnabled = false; - }); - - context.Services.AddAlwaysAllowAuthorization(); - } - - public override void OnApplicationInitialization(ApplicationInitializationContext context) - { - SeedTestData(context); - } - - private static void SeedTestData(ApplicationInitializationContext context) - { - AsyncHelper.RunSync(async () => - { - using (var scope = context.ServiceProvider.CreateScope()) - { - await scope.ServiceProvider - .GetRequiredService() - .SeedAsync(); - } - }); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestDataSeedContributor.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestDataSeedContributor.cs deleted file mode 100644 index edb9918b8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/MyProjectNameTestDataSeedContributor.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace MyCompanyName.MyProjectName -{ - public class MyProjectNameTestDataSeedContributor : IDataSeedContributor, ITransientDependency - { - public Task SeedAsync(DataSeedContext context) - { - /* Seed additional test data... */ - - return Task.CompletedTask; - } - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/Security/FakeCurrentPrincipalAccessor.cs b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/Security/FakeCurrentPrincipalAccessor.cs deleted file mode 100644 index 6d47312a6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/Security/FakeCurrentPrincipalAccessor.cs +++ /dev/null @@ -1,38 +0,0 @@ -namespace MyCompanyName.MyProjectName.Security -{ - [Dependency(ReplaceServices = true)] - public class FakeCurrentPrincipalAccessor : ThreadCurrentPrincipalAccessor - { - protected override ClaimsPrincipal GetClaimsPrincipal() - { - return GetPrincipal(); - } - - private ClaimsPrincipal _principal; - - private ClaimsPrincipal GetPrincipal() - { - if (_principal == null) - { - lock (this) - { - if (_principal == null) - { - _principal = new ClaimsPrincipal( - new ClaimsIdentity( - new List - { - new Claim(AbpClaimTypes.UserId,"2e701e62-0953-4dd3-910b-dc6cc93ccb0d"), - new Claim(AbpClaimTypes.UserName,"admin"), - new Claim(AbpClaimTypes.Email,"admin@abp.io") - } - ) - ); - } - } - } - - return _principal; - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/appsettings.json b/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/appsettings.json deleted file mode 100644 index d2c6b2f8c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/appsettings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ConnectionStrings": { - "Default": "Data Source=localhost;Database=MyCompanyNameMyProjectNameDB;uid=root;pwd=1q2w3E*;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true" - } -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/.dockerignore b/templates/abp-vnext-pro-nuget-simplify/vben28/.dockerignore deleted file mode 100644 index 861765276..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/.dockerignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules/ -dist/ -.vscode/ diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/.editorconfig b/templates/abp-vnext-pro-nuget-simplify/vben28/.editorconfig deleted file mode 100644 index dccf841d4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/.editorconfig +++ /dev/null @@ -1,19 +0,0 @@ -root = true - -[*] -charset=utf-8 -end_of_line=lf -insert_final_newline=true -indent_style=space -indent_size=2 -max_line_length = 100 - -[*.{yml,yaml,json}] -indent_style = space -indent_size = 2 - -[*.md] -trim_trailing_whitespace = false - -[Makefile] -indent_style = tab diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/.env b/templates/abp-vnext-pro-nuget-simplify/vben28/.env deleted file mode 100644 index 1add6466c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/.env +++ /dev/null @@ -1,8 +0,0 @@ -# port -VITE_PORT = 4200 - -# spa-title -VITE_GLOB_APP_TITLE = MyProjectName - -# spa shortname -VITE_GLOB_APP_SHORT_NAME = MyProjectName diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/.env.development b/templates/abp-vnext-pro-nuget-simplify/vben28/.env.development deleted file mode 100644 index 11ec094b4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/.env.development +++ /dev/null @@ -1,29 +0,0 @@ -# Whether to open mock -VITE_USE_MOCK = true - -# public path -VITE_PUBLIC_PATH = / - -# Cross-domain proxy, you can configure multiple -# Please note that no line breaks -VITE_PROXY = [["/basic-api","http://localhost:3000"],["/upload","http://localhost:3300/upload"]] -# VITE_PROXY=[["/api","https://vvbin.cn/test"]] - -# Delete console -VITE_DROP_CONSOLE = false - -# Basic interface address SPA -VITE_GLOB_API_URL=/basic-api - -# File upload address, optional -VITE_GLOB_UPLOAD_URL=/upload - -# Interface prefix -VITE_GLOB_API_URL_PREFIX= - - -# 接口地址 -VITE_API_URL= http://localhost:44315 - -# WEBSOCKE 地址 -VITE_WEBSOCKE_URL= http://localhost:44315 diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/.env.production b/templates/abp-vnext-pro-nuget-simplify/vben28/.env.production deleted file mode 100644 index 399ff0a67..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/.env.production +++ /dev/null @@ -1,42 +0,0 @@ -# Whether to open mock -VITE_USE_MOCK = true - -# public path -VITE_PUBLIC_PATH = / - -# Delete console -VITE_DROP_CONSOLE = true - -# Whether to enable gzip or brotli compression -# Optional: gzip | brotli | none -# If you need multiple forms, you can use `,` to separate -VITE_BUILD_COMPRESS = 'none' - -# Whether to delete origin files when using compress, default false -VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false - -# Basic interface address SPA -VITE_GLOB_API_URL=/basic-api - -# File upload address, optional -# It can be forwarded by nginx or write the actual address directly -VITE_GLOB_UPLOAD_URL=/upload - -# Interface prefix -VITE_GLOB_API_URL_PREFIX= - -# Whether to enable image compression -VITE_USE_IMAGEMIN= false - -# use pwa -VITE_USE_PWA = false - -# Is it compatible with older browsers -VITE_LEGACY = false - - -# 接口地址 -VITE_API_URL= http://localhost:8080 - -# WEBSOCKE 地址 -VITE_WEBSOCKE_URL= http://localhost:8080 diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/.env.test b/templates/abp-vnext-pro-nuget-simplify/vben28/.env.test deleted file mode 100644 index b7753c723..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/.env.test +++ /dev/null @@ -1,36 +0,0 @@ -NODE_ENV=production -# Whether to open mock -VITE_USE_MOCK = true - -# public path -VITE_PUBLIC_PATH = / - -# Delete console -VITE_DROP_CONSOLE = true - -# Whether to enable gzip or brotli compression -# Optional: gzip | brotli | none -# If you need multiple forms, you can use `,` to separate -VITE_BUILD_COMPRESS = 'none' - -# Whether to delete origin files when using compress, default false -VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false - -# Basic interface address SPA -VITE_GLOB_API_URL=/basic-api - -# File upload address, optional -# It can be forwarded by nginx or write the actual address directly -VITE_GLOB_UPLOAD_URL=/upload - -# Interface prefix -VITE_GLOB_API_URL_PREFIX= - -# Whether to enable image compression -VITE_USE_IMAGEMIN= false - -# use pwa -VITE_USE_PWA = false - -# Is it compatible with older browsers -VITE_LEGACY = false diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/.eslintignore b/templates/abp-vnext-pro-nuget-simplify/vben28/.eslintignore deleted file mode 100644 index 348631b27..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/.eslintignore +++ /dev/null @@ -1,15 +0,0 @@ - -*.sh -node_modules -*.md -*.woff -*.ttf -.vscode -.idea -dist -/public -/docs -.husky -.local -/bin -Dockerfile diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/.eslintrc.js b/templates/abp-vnext-pro-nuget-simplify/vben28/.eslintrc.js deleted file mode 100644 index 9aa3e10ce..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/.eslintrc.js +++ /dev/null @@ -1,76 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - node: true, - es6: true, - }, - parser: 'vue-eslint-parser', - parserOptions: { - parser: '@typescript-eslint/parser', - ecmaVersion: 2020, - sourceType: 'module', - jsxPragma: 'React', - ecmaFeatures: { - jsx: true, - }, - }, - extends: [ - 'plugin:vue/vue3-recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:prettier/recommended', - ], - rules: { - 'vue/script-setup-uses-vars': 'error', - '@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', - 'vue/custom-event-name-casing': 'off', - 'no-use-before-define': '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-unused-vars': [ - 'error', - { - argsIgnorePattern: '^_', - varsIgnorePattern: '^_', - }, - ], - 'no-unused-vars': [ - 'error', - { - argsIgnorePattern: '^_', - varsIgnorePattern: '^_', - }, - ], - 'space-before-function-paren': '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/require-default-prop': 'off', - 'vue/require-explicit-emits': 'off', - 'vue/html-self-closing': [ - 'error', - { - html: { - void: 'always', - normal: 'never', - component: 'always', - }, - svg: 'always', - math: 'always', - }, - ], - 'vue/multi-word-component-names': 'off', - }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/.gitattributes b/templates/abp-vnext-pro-nuget-simplify/vben28/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/.gitignore b/templates/abp-vnext-pro-nuget-simplify/vben28/.gitignore deleted file mode 100644 index e6922c46d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -node_modules -.DS_Store -dist -.npmrc -.cache - -tests/server/static -tests/server/static/upload - -.local -# local env files -.env.local -.env.*.local -.eslintcache - -# Log files -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* - -# Editor directories and files -.idea -# .vscode -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? - -package-lock.json -pnpm-lock.yaml - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/.gitpod.yml b/templates/abp-vnext-pro-nuget-simplify/vben28/.gitpod.yml deleted file mode 100644 index 866381fcc..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/.gitpod.yml +++ /dev/null @@ -1,6 +0,0 @@ -ports: - - port: 3344 - onOpen: open-preview -tasks: - - init: pnpm install - command: pnpm run dev diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/.prettierignore b/templates/abp-vnext-pro-nuget-simplify/vben28/.prettierignore deleted file mode 100644 index f7e39e60b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/.prettierignore +++ /dev/null @@ -1,9 +0,0 @@ -/dist/* -.local -.output.js -/node_modules/** - -**/*.svg -**/*.sh - -/public/* diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/.stylelintignore b/templates/abp-vnext-pro-nuget-simplify/vben28/.stylelintignore deleted file mode 100644 index 051707612..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/.stylelintignore +++ /dev/null @@ -1,3 +0,0 @@ -/dist/* -/public/* -public/* diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/CHANGELOG.en_US.md b/templates/abp-vnext-pro-nuget-simplify/vben28/CHANGELOG.en_US.md deleted file mode 100644 index 345e8333a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/CHANGELOG.en_US.md +++ /dev/null @@ -1,1262 +0,0 @@ -## 2.8.0(2021-11.03) - -### Upgrade Instructions - -- Package manager changed from `yarn` to `pnpm` -- Delete `node_modules` and `yarn.lock`, install `pnpm` globally -- Execute `pnpm install` - -### ✨ Features - -- **Others** - - The `VITE_PROXY` configuration in the `.env` file supports single quotes - - Remove warnings during build - -### 🐛 Bug Fixes - -- **BasicTable** - - Fix the issue that editable cells cannot be submitted in some cases - - Fix the problem that the `inset` attribute does not work - - Fix the problem that the performance of `useTable` and `reload` method `await` of `BasicTable` instance are inconsistent - - Fix the issue that `clickToRowSelect` would ignore the disabled state of the row selection box - - Fix the problem that the page of `BasicTable` will be reset in some cases - - Modify the `deleteTableDataRecord` method -- **BasicModal** - - Fixed the problem that `Modal` could not be closed even when clicking on the mask and pressing the `Esc` key - - Fixed the issue that clicking the close button and the blank area next to the maximize button would also cause `Modal` to close -- **BasicTree** Fix the problem that the node slot does not work -- **CodeEditor** Fix the problem that may cause `Build` failure -- **BasicForm** Fix the problem that the content width of the custom FormItem component may be out of range -- **ApiTreeSelect** Fix the problem that the change of `params` failed to trigger the re-request of api data -- **Others** -Fixed an issue where multiple tabs would not jump to routing when closing tabs in some cases - - Fix the issue that some components may cause abnormal hot update - - Fix the problem that some sub-components of `antdv` will be reported in the build process when directly `import` part of the `antdv`, such as: TabPane, RadioGroup - -## 2.7.2(2021-09-14) - -### ✨ Features - -- **BasicForm** New `Divider` in the form component for dividing the area of longer forms -- **BasicTable** - - Cell editor adds submit callback, which will decide whether to submit data to the form based on the result returned by the callback function - - Add check method for row editing, allowing only check but not submit value, so asynchronously save data successfully before submit to table - - Fix the problem that the `rowClassName` property cannot be used at the same time as `striped`. -- New component **MarkdownViewer** for displaying rich text in Markdown format - -### 🐛 Bug Fixes - -- **CodeEditor** Fix JSON editor throwing exception when formatting invalid JSON text -- **Tinymce** fixes an issue where inline mode throws an exception in some scenarios -- **BasicTable** - - Repair the problem that the editing icon is not displayed when the content of editable cell is empty - - Repair the problem that the total row at the end of the table sometimes fails to align with the columns in the main part of the table. -- **MarkDown** Repair the problem that the value of initial value property does not work. -- **BasicUpload** Repair the problem that `accept` property does not support `MIME` and suffix name starting with dot. -- **ApiSelect** Fix the problem of type definition of `value` property. -- **Other** - - Repair the problem that some wrapper components give error when using slots. - - Repair the problem that `theme` parameter of `useECharts` does not work. - - Repair the problem that when `Token` is invalid, pressing F5 to refresh the page may cause abnormal page loading. - - Repair the problem that the improper call of `useRedo` may lead to `path` redirection abnormality. - - Repair the problem that `vite` custom mode name does not support underscore. - -## 2.7.1(2021-08-16) - -- Upgrade vue 3.2, if the operation fails, delete node_modules and reinstall it - -### ✨ Features - -- **BasicTree** Add search function related properties and methods -- **BasicForm** added `alwaysShowLines` to set the number of lines kept displayed when folding - -### 🐛 Bug Fixes - -- **Cropper** Fix the problem of failure to destroy in time -- **BasicTable** - - Fix the problem that `CellFormat` cannot use `Map` type data - - Fixed an issue where the editable cell failed to display the `0` value correctly - - Fixed the issue that selection-change event failed to trigger correctly when unchecked - - Fix the problem that the background color of the full screen state under the light theme is incorrect - - Fix the problem of obtaining complete data when `getSelectRows` does not support remote data cross-page selection - - Fix the issue that the `size` property provided for editing components in `editComponentProps` is invalid -- **Qrcode** Fixed the problem that the QR code component could not be drawn in time when it was created -- **BasicModal** Fix the problem that the `helpMessage` property does not work -- **BasicButton** Fix the problem that the button style performance is inconsistent with the official antd -- **Others** Fix the problem that `useRedo` (reload the current route) will lose route `params` data - -## 2.7.0(2021-08-03) - -## (Breaking changes) Breaking changes - -- Restore the project `tailwindcss` back to `windicss`, tried `tailwindcss`, there may be a lot of problems, first switch back to `windicss` to improve development efficiency and lower switching costs. - - There are currently incompatible areas of the project - - The wording of `xl:!m-4` needs to be changed to `!xl:m-4`, note that only `!` is incompatible. If you don’t use it, you don’t need to change it. - - The memory overflow problem may still exist (low frequency, just restart, restart vite faster) - -### ✨ Features - -- **Preview** Add new properties and events -- **Dark Theme** added support for tailwindcss night mode -- **Others** add setTip method for useLoading - -### 🐛 Bug Fixes - -- **ApiTreeSelect** Fixed the problem of failing to monitor `params` changes correctly -- **ImgRotateDragVerify** Fix the problem that the component `resume` method cannot be called -- **TableAction** Fix the problem that the stopButtonPropagation property does not work in some cases -- **PageWrapper** Fix the problem of invalid `class` attribute -- **BasicTree** Fix the problem that the `checkAll` method will affect the `disabled` state node -- **BasicTable** - - Fix the issue that editable cells do not support `ellipsis` configuration - - Fixed the problem that the pop-up layer of sub-components (popconfirm and edit components such as select and treeSelect) cannot be seen in full-screen mode - - Fixed an issue where when `expandRowByClick` is enabled, clicking non-expandable rows may cause style errors - - Fix the problem that the dynamic change of `pagination` property does not take effect - - Fix the problem that `getSelectRows` does not support the child data of the tree table -**Dark Theme** Fix the color matching problem under the dark theme - - Fix the background color of the selected node of the `Tree` component - - Fix the color configuration of the `Alert` component - - Fix the problem of the button color of `link` type in the disabled state - - Fix the style problem of checked checkboxes in `Tree` -**Others** Fix the problem that useScript failed to automatically remove the script node - -## 2.6.1(2021-07-19) - -### ✨ Features - -- **NoticeList** Add pagination, auto omit for overlength, title click event, title strikethrough, etc. -- **MixSider** Optimize the style of the bottom collapse button in the Mix menu layout to be consistent with the style of other menu layouts -- **ApiTreeSelect** Extend `TreeSelect` component of `antdv` to support remote data source, similar to `ApiSelect`. -- **BasicTable** New `ApiTreeSelect` editing component -- Different backend home pages can be specified for different users. - - Add `homePath` field (optional) to the user information returned by the `getUserInfo` interface to customize the home page path for the current user - -### 🐛 Bug Fixes - -- **BasicTable** - - Fix scrollbar style issue (removed scroll style patch) - - Fix the alignment problem of cells with expanded icons in tree tables - - Add `headerTop` slot. - - Fix the color display of the operation column button in disabled state. - - Repair the problem that the values of editable cells cannot be updated by modifying `dataSource` directly. - - Repair the problem of data replay when using `ApiSelect` to edit components. - - Repair the problem that editing components may report `onXXX` type error in some scenarios. -- **TableAction** - - Create Tooltip component only if `action.tooltip` exists. - - Fix the problem that the content of the round button inside the component is not centered -- **AppSearch** Fix the problem that the hidden menu may be searched. -- **BasicUpload** Repair the problem of error when handling non-`array` values. -- **Form** Repair the `suffix` slot style problem of `FormItem`. -- **Menu** - - Repair the hovering trigger logic of the left mixed menu - - Repair the problem that the top bar menu is wrong when displaying menu items that need to be hidden. - - Fix the left mixed menu in hover trigger mode will jump to route directly when there is no submenu and it is activated -- **Breadcrumb** Repair the problem that the menu with redirection cannot be jumped when clicked -- **Markdown** fixes an initialization exception and an issue where value was not set dynamically correctly -- **Modal** Make sure props are passed correctly -- **MultipleTab** fixes an issue that could accidentally create login route tabs -- **BasicTree** Fix the problem that the search function may cause `checkedKeys` to be lost -- **CodeEditor** Fix the problem that value does not support v-model usage. -- **CountdownInput** Fix the problem that `input` slot is not supported. -- **ApiSelect** Fix the problem that the `options-change` event parameter is not the standard `options` data used by `select -- **Other** - - Fix the problem that the configuration of default menu collapse does not work - - Repair the problem that `safari` browser reports an error and the website cannot be opened. - - Repair the problem that eslint keeps error due to endOfLine after pulling the code on window. - - Fix `Vue Router warn` caused by dynamic routing - -### 🎫 Chores - -- Add test environment test command - -## 2.6.0(2021-07-04) - -### ✨ Features - -- **Axios** New `withToken` configuration to control whether the request carries a token or not -- **BasicUpload** - - New `preview-delete` event triggered when deleting a file in preview `Modal`. - - `value` supports `v-model` usage -- **Route configuration** - - Add `ignoreRoute` to generate menu only in `ROUTE_MAPPING` or `BACK` permission mode - - Add `hidePathForChildren` configuration to ignore this level `path` when generating menus for child items -- **TableAction** Add `tooltip` configuration to add tooltip hint for button -- **CropperAvatar** - - Added `value` to set the current avatar - - Added `onChange` to accept avatar cropping and upload success event - - New `btnText`, `btnProps` for customizing the text and properties of the upload button - - Add tooltips to the action buttons in `Modal` for cropping -- **Modal** Add tooltip for action button in top right corner - -### 🐛 Bug Fixes - -- **Modal** - - Fix the problem that the mask cannot be closed by clicking on it. - - Fix `setModalProps` does not support setting `defaultFullscreen`. -- **Table** - - Fix the problem that `editComponentProps` doesn't support `onChange`. - - Fix the problem that `selection-change` event is not triggered when `clickToRowSelect` is enabled. - - Fix the problem that global configuration `fetchSetting` may be accidentally modified by local configuration. - - Fix the problem that the parameter of `handleSearchInfoFn` contains redundant blank keys. - - Repair the problem that when rowSelection.onChange is provided for table, the selected items of table cannot be changed manually. - - Fix the problem that the scrollbar continues to be displayed even when it is not needed to be displayed. -- **Icon** Repair the problem that SvgIcon is missing some styles. -- **Menu** - - Repair the problem that single-level menu refreshing will not be activated in route mapping mode. - - Repair the problem that the collapse customization at the bottom of the side menu is invalid. -- **Form** Repair the type definition of `submitButtonOptions` and `resetButtonOptions`. -- **PopConfirmButton** Remove the redundant `title` on `Button`. -- **Axios** Fix the problem that `params` and `data` data cannot be submitted at the same time when non-`GET` requests are made -- **Other** - - Repair the problem that the lock screen function can skip the lock state by refreshing the page or copying the URL to open a new browser tab - - Repair the problem that `Token` won't be synchronized when multiple windows open pages at the same time. - - Repair the problem that `hasPermission` does not work in `ROLE` permission mode. -- **Table** Repair the problem that the parameter of `handleSearchInfoFn` contains extra blank keys. -- **Tailwindcss** Remove console warning - -## 2.5.2(2021-06-27) - -### ⚡ Performance Improvements - -- **Icon** Remove the global registration of Icon components to prevent hot update issues under certain circumstances - -### ✨ Features - -- **Menu** Added `permissionMode=PermissionModeEnum.ROUTE_MAPPING` mode - - The project is changed to this mode by default, and the original menu file is deleted - - If you have written the menu before, you can change to `PermissionModeEnum.ROLE` mode - -## 2.5.1(2021-06-26) - -### ⚡ Performance Improvements - -- Upgrade `vue` and `ant-design-vue` versions to solve compatibility issues -- **Tree** Performance optimization - -### 🐛 Bug Fixes - -- **Table** Fix page jitter problem -- **Upload** Make sure to carry custom parameters -- **Dropdown** Fix the icon display problem of popConfirm -- **Table** Fix the problem that the editing event of the tree table is abnormal -- **Table** Fix the problem that when the table data is empty, the value returned by getDataSource is not the data source used by the table - -## 2.5.0(2021-06-20) - -## (Breaking changes) Breaking changes - -- Change the project `windicss` to `tailwindcss` to solve the memory overflow problem - - There are currently incompatible areas of the project - - The wording of `!xl:m-4` needs to be changed to `xl:!m-4`, note that only `!` is incompatible. If you don’t use it, you don’t need to change it. - - The new features of `windicss` itself need to be adjusted, for example, `Attribute` mode is not compatible - -### ✨ Refactor - -- Remove `useExpose` and use `expose` provided by the component itself instead - -### ⚡ Performance Improvements - -- **Locale** merge multi-language files to reduce the number of files -- **Utils** Mitt default export is changed from `Class` to `Function` -- **Axios** `isTransformRequestResult` is renamed to `isTransformResponse` - -### ✨ Features - -- **CropperImage** `Cropper` Avatar cropping adds circular cropping function -- **CropperAvatar** Added avatar upload component -- **Drawer** `useDrawer` added `closeDrawer` function -- **Preview** Added `createImgPreview` picture preview function -- **Setup** New guide page example -- **Tests** Add jest test suite, Vue component single test is not currently supported -- **Axios** Added `authenticationScheme` configuration to specify the authentication scheme -- **Setting** Added `sessionTimeoutProcessing` project configuration item, used to configure how to deal with session timeout - -### 🐛 Bug Fixes - -- **Modal** fix full screen height calculation error -- **Modal** Fix the problem that the shutdown event is triggered multiple times -- **PageWrapper** fix the height calculation problem -- **FlowChart** Repair drag and drop menu missing -- Fixed Iframe routing error in background mode -- **PageWrapper** Fix the height calculation problem when footer and global footer are opened at the same time -- **Menu** Fix the jitter problem of menu folding animation -- **Store** fixed type error after pinia version upgrade - -## 2.4.2(2021-06-10) - -### ✨ Refactor - -- `CountTo` component refactoring - -### ✨ Features - -- `radioButtonGroup` supports `boolean` value -- `useModalInner` added `redoModalHeight` to reset the height of `Modal` inside Modal -- `useECharts` added `getInstance` to obtain instances of `echart` -- `TableAction` added `stopButtonPropagation` to prevent the action button click event from bubbling -- `BasicTable` in the row edit mode, you can get or set the value of other editing components in the column -- The `ApiSelect` component will automatically re-fetch the data after the `params` is changed -- `TableImg` component improvement -- `BasicTable` added `columns-change` event to monitor the user to change the sorting, display, and fixed status of columns -- `Tinymce` supports dynamic modification readonly -- `BasicTable` added `updateTableDataRecord` method to update the specified row data -- `useModal` added `closeModal` method to close `Modal` - -### 🐛 Bug Fixes - -- Fix the problem that `redoModalHeight` cannot reduce the height -- Fix the problem that the schema data of `BasicForm` does not take effect -- Fix the problem that multiple tags may cause `KeepAlive` to fail -- Fix the problem that the default `axios` interceptor cannot handle custom code -- Fix the height issue of the lock screen pop-up window -- Fixed the problem that the half-selected state of the `Column Display` checkbox of `BaiscTable` was incorrectly displayed -- Fixed the problem that the preview list of the `BasicUpload` component could not be displayed in some cases -- Fix the problem that the `options` setting of ` RadioButtonGroup``disabled ` does not take effect -- Fix the problem that the button for uploading pictures in the read-only mode of the `Tinymce` component is still available -- Fix the stuttering problem of `BasicForm` under certain circumstances -- Fix the problem that "directory" routing does not work - -## 2.4.1(2021-06-01) - -### ✨ Features - -- Add `DatePicker` and `TimePicker` components to editable tables -- Added `defaultExpandLevel` configuration to `Tree` component - -### ⚡ Performance Improvements - --Menu search default focus - -### 🐛 Bug Fixes - -- Fix known issues of `CodeEditor` -- Fix the issue of `i18n` console warning -- Fix the problem that the editable table `align` configuration does not take effect -- Ensure that `axios` only processes `Object` parameters -- Fix the failure of the `defaultExpandAll` configuration of the `Tree` component -- Fix the problem of missing dividing line in `TableAction` -- Fix the known issues of the table -- Fix that the lang attribute of HTML will not be set when reloading due to the first loading or changing the language - -## 2.4.0 (2021-05-25) - -### ✨ Features - --New graphical editor example -New code editor (including Json editor) -Added `JsonPreview`Json data viewing component -The fields of the data column and actionColumn of the table can be controlled according to the authority and business. -Added an example of a permission control table (AuthColumn.vue) -Added user login expiration example - -### ⚡ Performance Improvements - --Consolidate some language files to reduce the number of files - -### 🐛 Bug Fixes - --Fix the flashing white screen when the dark theme refreshes -Fix the problem that other functions are invalid when the tab is closed -Fix known issues in the form -Fix the automatic lock screen failure - -## 2.3.0 (2021-04-10) - -## (Breaking changes) Breaking changes - -- Use `pinia` to replace `vuex`, `vuex-module-decorators`. - - -Impact, if you used vuex-module-decorators yourself before, you need to transform it to pinia. - - - the reason: -pinia is basically similar to vuex5api and is easy to understand. -Subsequent switching to vuex5 has a very low cost and can also be used as a third-party state management library - -- Remove `useKeyPress` and use `vueuse`-`onKeyStroke` instead -- Remove `useDebounceFn` and use `vueuse`-`useDebounceFn` instead -- Remove `useThrottle` and use `vueuse`-`useThrottleFn` instead - -### ✨ Features - -- Tabs support persistent storage - -### ✨ Refactor - -- Remove `useElResize` - -### 🐛 Bug Fixes - -- Login page style fix -- Fix the known problems of the menu -- Fix the problem of theme style switching - -## 2.2.0 (2021-04-06) - -### ✨ Features - -- Added `headerTitle` slot -- New printing example -- Added about interface - -### ✨ Refactor - -- Remove useFullScreen function -- tinymce changed from Cdn to npm (the package size is too large) -- Dashboard refactoring -- Remove ApexCharts and examples - -### 🐛 Bug Fixes - -- Make sure the breadcrumbs are displayed correctly -- Fixed the issue of tinymce upload button disappearing in full screen mode -- Make sure that the title changes normally after logging in again -- Ensure that the background mode login is normal -- Fix TableAction click event issue - -## 2.1.1 (2021-03-26) - -### ✨ Features - -- Added hideChildrenInMenu configuration for routing. Used to hide submenu -- Built-in expand/collapse all functions in the tree form - -### ✨ Refactor - -- Refactor the routing multi-layer mode to solve the problem of multiple implementations of nested keepalives - -### 🐛 Bug Fixes - -- Ensure that the CountDownInput component is reset to the empty value -- Fix the display problem on the small screen in split mode -- Fix table height calculation problem -- Fix the problem that components cannot be obtained by background routing -- Fix Modal component loadingTip configuration does not take effect -- Fix the background permission command does not take effect -- Make sure the progress bar is closed properly -- Fix the problem of invalid table check column configuration -- Ensure that the first level menu can be hidden -- Ensure that the hidden fields of the form are verified properly - -### 🎫 Chores - -- Remove ls-lint - -### 🎫 Chores - -- 移除 ls-lint - -## 2.1.0 (2021-03-15) - -### ✨ Features - -- Added svg mode to icon selector -- Added time component -- Added AutoNavi/Baidu/Google Map example - -### ✨ Refactor - -- Refactor the project to solve the hot update problem caused by circular dependencies -- Remove vueHelper/useClickoutside, use @vueuse/core instead - -### 🐛 Bug Fixes - -- Ensure that the value of `table action` is updated correctly -- Fix the animation of page switching cannot be closed -- Fix `PageWrapper`title not showing -- Fix the known issues of the table -- Fix the problem that the BasicTree component can't customize the title -- Fix the button style problem after theme switching - -## 2.0.3 (2021-03-07) - -### ✨ Features - -- `BasicTree` added `clickRowToExpand`, used to click tree node to expand -- Added SvgIcon plugin and examples -- Add the department tree on the left side of the account management interface· - -### ⚡ Performance Improvements - -- Pagination parameters are no longer carried when the table is closed -- The login page monitors the carriage return event to log in -- When the adaptive size of the table is set, the height is filled according to the screen. -- Tree scroll bar optimization -- Optimize the loading speed of local development - -### 🐛 Bug Fixes - -- Fix known issues with `Description` -- Fix known issues with `BasicForm` -- Fix the logic problem of show attribute of ActionItem under `BasicTree` -- Fix the style error of the tree component demo example -- Repair account management to add new but not cleared old data -- The form component should allow the setFieldsValue method to be null or undefined -- Ensure that the single-level breadcrumbs jump correctly -- Ensure that the Form component does not verify hidden form items - -## 2.0.2 (2021-03-04) - -### ✨ Refactor - -- Refactored multi-language modules to support lazy loading and remote loading - -### ✨ Features - -- axios supports form-data format request -- Added icon selector component (support local and online methods) -- Added WebSocket examples and service scripts -- Added the `renderIcon` property to the Tree component to control the display of level icons -- Tree->actionItem added show attribute, used to dynamically control button display -- New toolbar/title/search function for Tree -- Added department management/password modification/account management/role management/menu management sample interface - -### ⚡ Performance Improvements - -- Optimized login interface animation -- Fix the problem of excessively large github warehouse. -- Hide table full screen button by default -- `crypto-es` is changed to `crypto-js` to reduce the package size -- `types` directory moved to the root directory, compatible with other directory global types - -### 🐛 Bug Fixes - -- Fix the warning problem of verification code component -- Fix the table cannot get the selected row correctly -- Fixed modal height calculation error in full screen state -- Fix some table style issues -- Fix the invalidation of the tree form `indentSize` setting - -## 2.0.1 (2021-02-21) - -### ✨ Refactor - -- Refactored login page, new registration page/reset password page/mobile phone login/QR code login - -### ✨ Features - -- Added the `settingButtonPosition` configuration item for configuring the position of the `settings` button -- `modal` can switch the full screen by double-clicking the head -- Added `CountDownInput` component - -### ⚡ Performance Improvements - -- Optimize the editable center style and the width of the drop-down box is too short -- The `edit-change` event listener when the table is added and edited - -### 🐛 Bug Fixes - -- Fix image preview style error -- Fix icon style problem -- Fix the drop-down echo problem of editable table - -## 2.0.0 (2021-02-18) - -## Breaking changes - -- `echarts` is upgraded to 5.0 and introduced on demand (just use `useECharts`). - -### ✨ Refactor - -- Removed `global.less`, `mixin.less`, `design/helper`, replaced by `windicss`, and need to modify the corresponding styles if they are useful - -### ✨ Features - -- useModal adds the return value function `redoModalHeight`, which is used to refresh the modal height when the modal is dynamic content -- Upgrade husky to 5.0 -- Added `brotli`|`gzip` compression and related test commands -- Re-introduction of `windicss` (same as `tailwind`). Faster in speed - -### ⚡ Performance Improvements - -- Adjust the return value of the interface to obtain user information in array format -- Fix the error-log list as the system route - -### 🐛 Bug Fixes - -- Fix the issue of upload component maxNumber invalid -- Fix package sourcemap error report -- Fix code debugger location display error -- Fix the issue of mock plugin post request error -- Fix some themes color value error -- Fix the table in editable row status and press Enter to confirm - -### 🎫 Chores - -- Documentation update -- Upgrade ant-design-vue to `2.0.0` -- Upgrade vite to `2.0.0` - -## 2.0.0-rc.18 (2021-02-05) - -### ✨ Features - -- `ApiSelect` adds `numberToString` property, which is used to convert all the value of `number` into `string` -- Added theme color switch -- Packed image compression - -### ⚡ Performance Improvements - -When mock is not used, move `mock.js` out of the package file - -### 🐛 Bug Fixes - -- Fix modal height calculation error -- Fix the pop-up menu when the menu is clicked on the tab when the menu is collapsed -- Fix the problem that the initial value of form is 0 -- Fix table wrapping problem -- Fix the menu outside link does not jump -- Fix the display problem at the top of the menu -- Fix the issue of `modifyVars` configuration failure - -## 2.0.0-rc.17 (2020-01-18) - -### ✨ Refactor - -- Added `SimpleMenu` component to replace the left menu component (the top menu is not replaced, the function should be as simple as possible without stuck). Solve the menu stuck problem. -- The `ant-design-vue` component is no longer registered globally. In order to better coordinate with the introduction of css on demand. If you need to register globally, you need to add it yourself - -### ✨ Features - -- `css` import on demand - -### 🐛 Bug Fixes - -- Fix `TableAction` icon problem -- Fix the problem of missing menu folding buttons -- Fix menu related issues -- Fix moment multilingual issue - -## 2.0.0-rc.16 (2020-01-12) - -### ✨ Refactor - -- Independent component configuration to `/@/settings/componentsSetting` -- `colorSetting` and `designSetting` are now merged into `designSetting` -- `ant-design-vue` component registration moved to `components/registerComponent` -- Remove the `setup` folder -- Upgrade to `vite2` -- Image preview is changed to `Image` component implementation, temporarily removing functional usage - -### ✨ Features - -- Added `mixSideTrigger` configuration. Used to configure how to open the mixed mode menu on the left. Optional `hover`, default `click` -- Added `mixSideFixed` configuration. Used to fix the left mixed mode menu -- Added `height` and `min-height` properties to the modal component -- Added `PageWrapper` component. And applied to the sample page -- Added tab folding function -- Compatible with older browsers -- tinymce new image upload - -### 🐛 Bug Fixes - -- Fix known issues with table column configuration -- Restore the `isTreeTable` property of the table -- Fix table memory overflow problem -- Fix the function of `layout` shrinking and expanding in split mode -- Fix modal height calculation error -- Fix file upload error - -## 2.0.0-rc.15 (2020-12-31) - -### ✨ Table destructive update - -- Refactored editable cells and editable rows. See examples for details. The writing has changed. For editable tables. - -- Form editing supports form validation - -- Added the following configuration in the table column configuration - -```bash -{ - - # Whether to display columns by default. Those that are not displayed can be opened in the column configuration - defaultHidden?: boolean; - # Help text on the right side of the column header - helpMessage?: string | string[]; - # Custom formatting Cell content. Support time/enumeration automatic conversion - format?: CellFormat; - - # Editable - # Is it an editable cell - edit?: boolean; - # Is it an editable line - editRow?: boolean; - # Edit status. - editable?: boolean; - # Edit component - editComponent?: ComponentType; - # The parameters of the corresponding component - editComponentProps?: Recordable; - # Check - editRule?: boolean | ((text: string, record: Recordable) => Promise); - # Value enumeration conversion - editValueMap?: (value: any) => string; - # Trigger editing Zhenghang - record.onEditRow?: () => void; -} - -``` - -### ✨ Table reconstruction - -- Added `clickToRowSelect` attribute. Used to control whether the clicked row is checked or not -- Monitor row click event -- Add column drag and drop and column fix function for the table column configuration button. -- Added `defaultHidden` attribute to table column configuration. Used to hide by default. You can configure the tick display in the table column -- More powerful column configuration -- useTable: Support for dynamically changing parameters. You can pass in `Ref` type and `Computed` type for dynamic changes -- useTable: Added return function `getForm`. Can be used to manipulate forms in the form Fix known issues in the table - -### ✨ Features - -- Added `v-ripple` water ripple command -- Added the left menu mixed mode -- Add an example of markdown embedded in the form -- Add an example of a page outside the main frame -- `route.meta` added `currentActiveMenu`, `hideTab`, and `hideMenu` parameters to control the display and hide of the crumb-level menu on the detail page. -- Added breadcrumb navigation example -- form: Added `suffix` attribute to configure suffix content -- form: Added remote drop-down `ApiSelect` and examples -- form: Add `autoFocusFirstItem` configuration. Used to configure whether to focus on the first input box of the form -- useForm: Support for dynamically changing parameters. You can pass in `Ref` type and `Computed` type for dynamic changes - -### ⚡ Performance Improvements - -- Optimize the scroll bar components of `modal` and `drawer` -- table: remove the `isTreeTable` attribute -- Import `less` files globally. No need to manually re-introduce the component - -### 🎫 Chores - -- Upgrade `ant-design-vue` to `2.0.0-rc.7` -- Upgrade `vue` to `3.0.5` - -### 🐛 Bug Fixes - -- Fixed the issue of missing scroll bars in mixed mode -- Fix the invalid configuration of environment variables and the logo address problem in history mode -- Fix the calculation error of width and height caused by switching page of chart library -- Fixed the issue of multi-language configuration `Locale.show` causing the configuration not to take effect -- Fix routing type error -- Fix the problem of invalid permissions when the menu is split -- Iframe loads early when closing multi-tab pages -- Fix known issues with `modal` and `drawer` -- Fix the problem of mixing mode adaptation in the left menu - -## 2.0.0-rc.14 (2020-12-15) - -### ✨ Features - --Remove the left menu search, add the top menu search function -Layout mobile terminal adaptation. Business page is not adapted -axios join the joinTime configuration. Control whether the response includes a timestamp - -### ⚡ Performance Improvements - --Import components asynchronously -Optimize the overall structure -Replace the default scroll bar of the menu as a scroll component -Menu performance optimization - -### 🎫 Chores - --Return to the top to adjust the style to avoid covering other elements -Upgrade `ant-design-vue` to `2.0.0-rc.5` -Refresh button layout adjustment -`route.meta` removes the `externalLink` attribute - -### ✨ Refactor - --`openModal` and `openDrawer` third parameter `openOnSet` is set to true by default - -### 🐛 Bug Fixes - --Fixed an issue where multi-level routing cache caused components to render multiple times -Fixed the problem of disappearing after switching the map chart -Fix the issue of successful login and notify disappearing -Modify the names of `VirtualScroll` and `ImportExcel` components as `VScroll` and `ImpExcel` to temporarily solve the memory overflow of components containing keywords in the vue template -Fix axios case problem -Fix button style problem -Fix the problem of menu split mode -Fix the issue of invalid data transmission when using emits in `Modal` and `Drawer` components -Fix the known problems of the menu -Fix the issue of upload component api failure -Fix the problem of invalid menu permission filtering - -## 2.0.0-rc.13 (2020-12-10) - -## (Breaking changes) Breaking changes - --Route reconstruction, the previous format is no longer supported. Change to support the original default structure of vue-router, the specific format can be changed by referring to the example. Realize multi-level route caching, and no longer convert routes to level 2. -Refactor breadcrumbs and use antd's breadcrumbs component. The previous component has been deleted - -### ✨ Features - --Restore the default loading of antdv, refactor the `Loading` component, and add `useLoading` and `v-loading` instructions. And add examples -i18n supports vscode `i18n-ally` plugin -New examples of increased routing cache -Packaged code split (experimental) -Extract upload address to global variable, package can be dynamically configured - -### ✨ Refactor - --Tree component ref function call to delete `$` -Reconstruction and beautification of the lock screen interface, delete unnecessary background pictures - -### ⚡ Performance Improvements - --Page switching loading logic modification. Regardless of whether the loaded page is closed or not, loading will not be displayed when opened again (pages that have been opened are opened again faster, and loading is not required, and the logic of the top progress bar is the same), and it will be restored after refreshing. - -### 🎫 Chores - --First screen loading modification -Upgrade `vue` to `3.0.4` -Upgrade `ant-design-vue` to `2.0.0-rc.3` -Re-introduction of `vueuse` -Remove the `afterCloseLoading` attribute in route meta -Documentation update - -### 🐛 Bug Fixes - --Fix form i18n error -Fix the inconsistent size of menu icons -Fix the calculation of the top menu width -Fix table tabSetting problem -Repair file upload and delete invalidation -Fix the problem of editing and saving table rows - -## 2.0.0-rc.12 (2020-11-30) - -## (破坏性更新) Breaking changes - -- The ClickOutSide component import method is changed from `import ClickOutSide from'/@/components/ClickOutSide/index.vue'` to `import {ClickOutSide} from'/@/components/ClickOutSide'` -- Button component import method changed from `import Button from'/@/components/Button/index.vue'` to `import {Button} from'/@/components/Button'` -- StrengthMeter component import method is changed from `import StrengthMeter from'/@/components/StrengthMeter'` to `import {StrengthMeter} from'/@/components/StrengthMeter'` -- In addition to the examples, the global internationalization function is added, supporting Chinese and English - -### ✨ Refactor - -- Refactor the overall layout. Change the code implementation method. Code is more streamlined -- Configuration item reconstruction -- Remove messageSetting configuration -- BasicTitle component `showSpan`=> `span` - -### ✨ Features - -- The cache can be configured to encrypt or not, and Aes encryption is enabled in the production environment by default -- Add tab drag and drop sort -- Added LayoutFooter. The default display, can be closed in the configuration - -### ⚡ Performance Improvements - -- Optimized the problem that the full screen animation of `Modal` component is not smooth - -### 🐛 Bug Fixes - -- tree: Fix the problem that the text exceeds the operation button -- useRedo: Fix the problem of missing parameters when refreshing the page through useRedo -- form: Fix the problem that the form verification is first set in the verification and the console error message -- `modal`&`drawer` fix the problem of component passing array parameters -- form: fix `updateSchema` does not take effect when the value contains `[]` -- table: Fix the display problem of the table `TableAction` icon -- table: fix table column settings not displayed by `setColumns` setting - -### 🎫 Chores - -- Update antdv to `2.0.0-rc.2` -- Update vue to `3.0.3` -- Update vite to `1.0.0.rc13` -- Temporarily delete `@vueuse/core`. After it is stable, it will be integrated. It is currently not stable. - -## 2.0.0-rc.11 (2020-11-18) - -### ✨ Features - -- Added base64 file stream download -- Optimize upload components and examples -- New editable row example -- Add a personal page -- New form page -- Add details page -- Integrate upload components into form by default - -### 🎫 Chores - -- Update antdv to `2.0.0-rc.1` (temporarily restore to beta15, rc1 menu freezes too seriously.) -- Add some notes - -### ✨ Refactor - -- Removed `receiveDrawerDataRef` and `transferDrawerData` properties of `useModal` and `useDrawer` -- `openModal` and `openDrawer` corresponding to `useModal` and `useDrawer` extend the third parameter. Used to open the trigger callback again - -### 🐛 Bug Fixes - -- Repair form inputNumber verification error -- Fix the error of setting the default value of the form -- Fix the problem of occupying position when the menu collapse button is hidden -- Fix the form baseColProps does not take effect - -## 2.0.0-rc.10 (2020-11-13) - -### ✨ Refactor - -- Refactor hook, introduce `@vueuse`, delete existing `hook`, optimize existing hook -- ʻUseEvent` renamed ->ʻuseEventListener` -- Delete the four types `SelectOptGroup`, `SelectOption`, `Transfer`, and `Radio` from the form `ComponentType`. Modify the `RadioButtonGroup` component - -### ✨ Features - -- `componentsProps` support function type of form item -- Added tag display to the menu, supporting 4 types of colors and dot display -- New menu and top bar color selection color matching -- Add sample result page -- New file download example - -### ⚡ Wip - -- Upload components (not completed, testing...) - -### ⚡ Performance Improvements - -- Optimize settingDrawer code -- Optimize the switching speed of multiple tabs -- Add form customization and dynamic capabilities - -### 🐛 Bug Fixes - -- Fixed multiple rich text editors showing only one -- Fixed the problem of not redirecting to the original page after logging in again after expiration -- Fix window system dynamic introduction error -- Fix page type error -- Fixed an error when the form switch and checkBox were used separately - -## 2.0.0-rc.9 (2020-11-9) - -### ✨ Features - -- Menu trigger can select location -- Add an example of rich text embedded form -- Added `required` attribute to form component schema. Simplified configuration -- The second parameter of openModal and openDrawer can be passed internally instead of `transferModalData` -- Routes with parameters can be cached - -### ✨ Refactor - -- Refactored the logic of the menu generated by the background -- Route Module structural transformation - -### ⚡ Performance Improvements - -- Menu performance continues to be optimized and smoother -- Optimize lazy loading components and examples -- layout style fine-tuning - -### 🎫 Chores - -- Delete menu background image -- Update the version of ʻant-design-vue`to`beta15` -- Update `vite` version to `rc.9` -- Exception page adjustment -- `BasicTitle` Color blocks are not displayed by default - -### 🐛 Bug Fixes - -- Fix table type problem after upgrade -- Fix the problem that the last submenu continues to be displayed when the menu is divided and there is no data in the left menu -- Fix the issue of ʻuseMessage` type -- Fix the problem that the form item setting `disabled` does not take effect -- Fix that ʻuseECharts`can't adapt when`resize`, and an error is reported -- Fix that `resize` is not deleted after ʻuseWatermark` is cleared -- Fix form verification problem -- Fixed the problem that the multi-level header configuration does not take effect - -## 2.0.0-rc.8 (2020-11-2) - -### ✨ Features - -- Global loading add text -- Right-click menu supports multiple levels - -### 🎫 Chores - -- Login cache changed from sessionStorage to LocalStorage - -### ⚡ Performance Improvements - -- Update ʻant-design-vue`to`beta.12` -- Layout interface layout style adjustment -- Optimize lazy loading components -- Optimize table rendering performance -- Add animation to form folding search icon -- routeModule can ignore the layout configuration. Convenient to configure the first-level menu - -### 🐛 Bug Fixes - -- Fix table type error -- Fix bug in mock paging tool -- Fix the folding problem of the search form when the table is opened -- Fix the problem of fixed column style when the table size is samll -- Fixed the error report when closing multiple tabs -- Fix message type error - -## 2.0.0-rc.7 (2020-10-31) - -### ✨ Features - -- The form component now supports directly passing in the model to directly perform the set operation, please refer to **Component -> Popup Extension -> Open Popup and Pass Data** - -- The useModalInner of modal now supports the incoming callback function to receive the value passed in from the external `transferModalData` - - - Used to handle the setting values ​​of components such as forms when the pop-up window is opened. Refer to **Component -> Popup Extension -> Open Popup and Pass Data** - - The value of `receiveModalDataRef` is temporarily reserved. Use as little as possible. It may be deleted later. - -- The drawer’s useDrawerInner now supports the incoming callback function to receive the value passed in from the external `transferModalData`,, - - Used to handle the setting values ​​of components such as forms for opening the drawer Refer to **Component->Drawer Extension->Open the drawer and transfer data** - - The value of `receiveModalDataRef` is temporarily reserved. Use as little as possible. It may be deleted later. - -### ✨ Refactor - -- Form code optimization and reconstruction - -### ⚡ Performance Improvements - -- Modal slot can be overwritten -- Optimize table embedding height calculation problem - -### 🎫 Chores - -- Add some notes -- pwa icon supplement -- Type adjustment -- Upgrade ʻant-design-vue`to`beta.11`, and modify the known issues brought about, and some issues will be resolved after discovery - -### 🐛 Bug Fixes - -- Fix the timeout error of local proxy post interface to https address -- Fix modal full screen height calculation problem when footer is not displayed -- Fix the error that the verification information is not deleted when the form is reset -- Fix the style problem of the split mode of the top menu -- Fix the invalidation of table expansion icon animation - -## 2.0.0-rc.6 (2020-10-28) - -### ✨ Features - -- Added `pwa` function, which can be turned on in `.env.production` -- Button component extends `preIcon` and `postIcon` attributes to add icons before and after the text -- Restore the breadcrumb display icon function - -### 🎫 Chores - -- Upgrade vite version to `v1.0.0.rc8` -- vite.config.ts internal plugins extraction -- Build directory structure adjustment -- Dependency update -- Documentation update -- Modify the default route switching animation - -### ⚡ Performance Improvements - -- `setTitle` logic adjustment -- The sessionStorage and LocalStorage cache settings used by the system expire in `7` days by default - -### ✨ Refactor - -- Separate `vite-plugin-html` and modify the logic of inserting html - -### 🐛 Bug Fixes - -- Fix the warning problem of multiple registration components during hot update -- Fix the login tab page appears after login -- Fix the problem of routing switch parameter disappearance -- Fix the useMessage icon style problem - -## # 2.0.0-rc.5 (2020-10-26) - -### ✨ Features - -- Update component documentation -- Breadcrumbs support display icon -- Added tinymce rich text component -- Add submitOnReset to the form to control whether to re-initiate the request when reset -- Added `sortFn` to the table to support custom sorting -- Added animation components and examples -- Added lazy loading/delay loading components and examples - -### ✨ Refactor - -- The detailType of the Drawer component is changed to isDetail - -### 🎫 Chores - -- Remove the optional chain syntax in the code -- Form reset logic modification -- Turn off multi-tab page tabs animation -- Upgrade vite version to `v1.0.0.rc6` -- Delete Chinese path warning. rc6 has been fixed - -### 🐛 Bug Fixes - -- Fix the automatic height and display footer display problems of drawer components -- Reset to default value after repairing form query -- Fix the problem of displaying the collapsed menu when there are no child nodes -- Fix the problem of breadcrumb display style -- Fixed the problem of multiple open drag and drop failure when destroyOnClose=true in modal -- Fixed multiple action columns in the table - -# 2.0.0-rc.4 (2020-10-21) - -### ✨ Features - -- New configuration toolbar for tables -- New message notification module - -### 🎫 Chores - -- The table does not show borders by default -- Dependency update -- Update vue to `v3.0.2` -- Interface style fine-tuning - -### ⚡ Performance Improvements - -- Optimize the size of the first screen -- Optimize the TableAction component -- Reduce the folding width of the menu - -### 🐛 Bug Fixes - -- Fix the problem of the menu name when the first level menu is folded -- Fix the problem that the preview command is not packaged -- Fix the problem that the form actionColOptions parameter does not take effect -- Fix the problem that the loading does not take effect when refreshing the form - -# 2.0.0-rc.3 (2020-10-19) - -### ✨ Features - -- Added excel component and excel/xml/csv/html export example -- Added excel import example -- Added global error handling -- Added markdown components and examples -- The menu name can be displayed when adding a new folding menu - -### Docs - -- add project doc - -### 🎫 Chores - -- update deps - -### 🐛 Bug Fixes - -- Fix the adaptive problem of the top menu -- Fix window system packaging error - -# 2.0.0-rc.2 (2020-10-17) - -### ✨ Features - -- Package can be configured to output `gizp` -- Package can be configured to delete `console` -- Routes and menus do not need to be imported manually, they are imported automatically - -### 🎫 Chores - -- Upgrade vue to `3.0.1` -- Change `vite` version to daily build version - -### 🐛 Bug Fixes - -- Fix menu error -- Fix the problem of table adaptive height -- Fix the issue of error reporting when executing script in `window system` -- Fix the problem of folding components - -### ⚡ Performance Improvements - -- Remove menu to minimize background -- Prevent page refresh and re-render menu -- Some other details are optimized - -# 2.0.0-rc.1 (2020-10-14) - -### ✨ Features - -- Add a tab with parameters - -### ⚡ Performance Improvements - -- Optimized menu folding -- Page details optimization -- Compress html after packaging -- Functional reconstruction of preview components and right-click menu -- The preview component operation column is centered - -### 🎫 Chores - -- update deps -- Added `README.en-US.md` -- Added `CHANGELOG.en-US.md` - -### 🐛 Bug Fixes - -- Fix page refresh and jump to landing page - -# 2.0.0-beta.7 (2020-10-12) - -### ⚡ Performance Improvements - -- The existing tab switching no longer displays animation and progress bar - -### ✨ Features - -- Added `CountTo` component and sample demo -- Added `closeMessageOnSwitch` and `removeAllHttpPending` to the project configuration file -- The production environment has a separate configuration file for dynamic configuration project configuration -- Added ʻuseEcharts` and ʻuseApexChart` to facilitate the use of charts, and added related demos -- New workbench interface -- New analysis page interface - -### 🎫 Chores - -- Update dependencies - -### 🐛 Bug Fixes - -- Fix routing switch, tab inactive problem - -# 2.0.0-beta.6 (2020-10-11) - -### 💄 Styles - -- Menu style adjustment - -### 🐛 Bug Fixes - -- Fix the problem that editable forms cannot be entered -- Repair packaging errors, no proxy is required in the production environment - -### ⚡ Performance Improvements - -- Optimize the switching speed of multi-tab pages -- First screen loading animation - -# 2.0.0-beta.5 (2020-10-10) - -### ♻ Code Refactoring - -- Delete `tailwind css` - -### ⚡ Performance Improvements - -- Optimize page switching speed - -### 🎫 Chores - -- Add `.vscode` and `.github` configuration -- Change menu icon -- Added `.env` configuration file -- Update readme.md - -### 🐛 Bug Fixes - -- Fix the failure of `Tree` component check event - -# 2.0.0-beta.4 (2020-10-08) - -### 🎫 Chores - -- Remove redundant dependencies - -### 🐛 Bug Fixes - -- Fix page refresh blank -- Fix the invalid table style in the production environment - -# 2.0.0-beta.3 (2020-10-07) - -### ✨ Features - -- Added ʻopenNProgress` to the project configuration file to control whether to open the top control bar -- Add `Table` component and demo - -### 🎫 Chores - -- Add ` github workflows` - -# 2.0.0-beta.2 (2020-10-07) - -### ✨ Features - -- Added image preview component - -### 🔧 Continuous Integration - -- Add githubAction script - -# 2.0.0-beta.1(2020-09-30) - -### 🎫 Chores - -- Migrate some code from 1.0 -- Add README.md description file - -### 🐛 Bug Fixes - -- Fix the problem of form, animation and packaging failure diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/CHANGELOG.md b/templates/abp-vnext-pro-nuget-simplify/vben28/CHANGELOG.md deleted file mode 100644 index 41ddf1f2c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/CHANGELOG.md +++ /dev/null @@ -1,1586 +0,0 @@ -## [2.8.0](https://github.com/anncwb/vue-vben-admin/compare/v2.7.2...v2.8.0) (2021-11-03) - -### Bug Fixes - -- fixed token clear error ([9640484](https://github.com/anncwb/vue-vben-admin/commit/96404848955f84d57b88dd240ab3a57b7017103c)) -- improve type introduction, fix [#1196](https://github.com/anncwb/vue-vben-admin/issues/1196) ([2820d5a](https://github.com/anncwb/vue-vben-admin/commit/2820d5a627260bb8eddfcd25df1cd7d1196932e8)) -- **api-select:** fixed `value` prop define ([f87b0f2](https://github.com/anncwb/vue-vben-admin/commit/f87b0f2f5efe4e9977c4cc0742dbcaefbad2ca02)), closes [#1175](https://github.com/anncwb/vue-vben-admin/issues/1175) -- **card-list:** fixed build error ([628e820](https://github.com/anncwb/vue-vben-admin/commit/628e820684ce5d81f130548505efe83e8d516131)) -- **code-editor:** fixed formatting error ([e7c9636](https://github.com/anncwb/vue-vben-admin/commit/e7c96363a1963b7733a9ee498403eb6a062160e6)) -- **echarts:** theme setting supported ([93812f7](https://github.com/anncwb/vue-vben-admin/commit/93812f734ec85529aa27fc3100a2eaef8c7a6df5)), closes [#1095](https://github.com/anncwb/vue-vben-admin/issues/1095) -- **markdown:** the hierarchy of markDown components after full screen ([c8017b1](https://github.com/anncwb/vue-vben-admin/commit/c8017b1365ea49f95a26148a539f8c30d8a8631f)) -- **markdown:** `value` not worked on init ([0bb9c03](https://github.com/anncwb/vue-vben-admin/commit/0bb9c035f77588c58d36b3fd45d89b9730cd70d7)) -- **modal:** avoid style pollution to the whole world ([#1128](https://github.com/anncwb/vue-vben-admin/issues/1128)) ([6e7f6f8](https://github.com/anncwb/vue-vben-admin/commit/6e7f6f82ed2819e02e2b3114884e665d0762d7e9)) -- **table:** `rowClassName` not worked with `striped` ([044e2e4](https://github.com/anncwb/vue-vben-admin/commit/044e2e4e866dd5b120daab03c47aba1ca1f9140a)), closes [#1167](https://github.com/anncwb/vue-vben-admin/issues/1167) -- **table:** 修复表格背景颜色再深色模式下会被穿透问题 ([#1133](https://github.com/anncwb/vue-vben-admin/issues/1133)) ([30fa4cf](https://github.com/anncwb/vue-vben-admin/commit/30fa4cfa2ab6229efc67224fd082e32da0a95d49)) -- **table:** editable icon not show with empty cell ([edc3096](https://github.com/anncwb/vue-vben-admin/commit/edc30965653831b4572c5d5e067f556f4757ce75)), closes [#1103](https://github.com/anncwb/vue-vben-admin/issues/1103) -- **table:** fix table footer style ([a426b90](https://github.com/anncwb/vue-vben-admin/commit/a426b9027ef524f9033d510d0c74cd17b2ad5bcf)), closes [#1112](https://github.com/anncwb/vue-vben-admin/issues/1112) -- **table:** Solve the bug of setting ifshow to false in table column ([#1166](https://github.com/anncwb/vue-vben-admin/issues/1166)) ([5fa730c](https://github.com/anncwb/vue-vben-admin/commit/5fa730c49ae46fa448d49d597dc7b2b6a019b268)) -- **table-action:** `divider` not work as expected ([7593ef6](https://github.com/anncwb/vue-vben-admin/commit/7593ef6a4f081ed800658b70316ab2f1e3ee631d)) -- **tinymce:** fixed `inline` mode ([8e01377](https://github.com/anncwb/vue-vben-admin/commit/8e01377481a34cda221de6bbb01fc7d5b2824c82)), closes [#1092](https://github.com/anncwb/vue-vben-admin/issues/1092) -- **upload:** `accept` not work as expected ([656ee4e](https://github.com/anncwb/vue-vben-admin/commit/656ee4e5c9b363b6ab59aa071915414e5ee95de4)) -- `getUserinfo` is compatible with empty roles data ([1ddfc31](https://github.com/anncwb/vue-vben-admin/commit/1ddfc31c3c4c792c5f741f6d0f0754ffc9a6613c)) -- `slots` worked in `basicTable` and `basicModal` ([5138e44](https://github.com/anncwb/vue-vben-admin/commit/5138e447e74ef01309457d22f44129c8b1b2f815)) -- `useRedo` called duplicate may cause exception ([1235978](https://github.com/anncwb/vue-vben-admin/commit/1235978ab23740dfb11e3de7ac26a7d10a4899dc)), closes [#1121](https://github.com/anncwb/vue-vben-admin/issues/1121) -- 修复 `apiSelect` 绑定值 `attrs` 的问题 ([#1172](https://github.com/anncwb/vue-vben-admin/issues/1172)) ([c753d94](https://github.com/anncwb/vue-vben-admin/commit/c753d945e08f72cab5bc8a585601cab6a0523fca)) -- 修复弹窗全屏按钮异常关闭的问题([#1177](https://github.com/anncwb/vue-vben-admin/issues/1177)) ([#1182](https://github.com/anncwb/vue-vben-admin/issues/1182)) ([9e9ea3f](https://github.com/anncwb/vue-vben-admin/commit/9e9ea3f43d8c4b88649c1998bf89186b5f7ee6a2)) -- 修改 axios 中 urlPrefix 字段不生效问题 ([#1170](https://github.com/anncwb/vue-vben-admin/issues/1170)) ([7df9b51](https://github.com/anncwb/vue-vben-admin/commit/7df9b513447d8deab2fd8e86fa23c807adb6d440)) -- add loss action for userStore ([a36825a](https://github.com/anncwb/vue-vben-admin/commit/a36825a6d423aae9aaf1936ce55947ba8c2104b0)) -- fix all types of errors, compatible with volar plugin ([e15b4f1](https://github.com/anncwb/vue-vben-admin/commit/e15b4f14db51812effd55670b3d2da7b082e00a7)) -- fixed build warning for style of `intro.js` ([d27633f](https://github.com/anncwb/vue-vben-admin/commit/d27633fb31824e92cbeb24f8d626d8e33ce7179e)), closes [#1130](https://github.com/anncwb/vue-vben-admin/issues/1130) -- Improve content height calculation ([#1136](https://github.com/anncwb/vue-vben-admin/issues/1136)) ([6717fe6](https://github.com/anncwb/vue-vben-admin/commit/6717fe654e88e6a939a16c523832870388ec1886)) -- name of vite `mode` support more characters ([9f68229](https://github.com/anncwb/vue-vben-admin/commit/9f6822991c4b2da78e0a5d0c7d6e0288f0d9d1cb)), closes [#1115](https://github.com/anncwb/vue-vben-admin/issues/1115) -- refresh failed while token invalid ([3a5d1a5](https://github.com/anncwb/vue-vben-admin/commit/3a5d1a5757c0a2be17e6dd370cbb023ddbb30d5e)), closes [#1101](https://github.com/anncwb/vue-vben-admin/issues/1101) -- warning in logout action ([b3307fe](https://github.com/anncwb/vue-vben-admin/commit/b3307fe2836fb6f9806d602d5bdb7e540c49f1b0)) -- **tinymce:** fixed `tinymce` destory method ([fb43fad](https://github.com/anncwb/vue-vben-admin/commit/fb43fad555b093af23194bdb3670bc1347c0010f)) - -### Features - -- **demo:** add `JsonPreview` demo ([83c1683](https://github.com/anncwb/vue-vben-admin/commit/83c1683bfdcf4ea33de771895b46e41f276969e8)), closes [#1146](https://github.com/anncwb/vue-vben-admin/issues/1146) -- **form:** add `Divider` for schema component type ([47a448b](https://github.com/anncwb/vue-vben-admin/commit/47a448b8aea572e54dac97dc4f9fb6c1c005685a)) -- **form:** component `Divider` support `helpMessage` ([a5ff592](https://github.com/anncwb/vue-vben-admin/commit/a5ff59237f2eb6ea4c1770acc594c75bf1f6e95f)) -- **markdown-viewer:** add new component ([73dc492](https://github.com/anncwb/vue-vben-admin/commit/73dc492b2a49793d945ccdae7f5c429c874f298c)), closes [#1181](https://github.com/anncwb/vue-vben-admin/issues/1181) -- **table:** 添加和支持动态删除和插入数据 ([#1152](https://github.com/anncwb/vue-vben-admin/issues/1152)) ([59a9087](https://github.com/anncwb/vue-vben-admin/commit/59a90877287a289f746eec97d12c2d3a1d5476b0)) -- **table:** add `beforeEditSubmit` for editable cell ([2c867b3](https://github.com/anncwb/vue-vben-admin/commit/2c867b3d636d57cdc526a4ca600af7d747b7d833)) -- **table:** add `onValid` for editRow ([ee7c31d](https://github.com/anncwb/vue-vben-admin/commit/ee7c31db44fd8f99f0d26da368e1d82b5630f309)) -- **tree:** 1. 添加自定义数据过滤判断方法 2. 添加搜索完成自动展开结果选项 3. 添加搜索完成自动选中结果选项 4. 树节点数据变化时强制搜索(同步 searchData 避免展示错误) ([#1132](https://github.com/anncwb/vue-vben-admin/issues/1132)) ([e00578c](https://github.com/anncwb/vue-vben-admin/commit/e00578c40a585a4a35f235c0228aebaf62cea1ba)) -- add CardList component ([0f5ddbf](https://github.com/anncwb/vue-vben-admin/commit/0f5ddbf1ec777fc238a94bd037d37ea787316757)) - -### Performance Improvements - -- **tree:** 优化 Tree 搜索功能,添加搜索高亮功能,优化样式表现 ([#1153](https://github.com/anncwb/vue-vben-admin/issues/1153)) ([3b6b4f7](https://github.com/anncwb/vue-vben-admin/commit/3b6b4f73033e8757fd3a032f0910dfcc30dee151)) -- not waiting for router.isReady ([2884e86](https://github.com/anncwb/vue-vben-admin/commit/2884e863ce826cd92cd782f40cdee31588bc6d32)) -- optimize css volume ([466d4ed](https://github.com/anncwb/vue-vben-admin/commit/466d4edcd02fc91e2b4cdbbc3c501bfd2fde7a3d)) - -## [2.7.1](https://github.com/anncwb/vue-vben-admin/compare/v2.6.1...v2.7.1) (2021-08-16) - -### Bug Fixes - -- `slots` working in components ([b1f3176](https://github.com/anncwb/vue-vben-admin/commit/b1f31762e3c86a432a8d559ab957444eaf5525ad)) -- add axios error info from response ([#1083](https://github.com/anncwb/vue-vben-admin/issues/1083)) ([72634ff](https://github.com/anncwb/vue-vben-admin/commit/72634ffe6e6649d36ee41f7633c8ee2ab80cf25e)) -- auto remove script dom in `useScript` ([a544dd3](https://github.com/anncwb/vue-vben-admin/commit/a544dd3e589329339177dad3d5c1f75dd6e6f0ca)) -- fixed `useRedo` may loss route params ([2dd3d85](https://github.com/anncwb/vue-vben-admin/commit/2dd3d8544866231895d23dba63785b683ae0062e)), closes [#1079](https://github.com/anncwb/vue-vben-admin/issues/1079) -- fixed basicButton ghost style ([3ba8a67](https://github.com/anncwb/vue-vben-admin/commit/3ba8a67647d35fb9639a5af66f33d43eff493d15)) -- fixed basicButton primary style ([1b57792](https://github.com/anncwb/vue-vben-admin/commit/1b577922e752c02fe7c033c53be37ef81e4e9b8e)) -- fixed basicButton style ([beb4ae9](https://github.com/anncwb/vue-vben-admin/commit/beb4ae92c190780bbd3bc6bc7547d52e2ccf8cf1)) -- **cropper:** cropper not destroy in time ([3819430](https://github.com/anncwb/vue-vben-admin/commit/381943078fd55123fde3d5555e04f279d7f1c407)), closes [#1027](https://github.com/anncwb/vue-vben-admin/issues/1027) -- **demo:** fix form style in modal ([30c5fc6](https://github.com/anncwb/vue-vben-admin/commit/30c5fc63c8600cfb03f917d79e56c0a7e7ff64e0)), closes [#1076](https://github.com/anncwb/vue-vben-admin/issues/1076) -- **i18n:** add i18n translate data ([1f55c41](https://github.com/anncwb/vue-vben-admin/commit/1f55c4180f9c0cf48e3796a77d6f0bfd46107272)) -- **locales:** fix that vscode extension i18n-Ally detect zh-CN as zh ([#1044](https://github.com/anncwb/vue-vben-admin/issues/1044)) ([b2d49cb](https://github.com/anncwb/vue-vben-admin/commit/b2d49cbbf81cb15e75905deb95bdf7ac4af4e599)) -- **modal:** `helpMessage` doesn't work ([953bfc6](https://github.com/anncwb/vue-vben-admin/commit/953bfc6f1a559309ea2b1114b8ede911a3751cc7)) -- **page-wrapper:** fix `class` not working ([8879ae8](https://github.com/anncwb/vue-vben-admin/commit/8879ae8d773e8dc4c252c4234eefeab9bc135a30)) -- **qrcode:** qrcode not displayed properly ([26f251e](https://github.com/anncwb/vue-vben-admin/commit/26f251e1ed5bfd79c8615fb552ca302f917cc588)), closes [#1026](https://github.com/anncwb/vue-vben-admin/issues/1026) -- **route:** the whitelist should include basicRoutes ([#1048](https://github.com/anncwb/vue-vben-admin/issues/1048)) ([1bb5156](https://github.com/anncwb/vue-vben-admin/commit/1bb51569236fd9bcc55dd9f237f51f218956b258)) -- **table:** `0` is not shown in editable cell ([33a335a](https://github.com/anncwb/vue-vben-admin/commit/33a335a3f52aead522b3fbee0d558e2e797580ff)), closes [#1039](https://github.com/anncwb/vue-vben-admin/issues/1039) -- **table:** `cellFormat` support `Map` ([1214b7c](https://github.com/anncwb/vue-vben-admin/commit/1214b7c32c425750a4d0202a9b235eb9e45a6f47)), closes [#1031](https://github.com/anncwb/vue-vben-admin/issues/1031) -- **table:** `getSelectRows` support multi-page ([4b6025c](https://github.com/anncwb/vue-vben-admin/commit/4b6025cb9a3ef067680201ec3052bc651e0a0c1b)), closes [#914](https://github.com/anncwb/vue-vben-admin/issues/914) -- **table:** `selection-change` not triggered in unchecking ([019555b](https://github.com/anncwb/vue-vben-admin/commit/019555be0c88edc673cae382023d647e78959b30)), closes [#1053](https://github.com/anncwb/vue-vben-admin/issues/1053) -- **table:** `size` not worked in `editComponentProps` ([7971896](https://github.com/anncwb/vue-vben-admin/commit/7971896383296c155b7ab16b5beb3544f34ee525)), closes [#1074](https://github.com/anncwb/vue-vben-admin/issues/1074) -- **table:** fix `getSelectRows` for treeTable ([f2b8bb4](https://github.com/anncwb/vue-vben-admin/commit/f2b8bb43a0b9172b9ef9ced8e83bf91143a091d9)), closes [#1003](https://github.com/anncwb/vue-vben-admin/issues/1003) -- **table:** fix `injection not found` warning ([53e79a2](https://github.com/anncwb/vue-vben-admin/commit/53e79a2d94df19c0e1aa7399d5ce4c27834e0350)) -- **types:** fix some type errors ([9035fd1](https://github.com/anncwb/vue-vben-admin/commit/9035fd191e4e8d954f42b3a4cd1e80ec70b7cbb6)) -- The Style of tableTitle slot ([#1023](https://github.com/anncwb/vue-vben-admin/issues/1023)) ([02e7756](https://github.com/anncwb/vue-vben-admin/commit/02e77560624cc4a95a5a20ffd5e0601f1f88c6f4)) -- fix build handler & misc ([#1060](https://github.com/anncwb/vue-vben-admin/issues/1060)) ([66feb77](https://github.com/anncwb/vue-vben-admin/commit/66feb779a8645a93760c784c510512118c4c6efa)) -- **table:** recursive updateTableDataRecord ([#1024](https://github.com/anncwb/vue-vben-admin/issues/1024)) ([72f953c](https://github.com/anncwb/vue-vben-admin/commit/72f953c8d3413a7f5482793258503017a81cc759)) -- **table:** wrong bg-color in fullscreen mode ([2052eb5](https://github.com/anncwb/vue-vben-admin/commit/2052eb5a65be38c44165efecdb15266de4638667)) -- **type:** fix ant-design-vue -> ([#1043](https://github.com/anncwb/vue-vben-admin/issues/1043)) ([6d5388a](https://github.com/anncwb/vue-vben-admin/commit/6d5388aaf143ac76bac0b68d56a3ab6b5993e807)) -- fix iframe heigth error ([#1012](https://github.com/anncwb/vue-vben-admin/issues/1012)) ([d76cfd7](https://github.com/anncwb/vue-vben-admin/commit/d76cfd7f809ba48880c950a64cb43a5c9c44176c)) -- Fix the invalid hot update of BasicButton when changing style outside ([#1016](https://github.com/anncwb/vue-vben-admin/issues/1016)) ([be2d11d](https://github.com/anncwb/vue-vben-admin/commit/be2d11d5d344a508e94abe3534726c80e1f1f271)) -- the position of tinymce upload image is wrong ([#1015](https://github.com/anncwb/vue-vben-admin/issues/1015)) ([2fd0fd2](https://github.com/anncwb/vue-vben-admin/commit/2fd0fd281e65d6d2551478c5f19250347dc14062)) -- **tree:** fix `checkAll` effects `disabled` node ([ddd1893](https://github.com/anncwb/vue-vben-admin/commit/ddd1893b113e13786037522341abb2e75f8f9d5b)) -- style property of actionColOpt is invalid ([#997](https://github.com/anncwb/vue-vben-admin/issues/997)) ([225bd4c](https://github.com/anncwb/vue-vben-admin/commit/225bd4c39de377d93c605f33bfdf3d8fd565f12b)) -- typo ([#980](https://github.com/anncwb/vue-vben-admin/issues/980)) ([7e6a89f](https://github.com/anncwb/vue-vben-admin/commit/7e6a89ffeb8c63467908d5807d3d7c4761620ee3)) -- **api-tree-select:** auto reload while `params` changed ([c734f68](https://github.com/anncwb/vue-vben-admin/commit/c734f6858daea6d11cd517463b06fcce58744947)) -- **dark-theme:** alert color in dark-theme ([9b7ede0](https://github.com/anncwb/vue-vben-admin/commit/9b7ede09b9efe4d5a15ab0cdeadac480a29c0f62)) -- **dark-theme:** bgcolor of `selected tree node` in dark theme ([8cf004a](https://github.com/anncwb/vue-vben-admin/commit/8cf004a5f59895e2487c3a350c83000e585b897e)), closes [#949](https://github.com/anncwb/vue-vben-admin/issues/949) -- **dark-theme:** disabled link `button` color ([4281216](https://github.com/anncwb/vue-vben-admin/commit/42812162c46832ce4d3e332bd579c042309115bc)) -- **dark-theme:** fixed `TreeSelect` & `DatePicker` theme ([d1e0e8b](https://github.com/anncwb/vue-vben-admin/commit/d1e0e8bcea1c168631222989969e14f7d0d1b6a4)), closes [#955](https://github.com/anncwb/vue-vben-admin/issues/955) -- **dark-theme:** style for checked tree nodes ([662b576](https://github.com/anncwb/vue-vben-admin/commit/662b576ac2088247cb58e295378f228462508a37)) -- **demo:** account page form validation ([8702965](https://github.com/anncwb/vue-vben-admin/commit/87029650570e470431fb94d35a273c5d07a73135)) -- **demo:** fix roles mock data ([c375e32](https://github.com/anncwb/vue-vben-admin/commit/c375e32305eae5128e09ad1bda39ce0cc6afd790)) -- **form:** remove console error for `setFieldsValue` ([8d185bb](https://github.com/anncwb/vue-vben-admin/commit/8d185bb5841c83eb49c78e8342e65067aa6f9b80)), closes [#952](https://github.com/anncwb/vue-vben-admin/issues/952) -- **table:** fix `pagination` props working ([e327893](https://github.com/anncwb/vue-vben-admin/commit/e32789373eb5b1b531572b59692bf552dac365dc)) -- expandIcon slot of BasicTable component is invalid ([#975](https://github.com/anncwb/vue-vben-admin/issues/975)) ([98c206d](https://github.com/anncwb/vue-vben-admin/commit/98c206d9c9661a18dde4ec7782cbe1eb6e62ebeb)) -- **demo:** menu `error-log` link to 404 page ([341bd63](https://github.com/anncwb/vue-vben-admin/commit/341bd633d8ed38a5a357db8f97166c2eba2895d3)) -- **demo:** multi-modal used with dynamic component ([e1c4723](https://github.com/anncwb/vue-vben-admin/commit/e1c47233edf7675aede6d5f023726945a510ddf7)) -- **echarts:** fix graphic config cannot be used in echarts options ([#959](https://github.com/anncwb/vue-vben-admin/issues/959)) ([525484e](https://github.com/anncwb/vue-vben-admin/commit/525484e7a409b032d22231f90a92e700ef4290ae)) -- **form:** fix `validate` promise catch ([571f281](https://github.com/anncwb/vue-vben-admin/commit/571f28138f782553eb39cda2d632e5ac1aa1e145)) -- **img-rotate-drag-verify:** fix `resume` method support ([32d64db](https://github.com/anncwb/vue-vben-admin/commit/32d64dbe816a0afda6ee9e91863199afb3e7b48e)), closes [#946](https://github.com/anncwb/vue-vben-admin/issues/946) -- **login:** fix `auto fill` style in dark-theme ([cebc6a5](https://github.com/anncwb/vue-vben-admin/commit/cebc6a590e1a19af7380a55aed43b23af274df0a)) -- **perm-guard:** Fix the problem that the routing query is lost after refreshing the page ([#941](https://github.com/anncwb/vue-vben-admin/issues/941)) ([9c4889f](https://github.com/anncwb/vue-vben-admin/commit/9c4889f0859bc60decf0ef40c383c1946de1d68a)) -- **qrcode:** Fix the problem that the QR code cannot be dynamically generated ([#974](https://github.com/anncwb/vue-vben-admin/issues/974)) ([fe4eae3](https://github.com/anncwb/vue-vben-admin/commit/fe4eae37146068f01ba08f033e0c2e8bd03e48b5)) -- **style:** fix checkbox-checked css in dark mode ([d3f08e3](https://github.com/anncwb/vue-vben-admin/commit/d3f08e37c5b6e46f33d525e9ef4b4c235d77a192)) -- **table:** component shown in `fullscreen` mode ([a07ab6d](https://github.com/anncwb/vue-vben-admin/commit/a07ab6d7aa1060f856649a9bdbec9dfa50b14f26)) -- **table:** editable cell display with validation ([202aa42](https://github.com/anncwb/vue-vben-admin/commit/202aa42b8d5a94e84ad386bcf7feab96926c70dd)), closes [#953](https://github.com/anncwb/vue-vben-admin/issues/953) -- **table:** fix `dataPicker` show in `fullscreen` mode ([a5a9b3f](https://github.com/anncwb/vue-vben-admin/commit/a5a9b3fb34c64b6ea9c9ab3d58045f6e5963952b)) -- **table:** fix expand style ([14fb21d](https://github.com/anncwb/vue-vben-admin/commit/14fb21d0b7b9ac69c7b3c463de6d709bd5713d14)), closes [#969](https://github.com/anncwb/vue-vben-admin/issues/969) -- **table:** fix tableSettings popup in fullscreen mode ([dce3fb0](https://github.com/anncwb/vue-vben-admin/commit/dce3fb0f20516aaf4817281f5d08109e53a73ecb)) -- **table-action:** stopButtonPropagation not working ([9b8f165](https://github.com/anncwb/vue-vben-admin/commit/9b8f165a365758d001e6d86ae7afe4ae3316d485)) -- Fix vite profile hot update error reporting ([#968](https://github.com/anncwb/vue-vben-admin/issues/968)) ([956ed2e](https://github.com/anncwb/vue-vben-admin/commit/956ed2e3f770cc9cf822ce80f71b1e7f179792fb)) -- **utils:** The date function gets a non-date when the parameter is null ([#954](https://github.com/anncwb/vue-vben-admin/issues/954)) ([350c85a](https://github.com/anncwb/vue-vben-admin/commit/350c85accf5033cc5a21b71bc36d5b7a74eb2573)) -- fixed moment locale config ([27207a7](https://github.com/anncwb/vue-vben-admin/commit/27207a78caccb04372e0275c5cee526ec460de0e)) -- typo for utils/env ([#1004](https://github.com/anncwb/vue-vben-admin/issues/1004)) ([e8eefd1](https://github.com/anncwb/vue-vben-admin/commit/e8eefd1bca41c181ec6395bf1d087d2018e2b1f1)) -- **table:** fix editable cell not support `ellipsis` ([4bb506f](https://github.com/anncwb/vue-vben-admin/commit/4bb506fb1f6ac7d246f8792d29f337ec003ff426)), closes [#944](https://github.com/anncwb/vue-vben-admin/issues/944) - -### Features - -- add `updatePath` for `useTabs` ([bcfa338](https://github.com/anncwb/vue-vben-admin/commit/bcfa33822736b761757a2673d977f752cb5c4f7c)), closes [#1068](https://github.com/anncwb/vue-vben-admin/issues/1068) -- always refresh userinfo when page reload ([cc46935](https://github.com/anncwb/vue-vben-admin/commit/cc46935a8296dae62ecfc753a956338ba433927e)) -- **demo:** add `async-validator` demo ([8b4b767](https://github.com/anncwb/vue-vben-admin/commit/8b4b767f4ca78f7c6f7586d8ba662552c2b7bb51)) -- **form:** add `alwaysShowLines` prop ([93f9a19](https://github.com/anncwb/vue-vben-admin/commit/93f9a19aa16a3e9cb95338417c52d9a398e3f70b)), closes [#1051](https://github.com/anncwb/vue-vben-admin/issues/1051) -- **preview:** add more features ([e23bd26](https://github.com/anncwb/vue-vben-admin/commit/e23bd2696da945291a9b652f1af39ad1936f376b)) -- **table:** add getRawDataSource() function ([#1029](https://github.com/anncwb/vue-vben-admin/issues/1029)) ([f3cf162](https://github.com/anncwb/vue-vben-admin/commit/f3cf162af1fa5634d4e562fa5239939af6f26093)) -- **tree:** add searchable function ([60577d6](https://github.com/anncwb/vue-vben-admin/commit/60577d6720fd3f8d4d1a88b20ab902d6161a0eec)), closes [#1057](https://github.com/anncwb/vue-vben-admin/issues/1057) -- **use-loading:** add `setTip` method ([26d9476](https://github.com/anncwb/vue-vben-admin/commit/26d9476caff41cc355190604af42e0bd2ef0a353)) -- Added support for tailwindcss night mode mechanism ([#998](https://github.com/anncwb/vue-vben-admin/issues/998)) ([189bc6f](https://github.com/anncwb/vue-vben-admin/commit/189bc6feb3f2860be8c531dd1ca996f3a2cff018)) - -### Performance Improvements - -- **table:** fixed code style ([da12da9](https://github.com/anncwb/vue-vben-admin/commit/da12da9d8caeba0e7732551cfbad9b0da3baaac4)), closes [#1070](https://github.com/anncwb/vue-vben-admin/issues/1070) -- improve legacy compatibility ([e2664f6](https://github.com/anncwb/vue-vben-admin/commit/e2664f60029f03642f8b1a6afa9b1998705fce37)) - -# [2.7.0](https://github.com/anncwb/vue-vben-admin/compare/v2.5.9...v2.7.0) (2021-08-03) - -### Bug Fixes - -- The Style of tableTitle slot ([#1023](https://github.com/anncwb/vue-vben-admin/issues/1023)) ([02e7756](https://github.com/anncwb/vue-vben-admin/commit/02e77560624cc4a95a5a20ffd5e0601f1f88c6f4)) -- **api-select:** ensure that the onchange function parameters are correct ([fa64fc8](https://github.com/anncwb/vue-vben-admin/commit/fa64fc8a622832b87fdf672965d55d543b5929a2)) -- **app-search:** exclude hidden items ([faf5c9f](https://github.com/anncwb/vue-vben-admin/commit/faf5c9fd7ea40c407419a5a5c473f9b0c32c2a53)) -- **app-search:** exclude items by `hideChildrenInMenu` ([02d3dca](https://github.com/anncwb/vue-vben-admin/commit/02d3dca57efedc1322ae38e3f432cf1f6c2cf839)) -- **axios:** option `withToken` not work ([d509e89](https://github.com/anncwb/vue-vben-admin/commit/d509e897be5753c852e912112e70dac6247ba467)) -- **breadcrumb:** `redirect` not worked ([f5e31fe](https://github.com/anncwb/vue-vben-admin/commit/f5e31febbd18372a34166cac390b1d9b914fe80e)) -- **comp-tree:** support comp-tree-foreach stop,add insertNodesByKey ([#818](https://github.com/anncwb/vue-vben-admin/issues/818)) ([d97aa92](https://github.com/anncwb/vue-vben-admin/commit/d97aa927417bf45a7c127ecfa9b8e835b6b68855)) -- **CountTo:** Fix displaying empty string when the value is 0 ([#864](https://github.com/anncwb/vue-vben-admin/issues/864)) ([82eb72b](https://github.com/anncwb/vue-vben-admin/commit/82eb72bbced931ba7f50069211f9511035ad09f4)) -- **demo:** `setup` page route config ([d5d5c4b](https://github.com/anncwb/vue-vben-admin/commit/d5d5c4b4bfb3e3a5e54f9993966adc46a09a8b90)) -- **demo:** account list fetch loss param ([424b171](https://github.com/anncwb/vue-vben-admin/commit/424b171e0db727f5e0157cbcfd5460f15f8ea609)), closes [#830](https://github.com/anncwb/vue-vben-admin/issues/830) -- **demo:** add mock data `account detail` route ([993e19d](https://github.com/anncwb/vue-vben-admin/commit/993e19dcc319e2b4c68df2ab76174b7b4d7b0428)), closes [#858](https://github.com/anncwb/vue-vben-admin/issues/858) -- **demo:** fix async tree demo, fixed: [#823](https://github.com/anncwb/vue-vben-admin/issues/823) ([5637588](https://github.com/anncwb/vue-vben-admin/commit/5637588fce880b01137191cc82c73e0fce621e8c)) -- **demo:** form pages support `keepAlive` ([9228282](https://github.com/anncwb/vue-vben-admin/commit/9228282ae27daaa246f42e441e27b1b05eb30464)) -- **demo:** resolve `key not exist` warnings ([45a94e4](https://github.com/anncwb/vue-vben-admin/commit/45a94e41c1397b84d08373f84f766204d2488714)) -- **demo:** style error,fix [#806](https://github.com/anncwb/vue-vben-admin/issues/806) ([a2d8be3](https://github.com/anncwb/vue-vben-admin/commit/a2d8be3ab29da88126f3ba971f6893cb12327759)) -- **demo-form:** add fieldMapToTime example,fix [#807](https://github.com/anncwb/vue-vben-admin/issues/807) ([a2a75a0](https://github.com/anncwb/vue-vben-admin/commit/a2a75a097ff6c9df12471eff0d62d44d2b88cfff)) -- **design:** correct tailwind configuration,fix [#800](https://github.com/anncwb/vue-vben-admin/issues/800) ([aec230c](https://github.com/anncwb/vue-vben-admin/commit/aec230ca19d541079b64c54ba00596ef9cd92ca0)) -- **drawer:** openDrawer is not normal in some cases ([941ad59](https://github.com/anncwb/vue-vben-admin/commit/941ad59759cbd5a5e39bcdf29783d8eea85caf72)) -- **dropdown:** icon and trigger work unexpected ([60b80c9](https://github.com/anncwb/vue-vben-admin/commit/60b80c96e82da9101d56b2e195e9e7571de11f0a)), closes [#796](https://github.com/anncwb/vue-vben-admin/issues/796) [#787](https://github.com/anncwb/vue-vben-admin/issues/787) -- **form:** fix `suffix` slot style ([a9bbed1](https://github.com/anncwb/vue-vben-admin/commit/a9bbed19739376ab2bf67a14b04e872f14ca84cc)) -- **form:** fix some prop declaration ([b5046f0](https://github.com/anncwb/vue-vben-admin/commit/b5046f07a27e8ca7fc8b961b74fa5e1b0d715149)) -- **lock-screen:** ensure lock info is saved ([d38ff66](https://github.com/anncwb/vue-vben-admin/commit/d38ff6670a37478b31447f8058e786c4b044e218)) -- **lock-screen:** fix lock-screen can skip on new window ([d7b84c7](https://github.com/anncwb/vue-vben-admin/commit/d7b84c78744f7d0077a779b232e1358040b50383)) -- **markdown:** resolving markdown exceptions ([d95815b](https://github.com/anncwb/vue-vben-admin/commit/d95815b5031984e224140eb1b1d46e2dbf80abc1)) -- **markdown:** set `value` error ([35e1347](https://github.com/anncwb/vue-vben-admin/commit/35e1347029e29a83a9648b6b398e6863cc40fca9)) -- **menu:** display error when contains hidden items ([5ceeefd](https://github.com/anncwb/vue-vben-admin/commit/5ceeefd17d9ddc0e8844b900069b100f24d9c00e)) -- **menu:** fix mix-menu incorrect jumping in `hover` mode ([cad021c](https://github.com/anncwb/vue-vben-admin/commit/cad021c34b71fa109640af75a0c2b72179e9e257)) -- **menu:** make sure the menu is activated correctly ([cdb10cc](https://github.com/anncwb/vue-vben-admin/commit/cdb10cc4ac5e5e8f9cce3ff18d8fbd29ef10c86f)) -- **mix-sider:** fix mix-sider hover logic ([0595a72](https://github.com/anncwb/vue-vben-admin/commit/0595a72da9c666af81a0916663e8e6a014e6fa69)) -- **modal:** `setModalProps` support `defaultFullscreen` ([c7de65e](https://github.com/anncwb/vue-vben-admin/commit/c7de65ebba53941771153f18b184d3d4d31c0dbf)) -- **modal:** maskClosable not work ([f750ff4](https://github.com/anncwb/vue-vben-admin/commit/f750ff435fee06acee78d6b9633e6e18d91685f8)) -- **modal:** remove console log ([3dbbde2](https://github.com/anncwb/vue-vben-admin/commit/3dbbde2662352780377a9b216598d9348522f6ba)) -- **pop-confirm:** fix event working unexpected ([a6ef771](https://github.com/anncwb/vue-vben-admin/commit/a6ef771fcce14c3644c965afaa69b3a17d0a7087)) -- **popconfirm-button:** remove button excess `title` ([73654b7](https://github.com/anncwb/vue-vben-admin/commit/73654b7862c59d623d6d5dc7dcf6ff2704564d9a)) -- **sider:** bottom trigger not work ([1bde404](https://github.com/anncwb/vue-vben-admin/commit/1bde4041211229d5d9d01ce0ca806fa99356b6de)), closes [#820](https://github.com/anncwb/vue-vben-admin/issues/820) -- **sider:** custom trigger does not take effect ([5005e6e](https://github.com/anncwb/vue-vben-admin/commit/5005e6e56b1cc7763a1cc23e1162dfb49452013b)) -- **svg-icon:** fix SvgIcon style ([99829c7](https://github.com/anncwb/vue-vben-admin/commit/99829c79ab41a2319f40c5595a7d82d9e406ba18)) -- **table:** fix index column style ([c7c0a7e](https://github.com/anncwb/vue-vben-admin/commit/c7c0a7e4c88a895000b1621981e4d4b2020c64b1)) -- **table:** auto hide unnecessary scrollbar ([735028c](https://github.com/anncwb/vue-vben-admin/commit/735028c43055e8e80ebc7344af0cd0f51c744f98)) -- **table:** editComponentProps support onChange ([829b366](https://github.com/anncwb/vue-vben-admin/commit/829b366cb2abf27e69d9665e5be022b3d3f15655)) -- **table:** event editCancel loss params ([8d22231](https://github.com/anncwb/vue-vben-admin/commit/8d22231a5fa4afed19201a4a4e5c29d674498516)) -- **table:** fix rowSelection.onChange not work ([df0f000](https://github.com/anncwb/vue-vben-admin/commit/df0f00085c1113eddd7a15954818ccece3538068)), closes [#825](https://github.com/anncwb/vue-vben-admin/issues/825) -- **table:** fix table jitter problem ([8eba7fb](https://github.com/anncwb/vue-vben-admin/commit/8eba7fb52786d1977e4cb7b67673d74c91c5c827)) -- **table:** fix tree node align ([1e61da6](https://github.com/anncwb/vue-vben-admin/commit/1e61da644f65a79ce10fde98ee017aba7d36be10)), closes [#829](https://github.com/anncwb/vue-vben-admin/issues/829) -- **table:** getDataSource not worked on empty data ([e78af6f](https://github.com/anncwb/vue-vben-admin/commit/e78af6f228e25f052dc4c5a1859a6db50e0b112e)), closes [#752](https://github.com/anncwb/vue-vben-admin/issues/752) -- **table:** global configuration accidentally modified ([b4a3f93](https://github.com/anncwb/vue-vben-admin/commit/b4a3f936cd19bf1fff3a331bacad60e79d2d6c22)) -- **table:** param of `handleSearchInfoFn` ([791b323](https://github.com/anncwb/vue-vben-admin/commit/791b323dbd30acd7fabfe9c3fb6e528916311ffd)) -- **table:** recursive updateTableDataRecord ([#1024](https://github.com/anncwb/vue-vben-admin/issues/1024)) ([72f953c](https://github.com/anncwb/vue-vben-admin/commit/72f953c8d3413a7f5482793258503017a81cc759)) -- auto remove script dom in `useScript` ([a544dd3](https://github.com/anncwb/vue-vben-admin/commit/a544dd3e589329339177dad3d5c1f75dd6e6f0ca)) -- fix iframe heigth error ([#1012](https://github.com/anncwb/vue-vben-admin/issues/1012)) ([d76cfd7](https://github.com/anncwb/vue-vben-admin/commit/d76cfd7f809ba48880c950a64cb43a5c9c44176c)) -- Fix the invalid hot update of BasicButton when changing style outside ([#1016](https://github.com/anncwb/vue-vben-admin/issues/1016)) ([be2d11d](https://github.com/anncwb/vue-vben-admin/commit/be2d11d5d344a508e94abe3534726c80e1f1f271)) -- style property of actionColOpt is invalid ([#997](https://github.com/anncwb/vue-vben-admin/issues/997)) ([225bd4c](https://github.com/anncwb/vue-vben-admin/commit/225bd4c39de377d93c605f33bfdf3d8fd565f12b)) -- the position of tinymce upload image is wrong ([#1015](https://github.com/anncwb/vue-vben-admin/issues/1015)) ([2fd0fd2](https://github.com/anncwb/vue-vben-admin/commit/2fd0fd281e65d6d2551478c5f19250347dc14062)) -- **api-select:** fix `options-change` event data ([897bed9](https://github.com/anncwb/vue-vben-admin/commit/897bed97295a0b9101d33102340749689a4368de)) -- **api-tree-select:** auto load data if necessary ([1b3058f](https://github.com/anncwb/vue-vben-admin/commit/1b3058f8253effe974feaf08a12250a111ab58c0)) -- **api-tree-select:** auto reload while `params` changed ([c734f68](https://github.com/anncwb/vue-vben-admin/commit/c734f6858daea6d11cd517463b06fcce58744947)) -- **api-tree-select:** fix `event` checked in form ([d9d0071](https://github.com/anncwb/vue-vben-admin/commit/d9d00714011fa7914c61f990ce1159351ee21a1a)) -- **basic-tree:** `checkedKeys` not worked with `search` ([b06a7ab](https://github.com/anncwb/vue-vben-admin/commit/b06a7ab77b99abee63dd55770ffd55b594ee42f9)), closes [#915](https://github.com/anncwb/vue-vben-admin/issues/915) -- **code-editor:** `value` not support use as `v-model` ([8832a07](https://github.com/anncwb/vue-vben-admin/commit/8832a074dceb44f057c87289d3a99feef58c08fd)), closes [#933](https://github.com/anncwb/vue-vben-admin/issues/933) -- **countdown-input:** add `slots` support ([a764a95](https://github.com/anncwb/vue-vben-admin/commit/a764a95ae9a6cff831f75aa97b00724cadc48e92)) -- **dark-theme:** alert color in dark-theme ([9b7ede0](https://github.com/anncwb/vue-vben-admin/commit/9b7ede09b9efe4d5a15ab0cdeadac480a29c0f62)) -- **dark-theme:** bgcolor of `selected tree node` in dark theme ([8cf004a](https://github.com/anncwb/vue-vben-admin/commit/8cf004a5f59895e2487c3a350c83000e585b897e)), closes [#949](https://github.com/anncwb/vue-vben-admin/issues/949) -- **dark-theme:** disabled link `button` color ([4281216](https://github.com/anncwb/vue-vben-admin/commit/42812162c46832ce4d3e332bd579c042309115bc)) -- **dark-theme:** fixed `TreeSelect` & `DatePicker` theme ([d1e0e8b](https://github.com/anncwb/vue-vben-admin/commit/d1e0e8bcea1c168631222989969e14f7d0d1b6a4)), closes [#955](https://github.com/anncwb/vue-vben-admin/issues/955) -- **dark-theme:** style for checked tree nodes ([662b576](https://github.com/anncwb/vue-vben-admin/commit/662b576ac2088247cb58e295378f228462508a37)) -- **demo:** account page form validation ([8702965](https://github.com/anncwb/vue-vben-admin/commit/87029650570e470431fb94d35a273c5d07a73135)) -- **demo:** fix display problem of editable table with `apiSelect` ([535bddd](https://github.com/anncwb/vue-vben-admin/commit/535bdddf91785e20295c18cf80c8a22cc2172681)) -- **demo:** fix roles mock data ([c375e32](https://github.com/anncwb/vue-vben-admin/commit/c375e32305eae5128e09ad1bda39ce0cc6afd790)) -- **demo:** menu `error-log` link to 404 page ([341bd63](https://github.com/anncwb/vue-vben-admin/commit/341bd633d8ed38a5a357db8f97166c2eba2895d3)) -- **demo:** multi-modal used with dynamic component ([e1c4723](https://github.com/anncwb/vue-vben-admin/commit/e1c47233edf7675aede6d5f023726945a510ddf7)) -- **echarts:** fix graphic config cannot be used in echarts options ([#959](https://github.com/anncwb/vue-vben-admin/issues/959)) ([525484e](https://github.com/anncwb/vue-vben-admin/commit/525484e7a409b032d22231f90a92e700ef4290ae)) -- **form:** fix `validate` promise catch ([571f281](https://github.com/anncwb/vue-vben-admin/commit/571f28138f782553eb39cda2d632e5ac1aa1e145)) -- **form:** remove console error for `setFieldsValue` ([8d185bb](https://github.com/anncwb/vue-vben-admin/commit/8d185bb5841c83eb49c78e8342e65067aa6f9b80)), closes [#952](https://github.com/anncwb/vue-vben-admin/issues/952) -- **formItem:** Fix labelcol type mismatch ([#903](https://github.com/anncwb/vue-vben-admin/issues/903)) ([03b17a8](https://github.com/anncwb/vue-vben-admin/commit/03b17a8f8bdb50322aa10e3b614bcc40b9e9dcc8)) -- **img-rotate-drag-verify:** fix `resume` method support ([32d64db](https://github.com/anncwb/vue-vben-admin/commit/32d64dbe816a0afda6ee9e91863199afb3e7b48e)), closes [#946](https://github.com/anncwb/vue-vben-admin/issues/946) -- **login:** fix `auto fill` style in dark-theme ([cebc6a5](https://github.com/anncwb/vue-vben-admin/commit/cebc6a590e1a19af7380a55aed43b23af274df0a)) -- **modal:** ensure that props are passed correctly,fix [#897](https://github.com/anncwb/vue-vben-admin/issues/897) ([ae7821e](https://github.com/anncwb/vue-vben-admin/commit/ae7821e29690bea8934ea724bfd0ae4e2cf30c77)) -- **modal:** fixed `fullscreen` not worked ([5baaa58](https://github.com/anncwb/vue-vben-admin/commit/5baaa58581f22a915cda9fa39e4cb9f094254d3b)), closes [#918](https://github.com/anncwb/vue-vben-admin/issues/918) -- **model:** auto validate on value change ([f844017](https://github.com/anncwb/vue-vben-admin/commit/f8440175f35076073c9f53483cf6c0164d427ff4)), closes [#920](https://github.com/anncwb/vue-vben-admin/issues/920) -- **multiple-tab:** ignore login page ([1e63379](https://github.com/anncwb/vue-vben-admin/commit/1e63379088e1d7c823f29f607ab49d62ca22cb25)) -- **page-wrapper:** fix `class` not working ([8879ae8](https://github.com/anncwb/vue-vben-admin/commit/8879ae8d773e8dc4c252c4234eefeab9bc135a30)) -- **perm-guard:** Fix the problem that the routing query is lost after refreshing the page ([#941](https://github.com/anncwb/vue-vben-admin/issues/941)) ([9c4889f](https://github.com/anncwb/vue-vben-admin/commit/9c4889f0859bc60decf0ef40c383c1946de1d68a)) -- **qrcode:** Fix the problem that the QR code cannot be dynamically generated ([#974](https://github.com/anncwb/vue-vben-admin/issues/974)) ([fe4eae3](https://github.com/anncwb/vue-vben-admin/commit/fe4eae37146068f01ba08f033e0c2e8bd03e48b5)) -- **style:** fix checkbox-checked css in dark mode ([d3f08e3](https://github.com/anncwb/vue-vben-admin/commit/d3f08e37c5b6e46f33d525e9ef4b4c235d77a192)) -- **table:** `value` show problem in editable cell ([61ce25b](https://github.com/anncwb/vue-vben-admin/commit/61ce25be1b40d7a0e26205ca6a6757c6c43fc21e)), closes [#922](https://github.com/anncwb/vue-vben-admin/issues/922) -- **table:** component shown in `fullscreen` mode ([a07ab6d](https://github.com/anncwb/vue-vben-admin/commit/a07ab6d7aa1060f856649a9bdbec9dfa50b14f26)) -- **table:** editable cell display with validation ([202aa42](https://github.com/anncwb/vue-vben-admin/commit/202aa42b8d5a94e84ad386bcf7feab96926c70dd)), closes [#953](https://github.com/anncwb/vue-vben-admin/issues/953) -- **table:** fix `dataPicker` show in `fullscreen` mode ([a5a9b3f](https://github.com/anncwb/vue-vben-admin/commit/a5a9b3fb34c64b6ea9c9ab3d58045f6e5963952b)) -- **table:** fix `getSelectRows` for treeTable ([f2b8bb4](https://github.com/anncwb/vue-vben-admin/commit/f2b8bb43a0b9172b9ef9ced8e83bf91143a091d9)), closes [#1003](https://github.com/anncwb/vue-vben-admin/issues/1003) -- **table:** fix `pagination` props working ([e327893](https://github.com/anncwb/vue-vben-admin/commit/e32789373eb5b1b531572b59692bf552dac365dc)) -- **table:** fix editable cell not support `ellipsis` ([4bb506f](https://github.com/anncwb/vue-vben-admin/commit/4bb506fb1f6ac7d246f8792d29f337ec003ff426)), closes [#944](https://github.com/anncwb/vue-vben-admin/issues/944) -- **table:** fix expand style ([14fb21d](https://github.com/anncwb/vue-vben-admin/commit/14fb21d0b7b9ac69c7b3c463de6d709bd5713d14)), closes [#969](https://github.com/anncwb/vue-vben-admin/issues/969) -- **table:** fix tableSettings popup in fullscreen mode ([dce3fb0](https://github.com/anncwb/vue-vben-admin/commit/dce3fb0f20516aaf4817281f5d08109e53a73ecb)) -- **tree:** fix `checkAll` effects `disabled` node ([ddd1893](https://github.com/anncwb/vue-vben-admin/commit/ddd1893b113e13786037522341abb2e75f8f9d5b)) -- ensure PAGE_NOT_FOUND_ROUTE exist ([87583c8](https://github.com/anncwb/vue-vben-admin/commit/87583c8b54d335ddf1c416859ef62bbde189c809)) -- expandIcon slot of BasicTable component is invalid ([#975](https://github.com/anncwb/vue-vben-admin/issues/975)) ([98c206d](https://github.com/anncwb/vue-vben-admin/commit/98c206d9c9661a18dde4ec7782cbe1eb6e62ebeb)) -- fix homePage affix error ([c117802](https://github.com/anncwb/vue-vben-admin/commit/c1178027f0fab2791d02efcd7c52beff5fc7dc25)) -- Fix vite profile hot update error reporting ([#968](https://github.com/anncwb/vue-vben-admin/issues/968)) ([956ed2e](https://github.com/anncwb/vue-vben-admin/commit/956ed2e3f770cc9cf822ce80f71b1e7f179792fb)) -- fixed moment locale config ([27207a7](https://github.com/anncwb/vue-vben-admin/commit/27207a78caccb04372e0275c5cee526ec460de0e)) -- infinite redirect in `BACK` mode ([4b46a84](https://github.com/anncwb/vue-vben-admin/commit/4b46a84c2b85e8da799426c54b3381ae93183db4)) -- resolving `Vue Router warn` ([237e65e](https://github.com/anncwb/vue-vben-admin/commit/237e65eac909368c4b4857da6c8deb1dc18e7684)) -- typo ([#980](https://github.com/anncwb/vue-vben-admin/issues/980)) ([7e6a89f](https://github.com/anncwb/vue-vben-admin/commit/7e6a89ffeb8c63467908d5807d3d7c4761620ee3)) -- typo for utils/env ([#1004](https://github.com/anncwb/vue-vben-admin/issues/1004)) ([e8eefd1](https://github.com/anncwb/vue-vben-admin/commit/e8eefd1bca41c181ec6395bf1d087d2018e2b1f1)) -- **table:** selection-change not triggered on row click ([6f845b5](https://github.com/anncwb/vue-vben-admin/commit/6f845b53bdc4c33fbca3e65f10f64c63166bed0e)) -- **table:** treeTable editable error ([4ae39c5](https://github.com/anncwb/vue-vben-admin/commit/4ae39c53b49532fc6c31086a31e30429d2e236ed)), closes [#811](https://github.com/anncwb/vue-vben-admin/issues/811) -- **table-action:** fix `circle` button style ([db7254a](https://github.com/anncwb/vue-vben-admin/commit/db7254a5e0ac6d10a7ea37334ad523b150facb19)) -- **table-action:** fixed icon `margin` without label ([dc51e6a](https://github.com/anncwb/vue-vben-admin/commit/dc51e6a8d4e4f2c97b387b37959944c9bb49d779)) -- **table-action:** incorrect button color of `disabled` state ([0f28e80](https://github.com/anncwb/vue-vben-admin/commit/0f28e803d0b65537216cd9f40ad5cad63c20db9b)), closes [#891](https://github.com/anncwb/vue-vben-admin/issues/891) -- **table-action:** stopButtonPropagation not working ([9b8f165](https://github.com/anncwb/vue-vben-admin/commit/9b8f165a365758d001e6d86ae7afe4ae3316d485)) -- **tree:** fixed `checkedKeys` with `search` mode ([f707541](https://github.com/anncwb/vue-vben-admin/commit/f707541dda78146bda89814ddccbb259d9f5d8a2)) -- **upload:** ensure the value type is correct ([05329ce](https://github.com/anncwb/vue-vben-admin/commit/05329ce9501eb899a0bbb45320e5807c83372317)) -- **useWatermark:** fix `func` call `createWatermark` call `clear` to resizeEvent removed ([#901](https://github.com/anncwb/vue-vben-admin/issues/901)) ([a1d956d](https://github.com/anncwb/vue-vben-admin/commit/a1d956d3697cd07e0ba8910768f2a73e55f18491)) -- `menuSetting` can not set collapsed to false as default ([808291b](https://github.com/anncwb/vue-vben-admin/commit/808291b503d59e3026f5f0b5e7a38b9c69bcc451)) -- ensure that safari is running properly, fix [#875](https://github.com/anncwb/vue-vben-admin/issues/875) ([dafcdd8](https://github.com/anncwb/vue-vben-admin/commit/dafcdd898caae57104f1155b0ec660ea333e7b19)) -- **table:** scrollbar style ([d8c3820](https://github.com/anncwb/vue-vben-admin/commit/d8c38207c08510d805a8dc66ffbba210e0cf4215)) -- **tailwindcss:** remove console warnings ([acacb32](https://github.com/anncwb/vue-vben-admin/commit/acacb32bb592345cd0a90b4bbeb60a9b6ab1ac3c)) -- `hasPermission` not work in `ROLE` Mode ([76a5f87](https://github.com/anncwb/vue-vben-admin/commit/76a5f87c0ce871cca48b9e4c32331353a796e7d2)) -- fix antdv console warning ([480cfb9](https://github.com/anncwb/vue-vben-admin/commit/480cfb914e78c06eb7784e33465ed91b7d4c3eee)) -- fix defHttp baseUrl work ([d5f9919](https://github.com/anncwb/vue-vben-admin/commit/d5f9919b60fdd7d5c435129e8db519c0bbd37529)) -- multi windows token sharing ([e5f3788](https://github.com/anncwb/vue-vben-admin/commit/e5f37885ffb32d04d244f0ef39ac660dda6b71e1)), closes [#761](https://github.com/anncwb/vue-vben-admin/issues/761) -- routes filter can't effective when permission mode set to ROUTE_MAPPING ([#836](https://github.com/anncwb/vue-vben-admin/issues/836)) ([3871204](https://github.com/anncwb/vue-vben-admin/commit/3871204d08d481b8984440cd60bbf2bacb58d063)) -- support various vite modes of build, not just production ([#832](https://github.com/anncwb/vue-vben-admin/issues/832)) ([95c16a5](https://github.com/anncwb/vue-vben-admin/commit/95c16a5d26f9fd9a1d11894afe1146ca495eee93)) -- user drop-down event key loss ([20d7a25](https://github.com/anncwb/vue-vben-admin/commit/20d7a25eb898a5c28351ff269b93bf104b8ac10e)) -- user dropdown event response failure ([c73694a](https://github.com/anncwb/vue-vben-admin/commit/c73694ab8b0b6242c4d5e0f30bc7ebe3d69b4e33)) -- **upload:** make sure to carry custom parameters, fix [#802](https://github.com/anncwb/vue-vben-admin/issues/802) ([c4b22a2](https://github.com/anncwb/vue-vben-admin/commit/c4b22a225d0088d87be0c0068f543366312521db)) -- **utils:** The date function gets a non-date when the parameter is null ([#954](https://github.com/anncwb/vue-vben-admin/issues/954)) ([350c85a](https://github.com/anncwb/vue-vben-admin/commit/350c85accf5033cc5a21b71bc36d5b7a74eb2573)) - -### Features - -- **use-loading:** add `setTip` method ([26d9476](https://github.com/anncwb/vue-vben-admin/commit/26d9476caff41cc355190604af42e0bd2ef0a353)) -- Added support for tailwindcss night mode mechanism ([#998](https://github.com/anncwb/vue-vben-admin/issues/998)) ([189bc6f](https://github.com/anncwb/vue-vben-admin/commit/189bc6feb3f2860be8c531dd1ca996f3a2cff018)) -- **api-select:** clear options before fetch ([9cf070d](https://github.com/anncwb/vue-vben-admin/commit/9cf070dd6305bb69a67ab6be85ef00bddc86fda0)) -- **api-tree-select:** add `api` options to tree-select ([d81db89](https://github.com/anncwb/vue-vben-admin/commit/d81db890dfeb533d60f378ddb86f8ac50a31252b)) -- **avatar-cropper:** add action tooltip ([6cbac4b](https://github.com/anncwb/vue-vben-admin/commit/6cbac4b7ece60a1a7c1fda931cfffce42dfe3e51)) -- **avatar-cropper:** more props added ([b96ea07](https://github.com/anncwb/vue-vben-admin/commit/b96ea0753bfd769693a368cf1e3d8316688c0dcb)) -- **axios:** add `withToken` option ([c99cf5e](https://github.com/anncwb/vue-vben-admin/commit/c99cf5e53f057cdc332ab6c0635adf9c2d27de29)) -- **axios:** use `defHttp` like `axios` ([49f39de](https://github.com/anncwb/vue-vben-admin/commit/49f39de7b40e3ec8343bdeaf3eb00fd79d395746)), closes [#850](https://github.com/anncwb/vue-vben-admin/issues/850) -- **basic-table:** add `ApiTreeSelect` edit component ([52af1dd](https://github.com/anncwb/vue-vben-admin/commit/52af1dd0d494e66c0af20f886dcc2b983cbb096f)) -- **basic-upload:** `value` support v-model ([16c5d32](https://github.com/anncwb/vue-vben-admin/commit/16c5d327f1209f7c7437acde2ab0fa031da6a641)) -- **basic-upload:** add preview-delete event ([49e72a8](https://github.com/anncwb/vue-vben-admin/commit/49e72a8e76b78fe54e19de9e23d7c72a19427f01)), closes [#835](https://github.com/anncwb/vue-vben-admin/issues/835) -- **demo:** add `async-validator` demo ([8b4b767](https://github.com/anncwb/vue-vben-admin/commit/8b4b767f4ca78f7c6f7586d8ba662552c2b7bb51)) -- **demo:** add basicTree with async data expand all ([5421211](https://github.com/anncwb/vue-vben-admin/commit/542121129eb5bf65f61e7b484835591756c80f04)) -- **demo:** add route multi tabs show ([0e414ba](https://github.com/anncwb/vue-vben-admin/commit/0e414ba3c10b4e47a85feb1a38cae66c815719d8)), closes [#817](https://github.com/anncwb/vue-vben-admin/issues/817) -- **demo:** add search demo for apiSelect ([41e6d94](https://github.com/anncwb/vue-vben-admin/commit/41e6d94b3b64dc0d40b7ec57ecfaa4d966f202ae)) -- **demo:** demo default expanded tree table ([5f1a6cd](https://github.com/anncwb/vue-vben-admin/commit/5f1a6cdc599d5840df2dfebdaad029aac093cd81)) -- **demo:** multi-modal in one page usage ([7a7dab0](https://github.com/anncwb/vue-vben-admin/commit/7a7dab0c4b3602b7bd3e9381408e4168d7494c52)) -- **menu:** the route is automatically mapped to the menu ([913c22c](https://github.com/anncwb/vue-vben-admin/commit/913c22c84fc9a4221fdfff6bae0e79a68fd09b17)) -- **modal:** add `tooltip` for action buttons ([c3b9076](https://github.com/anncwb/vue-vben-admin/commit/c3b907656a5fad7a9b241562179f7a0f6fe0e6f0)) -- **notice-list:** add `pagination` support ([c16be2c](https://github.com/anncwb/vue-vben-admin/commit/c16be2c499d90126dfa35d699da9294c21a4ab48)), closes [#894](https://github.com/anncwb/vue-vben-admin/issues/894) -- **preview:** add more features ([e23bd26](https://github.com/anncwb/vue-vben-admin/commit/e23bd2696da945291a9b652f1af39ad1936f376b)) -- customized user home page ([0a3683a](https://github.com/anncwb/vue-vben-admin/commit/0a3683a186ab55d34a12a5a3c6d794dfa1094ad4)) -- **param-menu:** feature: menu with params ([#845](https://github.com/anncwb/vue-vben-admin/issues/845)) ([48fcd76](https://github.com/anncwb/vue-vben-admin/commit/48fcd7684cabff66e8648b71527c6cb4ce7d03be)) -- **route:** add `hidePathForChildren` in `meta` ([d52b0de](https://github.com/anncwb/vue-vben-admin/commit/d52b0de83e69f7505c28e6f59ec84bbe526ecd0d)) -- **table:** add `headerTop` slot ([540423e](https://github.com/anncwb/vue-vben-admin/commit/540423ecf741a815d28d7a6baa1541ac884efe95)), closes [#881](https://github.com/anncwb/vue-vben-admin/issues/881) -- **table:** support asynchrony in beforeFetch and afterFetch ([#827](https://github.com/anncwb/vue-vben-admin/issues/827)) ([749ba5c](https://github.com/anncwb/vue-vben-admin/commit/749ba5c1daf459625518937c239787b756c0a780)) -- **table-action:** support `tooltip` option ([5fab267](https://github.com/anncwb/vue-vben-admin/commit/5fab267a69600fdf5d7a7f9e4d9fff859d09dede)), closes [#848](https://github.com/anncwb/vue-vben-admin/issues/848) -- **tree:** add `insertNodesByKey` method ([5a20df4](https://github.com/anncwb/vue-vben-admin/commit/5a20df45ad36b523d48bf7fe11bdb10a6d03df64)) -- add Tree LoadData demo ([9298b3c](https://github.com/anncwb/vue-vben-admin/commit/9298b3c988c10b81d83430ca31b9ce1d98a3fad9)) -- routers support `ignoreRoute` option ([72ac240](https://github.com/anncwb/vue-vben-admin/commit/72ac240f2858cd74cb62b7647ca89d63bb71d247)) - -### Performance Improvements - -- improve legacy compatibility ([e2664f6](https://github.com/anncwb/vue-vben-admin/commit/e2664f60029f03642f8b1a6afa9b1998705fce37)) -- **menu:** Optimize the style of the bottom collapse button in the Mix menu layout ([#896](https://github.com/anncwb/vue-vben-admin/issues/896)) ([6f83070](https://github.com/anncwb/vue-vben-admin/commit/6f830703a2607c33e5d25d6d17d0e453fc2fac2e)) -- image compression configuration optimization ([cf840e3](https://github.com/anncwb/vue-vben-admin/commit/cf840e3e73b9572de0ba7bf7b32d83f6a353a8ad)) -- **icon:** remove Icon component global registration ([59d3e8c](https://github.com/anncwb/vue-vben-admin/commit/59d3e8c80f72f029f2b90432b31901ad54ed1ee4)) -- **pagewrapper:** 优化 PageWrapper 的高度自适应表现使用 getViewportOffset 替代 useContentViewHeight ([#792](https://github.com/anncwb/vue-vben-admin/issues/792)) ([4d8e398](https://github.com/anncwb/vue-vben-admin/commit/4d8e39857ea59fff99e69832b4a8cabf3a424c24)) -- **router:** reduce the number of guard files ([327d71b](https://github.com/anncwb/vue-vben-admin/commit/327d71b8fb4907ae971d040f6b84bbecb0a6d897)) -- **scrollbar:** scrollbar update when slot changed ([e9e51b2](https://github.com/anncwb/vue-vben-admin/commit/e9e51b2fdc879a66d8df08504a0955c9c21e3e27)) - -### Reverts - -- **axios:** remove baseUrl config ([61d4efd](https://github.com/anncwb/vue-vben-admin/commit/61d4efd55a8b4f09990b5f1888e23ead43958164)) - -## [2.6.1](https://github.com/anncwb/vue-vben-admin/compare/v2.6.0...v2.6.1) (2021-07-19) - -### Bug Fixes - -- **api-select:** fix `options-change` event data ([897bed9](https://github.com/anncwb/vue-vben-admin/commit/897bed97295a0b9101d33102340749689a4368de)) -- **api-tree-select:** auto load data if necessary ([1b3058f](https://github.com/anncwb/vue-vben-admin/commit/1b3058f8253effe974feaf08a12250a111ab58c0)) -- **api-tree-select:** fix `event` checked in form ([d9d0071](https://github.com/anncwb/vue-vben-admin/commit/d9d00714011fa7914c61f990ce1159351ee21a1a)) -- **app-search:** exclude hidden items ([faf5c9f](https://github.com/anncwb/vue-vben-admin/commit/faf5c9fd7ea40c407419a5a5c473f9b0c32c2a53)) -- **app-search:** exclude items by `hideChildrenInMenu` ([02d3dca](https://github.com/anncwb/vue-vben-admin/commit/02d3dca57efedc1322ae38e3f432cf1f6c2cf839)) -- **basic-tree:** `checkedKeys` not worked with `search` ([b06a7ab](https://github.com/anncwb/vue-vben-admin/commit/b06a7ab77b99abee63dd55770ffd55b594ee42f9)), closes [#915](https://github.com/anncwb/vue-vben-admin/issues/915) -- **breadcrumb:** `redirect` not worked ([f5e31fe](https://github.com/anncwb/vue-vben-admin/commit/f5e31febbd18372a34166cac390b1d9b914fe80e)) -- **code-editor:** `value` not support use as `v-model` ([8832a07](https://github.com/anncwb/vue-vben-admin/commit/8832a074dceb44f057c87289d3a99feef58c08fd)), closes [#933](https://github.com/anncwb/vue-vben-admin/issues/933) -- **countdown-input:** add `slots` support ([a764a95](https://github.com/anncwb/vue-vben-admin/commit/a764a95ae9a6cff831f75aa97b00724cadc48e92)) -- **CountTo:** Fix displaying empty string when the value is 0 ([#864](https://github.com/anncwb/vue-vben-admin/issues/864)) ([82eb72b](https://github.com/anncwb/vue-vben-admin/commit/82eb72bbced931ba7f50069211f9511035ad09f4)) -- **demo:** `setup` page route config ([d5d5c4b](https://github.com/anncwb/vue-vben-admin/commit/d5d5c4b4bfb3e3a5e54f9993966adc46a09a8b90)) -- **demo:** add mock data `account detail` route ([993e19d](https://github.com/anncwb/vue-vben-admin/commit/993e19dcc319e2b4c68df2ab76174b7b4d7b0428)), closes [#858](https://github.com/anncwb/vue-vben-admin/issues/858) -- **demo:** fix display problem of editable table with `apiSelect` ([535bddd](https://github.com/anncwb/vue-vben-admin/commit/535bdddf91785e20295c18cf80c8a22cc2172681)) -- **demo:** form pages support `keepAlive` ([9228282](https://github.com/anncwb/vue-vben-admin/commit/9228282ae27daaa246f42e441e27b1b05eb30464)) -- **demo:** resolve `key not exist` warnings ([45a94e4](https://github.com/anncwb/vue-vben-admin/commit/45a94e41c1397b84d08373f84f766204d2488714)) -- **form:** fix `suffix` slot style ([a9bbed1](https://github.com/anncwb/vue-vben-admin/commit/a9bbed19739376ab2bf67a14b04e872f14ca84cc)) -- **formItem:** Fix labelcol type mismatch ([#903](https://github.com/anncwb/vue-vben-admin/issues/903)) ([03b17a8](https://github.com/anncwb/vue-vben-admin/commit/03b17a8f8bdb50322aa10e3b614bcc40b9e9dcc8)) -- **markdown:** resolving markdown exceptions ([d95815b](https://github.com/anncwb/vue-vben-admin/commit/d95815b5031984e224140eb1b1d46e2dbf80abc1)) -- **markdown:** set `value` error ([35e1347](https://github.com/anncwb/vue-vben-admin/commit/35e1347029e29a83a9648b6b398e6863cc40fca9)) -- **menu:** display error when contains hidden items ([5ceeefd](https://github.com/anncwb/vue-vben-admin/commit/5ceeefd17d9ddc0e8844b900069b100f24d9c00e)) -- **menu:** fix mix-menu incorrect jumping in `hover` mode ([cad021c](https://github.com/anncwb/vue-vben-admin/commit/cad021c34b71fa109640af75a0c2b72179e9e257)) -- **mix-sider:** fix mix-sider hover logic ([0595a72](https://github.com/anncwb/vue-vben-admin/commit/0595a72da9c666af81a0916663e8e6a014e6fa69)) -- **modal:** ensure that props are passed correctly,fix [#897](https://github.com/anncwb/vue-vben-admin/issues/897) ([ae7821e](https://github.com/anncwb/vue-vben-admin/commit/ae7821e29690bea8934ea724bfd0ae4e2cf30c77)) -- **modal:** fixed `fullscreen` not worked ([5baaa58](https://github.com/anncwb/vue-vben-admin/commit/5baaa58581f22a915cda9fa39e4cb9f094254d3b)), closes [#918](https://github.com/anncwb/vue-vben-admin/issues/918) -- **model:** auto validate on value change ([f844017](https://github.com/anncwb/vue-vben-admin/commit/f8440175f35076073c9f53483cf6c0164d427ff4)), closes [#920](https://github.com/anncwb/vue-vben-admin/issues/920) -- **table:** fix index column style ([c7c0a7e](https://github.com/anncwb/vue-vben-admin/commit/c7c0a7e4c88a895000b1621981e4d4b2020c64b1)) -- **table:** `value` show problem in editable cell ([61ce25b](https://github.com/anncwb/vue-vben-admin/commit/61ce25be1b40d7a0e26205ca6a6757c6c43fc21e)), closes [#922](https://github.com/anncwb/vue-vben-admin/issues/922) -- **table-action:** fixed icon `margin` without label ([dc51e6a](https://github.com/anncwb/vue-vben-admin/commit/dc51e6a8d4e4f2c97b387b37959944c9bb49d779)) -- **tree:** fixed `checkedKeys` with `search` mode ([f707541](https://github.com/anncwb/vue-vben-admin/commit/f707541dda78146bda89814ddccbb259d9f5d8a2)) -- fix homePage affix error ([c117802](https://github.com/anncwb/vue-vben-admin/commit/c1178027f0fab2791d02efcd7c52beff5fc7dc25)) -- **table-action:** fix `circle` button style ([db7254a](https://github.com/anncwb/vue-vben-admin/commit/db7254a5e0ac6d10a7ea37334ad523b150facb19)) -- `menuSetting` can not set collapsed to false as default ([808291b](https://github.com/anncwb/vue-vben-admin/commit/808291b503d59e3026f5f0b5e7a38b9c69bcc451)) -- ensure PAGE_NOT_FOUND_ROUTE exist ([87583c8](https://github.com/anncwb/vue-vben-admin/commit/87583c8b54d335ddf1c416859ef62bbde189c809)) -- ensure that safari is running properly, fix [#875](https://github.com/anncwb/vue-vben-admin/issues/875) ([dafcdd8](https://github.com/anncwb/vue-vben-admin/commit/dafcdd898caae57104f1155b0ec660ea333e7b19)) -- infinite redirect in `BACK` mode ([4b46a84](https://github.com/anncwb/vue-vben-admin/commit/4b46a84c2b85e8da799426c54b3381ae93183db4)) -- **multiple-tab:** ignore login page ([1e63379](https://github.com/anncwb/vue-vben-admin/commit/1e63379088e1d7c823f29f607ab49d62ca22cb25)) -- resolving `Vue Router warn` ([237e65e](https://github.com/anncwb/vue-vben-admin/commit/237e65eac909368c4b4857da6c8deb1dc18e7684)) -- **table:** fix tree node align ([1e61da6](https://github.com/anncwb/vue-vben-admin/commit/1e61da644f65a79ce10fde98ee017aba7d36be10)), closes [#829](https://github.com/anncwb/vue-vben-admin/issues/829) -- **table:** scrollbar style ([d8c3820](https://github.com/anncwb/vue-vben-admin/commit/d8c38207c08510d805a8dc66ffbba210e0cf4215)) -- **table-action:** incorrect button color of `disabled` state ([0f28e80](https://github.com/anncwb/vue-vben-admin/commit/0f28e803d0b65537216cd9f40ad5cad63c20db9b)), closes [#891](https://github.com/anncwb/vue-vben-admin/issues/891) -- **upload:** ensure the value type is correct ([05329ce](https://github.com/anncwb/vue-vben-admin/commit/05329ce9501eb899a0bbb45320e5807c83372317)) -- **useWatermark:** fix `func` call `createWatermark` call `clear` to resizeEvent removed ([#901](https://github.com/anncwb/vue-vben-admin/issues/901)) ([a1d956d](https://github.com/anncwb/vue-vben-admin/commit/a1d956d3697cd07e0ba8910768f2a73e55f18491)) - -### Features - -- **api-tree-select:** add `api` options to tree-select ([d81db89](https://github.com/anncwb/vue-vben-admin/commit/d81db890dfeb533d60f378ddb86f8ac50a31252b)) -- **basic-table:** add `ApiTreeSelect` edit component ([52af1dd](https://github.com/anncwb/vue-vben-admin/commit/52af1dd0d494e66c0af20f886dcc2b983cbb096f)) -- **demo:** multi-modal in one page usage ([7a7dab0](https://github.com/anncwb/vue-vben-admin/commit/7a7dab0c4b3602b7bd3e9381408e4168d7494c52)) -- customized user home page ([0a3683a](https://github.com/anncwb/vue-vben-admin/commit/0a3683a186ab55d34a12a5a3c6d794dfa1094ad4)) -- **api-select:** clear options before fetch ([9cf070d](https://github.com/anncwb/vue-vben-admin/commit/9cf070dd6305bb69a67ab6be85ef00bddc86fda0)) -- **demo:** add basicTree with async data expand all ([5421211](https://github.com/anncwb/vue-vben-admin/commit/542121129eb5bf65f61e7b484835591756c80f04)) -- **demo:** add search demo for apiSelect ([41e6d94](https://github.com/anncwb/vue-vben-admin/commit/41e6d94b3b64dc0d40b7ec57ecfaa4d966f202ae)) -- **demo:** demo default expanded tree table ([5f1a6cd](https://github.com/anncwb/vue-vben-admin/commit/5f1a6cdc599d5840df2dfebdaad029aac093cd81)) -- **notice-list:** add `pagination` support ([c16be2c](https://github.com/anncwb/vue-vben-admin/commit/c16be2c499d90126dfa35d699da9294c21a4ab48)), closes [#894](https://github.com/anncwb/vue-vben-admin/issues/894) -- **table:** add `headerTop` slot ([540423e](https://github.com/anncwb/vue-vben-admin/commit/540423ecf741a815d28d7a6baa1541ac884efe95)), closes [#881](https://github.com/anncwb/vue-vben-admin/issues/881) - -### Performance Improvements - -- **menu:** Optimize the style of the bottom collapse button in the Mix menu layout ([#896](https://github.com/anncwb/vue-vben-admin/issues/896)) ([6f83070](https://github.com/anncwb/vue-vben-admin/commit/6f830703a2607c33e5d25d6d17d0e453fc2fac2e)) -- image compression configuration optimization ([cf840e3](https://github.com/anncwb/vue-vben-admin/commit/cf840e3e73b9572de0ba7bf7b32d83f6a353a8ad)) - -# [2.6.0](https://github.com/anncwb/vue-vben-admin/compare/v2.5.2...v2.6.0) (2021-07-04) - -### Bug Fixes - -- **axios:** option `withToken` not work ([d509e89](https://github.com/anncwb/vue-vben-admin/commit/d509e897be5753c852e912112e70dac6247ba467)) -- **demo:** account list fetch loss param ([424b171](https://github.com/anncwb/vue-vben-admin/commit/424b171e0db727f5e0157cbcfd5460f15f8ea609)), closes [#830](https://github.com/anncwb/vue-vben-admin/issues/830) -- **demo:** fix async tree demo, fixed: [#823](https://github.com/anncwb/vue-vben-admin/issues/823) ([5637588](https://github.com/anncwb/vue-vben-admin/commit/5637588fce880b01137191cc82c73e0fce621e8c)) -- **form:** fix some prop declaration ([b5046f0](https://github.com/anncwb/vue-vben-admin/commit/b5046f07a27e8ca7fc8b961b74fa5e1b0d715149)) -- **lock-screen:** ensure lock info is saved ([d38ff66](https://github.com/anncwb/vue-vben-admin/commit/d38ff6670a37478b31447f8058e786c4b044e218)) -- **lock-screen:** fix lock-screen can skip on new window ([d7b84c7](https://github.com/anncwb/vue-vben-admin/commit/d7b84c78744f7d0077a779b232e1358040b50383)) -- **menu:** make sure the menu is activated correctly ([cdb10cc](https://github.com/anncwb/vue-vben-admin/commit/cdb10cc4ac5e5e8f9cce3ff18d8fbd29ef10c86f)) -- **modal:** `setModalProps` support `defaultFullscreen` ([c7de65e](https://github.com/anncwb/vue-vben-admin/commit/c7de65ebba53941771153f18b184d3d4d31c0dbf)) -- **modal:** maskClosable not work ([f750ff4](https://github.com/anncwb/vue-vben-admin/commit/f750ff435fee06acee78d6b9633e6e18d91685f8)) -- **modal:** remove console log ([3dbbde2](https://github.com/anncwb/vue-vben-admin/commit/3dbbde2662352780377a9b216598d9348522f6ba)) -- **popconfirm-button:** remove button excess `title` ([73654b7](https://github.com/anncwb/vue-vben-admin/commit/73654b7862c59d623d6d5dc7dcf6ff2704564d9a)) -- **sider:** bottom trigger not work ([1bde404](https://github.com/anncwb/vue-vben-admin/commit/1bde4041211229d5d9d01ce0ca806fa99356b6de)), closes [#820](https://github.com/anncwb/vue-vben-admin/issues/820) -- **sider:** custom trigger does not take effect ([5005e6e](https://github.com/anncwb/vue-vben-admin/commit/5005e6e56b1cc7763a1cc23e1162dfb49452013b)) -- **svg-icon:** fix SvgIcon style ([99829c7](https://github.com/anncwb/vue-vben-admin/commit/99829c79ab41a2319f40c5595a7d82d9e406ba18)) -- **table:** auto hide unnecessary scrollbar ([735028c](https://github.com/anncwb/vue-vben-admin/commit/735028c43055e8e80ebc7344af0cd0f51c744f98)) -- **table:** global configuration accidentally modified ([b4a3f93](https://github.com/anncwb/vue-vben-admin/commit/b4a3f936cd19bf1fff3a331bacad60e79d2d6c22)) -- **table:** param of `handleSearchInfoFn` ([791b323](https://github.com/anncwb/vue-vben-admin/commit/791b323dbd30acd7fabfe9c3fb6e528916311ffd)) -- **tailwindcss:** remove console warnings ([acacb32](https://github.com/anncwb/vue-vben-admin/commit/acacb32bb592345cd0a90b4bbeb60a9b6ab1ac3c)) -- `hasPermission` not work in `ROLE` Mode ([76a5f87](https://github.com/anncwb/vue-vben-admin/commit/76a5f87c0ce871cca48b9e4c32331353a796e7d2)) -- routes filter can't effective when permission mode set to ROUTE_MAPPING ([#836](https://github.com/anncwb/vue-vben-admin/issues/836)) ([3871204](https://github.com/anncwb/vue-vben-admin/commit/3871204d08d481b8984440cd60bbf2bacb58d063)) -- **table:** selection-change not triggered on row click ([6f845b5](https://github.com/anncwb/vue-vben-admin/commit/6f845b53bdc4c33fbca3e65f10f64c63166bed0e)) -- multi windows token sharing ([e5f3788](https://github.com/anncwb/vue-vben-admin/commit/e5f37885ffb32d04d244f0ef39ac660dda6b71e1)), closes [#761](https://github.com/anncwb/vue-vben-admin/issues/761) -- support various vite modes of build, not just production ([#832](https://github.com/anncwb/vue-vben-admin/issues/832)) ([95c16a5](https://github.com/anncwb/vue-vben-admin/commit/95c16a5d26f9fd9a1d11894afe1146ca495eee93)) -- **table:** editComponentProps support onChange ([829b366](https://github.com/anncwb/vue-vben-admin/commit/829b366cb2abf27e69d9665e5be022b3d3f15655)) -- **table:** fix rowSelection.onChange not work ([df0f000](https://github.com/anncwb/vue-vben-admin/commit/df0f00085c1113eddd7a15954818ccece3538068)), closes [#825](https://github.com/anncwb/vue-vben-admin/issues/825) - -### Features - -- **avatar-cropper:** add action tooltip ([6cbac4b](https://github.com/anncwb/vue-vben-admin/commit/6cbac4b7ece60a1a7c1fda931cfffce42dfe3e51)) -- **avatar-cropper:** more props added ([b96ea07](https://github.com/anncwb/vue-vben-admin/commit/b96ea0753bfd769693a368cf1e3d8316688c0dcb)) -- **axios:** add `withToken` option ([c99cf5e](https://github.com/anncwb/vue-vben-admin/commit/c99cf5e53f057cdc332ab6c0635adf9c2d27de29)) -- **axios:** use `defHttp` like `axios` ([49f39de](https://github.com/anncwb/vue-vben-admin/commit/49f39de7b40e3ec8343bdeaf3eb00fd79d395746)), closes [#850](https://github.com/anncwb/vue-vben-admin/issues/850) -- **basic-upload:** `value` support v-model ([16c5d32](https://github.com/anncwb/vue-vben-admin/commit/16c5d327f1209f7c7437acde2ab0fa031da6a641)) -- **basic-upload:** add preview-delete event ([49e72a8](https://github.com/anncwb/vue-vben-admin/commit/49e72a8e76b78fe54e19de9e23d7c72a19427f01)), closes [#835](https://github.com/anncwb/vue-vben-admin/issues/835) -- **modal:** add `tooltip` for action buttons ([c3b9076](https://github.com/anncwb/vue-vben-admin/commit/c3b907656a5fad7a9b241562179f7a0f6fe0e6f0)) -- **param-menu:** feature: menu with params ([#845](https://github.com/anncwb/vue-vben-admin/issues/845)) ([48fcd76](https://github.com/anncwb/vue-vben-admin/commit/48fcd7684cabff66e8648b71527c6cb4ce7d03be)) -- **route:** add `hidePathForChildren` in `meta` ([d52b0de](https://github.com/anncwb/vue-vben-admin/commit/d52b0de83e69f7505c28e6f59ec84bbe526ecd0d)) -- **table:** support asynchrony in beforeFetch and afterFetch ([#827](https://github.com/anncwb/vue-vben-admin/issues/827)) ([749ba5c](https://github.com/anncwb/vue-vben-admin/commit/749ba5c1daf459625518937c239787b756c0a780)) -- **table-action:** support `tooltip` option ([5fab267](https://github.com/anncwb/vue-vben-admin/commit/5fab267a69600fdf5d7a7f9e4d9fff859d09dede)), closes [#848](https://github.com/anncwb/vue-vben-admin/issues/848) -- **tree:** add `insertNodesByKey` method ([5a20df4](https://github.com/anncwb/vue-vben-admin/commit/5a20df45ad36b523d48bf7fe11bdb10a6d03df64)) -- routers support `ignoreRoute` option ([72ac240](https://github.com/anncwb/vue-vben-admin/commit/72ac240f2858cd74cb62b7647ca89d63bb71d247)) - -### Performance Improvements - -- **scrollbar:** scrollbar update when slot changed ([e9e51b2](https://github.com/anncwb/vue-vben-admin/commit/e9e51b2fdc879a66d8df08504a0955c9c21e3e27)) - -## [2.5.1](https://github.com/anncwb/vue-vben-admin/compare/v2.4.0...v2.5.1) (2021-06-26) - -### Bug Fixes - -- **comp-tree:** support comp-tree-foreach stop,add insertNodesByKey ([#818](https://github.com/anncwb/vue-vben-admin/issues/818)) ([d97aa92](https://github.com/anncwb/vue-vben-admin/commit/d97aa927417bf45a7c127ecfa9b8e835b6b68855)) -- fix antdv console warning ([480cfb9](https://github.com/anncwb/vue-vben-admin/commit/480cfb914e78c06eb7784e33465ed91b7d4c3eee)) -- fix defHttp baseUrl work ([d5f9919](https://github.com/anncwb/vue-vben-admin/commit/d5f9919b60fdd7d5c435129e8db519c0bbd37529)) -- **api:** select api type error ([b387681](https://github.com/anncwb/vue-vben-admin/commit/b387681c00ac018f5bc6a9251009ddffe37acae6)) -- **api-select:** ensure that the onchange function parameters are correct ([fa64fc8](https://github.com/anncwb/vue-vben-admin/commit/fa64fc8a622832b87fdf672965d55d543b5929a2)) -- **api-select:** loss option data on event callback ([c5f2577](https://github.com/anncwb/vue-vben-admin/commit/c5f2577f515e7ae96b27b509e5dd4b3317fcb7b4)), closes [#733](https://github.com/anncwb/vue-vben-admin/issues/733) -- **ApiSelect demo:** add demo about ApiSelect's use ([#757](https://github.com/anncwb/vue-vben-admin/issues/757)) ([a03d3cc](https://github.com/anncwb/vue-vben-admin/commit/a03d3cc60c770eba644c1f3837850a2c1c015029)) -- **demo:** `breadcrumb` route invalid redirect ([84d9300](https://github.com/anncwb/vue-vben-admin/commit/84d9300e52fa73da575591aa4b71858a7e459c8c)) -- **demo:** account list page validate and save ([21f7a85](https://github.com/anncwb/vue-vben-admin/commit/21f7a854fe2455315287d04e895661ff739bce17)) -- **demo:** make sure the map https resource is correct ([7b9cd09](https://github.com/anncwb/vue-vben-admin/commit/7b9cd09ad8a50c45b2e661e07953d786d82f367d)) -- **demo:** style error,fix [#806](https://github.com/anncwb/vue-vben-admin/issues/806) ([a2d8be3](https://github.com/anncwb/vue-vben-admin/commit/a2d8be3ab29da88126f3ba971f6893cb12327759)) -- **demo-form:** add fieldMapToTime example,fix [#807](https://github.com/anncwb/vue-vben-admin/issues/807) ([a2a75a0](https://github.com/anncwb/vue-vben-admin/commit/a2a75a097ff6c9df12471eff0d62d44d2b88cfff)) -- **design:** correct tailwind configuration,fix [#800](https://github.com/anncwb/vue-vben-admin/issues/800) ([aec230c](https://github.com/anncwb/vue-vben-admin/commit/aec230ca19d541079b64c54ba00596ef9cd92ca0)) -- **dropdown:** icon and trigger work unexpected ([60b80c9](https://github.com/anncwb/vue-vben-admin/commit/60b80c96e82da9101d56b2e195e9e7571de11f0a)), closes [#796](https://github.com/anncwb/vue-vben-admin/issues/796) [#787](https://github.com/anncwb/vue-vben-admin/issues/787) -- **flow-chart:** fix drag and drop menu loss ([fa828fd](https://github.com/anncwb/vue-vben-admin/commit/fa828fd972efeea87f364be76a1139ae53ec20d8)) -- **form:** loss args on component change event ([513823b](https://github.com/anncwb/vue-vben-admin/commit/513823bfbd3e8acc68098e0708c34bff2dd8dba6)) -- **layout:** props warn ([#756](https://github.com/anncwb/vue-vben-admin/issues/756)) ([bbce002](https://github.com/anncwb/vue-vben-admin/commit/bbce002be170c52db984647c931db88d7724cb52)) -- **menu:** fix the jitter problem of menu folding animation,fix [#732](https://github.com/anncwb/vue-vben-admin/issues/732) ([4c89ea7](https://github.com/anncwb/vue-vben-admin/commit/4c89ea7474f4315870df1790f99f3e431f343b90)) -- **mock:** make sure ignore matches the file correctly, fix [#745](https://github.com/anncwb/vue-vben-admin/issues/745) ([a222ec8](https://github.com/anncwb/vue-vben-admin/commit/a222ec8553f9b4477a43a8f7d113b5646fbfc373)) -- **mock:** type error ([7c1ffa3](https://github.com/anncwb/vue-vben-admin/commit/7c1ffa3d23de508a8d1590985806cb7a484b24e5)) -- **modal:** add v-model support for visible ([de12bab](https://github.com/anncwb/vue-vben-admin/commit/de12babd314ac831d3cb645f42dbf8a476075623)) -- **modal:** ensure that the full screen height is calculated correctly ([1c1755c](https://github.com/anncwb/vue-vben-admin/commit/1c1755cf5b4ada7263c05ddf4105abb52a2abb2f)) -- **modal:** ensure that the shutdown event is not triggered multiple times ([655b743](https://github.com/anncwb/vue-vben-admin/commit/655b74323653147943cbde2352208cb765c82b8a)) -- **pop-confirm:** fix event working unexpected ([a6ef771](https://github.com/anncwb/vue-vben-admin/commit/a6ef771fcce14c3644c965afaa69b3a17d0a7087)) -- **route:** dynamically introduce components error ([c6b766d](https://github.com/anncwb/vue-vben-admin/commit/c6b766d8ea902294ab1f7e4a06781f2bcfdd1f0b)) -- **router:** loss `directory` route ([df8cd86](https://github.com/anncwb/vue-vben-admin/commit/df8cd860514f32f44847dcf724f0737ed4d8b9e0)), closes [#722](https://github.com/anncwb/vue-vben-admin/issues/722) -- **store:** fix type error after pinia version upgrade ([e8d6f88](https://github.com/anncwb/vue-vben-admin/commit/e8d6f8851efd7076946486864936f1797280d3ba)) -- **table:** event editCancel loss params ([8d22231](https://github.com/anncwb/vue-vben-admin/commit/8d22231a5fa4afed19201a4a4e5c29d674498516)) -- **table:** fix table jitter problem ([8eba7fb](https://github.com/anncwb/vue-vben-admin/commit/8eba7fb52786d1977e4cb7b67673d74c91c5c827)) -- **table:** getDataSource not worked on empty data ([e78af6f](https://github.com/anncwb/vue-vben-admin/commit/e78af6f228e25f052dc4c5a1859a6db50e0b112e)), closes [#752](https://github.com/anncwb/vue-vben-admin/issues/752) -- **table:** treeTable editable error ([4ae39c5](https://github.com/anncwb/vue-vben-admin/commit/4ae39c53b49532fc6c31086a31e30429d2e236ed)), closes [#811](https://github.com/anncwb/vue-vben-admin/issues/811) -- **upload:** make sure to carry custom parameters, fix [#802](https://github.com/anncwb/vue-vben-admin/issues/802) ([c4b22a2](https://github.com/anncwb/vue-vben-admin/commit/c4b22a225d0088d87be0c0068f543366312521db)) -- **use-message:** `content` not support vNode ([154ebc3](https://github.com/anncwb/vue-vben-admin/commit/154ebc3d96f73bb3ceab99ea0229a3619d585aba)) -- build error ([5212ea7](https://github.com/anncwb/vue-vben-admin/commit/5212ea79b43c832a5136354b549de8f89b6e2156)) -- **avatar:** mock data and Account center style ([2066f66](https://github.com/anncwb/vue-vben-admin/commit/2066f669715491f3e91ac6d0e905cd2b3e80b58d)) -- **axios:** make sure that the parameter is an object before processing, fix [#660](https://github.com/anncwb/vue-vben-admin/issues/660) ([834fa7e](https://github.com/anncwb/vue-vben-admin/commit/834fa7eb9c8aff252e083d38fdab4f6f53b4d43a)) -- **axios:** transformRequestHook logic error ([b69dcd7](https://github.com/anncwb/vue-vben-admin/commit/b69dcd79d742fd171302ce0f48c7750d60da217f)) -- **code-editor:** fix CodeEditor style problem, fix [#655](https://github.com/anncwb/vue-vben-admin/issues/655) ([5662804](https://github.com/anncwb/vue-vben-admin/commit/566280422de0537c4e31496eaaa95a9d51fe9458)) -- **codeeditor:** empty value set failed.fixed:[#659](https://github.com/anncwb/vue-vben-admin/issues/659) ([ba2bebb](https://github.com/anncwb/vue-vben-admin/commit/ba2bebb4069085817a90d065ed5877fdb50a8039)) -- **codeMirror:** fix the JsonEditor embedded in the bullet frame causing the style to be disordered ([#668](https://github.com/anncwb/vue-vben-admin/issues/668)) ([e1123a2](https://github.com/anncwb/vue-vben-admin/commit/e1123a2ccb5d5450a5072c19e5508a5dc0f14423)) -- **demo:** fix basic form page style ([8b6e07b](https://github.com/anncwb/vue-vben-admin/commit/8b6e07b768f110f13b4f2efa6c46e03266667a8c)) -- **form:** fix form update problem ([bcad95d](https://github.com/anncwb/vue-vben-admin/commit/bcad95d32a08a73f84ecbabab409cd64159f4077)), closes [#720](https://github.com/anncwb/vue-vben-admin/issues/720) -- **form:** radioButtonGroup value support boolean ([9e2aa20](https://github.com/anncwb/vue-vben-admin/commit/9e2aa20daa08d2902cb5d56c1560306947e44939)) -- **form:** radioButtonGroup value support number ([bbddf30](https://github.com/anncwb/vue-vben-admin/commit/bbddf30e96feb1ab048323d93d3b8c1b18857acd)) -- **form:** schemas update problem ([808328d](https://github.com/anncwb/vue-vben-admin/commit/808328dc7e56b1cc07b678d501d9589290173443)), closes [#688](https://github.com/anncwb/vue-vben-admin/issues/688) -- **keep-alive:** tablist cache updating effect ([d62d0ca](https://github.com/anncwb/vue-vben-admin/commit/d62d0ca08cff442c23eb9265851b066a2f24afa8)), closes [#695](https://github.com/anncwb/vue-vben-admin/issues/695) -- **layout:** fix class loss ([d018363](https://github.com/anncwb/vue-vben-admin/commit/d018363ddcd68189a18829a2b2560f3b98da58a6)) -- **layout:** fix style compatibility issues ([905e5b7](https://github.com/anncwb/vue-vben-admin/commit/905e5b714b582548f32feca723012124343686a6)) -- **lock:** fix lock modal height ([40e3cb0](https://github.com/anncwb/vue-vben-admin/commit/40e3cb043c90a8343fa44a32acad2cb77de732da)), closes [#701](https://github.com/anncwb/vue-vben-admin/issues/701) -- **log:** fix Wrong version number ([#653](https://github.com/anncwb/vue-vben-admin/issues/653)) ([4f0d45f](https://github.com/anncwb/vue-vben-admin/commit/4f0d45f1df48755eadc0b09fa19762ee68f9abd1)) -- **login:** login page modal style fixed: [#662](https://github.com/anncwb/vue-vben-admin/issues/662) ([#666](https://github.com/anncwb/vue-vben-admin/issues/666)) ([b218f10](https://github.com/anncwb/vue-vben-admin/commit/b218f10e25a9364c399a5fe42eedb549f57c01ea)) -- **mock:** menu list api loss `type` field ([4185412](https://github.com/anncwb/vue-vben-admin/commit/41854121f3713dbde236afd3a416e9f27bd0c673)) -- **modal:** redoModalHeight not work as expected ([5d554f1](https://github.com/anncwb/vue-vben-admin/commit/5d554f184f7b61774d1a1b2e61451677b38505de)) -- **page:** `basic form` action btns should be in line ([6c4f947](https://github.com/anncwb/vue-vben-admin/commit/6c4f947386c181f45253c94e4ef735d29a253053)) -- **radio-button:** fix RadioButton `disabled` support ([ee384b1](https://github.com/anncwb/vue-vben-admin/commit/ee384b1fa7e387b3680e9d54cbe4a1e2f15ec750)), closes [#710](https://github.com/anncwb/vue-vben-admin/issues/710) -- **table:** wrong indeterminate state ([495b1da](https://github.com/anncwb/vue-vben-admin/commit/495b1da385e9b6428d2b994669d2065722445923)) -- **table:** make sure the table width is correct, fix [#593](https://github.com/anncwb/vue-vben-admin/issues/593) ([d73d43e](https://github.com/anncwb/vue-vben-admin/commit/d73d43ed91f30957cfd202c51552ca40a19cef08)) -- **table:** settings indeterminate state effect ([4fd2051](https://github.com/anncwb/vue-vben-admin/commit/4fd2051bc0403bfc5345ed6a5fc283a372ef7a92)) -- **table:** support change event ([9f4d171](https://github.com/anncwb/vue-vben-admin/commit/9f4d1719caa76de94e6362c16e4df3ac28df253c)), closes [#677](https://github.com/anncwb/vue-vben-admin/issues/677) -- **table:** try to get close to the form stuck ([d81481c](https://github.com/anncwb/vue-vben-admin/commit/d81481c52186145dac130aaa1594f0ba8db4d392)) -- **table:** useTable support onChange ([9f5085c](https://github.com/anncwb/vue-vben-admin/commit/9f5085c9f9f46b09391156b17091c1771bc13026)) -- **table-action:** fix the split line style is missing,fix [#674](https://github.com/anncwb/vue-vben-admin/issues/674) ([b1cb863](https://github.com/anncwb/vue-vben-admin/commit/b1cb86350253dc5be095466966d9469775f4395d)) -- **Tinymce:** Read only status upload button can also be used ([#718](https://github.com/anncwb/vue-vben-admin/issues/718)) ([966571b](https://github.com/anncwb/vue-vben-admin/commit/966571bdcb11c2729ab9ce212bd3e195f7bf3a59)) -- **upload:** ensure preview items valid ([4376928](https://github.com/anncwb/vue-vben-admin/commit/437692869a232ee65c300c65ee473557ae0913c7)) -- ensure that roleList is not empty ([aebad61](https://github.com/anncwb/vue-vben-admin/commit/aebad61b3d3e11aaf720b37e762e53e2e6999d3c)) -- fix darkModeSwitch switch failure ([34a8054](https://github.com/anncwb/vue-vben-admin/commit/34a80542de670f0385dffaf5bf64bb9c3f6b90da)) -- fix if getDropdownList.length==0 show Dropdown component ([21c771b](https://github.com/anncwb/vue-vben-admin/commit/21c771b59cb45defbff37de21c5c1950370b8f92)) -- fix Login Page LocalePicker showLocale condition ([d683b0f](https://github.com/anncwb/vue-vben-admin/commit/d683b0f1e85b85b07090feba4ac7f741bd3bd482)) -- fix node12 version data mock error ([644dbe3](https://github.com/anncwb/vue-vben-admin/commit/644dbe315bb03ea1641a682359873237208a5303)) -- Fix the problem that the `lang` attribute of `HTML` will not be set when it is first loaded ([#682](https://github.com/anncwb/vue-vben-admin/issues/682)) ([eca8907](https://github.com/anncwb/vue-vben-admin/commit/eca8907a11c28d816c3da5a0667f45a38a499012)) -- login failed ([035f55a](https://github.com/anncwb/vue-vben-admin/commit/035f55af9778819d72adc1700d9de56a6569b58f)) -- session timeout login logic error ([#678](https://github.com/anncwb/vue-vben-admin/issues/678)) ([132c7fb](https://github.com/anncwb/vue-vben-admin/commit/132c7fb944df255c4d76a25d6d924439f91f9c54)), closes [#673](https://github.com/anncwb/vue-vben-admin/issues/673) -- **tree:** support defaultExpandAll prop ([3ed2339](https://github.com/anncwb/vue-vben-admin/commit/3ed2339a6d75abbd6ccf723b6eaa762f9921409e)) -- **useViewHeight:** Fix the problem that useContentViewHeight does not calculate the footer ([#747](https://github.com/anncwb/vue-vben-admin/issues/747)) ([33cd8fe](https://github.com/anncwb/vue-vben-admin/commit/33cd8fe6533830176ab63ddfc4d74f75a384366c)) -- theme switching fails ([7e2ca79](https://github.com/anncwb/vue-vben-admin/commit/7e2ca79ece2f5209cb7ce4b0f5ee15012f9f51de)) - -### Features - -- **demo:** add route multi tabs show ([0e414ba](https://github.com/anncwb/vue-vben-admin/commit/0e414ba3c10b4e47a85feb1a38cae66c815719d8)), closes [#817](https://github.com/anncwb/vue-vben-admin/issues/817) -- add Tree LoadData demo ([9298b3c](https://github.com/anncwb/vue-vben-admin/commit/9298b3c988c10b81d83430ca31b9ce1d98a3fad9)) -- optimize error message for api failure ([ea6834a](https://github.com/anncwb/vue-vben-admin/commit/ea6834aeec3ef56d411b2c10a474f75d3d7bfdfc)) -- **api-select:** auto refetch after params changed ([50207ad](https://github.com/anncwb/vue-vben-admin/commit/50207ad702ef3faca1e27c873c89132ab92fae8e)) -- **app-search:** auto focus on show ([1ae6362](https://github.com/anncwb/vue-vben-admin/commit/1ae636296df2cf99e8a777f053c539c50e6ad49a)) -- **axios:** added authenticationScheme configuration,fix [#774](https://github.com/anncwb/vue-vben-admin/issues/774) ([b6d5b07](https://github.com/anncwb/vue-vben-admin/commit/b6d5b0796de4d0b66c0f33c335ec991d44f64ef2)) -- **demo:** `switch` use in table ([46899aa](https://github.com/anncwb/vue-vben-admin/commit/46899aa3cd6b1616c42ac263a28af75be839f6a0)) -- **demo:** added guide page example ([d196340](https://github.com/anncwb/vue-vben-admin/commit/d196340d270d2becbf2cc81b7d4f09273381bd09)) -- **echarts:** add getInstance for useECharts ([fb6c76d](https://github.com/anncwb/vue-vben-admin/commit/fb6c76db535bd0c6305d03c0cff876a1f079100b)) -- **modal:** add closeModal for useModal ([6d5f9aa](https://github.com/anncwb/vue-vben-admin/commit/6d5f9aa699c5da8af6bf5841baddc4a8bd603917)) -- **modal:** add redoModalHeight for useModalInner ([f732b56](https://github.com/anncwb/vue-vben-admin/commit/f732b569042f7fe77c85cb295538ddd85561f7e9)) -- **preview:** added createImgPreview picture preview function ([305630e](https://github.com/anncwb/vue-vben-admin/commit/305630e3fd886b3f690f890a934a8a6ba224fba1)) -- **project-setting:** added sessionTimeoutProcessing project configuration item,fix [#772](https://github.com/anncwb/vue-vben-admin/issues/772) ([0d07084](https://github.com/anncwb/vue-vben-admin/commit/0d0708409c4adbe7a0c5e33abf5307031147eaeb)) -- **table:** add editable DatePicker & TimePicker ([#654](https://github.com/anncwb/vue-vben-admin/issues/654)) ([93006c7](https://github.com/anncwb/vue-vben-admin/commit/93006c7dc7b5243b26637f444c8057c95935e622)) -- **table:** add updateTableDataRecord method ([8e4f486](https://github.com/anncwb/vue-vben-admin/commit/8e4f486fcf835f0b6f2a95676dba268ffdd0566e)) -- **table:** editable component text align ([8eaf575](https://github.com/anncwb/vue-vben-admin/commit/8eaf57562610a833c8083ae9957f458319d1cc93)) -- **table:** support columns-change event ([125a7d1](https://github.com/anncwb/vue-vben-admin/commit/125a7d14831642c9cbb2e4b3e75953c3b2e2cdef)) -- **table:** support custom update on row editing ([fe2bcfc](https://github.com/anncwb/vue-vben-admin/commit/fe2bcfc6f74159c355f3be153a316869fdb8b644)), closes [#646](https://github.com/anncwb/vue-vben-admin/issues/646) -- **table:** updateTableDataRecord support functional rowKey ([448a4c2](https://github.com/anncwb/vue-vben-admin/commit/448a4c2809672480f8f635d7cc4661554112598a)) -- **table-action:** add stopButtonPropagation prop ([808012b](https://github.com/anncwb/vue-vben-admin/commit/808012b544b8c6f3cf467f42653c2783dbe8be6b)), closes [#699](https://github.com/anncwb/vue-vben-admin/issues/699) -- **table-img:** support simple show mode and more props ([19d8e01](https://github.com/anncwb/vue-vben-admin/commit/19d8e01e11644c66222f137abd05940cbdec0bb6)) -- **test:** add jest test suite ([f6fe1dd](https://github.com/anncwb/vue-vben-admin/commit/f6fe1dd62df231ccbd063db0d32359b48aa5c76b)) -- **use-drawer:** add closeDrawer function ([639520a](https://github.com/anncwb/vue-vben-admin/commit/639520ad5ddf829875ab517067abf2b45ebc04c2)) -- add CropperAvatar component ([8e410fc](https://github.com/anncwb/vue-vben-admin/commit/8e410fc6401847d8e5545468b5ce6fd7ce9fc5cc)) -- **tabs:** add setTabTitle method ([#680](https://github.com/anncwb/vue-vben-admin/issues/680)) ([5ddccf6](https://github.com/anncwb/vue-vben-admin/commit/5ddccf6ba28453b9a35355d53d0db65f1a8876bc)) -- **tinymce:** support dark theme and I18n ([83c9cd7](https://github.com/anncwb/vue-vben-admin/commit/83c9cd77421e9c0888a41e2d8dcbca816da67488)) -- **Tinymce:** add dynamics to the read-only state of the rich text editor ([#725](https://github.com/anncwb/vue-vben-admin/issues/725)) ([efce482](https://github.com/anncwb/vue-vben-admin/commit/efce482b3215ddf9ed588f63a218d5f76939e947)) -- **tree:** add defaultExpandLevel prop ([6edca1c](https://github.com/anncwb/vue-vben-admin/commit/6edca1c19c3b0772f9ab82a7b09251a74fff2173)), closes [#672](https://github.com/anncwb/vue-vben-admin/issues/672) - -### Performance Improvements - -- **component:** optimize tree and upload components ([3f6920f](https://github.com/anncwb/vue-vben-admin/commit/3f6920f7a9775fc06a34dead90b1724b23b7759c)) -- **cropper-avatar:** code optimization ([6dbbdba](https://github.com/anncwb/vue-vben-admin/commit/6dbbdbac76c2c3795e12dd346f6310d1b70f6a7d)) -- **i18n:** improve circular dependencies ([d677729](https://github.com/anncwb/vue-vben-admin/commit/d677729acbe2c024ab13cf490b205528507c4823)) -- **i18n:** improve warning prompt ([6ef62ba](https://github.com/anncwb/vue-vben-admin/commit/6ef62ba6ea7f5613a1fec982b30fe6b0f478bf59)) -- **locale:** reduce the number of multilingual files ([0acc4ab](https://github.com/anncwb/vue-vben-admin/commit/0acc4ab2dd70a239bd13929edede02b283feb7c2)) -- **pagewrapper:** 优化 PageWrapper 的高度自适应表现使用 getViewportOffset 替代 useContentViewHeight ([#792](https://github.com/anncwb/vue-vben-admin/issues/792)) ([4d8e398](https://github.com/anncwb/vue-vben-admin/commit/4d8e39857ea59fff99e69832b4a8cabf3a424c24)) -- **PageWrapper:** fix the height calculation problem when footer and global footer are opened at the same time ([#760](https://github.com/anncwb/vue-vben-admin/issues/760)) ([ab2c7ef](https://github.com/anncwb/vue-vben-admin/commit/ab2c7efe6994dacfe0ff407783f2c3b246427bfc)) -- **utils:** mitt default export is changed from Class to Function ([d3d620f](https://github.com/anncwb/vue-vben-admin/commit/d3d620f4fc75dd69270e4d090a71d426701272ef)) -- add createImgPreview func ([#713](https://github.com/anncwb/vue-vben-admin/issues/713)) ([b7c7c46](https://github.com/anncwb/vue-vben-admin/commit/b7c7c46853d332641d116d818e657447884784f3)) -- optimize components and add comments ([55e9d9f](https://github.com/anncwb/vue-vben-admin/commit/55e9d9fc2953643cec95c74b6ed34b0e68641fb6)) - -### Reverts - -- **axios:** remove baseUrl config ([61d4efd](https://github.com/anncwb/vue-vben-admin/commit/61d4efd55a8b4f09990b5f1888e23ead43958164)) - -## [2.5.1](https://github.com/anncwb/vue-vben-admin/compare/v2.4.0...v2.5.1) (2021-06-26) - -### Bug Fixes - -- fix antdv console warning ([480cfb9](https://github.com/anncwb/vue-vben-admin/commit/480cfb914e78c06eb7784e33465ed91b7d4c3eee)) -- fix defHttp baseUrl work ([d5f9919](https://github.com/anncwb/vue-vben-admin/commit/d5f9919b60fdd7d5c435129e8db519c0bbd37529)) -- **api:** select api type error ([b387681](https://github.com/anncwb/vue-vben-admin/commit/b387681c00ac018f5bc6a9251009ddffe37acae6)) -- **api-select:** ensure that the onchange function parameters are correct ([fa64fc8](https://github.com/anncwb/vue-vben-admin/commit/fa64fc8a622832b87fdf672965d55d543b5929a2)) -- **api-select:** loss option data on event callback ([c5f2577](https://github.com/anncwb/vue-vben-admin/commit/c5f2577f515e7ae96b27b509e5dd4b3317fcb7b4)), closes [#733](https://github.com/anncwb/vue-vben-admin/issues/733) -- **ApiSelect demo:** add demo about ApiSelect's use ([#757](https://github.com/anncwb/vue-vben-admin/issues/757)) ([a03d3cc](https://github.com/anncwb/vue-vben-admin/commit/a03d3cc60c770eba644c1f3837850a2c1c015029)) -- **avatar:** mock data and Account center style ([2066f66](https://github.com/anncwb/vue-vben-admin/commit/2066f669715491f3e91ac6d0e905cd2b3e80b58d)) -- **axios:** make sure that the parameter is an object before processing, fix [#660](https://github.com/anncwb/vue-vben-admin/issues/660) ([834fa7e](https://github.com/anncwb/vue-vben-admin/commit/834fa7eb9c8aff252e083d38fdab4f6f53b4d43a)) -- **axios:** transformRequestHook logic error ([b69dcd7](https://github.com/anncwb/vue-vben-admin/commit/b69dcd79d742fd171302ce0f48c7750d60da217f)) -- **code-editor:** fix CodeEditor style problem, fix [#655](https://github.com/anncwb/vue-vben-admin/issues/655) ([5662804](https://github.com/anncwb/vue-vben-admin/commit/566280422de0537c4e31496eaaa95a9d51fe9458)) -- **codeeditor:** empty value set failed.fixed:[#659](https://github.com/anncwb/vue-vben-admin/issues/659) ([ba2bebb](https://github.com/anncwb/vue-vben-admin/commit/ba2bebb4069085817a90d065ed5877fdb50a8039)) -- **codeMirror:** fix the JsonEditor embedded in the bullet frame causing the style to be disordered ([#668](https://github.com/anncwb/vue-vben-admin/issues/668)) ([e1123a2](https://github.com/anncwb/vue-vben-admin/commit/e1123a2ccb5d5450a5072c19e5508a5dc0f14423)) -- **demo:** `breadcrumb` route invalid redirect ([84d9300](https://github.com/anncwb/vue-vben-admin/commit/84d9300e52fa73da575591aa4b71858a7e459c8c)) -- **demo:** account list page validate and save ([21f7a85](https://github.com/anncwb/vue-vben-admin/commit/21f7a854fe2455315287d04e895661ff739bce17)) -- **demo:** fix basic form page style ([8b6e07b](https://github.com/anncwb/vue-vben-admin/commit/8b6e07b768f110f13b4f2efa6c46e03266667a8c)) -- **demo:** make sure the map https resource is correct ([7b9cd09](https://github.com/anncwb/vue-vben-admin/commit/7b9cd09ad8a50c45b2e661e07953d786d82f367d)) -- **demo:** style error,fix [#806](https://github.com/anncwb/vue-vben-admin/issues/806) ([a2d8be3](https://github.com/anncwb/vue-vben-admin/commit/a2d8be3ab29da88126f3ba971f6893cb12327759)) -- **demo-form:** add fieldMapToTime example,fix [#807](https://github.com/anncwb/vue-vben-admin/issues/807) ([a2a75a0](https://github.com/anncwb/vue-vben-admin/commit/a2a75a097ff6c9df12471eff0d62d44d2b88cfff)) -- **design:** correct tailwind configuration,fix [#800](https://github.com/anncwb/vue-vben-admin/issues/800) ([aec230c](https://github.com/anncwb/vue-vben-admin/commit/aec230ca19d541079b64c54ba00596ef9cd92ca0)) -- **dropdown:** icon and trigger work unexpected ([60b80c9](https://github.com/anncwb/vue-vben-admin/commit/60b80c96e82da9101d56b2e195e9e7571de11f0a)), closes [#796](https://github.com/anncwb/vue-vben-admin/issues/796) [#787](https://github.com/anncwb/vue-vben-admin/issues/787) -- **flow-chart:** fix drag and drop menu loss ([fa828fd](https://github.com/anncwb/vue-vben-admin/commit/fa828fd972efeea87f364be76a1139ae53ec20d8)) -- **form:** fix form update problem ([bcad95d](https://github.com/anncwb/vue-vben-admin/commit/bcad95d32a08a73f84ecbabab409cd64159f4077)), closes [#720](https://github.com/anncwb/vue-vben-admin/issues/720) -- **form:** loss args on component change event ([513823b](https://github.com/anncwb/vue-vben-admin/commit/513823bfbd3e8acc68098e0708c34bff2dd8dba6)) -- **form:** radioButtonGroup value support boolean ([9e2aa20](https://github.com/anncwb/vue-vben-admin/commit/9e2aa20daa08d2902cb5d56c1560306947e44939)) -- **form:** radioButtonGroup value support number ([bbddf30](https://github.com/anncwb/vue-vben-admin/commit/bbddf30e96feb1ab048323d93d3b8c1b18857acd)) -- **form:** schemas update problem ([808328d](https://github.com/anncwb/vue-vben-admin/commit/808328dc7e56b1cc07b678d501d9589290173443)), closes [#688](https://github.com/anncwb/vue-vben-admin/issues/688) -- **keep-alive:** tablist cache updating effect ([d62d0ca](https://github.com/anncwb/vue-vben-admin/commit/d62d0ca08cff442c23eb9265851b066a2f24afa8)), closes [#695](https://github.com/anncwb/vue-vben-admin/issues/695) -- **layout:** fix class loss ([d018363](https://github.com/anncwb/vue-vben-admin/commit/d018363ddcd68189a18829a2b2560f3b98da58a6)) -- **layout:** fix style compatibility issues ([905e5b7](https://github.com/anncwb/vue-vben-admin/commit/905e5b714b582548f32feca723012124343686a6)) -- **layout:** props warn ([#756](https://github.com/anncwb/vue-vben-admin/issues/756)) ([bbce002](https://github.com/anncwb/vue-vben-admin/commit/bbce002be170c52db984647c931db88d7724cb52)) -- **lock:** fix lock modal height ([40e3cb0](https://github.com/anncwb/vue-vben-admin/commit/40e3cb043c90a8343fa44a32acad2cb77de732da)), closes [#701](https://github.com/anncwb/vue-vben-admin/issues/701) -- **log:** fix Wrong version number ([#653](https://github.com/anncwb/vue-vben-admin/issues/653)) ([4f0d45f](https://github.com/anncwb/vue-vben-admin/commit/4f0d45f1df48755eadc0b09fa19762ee68f9abd1)) -- **login:** login page modal style fixed: [#662](https://github.com/anncwb/vue-vben-admin/issues/662) ([#666](https://github.com/anncwb/vue-vben-admin/issues/666)) ([b218f10](https://github.com/anncwb/vue-vben-admin/commit/b218f10e25a9364c399a5fe42eedb549f57c01ea)) -- **menu:** fix the jitter problem of menu folding animation,fix [#732](https://github.com/anncwb/vue-vben-admin/issues/732) ([4c89ea7](https://github.com/anncwb/vue-vben-admin/commit/4c89ea7474f4315870df1790f99f3e431f343b90)) -- **mock:** make sure ignore matches the file correctly, fix [#745](https://github.com/anncwb/vue-vben-admin/issues/745) ([a222ec8](https://github.com/anncwb/vue-vben-admin/commit/a222ec8553f9b4477a43a8f7d113b5646fbfc373)) -- **mock:** menu list api loss `type` field ([4185412](https://github.com/anncwb/vue-vben-admin/commit/41854121f3713dbde236afd3a416e9f27bd0c673)) -- **mock:** type error ([7c1ffa3](https://github.com/anncwb/vue-vben-admin/commit/7c1ffa3d23de508a8d1590985806cb7a484b24e5)) -- **modal:** add v-model support for visible ([de12bab](https://github.com/anncwb/vue-vben-admin/commit/de12babd314ac831d3cb645f42dbf8a476075623)) -- **modal:** ensure that the full screen height is calculated correctly ([1c1755c](https://github.com/anncwb/vue-vben-admin/commit/1c1755cf5b4ada7263c05ddf4105abb52a2abb2f)) -- **modal:** ensure that the shutdown event is not triggered multiple times ([655b743](https://github.com/anncwb/vue-vben-admin/commit/655b74323653147943cbde2352208cb765c82b8a)) -- **modal:** redoModalHeight not work as expected ([5d554f1](https://github.com/anncwb/vue-vben-admin/commit/5d554f184f7b61774d1a1b2e61451677b38505de)) -- **page:** `basic form` action btns should be in line ([6c4f947](https://github.com/anncwb/vue-vben-admin/commit/6c4f947386c181f45253c94e4ef735d29a253053)) -- **pop-confirm:** fix event working unexpected ([a6ef771](https://github.com/anncwb/vue-vben-admin/commit/a6ef771fcce14c3644c965afaa69b3a17d0a7087)) -- **radio-button:** fix RadioButton `disabled` support ([ee384b1](https://github.com/anncwb/vue-vben-admin/commit/ee384b1fa7e387b3680e9d54cbe4a1e2f15ec750)), closes [#710](https://github.com/anncwb/vue-vben-admin/issues/710) -- **route:** dynamically introduce components error ([c6b766d](https://github.com/anncwb/vue-vben-admin/commit/c6b766d8ea902294ab1f7e4a06781f2bcfdd1f0b)) -- **router:** loss `directory` route ([df8cd86](https://github.com/anncwb/vue-vben-admin/commit/df8cd860514f32f44847dcf724f0737ed4d8b9e0)), closes [#722](https://github.com/anncwb/vue-vben-admin/issues/722) -- **store:** fix type error after pinia version upgrade ([e8d6f88](https://github.com/anncwb/vue-vben-admin/commit/e8d6f8851efd7076946486864936f1797280d3ba)) -- **table:** wrong indeterminate state ([495b1da](https://github.com/anncwb/vue-vben-admin/commit/495b1da385e9b6428d2b994669d2065722445923)) -- **table:** event editCancel loss params ([8d22231](https://github.com/anncwb/vue-vben-admin/commit/8d22231a5fa4afed19201a4a4e5c29d674498516)) -- **table:** fix table jitter problem ([8eba7fb](https://github.com/anncwb/vue-vben-admin/commit/8eba7fb52786d1977e4cb7b67673d74c91c5c827)) -- **table:** getDataSource not worked on empty data ([e78af6f](https://github.com/anncwb/vue-vben-admin/commit/e78af6f228e25f052dc4c5a1859a6db50e0b112e)), closes [#752](https://github.com/anncwb/vue-vben-admin/issues/752) -- **table:** make sure the table width is correct, fix [#593](https://github.com/anncwb/vue-vben-admin/issues/593) ([d73d43e](https://github.com/anncwb/vue-vben-admin/commit/d73d43ed91f30957cfd202c51552ca40a19cef08)) -- **table:** settings indeterminate state effect ([4fd2051](https://github.com/anncwb/vue-vben-admin/commit/4fd2051bc0403bfc5345ed6a5fc283a372ef7a92)) -- **table:** support change event ([9f4d171](https://github.com/anncwb/vue-vben-admin/commit/9f4d1719caa76de94e6362c16e4df3ac28df253c)), closes [#677](https://github.com/anncwb/vue-vben-admin/issues/677) -- **table:** treeTable editable error ([4ae39c5](https://github.com/anncwb/vue-vben-admin/commit/4ae39c53b49532fc6c31086a31e30429d2e236ed)), closes [#811](https://github.com/anncwb/vue-vben-admin/issues/811) -- **table:** try to get close to the form stuck ([d81481c](https://github.com/anncwb/vue-vben-admin/commit/d81481c52186145dac130aaa1594f0ba8db4d392)) -- **table:** useTable support onChange ([9f5085c](https://github.com/anncwb/vue-vben-admin/commit/9f5085c9f9f46b09391156b17091c1771bc13026)) -- **table-action:** fix the split line style is missing,fix [#674](https://github.com/anncwb/vue-vben-admin/issues/674) ([b1cb863](https://github.com/anncwb/vue-vben-admin/commit/b1cb86350253dc5be095466966d9469775f4395d)) -- **Tinymce:** Read only status upload button can also be used ([#718](https://github.com/anncwb/vue-vben-admin/issues/718)) ([966571b](https://github.com/anncwb/vue-vben-admin/commit/966571bdcb11c2729ab9ce212bd3e195f7bf3a59)) -- **upload:** ensure preview items valid ([4376928](https://github.com/anncwb/vue-vben-admin/commit/437692869a232ee65c300c65ee473557ae0913c7)) -- **upload:** make sure to carry custom parameters, fix [#802](https://github.com/anncwb/vue-vben-admin/issues/802) ([c4b22a2](https://github.com/anncwb/vue-vben-admin/commit/c4b22a225d0088d87be0c0068f543366312521db)) -- **use-message:** `content` not support vNode ([154ebc3](https://github.com/anncwb/vue-vben-admin/commit/154ebc3d96f73bb3ceab99ea0229a3619d585aba)) -- build error ([5212ea7](https://github.com/anncwb/vue-vben-admin/commit/5212ea79b43c832a5136354b549de8f89b6e2156)) -- ensure that roleList is not empty ([aebad61](https://github.com/anncwb/vue-vben-admin/commit/aebad61b3d3e11aaf720b37e762e53e2e6999d3c)) -- fix darkModeSwitch switch failure ([34a8054](https://github.com/anncwb/vue-vben-admin/commit/34a80542de670f0385dffaf5bf64bb9c3f6b90da)) -- fix if getDropdownList.length==0 show Dropdown component ([21c771b](https://github.com/anncwb/vue-vben-admin/commit/21c771b59cb45defbff37de21c5c1950370b8f92)) -- fix Login Page LocalePicker showLocale condition ([d683b0f](https://github.com/anncwb/vue-vben-admin/commit/d683b0f1e85b85b07090feba4ac7f741bd3bd482)) -- fix node12 version data mock error ([644dbe3](https://github.com/anncwb/vue-vben-admin/commit/644dbe315bb03ea1641a682359873237208a5303)) -- Fix the problem that the `lang` attribute of `HTML` will not be set when it is first loaded ([#682](https://github.com/anncwb/vue-vben-admin/issues/682)) ([eca8907](https://github.com/anncwb/vue-vben-admin/commit/eca8907a11c28d816c3da5a0667f45a38a499012)) -- login failed ([035f55a](https://github.com/anncwb/vue-vben-admin/commit/035f55af9778819d72adc1700d9de56a6569b58f)) -- session timeout login logic error ([#678](https://github.com/anncwb/vue-vben-admin/issues/678)) ([132c7fb](https://github.com/anncwb/vue-vben-admin/commit/132c7fb944df255c4d76a25d6d924439f91f9c54)), closes [#673](https://github.com/anncwb/vue-vben-admin/issues/673) -- **tree:** support defaultExpandAll prop ([3ed2339](https://github.com/anncwb/vue-vben-admin/commit/3ed2339a6d75abbd6ccf723b6eaa762f9921409e)) -- **useViewHeight:** Fix the problem that useContentViewHeight does not calculate the footer ([#747](https://github.com/anncwb/vue-vben-admin/issues/747)) ([33cd8fe](https://github.com/anncwb/vue-vben-admin/commit/33cd8fe6533830176ab63ddfc4d74f75a384366c)) -- theme switching fails ([7e2ca79](https://github.com/anncwb/vue-vben-admin/commit/7e2ca79ece2f5209cb7ce4b0f5ee15012f9f51de)) - -### Features - -- **demo:** add route multi tabs show ([0e414ba](https://github.com/anncwb/vue-vben-admin/commit/0e414ba3c10b4e47a85feb1a38cae66c815719d8)), closes [#817](https://github.com/anncwb/vue-vben-admin/issues/817) -- add Tree LoadData demo ([9298b3c](https://github.com/anncwb/vue-vben-admin/commit/9298b3c988c10b81d83430ca31b9ce1d98a3fad9)) -- optimize error message for api failure ([ea6834a](https://github.com/anncwb/vue-vben-admin/commit/ea6834aeec3ef56d411b2c10a474f75d3d7bfdfc)) -- **api-select:** auto refetch after params changed ([50207ad](https://github.com/anncwb/vue-vben-admin/commit/50207ad702ef3faca1e27c873c89132ab92fae8e)) -- **app-search:** auto focus on show ([1ae6362](https://github.com/anncwb/vue-vben-admin/commit/1ae636296df2cf99e8a777f053c539c50e6ad49a)) -- **axios:** added authenticationScheme configuration,fix [#774](https://github.com/anncwb/vue-vben-admin/issues/774) ([b6d5b07](https://github.com/anncwb/vue-vben-admin/commit/b6d5b0796de4d0b66c0f33c335ec991d44f64ef2)) -- **demo:** `switch` use in table ([46899aa](https://github.com/anncwb/vue-vben-admin/commit/46899aa3cd6b1616c42ac263a28af75be839f6a0)) -- **demo:** added guide page example ([d196340](https://github.com/anncwb/vue-vben-admin/commit/d196340d270d2becbf2cc81b7d4f09273381bd09)) -- **echarts:** add getInstance for useECharts ([fb6c76d](https://github.com/anncwb/vue-vben-admin/commit/fb6c76db535bd0c6305d03c0cff876a1f079100b)) -- **modal:** add closeModal for useModal ([6d5f9aa](https://github.com/anncwb/vue-vben-admin/commit/6d5f9aa699c5da8af6bf5841baddc4a8bd603917)) -- **modal:** add redoModalHeight for useModalInner ([f732b56](https://github.com/anncwb/vue-vben-admin/commit/f732b569042f7fe77c85cb295538ddd85561f7e9)) -- **preview:** added createImgPreview picture preview function ([305630e](https://github.com/anncwb/vue-vben-admin/commit/305630e3fd886b3f690f890a934a8a6ba224fba1)) -- **project-setting:** added sessionTimeoutProcessing project configuration item,fix [#772](https://github.com/anncwb/vue-vben-admin/issues/772) ([0d07084](https://github.com/anncwb/vue-vben-admin/commit/0d0708409c4adbe7a0c5e33abf5307031147eaeb)) -- **table:** add editable DatePicker & TimePicker ([#654](https://github.com/anncwb/vue-vben-admin/issues/654)) ([93006c7](https://github.com/anncwb/vue-vben-admin/commit/93006c7dc7b5243b26637f444c8057c95935e622)) -- **table:** add updateTableDataRecord method ([8e4f486](https://github.com/anncwb/vue-vben-admin/commit/8e4f486fcf835f0b6f2a95676dba268ffdd0566e)) -- **table:** editable component text align ([8eaf575](https://github.com/anncwb/vue-vben-admin/commit/8eaf57562610a833c8083ae9957f458319d1cc93)) -- **table:** support columns-change event ([125a7d1](https://github.com/anncwb/vue-vben-admin/commit/125a7d14831642c9cbb2e4b3e75953c3b2e2cdef)) -- **table:** support custom update on row editing ([fe2bcfc](https://github.com/anncwb/vue-vben-admin/commit/fe2bcfc6f74159c355f3be153a316869fdb8b644)), closes [#646](https://github.com/anncwb/vue-vben-admin/issues/646) -- **table:** updateTableDataRecord support functional rowKey ([448a4c2](https://github.com/anncwb/vue-vben-admin/commit/448a4c2809672480f8f635d7cc4661554112598a)) -- **table-action:** add stopButtonPropagation prop ([808012b](https://github.com/anncwb/vue-vben-admin/commit/808012b544b8c6f3cf467f42653c2783dbe8be6b)), closes [#699](https://github.com/anncwb/vue-vben-admin/issues/699) -- **table-img:** support simple show mode and more props ([19d8e01](https://github.com/anncwb/vue-vben-admin/commit/19d8e01e11644c66222f137abd05940cbdec0bb6)) -- **test:** add jest test suite ([f6fe1dd](https://github.com/anncwb/vue-vben-admin/commit/f6fe1dd62df231ccbd063db0d32359b48aa5c76b)) -- **use-drawer:** add closeDrawer function ([639520a](https://github.com/anncwb/vue-vben-admin/commit/639520ad5ddf829875ab517067abf2b45ebc04c2)) -- add CropperAvatar component ([8e410fc](https://github.com/anncwb/vue-vben-admin/commit/8e410fc6401847d8e5545468b5ce6fd7ce9fc5cc)) -- **tabs:** add setTabTitle method ([#680](https://github.com/anncwb/vue-vben-admin/issues/680)) ([5ddccf6](https://github.com/anncwb/vue-vben-admin/commit/5ddccf6ba28453b9a35355d53d0db65f1a8876bc)) -- **tinymce:** support dark theme and I18n ([83c9cd7](https://github.com/anncwb/vue-vben-admin/commit/83c9cd77421e9c0888a41e2d8dcbca816da67488)) -- **Tinymce:** add dynamics to the read-only state of the rich text editor ([#725](https://github.com/anncwb/vue-vben-admin/issues/725)) ([efce482](https://github.com/anncwb/vue-vben-admin/commit/efce482b3215ddf9ed588f63a218d5f76939e947)) -- **tree:** add defaultExpandLevel prop ([6edca1c](https://github.com/anncwb/vue-vben-admin/commit/6edca1c19c3b0772f9ab82a7b09251a74fff2173)), closes [#672](https://github.com/anncwb/vue-vben-admin/issues/672) - -### Performance Improvements - -- **component:** optimize tree and upload components ([3f6920f](https://github.com/anncwb/vue-vben-admin/commit/3f6920f7a9775fc06a34dead90b1724b23b7759c)) -- **cropper-avatar:** code optimization ([6dbbdba](https://github.com/anncwb/vue-vben-admin/commit/6dbbdbac76c2c3795e12dd346f6310d1b70f6a7d)) -- **i18n:** improve circular dependencies ([d677729](https://github.com/anncwb/vue-vben-admin/commit/d677729acbe2c024ab13cf490b205528507c4823)) -- **i18n:** improve warning prompt ([6ef62ba](https://github.com/anncwb/vue-vben-admin/commit/6ef62ba6ea7f5613a1fec982b30fe6b0f478bf59)) -- **locale:** reduce the number of multilingual files ([0acc4ab](https://github.com/anncwb/vue-vben-admin/commit/0acc4ab2dd70a239bd13929edede02b283feb7c2)) -- **pagewrapper:** 优化 PageWrapper 的高度自适应表现使用 getViewportOffset 替代 useContentViewHeight ([#792](https://github.com/anncwb/vue-vben-admin/issues/792)) ([4d8e398](https://github.com/anncwb/vue-vben-admin/commit/4d8e39857ea59fff99e69832b4a8cabf3a424c24)) -- **PageWrapper:** fix the height calculation problem when footer and global footer are opened at the same time ([#760](https://github.com/anncwb/vue-vben-admin/issues/760)) ([ab2c7ef](https://github.com/anncwb/vue-vben-admin/commit/ab2c7efe6994dacfe0ff407783f2c3b246427bfc)) -- **utils:** mitt default export is changed from Class to Function ([d3d620f](https://github.com/anncwb/vue-vben-admin/commit/d3d620f4fc75dd69270e4d090a71d426701272ef)) -- add createImgPreview func ([#713](https://github.com/anncwb/vue-vben-admin/issues/713)) ([b7c7c46](https://github.com/anncwb/vue-vben-admin/commit/b7c7c46853d332641d116d818e657447884784f3)) -- optimize components and add comments ([55e9d9f](https://github.com/anncwb/vue-vben-admin/commit/55e9d9fc2953643cec95c74b6ed34b0e68641fb6)) - -### Reverts - -- **axios:** remove baseUrl config ([61d4efd](https://github.com/anncwb/vue-vben-admin/commit/61d4efd55a8b4f09990b5f1888e23ead43958164)) - -# [2.5.0](https://github.com/anncwb/vue-vben-admin/compare/v2.4.0...v2.5.0) (2021-06-20) - -### Bug Fixes - -- **api:** select api type error ([b387681](https://github.com/anncwb/vue-vben-admin/commit/b387681c00ac018f5bc6a9251009ddffe37acae6)) -- **api-select:** loss option data on event callback ([c5f2577](https://github.com/anncwb/vue-vben-admin/commit/c5f2577f515e7ae96b27b509e5dd4b3317fcb7b4)), closes [#733](https://github.com/anncwb/vue-vben-admin/issues/733) -- **ApiSelect demo:** add demo about ApiSelect's use ([#757](https://github.com/anncwb/vue-vben-admin/issues/757)) ([a03d3cc](https://github.com/anncwb/vue-vben-admin/commit/a03d3cc60c770eba644c1f3837850a2c1c015029)) -- **avatar:** mock data and Account center style ([2066f66](https://github.com/anncwb/vue-vben-admin/commit/2066f669715491f3e91ac6d0e905cd2b3e80b58d)) -- **axios:** make sure that the parameter is an object before processing, fix [#660](https://github.com/anncwb/vue-vben-admin/issues/660) ([834fa7e](https://github.com/anncwb/vue-vben-admin/commit/834fa7eb9c8aff252e083d38fdab4f6f53b4d43a)) -- **axios:** transformRequestHook logic error ([b69dcd7](https://github.com/anncwb/vue-vben-admin/commit/b69dcd79d742fd171302ce0f48c7750d60da217f)) -- **code-editor:** fix CodeEditor style problem, fix [#655](https://github.com/anncwb/vue-vben-admin/issues/655) ([5662804](https://github.com/anncwb/vue-vben-admin/commit/566280422de0537c4e31496eaaa95a9d51fe9458)) -- **codeeditor:** empty value set failed.fixed:[#659](https://github.com/anncwb/vue-vben-admin/issues/659) ([ba2bebb](https://github.com/anncwb/vue-vben-admin/commit/ba2bebb4069085817a90d065ed5877fdb50a8039)) -- **codeMirror:** fix the JsonEditor embedded in the bullet frame causing the style to be disordered ([#668](https://github.com/anncwb/vue-vben-admin/issues/668)) ([e1123a2](https://github.com/anncwb/vue-vben-admin/commit/e1123a2ccb5d5450a5072c19e5508a5dc0f14423)) -- **demo:** `breadcrumb` route invalid redirect ([84d9300](https://github.com/anncwb/vue-vben-admin/commit/84d9300e52fa73da575591aa4b71858a7e459c8c)) -- **demo:** account list page validate and save ([21f7a85](https://github.com/anncwb/vue-vben-admin/commit/21f7a854fe2455315287d04e895661ff739bce17)) -- **demo:** fix basic form page style ([8b6e07b](https://github.com/anncwb/vue-vben-admin/commit/8b6e07b768f110f13b4f2efa6c46e03266667a8c)) -- **demo:** make sure the map https resource is correct ([7b9cd09](https://github.com/anncwb/vue-vben-admin/commit/7b9cd09ad8a50c45b2e661e07953d786d82f367d)) -- **flow-chart:** fix drag and drop menu loss ([fa828fd](https://github.com/anncwb/vue-vben-admin/commit/fa828fd972efeea87f364be76a1139ae53ec20d8)) -- **form:** fix form update problem ([bcad95d](https://github.com/anncwb/vue-vben-admin/commit/bcad95d32a08a73f84ecbabab409cd64159f4077)), closes [#720](https://github.com/anncwb/vue-vben-admin/issues/720) -- **form:** loss args on component change event ([513823b](https://github.com/anncwb/vue-vben-admin/commit/513823bfbd3e8acc68098e0708c34bff2dd8dba6)) -- **form:** radioButtonGroup value support boolean ([9e2aa20](https://github.com/anncwb/vue-vben-admin/commit/9e2aa20daa08d2902cb5d56c1560306947e44939)) -- **form:** radioButtonGroup value support number ([bbddf30](https://github.com/anncwb/vue-vben-admin/commit/bbddf30e96feb1ab048323d93d3b8c1b18857acd)) -- **form:** schemas update problem ([808328d](https://github.com/anncwb/vue-vben-admin/commit/808328dc7e56b1cc07b678d501d9589290173443)), closes [#688](https://github.com/anncwb/vue-vben-admin/issues/688) -- **keep-alive:** tablist cache updating effect ([d62d0ca](https://github.com/anncwb/vue-vben-admin/commit/d62d0ca08cff442c23eb9265851b066a2f24afa8)), closes [#695](https://github.com/anncwb/vue-vben-admin/issues/695) -- **layout:** fix class loss ([d018363](https://github.com/anncwb/vue-vben-admin/commit/d018363ddcd68189a18829a2b2560f3b98da58a6)) -- **layout:** fix style compatibility issues ([905e5b7](https://github.com/anncwb/vue-vben-admin/commit/905e5b714b582548f32feca723012124343686a6)) -- **layout:** props warn ([#756](https://github.com/anncwb/vue-vben-admin/issues/756)) ([bbce002](https://github.com/anncwb/vue-vben-admin/commit/bbce002be170c52db984647c931db88d7724cb52)) -- **lock:** fix lock modal height ([40e3cb0](https://github.com/anncwb/vue-vben-admin/commit/40e3cb043c90a8343fa44a32acad2cb77de732da)), closes [#701](https://github.com/anncwb/vue-vben-admin/issues/701) -- **log:** fix Wrong version number ([#653](https://github.com/anncwb/vue-vben-admin/issues/653)) ([4f0d45f](https://github.com/anncwb/vue-vben-admin/commit/4f0d45f1df48755eadc0b09fa19762ee68f9abd1)) -- **login:** login page modal style fixed: [#662](https://github.com/anncwb/vue-vben-admin/issues/662) ([#666](https://github.com/anncwb/vue-vben-admin/issues/666)) ([b218f10](https://github.com/anncwb/vue-vben-admin/commit/b218f10e25a9364c399a5fe42eedb549f57c01ea)) -- **menu:** fix the jitter problem of menu folding animation,fix [#732](https://github.com/anncwb/vue-vben-admin/issues/732) ([4c89ea7](https://github.com/anncwb/vue-vben-admin/commit/4c89ea7474f4315870df1790f99f3e431f343b90)) -- **mock:** make sure ignore matches the file correctly, fix [#745](https://github.com/anncwb/vue-vben-admin/issues/745) ([a222ec8](https://github.com/anncwb/vue-vben-admin/commit/a222ec8553f9b4477a43a8f7d113b5646fbfc373)) -- **mock:** menu list api loss `type` field ([4185412](https://github.com/anncwb/vue-vben-admin/commit/41854121f3713dbde236afd3a416e9f27bd0c673)) -- **mock:** type error ([7c1ffa3](https://github.com/anncwb/vue-vben-admin/commit/7c1ffa3d23de508a8d1590985806cb7a484b24e5)) -- **modal:** add v-model support for visible ([de12bab](https://github.com/anncwb/vue-vben-admin/commit/de12babd314ac831d3cb645f42dbf8a476075623)) -- **modal:** ensure that the full screen height is calculated correctly ([1c1755c](https://github.com/anncwb/vue-vben-admin/commit/1c1755cf5b4ada7263c05ddf4105abb52a2abb2f)) -- **modal:** ensure that the shutdown event is not triggered multiple times ([655b743](https://github.com/anncwb/vue-vben-admin/commit/655b74323653147943cbde2352208cb765c82b8a)) -- **store:** fix type error after pinia version upgrade ([e8d6f88](https://github.com/anncwb/vue-vben-admin/commit/e8d6f8851efd7076946486864936f1797280d3ba)) -- **use-message:** `content` not support vNode ([154ebc3](https://github.com/anncwb/vue-vben-admin/commit/154ebc3d96f73bb3ceab99ea0229a3619d585aba)) -- build error ([5212ea7](https://github.com/anncwb/vue-vben-admin/commit/5212ea79b43c832a5136354b549de8f89b6e2156)) -- fix darkModeSwitch switch failure ([34a8054](https://github.com/anncwb/vue-vben-admin/commit/34a80542de670f0385dffaf5bf64bb9c3f6b90da)) -- fix if getDropdownList.length==0 show Dropdown component ([21c771b](https://github.com/anncwb/vue-vben-admin/commit/21c771b59cb45defbff37de21c5c1950370b8f92)) -- fix Login Page LocalePicker showLocale condition ([d683b0f](https://github.com/anncwb/vue-vben-admin/commit/d683b0f1e85b85b07090feba4ac7f741bd3bd482)) -- **modal:** redoModalHeight not work as expected ([5d554f1](https://github.com/anncwb/vue-vben-admin/commit/5d554f184f7b61774d1a1b2e61451677b38505de)) -- **page:** `basic form` action btns should be in line ([6c4f947](https://github.com/anncwb/vue-vben-admin/commit/6c4f947386c181f45253c94e4ef735d29a253053)) -- **radio-button:** fix RadioButton `disabled` support ([ee384b1](https://github.com/anncwb/vue-vben-admin/commit/ee384b1fa7e387b3680e9d54cbe4a1e2f15ec750)), closes [#710](https://github.com/anncwb/vue-vben-admin/issues/710) -- **route:** dynamically introduce components error ([c6b766d](https://github.com/anncwb/vue-vben-admin/commit/c6b766d8ea902294ab1f7e4a06781f2bcfdd1f0b)) -- **router:** loss `directory` route ([df8cd86](https://github.com/anncwb/vue-vben-admin/commit/df8cd860514f32f44847dcf724f0737ed4d8b9e0)), closes [#722](https://github.com/anncwb/vue-vben-admin/issues/722) -- **table:** wrong indeterminate state ([495b1da](https://github.com/anncwb/vue-vben-admin/commit/495b1da385e9b6428d2b994669d2065722445923)) -- **table:** make sure the table width is correct, fix [#593](https://github.com/anncwb/vue-vben-admin/issues/593) ([d73d43e](https://github.com/anncwb/vue-vben-admin/commit/d73d43ed91f30957cfd202c51552ca40a19cef08)) -- **table:** settings indeterminate state effect ([4fd2051](https://github.com/anncwb/vue-vben-admin/commit/4fd2051bc0403bfc5345ed6a5fc283a372ef7a92)) -- **table:** support change event ([9f4d171](https://github.com/anncwb/vue-vben-admin/commit/9f4d1719caa76de94e6362c16e4df3ac28df253c)), closes [#677](https://github.com/anncwb/vue-vben-admin/issues/677) -- **table:** try to get close to the form stuck ([d81481c](https://github.com/anncwb/vue-vben-admin/commit/d81481c52186145dac130aaa1594f0ba8db4d392)) -- **table:** useTable support onChange ([9f5085c](https://github.com/anncwb/vue-vben-admin/commit/9f5085c9f9f46b09391156b17091c1771bc13026)) -- **table-action:** fix the split line style is missing,fix [#674](https://github.com/anncwb/vue-vben-admin/issues/674) ([b1cb863](https://github.com/anncwb/vue-vben-admin/commit/b1cb86350253dc5be095466966d9469775f4395d)) -- **Tinymce:** Read only status upload button can also be used ([#718](https://github.com/anncwb/vue-vben-admin/issues/718)) ([966571b](https://github.com/anncwb/vue-vben-admin/commit/966571bdcb11c2729ab9ce212bd3e195f7bf3a59)) -- **tree:** support defaultExpandAll prop ([3ed2339](https://github.com/anncwb/vue-vben-admin/commit/3ed2339a6d75abbd6ccf723b6eaa762f9921409e)) -- **upload:** ensure preview items valid ([4376928](https://github.com/anncwb/vue-vben-admin/commit/437692869a232ee65c300c65ee473557ae0913c7)) -- **useViewHeight:** Fix the problem that useContentViewHeight does not calculate the footer ([#747](https://github.com/anncwb/vue-vben-admin/issues/747)) ([33cd8fe](https://github.com/anncwb/vue-vben-admin/commit/33cd8fe6533830176ab63ddfc4d74f75a384366c)) -- ensure that roleList is not empty ([aebad61](https://github.com/anncwb/vue-vben-admin/commit/aebad61b3d3e11aaf720b37e762e53e2e6999d3c)) -- fix node12 version data mock error ([644dbe3](https://github.com/anncwb/vue-vben-admin/commit/644dbe315bb03ea1641a682359873237208a5303)) -- Fix the problem that the `lang` attribute of `HTML` will not be set when it is first loaded ([#682](https://github.com/anncwb/vue-vben-admin/issues/682)) ([eca8907](https://github.com/anncwb/vue-vben-admin/commit/eca8907a11c28d816c3da5a0667f45a38a499012)) -- login failed ([035f55a](https://github.com/anncwb/vue-vben-admin/commit/035f55af9778819d72adc1700d9de56a6569b58f)) -- session timeout login logic error ([#678](https://github.com/anncwb/vue-vben-admin/issues/678)) ([132c7fb](https://github.com/anncwb/vue-vben-admin/commit/132c7fb944df255c4d76a25d6d924439f91f9c54)), closes [#673](https://github.com/anncwb/vue-vben-admin/issues/673) -- theme switching fails ([7e2ca79](https://github.com/anncwb/vue-vben-admin/commit/7e2ca79ece2f5209cb7ce4b0f5ee15012f9f51de)) - -### Features - -- optimize error message for api failure ([ea6834a](https://github.com/anncwb/vue-vben-admin/commit/ea6834aeec3ef56d411b2c10a474f75d3d7bfdfc)) -- **api-select:** auto refetch after params changed ([50207ad](https://github.com/anncwb/vue-vben-admin/commit/50207ad702ef3faca1e27c873c89132ab92fae8e)) -- **app-search:** auto focus on show ([1ae6362](https://github.com/anncwb/vue-vben-admin/commit/1ae636296df2cf99e8a777f053c539c50e6ad49a)) -- **axios:** added authenticationScheme configuration,fix [#774](https://github.com/anncwb/vue-vben-admin/issues/774) ([b6d5b07](https://github.com/anncwb/vue-vben-admin/commit/b6d5b0796de4d0b66c0f33c335ec991d44f64ef2)) -- **demo:** `switch` use in table ([46899aa](https://github.com/anncwb/vue-vben-admin/commit/46899aa3cd6b1616c42ac263a28af75be839f6a0)) -- **demo:** added guide page example ([d196340](https://github.com/anncwb/vue-vben-admin/commit/d196340d270d2becbf2cc81b7d4f09273381bd09)) -- **echarts:** add getInstance for useECharts ([fb6c76d](https://github.com/anncwb/vue-vben-admin/commit/fb6c76db535bd0c6305d03c0cff876a1f079100b)) -- **modal:** add closeModal for useModal ([6d5f9aa](https://github.com/anncwb/vue-vben-admin/commit/6d5f9aa699c5da8af6bf5841baddc4a8bd603917)) -- **modal:** add redoModalHeight for useModalInner ([f732b56](https://github.com/anncwb/vue-vben-admin/commit/f732b569042f7fe77c85cb295538ddd85561f7e9)) -- **preview:** added createImgPreview picture preview function ([305630e](https://github.com/anncwb/vue-vben-admin/commit/305630e3fd886b3f690f890a934a8a6ba224fba1)) -- **project-setting:** added sessionTimeoutProcessing project configuration item,fix [#772](https://github.com/anncwb/vue-vben-admin/issues/772) ([0d07084](https://github.com/anncwb/vue-vben-admin/commit/0d0708409c4adbe7a0c5e33abf5307031147eaeb)) -- **table:** add editable DatePicker & TimePicker ([#654](https://github.com/anncwb/vue-vben-admin/issues/654)) ([93006c7](https://github.com/anncwb/vue-vben-admin/commit/93006c7dc7b5243b26637f444c8057c95935e622)) -- **table:** add updateTableDataRecord method ([8e4f486](https://github.com/anncwb/vue-vben-admin/commit/8e4f486fcf835f0b6f2a95676dba268ffdd0566e)) -- **table:** editable component text align ([8eaf575](https://github.com/anncwb/vue-vben-admin/commit/8eaf57562610a833c8083ae9957f458319d1cc93)) -- **table:** support columns-change event ([125a7d1](https://github.com/anncwb/vue-vben-admin/commit/125a7d14831642c9cbb2e4b3e75953c3b2e2cdef)) -- **table:** support custom update on row editing ([fe2bcfc](https://github.com/anncwb/vue-vben-admin/commit/fe2bcfc6f74159c355f3be153a316869fdb8b644)), closes [#646](https://github.com/anncwb/vue-vben-admin/issues/646) -- **table:** updateTableDataRecord support functional rowKey ([448a4c2](https://github.com/anncwb/vue-vben-admin/commit/448a4c2809672480f8f635d7cc4661554112598a)) -- **table-action:** add stopButtonPropagation prop ([808012b](https://github.com/anncwb/vue-vben-admin/commit/808012b544b8c6f3cf467f42653c2783dbe8be6b)), closes [#699](https://github.com/anncwb/vue-vben-admin/issues/699) -- **table-img:** support simple show mode and more props ([19d8e01](https://github.com/anncwb/vue-vben-admin/commit/19d8e01e11644c66222f137abd05940cbdec0bb6)) -- **test:** add jest test suite ([f6fe1dd](https://github.com/anncwb/vue-vben-admin/commit/f6fe1dd62df231ccbd063db0d32359b48aa5c76b)) -- **use-drawer:** add closeDrawer function ([639520a](https://github.com/anncwb/vue-vben-admin/commit/639520ad5ddf829875ab517067abf2b45ebc04c2)) -- add CropperAvatar component ([8e410fc](https://github.com/anncwb/vue-vben-admin/commit/8e410fc6401847d8e5545468b5ce6fd7ce9fc5cc)) -- **tabs:** add setTabTitle method ([#680](https://github.com/anncwb/vue-vben-admin/issues/680)) ([5ddccf6](https://github.com/anncwb/vue-vben-admin/commit/5ddccf6ba28453b9a35355d53d0db65f1a8876bc)) -- **tinymce:** support dark theme and I18n ([83c9cd7](https://github.com/anncwb/vue-vben-admin/commit/83c9cd77421e9c0888a41e2d8dcbca816da67488)) -- **Tinymce:** add dynamics to the read-only state of the rich text editor ([#725](https://github.com/anncwb/vue-vben-admin/issues/725)) ([efce482](https://github.com/anncwb/vue-vben-admin/commit/efce482b3215ddf9ed588f63a218d5f76939e947)) -- **tree:** add defaultExpandLevel prop ([6edca1c](https://github.com/anncwb/vue-vben-admin/commit/6edca1c19c3b0772f9ab82a7b09251a74fff2173)), closes [#672](https://github.com/anncwb/vue-vben-admin/issues/672) - -### Performance Improvements - -- **component:** optimize tree and upload components ([3f6920f](https://github.com/anncwb/vue-vben-admin/commit/3f6920f7a9775fc06a34dead90b1724b23b7759c)) -- **cropper-avatar:** code optimization ([6dbbdba](https://github.com/anncwb/vue-vben-admin/commit/6dbbdbac76c2c3795e12dd346f6310d1b70f6a7d)) -- **i18n:** improve circular dependencies ([d677729](https://github.com/anncwb/vue-vben-admin/commit/d677729acbe2c024ab13cf490b205528507c4823)) -- **i18n:** improve warning prompt ([6ef62ba](https://github.com/anncwb/vue-vben-admin/commit/6ef62ba6ea7f5613a1fec982b30fe6b0f478bf59)) -- **locale:** reduce the number of multilingual files ([0acc4ab](https://github.com/anncwb/vue-vben-admin/commit/0acc4ab2dd70a239bd13929edede02b283feb7c2)) -- **PageWrapper:** fix the height calculation problem when footer and global footer are opened at the same time ([#760](https://github.com/anncwb/vue-vben-admin/issues/760)) ([ab2c7ef](https://github.com/anncwb/vue-vben-admin/commit/ab2c7efe6994dacfe0ff407783f2c3b246427bfc)) -- **utils:** mitt default export is changed from Class to Function ([d3d620f](https://github.com/anncwb/vue-vben-admin/commit/d3d620f4fc75dd69270e4d090a71d426701272ef)) -- add createImgPreview func ([#713](https://github.com/anncwb/vue-vben-admin/issues/713)) ([b7c7c46](https://github.com/anncwb/vue-vben-admin/commit/b7c7c46853d332641d116d818e657447884784f3)) -- optimize components and add comments ([55e9d9f](https://github.com/anncwb/vue-vben-admin/commit/55e9d9fc2953643cec95c74b6ed34b0e68641fb6)) - -## [2.4.2](https://github.com/anncwb/vue-vben-admin/compare/v2.4.0...v2.4.2) (2021-06-09) - -### Bug Fixes - -- fix darkModeSwitch switch failure ([34a8054](https://github.com/anncwb/vue-vben-admin/commit/34a80542de670f0385dffaf5bf64bb9c3f6b90da)) -- **api-select:** loss option data on event callback ([c5f2577](https://github.com/anncwb/vue-vben-admin/commit/c5f2577f515e7ae96b27b509e5dd4b3317fcb7b4)), closes [#733](https://github.com/anncwb/vue-vben-admin/issues/733) -- **avatar:** mock data and Account center style ([2066f66](https://github.com/anncwb/vue-vben-admin/commit/2066f669715491f3e91ac6d0e905cd2b3e80b58d)) -- **axios:** transformRequestHook logic error ([b69dcd7](https://github.com/anncwb/vue-vben-admin/commit/b69dcd79d742fd171302ce0f48c7750d60da217f)) -- **codeMirror:** fix the JsonEditor embedded in the bullet frame causing the style to be disordered ([#668](https://github.com/anncwb/vue-vben-admin/issues/668)) ([e1123a2](https://github.com/anncwb/vue-vben-admin/commit/e1123a2ccb5d5450a5072c19e5508a5dc0f14423)) -- **demo:** `breadcrumb` route invalid redirect ([84d9300](https://github.com/anncwb/vue-vben-admin/commit/84d9300e52fa73da575591aa4b71858a7e459c8c)) -- **demo:** account list page validate and save ([21f7a85](https://github.com/anncwb/vue-vben-admin/commit/21f7a854fe2455315287d04e895661ff739bce17)) -- **demo:** fix basic form page style ([8b6e07b](https://github.com/anncwb/vue-vben-admin/commit/8b6e07b768f110f13b4f2efa6c46e03266667a8c)) -- **demo:** make sure the map https resource is correct ([7b9cd09](https://github.com/anncwb/vue-vben-admin/commit/7b9cd09ad8a50c45b2e661e07953d786d82f367d)) -- **form:** fix form update problem ([bcad95d](https://github.com/anncwb/vue-vben-admin/commit/bcad95d32a08a73f84ecbabab409cd64159f4077)), closes [#720](https://github.com/anncwb/vue-vben-admin/issues/720) -- **form:** radioButtonGroup value support boolean ([9e2aa20](https://github.com/anncwb/vue-vben-admin/commit/9e2aa20daa08d2902cb5d56c1560306947e44939)) -- **form:** radioButtonGroup value support number ([bbddf30](https://github.com/anncwb/vue-vben-admin/commit/bbddf30e96feb1ab048323d93d3b8c1b18857acd)) -- **form:** schemas update problem ([808328d](https://github.com/anncwb/vue-vben-admin/commit/808328dc7e56b1cc07b678d501d9589290173443)), closes [#688](https://github.com/anncwb/vue-vben-admin/issues/688) -- **keep-alive:** tablist cache updating effect ([d62d0ca](https://github.com/anncwb/vue-vben-admin/commit/d62d0ca08cff442c23eb9265851b066a2f24afa8)), closes [#695](https://github.com/anncwb/vue-vben-admin/issues/695) -- **lock:** fix lock modal height ([40e3cb0](https://github.com/anncwb/vue-vben-admin/commit/40e3cb043c90a8343fa44a32acad2cb77de732da)), closes [#701](https://github.com/anncwb/vue-vben-admin/issues/701) -- **login:** login page modal style fixed: [#662](https://github.com/anncwb/vue-vben-admin/issues/662) ([#666](https://github.com/anncwb/vue-vben-admin/issues/666)) ([b218f10](https://github.com/anncwb/vue-vben-admin/commit/b218f10e25a9364c399a5fe42eedb549f57c01ea)) -- **mock:** menu list api loss `type` field ([4185412](https://github.com/anncwb/vue-vben-admin/commit/41854121f3713dbde236afd3a416e9f27bd0c673)) -- **mock:** type error ([7c1ffa3](https://github.com/anncwb/vue-vben-admin/commit/7c1ffa3d23de508a8d1590985806cb7a484b24e5)) -- **router:** loss `directory` route ([df8cd86](https://github.com/anncwb/vue-vben-admin/commit/df8cd860514f32f44847dcf724f0737ed4d8b9e0)), closes [#722](https://github.com/anncwb/vue-vben-admin/issues/722) -- build error ([5212ea7](https://github.com/anncwb/vue-vben-admin/commit/5212ea79b43c832a5136354b549de8f89b6e2156)) -- **axios:** make sure that the parameter is an object before processing, fix [#660](https://github.com/anncwb/vue-vben-admin/issues/660) ([834fa7e](https://github.com/anncwb/vue-vben-admin/commit/834fa7eb9c8aff252e083d38fdab4f6f53b4d43a)) -- **code-editor:** fix CodeEditor style problem, fix [#655](https://github.com/anncwb/vue-vben-admin/issues/655) ([5662804](https://github.com/anncwb/vue-vben-admin/commit/566280422de0537c4e31496eaaa95a9d51fe9458)) -- **codeeditor:** empty value set failed.fixed:[#659](https://github.com/anncwb/vue-vben-admin/issues/659) ([ba2bebb](https://github.com/anncwb/vue-vben-admin/commit/ba2bebb4069085817a90d065ed5877fdb50a8039)) -- **layout:** fix class loss ([d018363](https://github.com/anncwb/vue-vben-admin/commit/d018363ddcd68189a18829a2b2560f3b98da58a6)) -- **layout:** fix style compatibility issues ([905e5b7](https://github.com/anncwb/vue-vben-admin/commit/905e5b714b582548f32feca723012124343686a6)) -- **log:** fix Wrong version number ([#653](https://github.com/anncwb/vue-vben-admin/issues/653)) ([4f0d45f](https://github.com/anncwb/vue-vben-admin/commit/4f0d45f1df48755eadc0b09fa19762ee68f9abd1)) -- **modal:** redoModalHeight not work as expected ([5d554f1](https://github.com/anncwb/vue-vben-admin/commit/5d554f184f7b61774d1a1b2e61451677b38505de)) -- **page:** `basic form` action btns should be in line ([6c4f947](https://github.com/anncwb/vue-vben-admin/commit/6c4f947386c181f45253c94e4ef735d29a253053)) -- **radio-button:** fix RadioButton `disabled` support ([ee384b1](https://github.com/anncwb/vue-vben-admin/commit/ee384b1fa7e387b3680e9d54cbe4a1e2f15ec750)), closes [#710](https://github.com/anncwb/vue-vben-admin/issues/710) -- **table:** wrong indeterminate state ([495b1da](https://github.com/anncwb/vue-vben-admin/commit/495b1da385e9b6428d2b994669d2065722445923)) -- **table:** make sure the table width is correct, fix [#593](https://github.com/anncwb/vue-vben-admin/issues/593) ([d73d43e](https://github.com/anncwb/vue-vben-admin/commit/d73d43ed91f30957cfd202c51552ca40a19cef08)) -- **table:** settings indeterminate state effect ([4fd2051](https://github.com/anncwb/vue-vben-admin/commit/4fd2051bc0403bfc5345ed6a5fc283a372ef7a92)) -- **table:** support change event ([9f4d171](https://github.com/anncwb/vue-vben-admin/commit/9f4d1719caa76de94e6362c16e4df3ac28df253c)), closes [#677](https://github.com/anncwb/vue-vben-admin/issues/677) -- **table:** try to get close to the form stuck ([d81481c](https://github.com/anncwb/vue-vben-admin/commit/d81481c52186145dac130aaa1594f0ba8db4d392)) -- **Tinymce:** Read only status upload button can also be used ([#718](https://github.com/anncwb/vue-vben-admin/issues/718)) ([966571b](https://github.com/anncwb/vue-vben-admin/commit/966571bdcb11c2729ab9ce212bd3e195f7bf3a59)) -- **upload:** ensure preview items valid ([4376928](https://github.com/anncwb/vue-vben-admin/commit/437692869a232ee65c300c65ee473557ae0913c7)) -- ensure that roleList is not empty ([aebad61](https://github.com/anncwb/vue-vben-admin/commit/aebad61b3d3e11aaf720b37e762e53e2e6999d3c)) -- fix node12 version data mock error ([644dbe3](https://github.com/anncwb/vue-vben-admin/commit/644dbe315bb03ea1641a682359873237208a5303)) -- Fix the problem that the `lang` attribute of `HTML` will not be set when it is first loaded ([#682](https://github.com/anncwb/vue-vben-admin/issues/682)) ([eca8907](https://github.com/anncwb/vue-vben-admin/commit/eca8907a11c28d816c3da5a0667f45a38a499012)) -- **table:** useTable support onChange ([9f5085c](https://github.com/anncwb/vue-vben-admin/commit/9f5085c9f9f46b09391156b17091c1771bc13026)) -- **table-action:** fix the split line style is missing,fix [#674](https://github.com/anncwb/vue-vben-admin/issues/674) ([b1cb863](https://github.com/anncwb/vue-vben-admin/commit/b1cb86350253dc5be095466966d9469775f4395d)) -- login failed ([035f55a](https://github.com/anncwb/vue-vben-admin/commit/035f55af9778819d72adc1700d9de56a6569b58f)) -- session timeout login logic error ([#678](https://github.com/anncwb/vue-vben-admin/issues/678)) ([132c7fb](https://github.com/anncwb/vue-vben-admin/commit/132c7fb944df255c4d76a25d6d924439f91f9c54)), closes [#673](https://github.com/anncwb/vue-vben-admin/issues/673) -- **tree:** support defaultExpandAll prop ([3ed2339](https://github.com/anncwb/vue-vben-admin/commit/3ed2339a6d75abbd6ccf723b6eaa762f9921409e)) -- theme switching fails ([7e2ca79](https://github.com/anncwb/vue-vben-admin/commit/7e2ca79ece2f5209cb7ce4b0f5ee15012f9f51de)) - -### Features - -- **api-select:** auto refetch after params changed ([50207ad](https://github.com/anncwb/vue-vben-admin/commit/50207ad702ef3faca1e27c873c89132ab92fae8e)) -- **app-search:** auto focus on show ([1ae6362](https://github.com/anncwb/vue-vben-admin/commit/1ae636296df2cf99e8a777f053c539c50e6ad49a)) -- **demo:** `switch` use in table ([46899aa](https://github.com/anncwb/vue-vben-admin/commit/46899aa3cd6b1616c42ac263a28af75be839f6a0)) -- **echarts:** add getInstance for useECharts ([fb6c76d](https://github.com/anncwb/vue-vben-admin/commit/fb6c76db535bd0c6305d03c0cff876a1f079100b)) -- **modal:** add closeModal for useModal ([6d5f9aa](https://github.com/anncwb/vue-vben-admin/commit/6d5f9aa699c5da8af6bf5841baddc4a8bd603917)) -- **modal:** add redoModalHeight for useModalInner ([f732b56](https://github.com/anncwb/vue-vben-admin/commit/f732b569042f7fe77c85cb295538ddd85561f7e9)) -- **table:** add editable DatePicker & TimePicker ([#654](https://github.com/anncwb/vue-vben-admin/issues/654)) ([93006c7](https://github.com/anncwb/vue-vben-admin/commit/93006c7dc7b5243b26637f444c8057c95935e622)) -- **table:** add updateTableDataRecord method ([8e4f486](https://github.com/anncwb/vue-vben-admin/commit/8e4f486fcf835f0b6f2a95676dba268ffdd0566e)) -- **table:** editable component text align ([8eaf575](https://github.com/anncwb/vue-vben-admin/commit/8eaf57562610a833c8083ae9957f458319d1cc93)) -- **table:** support columns-change event ([125a7d1](https://github.com/anncwb/vue-vben-admin/commit/125a7d14831642c9cbb2e4b3e75953c3b2e2cdef)) -- **table:** support custom update on row editing ([fe2bcfc](https://github.com/anncwb/vue-vben-admin/commit/fe2bcfc6f74159c355f3be153a316869fdb8b644)), closes [#646](https://github.com/anncwb/vue-vben-admin/issues/646) -- **table:** updateTableDataRecord support functional rowKey ([448a4c2](https://github.com/anncwb/vue-vben-admin/commit/448a4c2809672480f8f635d7cc4661554112598a)) -- **table-action:** add stopButtonPropagation prop ([808012b](https://github.com/anncwb/vue-vben-admin/commit/808012b544b8c6f3cf467f42653c2783dbe8be6b)), closes [#699](https://github.com/anncwb/vue-vben-admin/issues/699) -- **table-img:** support simple show mode and more props ([19d8e01](https://github.com/anncwb/vue-vben-admin/commit/19d8e01e11644c66222f137abd05940cbdec0bb6)) -- **tabs:** add setTabTitle method ([#680](https://github.com/anncwb/vue-vben-admin/issues/680)) ([5ddccf6](https://github.com/anncwb/vue-vben-admin/commit/5ddccf6ba28453b9a35355d53d0db65f1a8876bc)) -- **tinymce:** support dark theme and I18n ([83c9cd7](https://github.com/anncwb/vue-vben-admin/commit/83c9cd77421e9c0888a41e2d8dcbca816da67488)) -- **Tinymce:** add dynamics to the read-only state of the rich text editor ([#725](https://github.com/anncwb/vue-vben-admin/issues/725)) ([efce482](https://github.com/anncwb/vue-vben-admin/commit/efce482b3215ddf9ed588f63a218d5f76939e947)) -- **tree:** add defaultExpandLevel prop ([6edca1c](https://github.com/anncwb/vue-vben-admin/commit/6edca1c19c3b0772f9ab82a7b09251a74fff2173)), closes [#672](https://github.com/anncwb/vue-vben-admin/issues/672) - -### Performance Improvements - -- optimize components and add comments ([55e9d9f](https://github.com/anncwb/vue-vben-admin/commit/55e9d9fc2953643cec95c74b6ed34b0e68641fb6)) -- **i18n:** improve circular dependencies ([d677729](https://github.com/anncwb/vue-vben-admin/commit/d677729acbe2c024ab13cf490b205528507c4823)) -- **i18n:** improve warning prompt ([6ef62ba](https://github.com/anncwb/vue-vben-admin/commit/6ef62ba6ea7f5613a1fec982b30fe6b0f478bf59)) - -## [2.4.1](https://github.com/anncwb/vue-vben-admin/compare/v2.4.0...v2.4.1) (2021-06-01) - -### Bug Fixes - -- **table:** make sure the table width is correct, fix [#593](https://github.com/anncwb/vue-vben-admin/issues/593) ([d73d43e](https://github.com/anncwb/vue-vben-admin/commit/d73d43ed91f30957cfd202c51552ca40a19cef08)) -- Fix the problem that the `lang` attribute of `HTML` will not be set when it is first loaded ([#682](https://github.com/anncwb/vue-vben-admin/issues/682)) ([eca8907](https://github.com/anncwb/vue-vben-admin/commit/eca8907a11c28d816c3da5a0667f45a38a499012)) -- **avatar:** mock data and Account center style ([2066f66](https://github.com/anncwb/vue-vben-admin/commit/2066f669715491f3e91ac6d0e905cd2b3e80b58d)) -- **axios:** make sure that the parameter is an object before processing, fix [#660](https://github.com/anncwb/vue-vben-admin/issues/660) ([834fa7e](https://github.com/anncwb/vue-vben-admin/commit/834fa7eb9c8aff252e083d38fdab4f6f53b4d43a)) -- **code-editor:** fix CodeEditor style problem, fix [#655](https://github.com/anncwb/vue-vben-admin/issues/655) ([5662804](https://github.com/anncwb/vue-vben-admin/commit/566280422de0537c4e31496eaaa95a9d51fe9458)) -- **codeMirror:** fix the JsonEditor embedded in the bullet frame causing the style to be disordered ([#668](https://github.com/anncwb/vue-vben-admin/issues/668)) ([e1123a2](https://github.com/anncwb/vue-vben-admin/commit/e1123a2ccb5d5450a5072c19e5508a5dc0f14423)) -- **form:** radioButtonGroup value support number ([bbddf30](https://github.com/anncwb/vue-vben-admin/commit/bbddf30e96feb1ab048323d93d3b8c1b18857acd)) -- ensure that roleList is not empty ([aebad61](https://github.com/anncwb/vue-vben-admin/commit/aebad61b3d3e11aaf720b37e762e53e2e6999d3c)) -- fix node12 version data mock error ([644dbe3](https://github.com/anncwb/vue-vben-admin/commit/644dbe315bb03ea1641a682359873237208a5303)) -- **codeeditor:** empty value set failed.fixed:[#659](https://github.com/anncwb/vue-vben-admin/issues/659) ([ba2bebb](https://github.com/anncwb/vue-vben-admin/commit/ba2bebb4069085817a90d065ed5877fdb50a8039)) -- **layout:** fix style compatibility issues ([905e5b7](https://github.com/anncwb/vue-vben-admin/commit/905e5b714b582548f32feca723012124343686a6)) -- **login:** login page modal style fixed: [#662](https://github.com/anncwb/vue-vben-admin/issues/662) ([#666](https://github.com/anncwb/vue-vben-admin/issues/666)) ([b218f10](https://github.com/anncwb/vue-vben-admin/commit/b218f10e25a9364c399a5fe42eedb549f57c01ea)) -- **table:** support change event ([9f4d171](https://github.com/anncwb/vue-vben-admin/commit/9f4d1719caa76de94e6362c16e4df3ac28df253c)), closes [#677](https://github.com/anncwb/vue-vben-admin/issues/677) -- **table:** useTable support onChange ([9f5085c](https://github.com/anncwb/vue-vben-admin/commit/9f5085c9f9f46b09391156b17091c1771bc13026)) -- **table-action:** fix the split line style is missing,fix [#674](https://github.com/anncwb/vue-vben-admin/issues/674) ([b1cb863](https://github.com/anncwb/vue-vben-admin/commit/b1cb86350253dc5be095466966d9469775f4395d)) -- login failed ([035f55a](https://github.com/anncwb/vue-vben-admin/commit/035f55af9778819d72adc1700d9de56a6569b58f)) -- session timeout login logic error ([#678](https://github.com/anncwb/vue-vben-admin/issues/678)) ([132c7fb](https://github.com/anncwb/vue-vben-admin/commit/132c7fb944df255c4d76a25d6d924439f91f9c54)), closes [#673](https://github.com/anncwb/vue-vben-admin/issues/673) -- **layout:** fix class loss ([d018363](https://github.com/anncwb/vue-vben-admin/commit/d018363ddcd68189a18829a2b2560f3b98da58a6)) -- **log:** fix Wrong version number ([#653](https://github.com/anncwb/vue-vben-admin/issues/653)) ([4f0d45f](https://github.com/anncwb/vue-vben-admin/commit/4f0d45f1df48755eadc0b09fa19762ee68f9abd1)) -- **tree:** support defaultExpandAll prop ([3ed2339](https://github.com/anncwb/vue-vben-admin/commit/3ed2339a6d75abbd6ccf723b6eaa762f9921409e)) -- theme switching fails ([7e2ca79](https://github.com/anncwb/vue-vben-admin/commit/7e2ca79ece2f5209cb7ce4b0f5ee15012f9f51de)) - -### Features - -- **app-search:** auto focus on show ([1ae6362](https://github.com/anncwb/vue-vben-admin/commit/1ae636296df2cf99e8a777f053c539c50e6ad49a)) -- **table:** add editable DatePicker & TimePicker ([#654](https://github.com/anncwb/vue-vben-admin/issues/654)) ([93006c7](https://github.com/anncwb/vue-vben-admin/commit/93006c7dc7b5243b26637f444c8057c95935e622)) -- **table:** editable component text align ([8eaf575](https://github.com/anncwb/vue-vben-admin/commit/8eaf57562610a833c8083ae9957f458319d1cc93)) -- **tabs:** add setTabTitle method ([#680](https://github.com/anncwb/vue-vben-admin/issues/680)) ([5ddccf6](https://github.com/anncwb/vue-vben-admin/commit/5ddccf6ba28453b9a35355d53d0db65f1a8876bc)) -- **tinymce:** support dark theme and I18n ([83c9cd7](https://github.com/anncwb/vue-vben-admin/commit/83c9cd77421e9c0888a41e2d8dcbca816da67488)) -- **tree:** add defaultExpandLevel prop ([6edca1c](https://github.com/anncwb/vue-vben-admin/commit/6edca1c19c3b0772f9ab82a7b09251a74fff2173)), closes [#672](https://github.com/anncwb/vue-vben-admin/issues/672) - -### Performance Improvements - -- **i18n:** improve warning prompt ([6ef62ba](https://github.com/anncwb/vue-vben-admin/commit/6ef62ba6ea7f5613a1fec982b30fe6b0f478bf59)) - -# [2.4.0](https://github.com/anncwb/vue-vben-admin/compare/v2.2.0...v2.4.0) (2021-05-25) - -### Bug Fixes - -- **api-select:** make sure the type is correct, fix [#468](https://github.com/anncwb/vue-vben-admin/issues/468) ([37c5741](https://github.com/anncwb/vue-vben-admin/commit/37c5741601951349f622801a48a7bf9e45d723a4)) -- **avatar:** show current user's avatar ([#640](https://github.com/anncwb/vue-vben-admin/issues/640)) ([7519a00](https://github.com/anncwb/vue-vben-admin/commit/7519a00ada89966f9caf93d315830dd628253d73)) -- **button:** ghost style ([f4af231](https://github.com/anncwb/vue-vben-admin/commit/f4af231172874eeffa9097e2624c4a7d0654f7d7)) -- **cipher:** fix [#587](https://github.com/anncwb/vue-vben-admin/issues/587) ([#588](https://github.com/anncwb/vue-vben-admin/issues/588)) ([d34467d](https://github.com/anncwb/vue-vben-admin/commit/d34467d3f4d0f709a99194e36c0e0b6f242d9b40)) -- **CodeEditor:** add readonly prop ([#572](https://github.com/anncwb/vue-vben-admin/issues/572)) ([9cd293c](https://github.com/anncwb/vue-vben-admin/commit/9cd293c283ede7391ccd36e2208ae68cbad66453)) -- **flow-chart:** dark style not work ([4a03547](https://github.com/anncwb/vue-vben-admin/commit/4a035478ca0e08098a4575a5b22c06580ffeecbe)) -- **form:** ensure that the DateTime component checked properly,fix [#511](https://github.com/anncwb/vue-vben-admin/issues/511) ([cb35341](https://github.com/anncwb/vue-vben-admin/commit/cb35341b8fd44eb649a79c3a2ae799c7bab8c4f6)) -- **form:** expose formModel,fix [#533](https://github.com/anncwb/vue-vben-admin/issues/533) ([7c41c86](https://github.com/anncwb/vue-vben-admin/commit/7c41c8673c2fd5f2cf946a3ae84d8688578f9754)) -- **form:** Improve form error handling ([9a21b8b](https://github.com/anncwb/vue-vben-admin/commit/9a21b8b6a4a33d69c4e1b439fc01c4038c150ff9)) -- **form:** improve form props acquisition,fix [#527](https://github.com/anncwb/vue-vben-admin/issues/527) ([b7ea68e](https://github.com/anncwb/vue-vben-admin/commit/b7ea68e6f8944b154edf1fccd3faf8744883cbd4)) -- **form:** improve warning prompt, fix [#538](https://github.com/anncwb/vue-vben-admin/issues/538) ([3ff70bb](https://github.com/anncwb/vue-vben-admin/commit/3ff70bb56f998cfc92a773676d75c06372d90658)) -- **form:** placeholder setting in componentProps ([#634](https://github.com/anncwb/vue-vben-admin/issues/634)) ([2d3d04f](https://github.com/anncwb/vue-vben-admin/commit/2d3d04f547046c23cdfc319a7483261b47c08e83)) -- **form:** remove field binding when deleting schema [#471](https://github.com/anncwb/vue-vben-admin/issues/471) ([38f5072](https://github.com/anncwb/vue-vben-admin/commit/38f5072695f63b30c6ce6b2741b003db605abd82)) -- **layout:** fix useLockPage not work, fix [#611](https://github.com/anncwb/vue-vben-admin/issues/611) ([3bb6d11](https://github.com/anncwb/vue-vben-admin/commit/3bb6d11ed1b33adbfd6c76a0e06442cd62356ab7)) -- **lock:** automatic screen lock does not work ([d5b7689](https://github.com/anncwb/vue-vben-admin/commit/d5b768929e02ac4c6a04f3fd17a904e894c50e36)) -- **login:** incorrect enter event bind ([#625](https://github.com/anncwb/vue-vben-admin/issues/625)) ([bb0d2e1](https://github.com/anncwb/vue-vben-admin/commit/bb0d2e1c71899937f3c3d467803b18013e91782a)) -- **menu:** ensure that the external link jumps correctly, fix [#516](https://github.com/anncwb/vue-vben-admin/issues/516) ([6b7f688](https://github.com/anncwb/vue-vben-admin/commit/6b7f688eaf08184272fc625ca7e7665384641714)) -- **menu:** improve menu logic, fix [#461](https://github.com/anncwb/vue-vben-admin/issues/461) ([ee1c349](https://github.com/anncwb/vue-vben-admin/commit/ee1c3498587951a6a4cc0b49edb9dacf3f2af5c3)) -- **modal:** proptype conflict with ant design modal(fixed: [#545](https://github.com/anncwb/vue-vben-admin/issues/545)) ([#575](https://github.com/anncwb/vue-vben-admin/issues/575)) ([a579b84](https://github.com/anncwb/vue-vben-admin/commit/a579b8456ac73ac48c6af1510317acca20ed9b52)) -- **store:** addTab fx ([#607](https://github.com/anncwb/vue-vben-admin/issues/607)) ([336be68](https://github.com/anncwb/vue-vben-admin/commit/336be680d307acf8a1710194eba5505f8532d0bb)) -- **store:** fix pinia typo ([bbf178f](https://github.com/anncwb/vue-vben-admin/commit/bbf178f64b29d4576ba7de8afdce37d677f748e8)) -- **style:** add table title min-height ([#547](https://github.com/anncwb/vue-vben-admin/issues/547)) ([bf365e2](https://github.com/anncwb/vue-vben-admin/commit/bf365e26e5d457ca1924def3e50097e1d211aa43)) -- **style:** fix icon style, fix [#496](https://github.com/anncwb/vue-vben-admin/issues/496) ([ccae5cd](https://github.com/anncwb/vue-vben-admin/commit/ccae5cd9246888709a319f92357d89c6ab9d9c0b)) -- **style:** fix layout style, fix [#633](https://github.com/anncwb/vue-vben-admin/issues/633) ([8e3f84c](https://github.com/anncwb/vue-vben-admin/commit/8e3f84c3b76fbca11222cbede2441e83154127b6)) -- **theme:** make sure the menu style is correct, fix [#382](https://github.com/anncwb/vue-vben-admin/issues/382) ([c77f7e6](https://github.com/anncwb/vue-vben-admin/commit/c77f7e62aba51072325dffdb01d3c0cc87c578b0)) -- **theme:** make sure the steps style is correct, fix [#414](https://github.com/anncwb/vue-vben-admin/issues/414) ([640a2c1](https://github.com/anncwb/vue-vben-admin/commit/640a2c17986e2b59be57125e91051ec879f31eeb)) -- **types:** fix store types ([cd4b5e1](https://github.com/anncwb/vue-vben-admin/commit/cd4b5e14c2afe8841871cf79490a02a30bed0ebe)) -- typo, ifx [#637](https://github.com/anncwb/vue-vben-admin/issues/637) ([e3569b8](https://github.com/anncwb/vue-vben-admin/commit/e3569b81b10e887ed7144349181904ea6fdef14d)) -- **style:** fix build style errors,fix [#528](https://github.com/anncwb/vue-vben-admin/issues/528) ([7f6f8ee](https://github.com/anncwb/vue-vben-admin/commit/7f6f8eefe9b1214d5c6dabc526d966dfcaea76e6)) -- **style:** fix layout header style, basic arrow style and table search form style ([#525](https://github.com/anncwb/vue-vben-admin/issues/525)) ([e2ddf43](https://github.com/anncwb/vue-vben-admin/commit/e2ddf43699df900dacab7d7d384d7caa53879ad9)) -- **table:** columns ref fixed([#564](https://github.com/anncwb/vue-vben-admin/issues/564)) ([#573](https://github.com/anncwb/vue-vben-admin/issues/573)) ([43e4c21](https://github.com/anncwb/vue-vben-admin/commit/43e4c21950ea3659c538ecc29b04b0377a6de874)) -- **table:** submitButtonOptions not work,fix [#531](https://github.com/anncwb/vue-vben-admin/issues/531) ([16ecf71](https://github.com/anncwb/vue-vben-admin/commit/16ecf71850675be0031f41c8cb91371cf07cbea0)) -- **tabs:** fix the problem that other functions are invalid when the tab is closed, close [#376](https://github.com/anncwb/vue-vben-admin/issues/376) ([b92b8a3](https://github.com/anncwb/vue-vben-admin/commit/b92b8a3c6af1d936d48b5f58674f419407eeb600)) -- **theme:** wrong color when RadioButtonGroup checked ([#626](https://github.com/anncwb/vue-vben-admin/issues/626)) ([5eee0ce](https://github.com/anncwb/vue-vben-admin/commit/5eee0ceb6e1e949e63d51cd0d9647cf8094f378c)) -- **theme generate:** Fix [#604](https://github.com/anncwb/vue-vben-admin/issues/604) ([#605](https://github.com/anncwb/vue-vben-admin/issues/605)) ([c26dd03](https://github.com/anncwb/vue-vben-admin/commit/c26dd034165b02d107977fdfe13471ea80e991cc)) -- **tinymce:** ensure that the public resource path is correct,fix [#487](https://github.com/anncwb/vue-vben-admin/issues/487) ([a863ad4](https://github.com/anncwb/vue-vben-admin/commit/a863ad46b4e2837cbbda8bb51b8c9a6e8bb3f442)) -- **tree:** basicTree 设置 blockNode=false 后,显示异常 ([#567](https://github.com/anncwb/vue-vben-admin/issues/567)) ([2f8b218](https://github.com/anncwb/vue-vben-admin/commit/2f8b2183ec25f7c2a11bb5dc0a0a2578d7568ec3)) -- **tree:** onCheck event lose origin param ([#636](https://github.com/anncwb/vue-vben-admin/issues/636)) ([d8ff30d](https://github.com/anncwb/vue-vben-admin/commit/d8ff30d9ece53e006e5e58894461adeeb3b273e0)) -- **tree:** typo([#615](https://github.com/anncwb/vue-vben-admin/issues/615)) ([bc82d1a](https://github.com/anncwb/vue-vben-admin/commit/bc82d1a397beff68ba86365d7d54bb70b3520f9f)) -- **tree:** value prop type ([#613](https://github.com/anncwb/vue-vben-admin/issues/613)) ([0112d6b](https://github.com/anncwb/vue-vben-admin/commit/0112d6b313e66f624cd91e9ef933af57b0d280f9)) -- echart import path ([7e43d88](https://github.com/anncwb/vue-vben-admin/commit/7e43d88f9c37d88d7bf1b2d29e8ffbdc7ca155a5)) -- ensure that the 401 jumps to the login page correctly, fix [#512](https://github.com/anncwb/vue-vben-admin/issues/512) ([6a88205](https://github.com/anncwb/vue-vben-admin/commit/6a8820597fb58ef7cda7ead59f5cbb4c72c0f882)) -- fix AppendFormDemo ([#505](https://github.com/anncwb/vue-vben-admin/issues/505)) ([8c2491f](https://github.com/anncwb/vue-vben-admin/commit/8c2491fcb6853bfe06df265eb6daa5aa7d979b74)) -- fix case errors ([663d13a](https://github.com/anncwb/vue-vben-admin/commit/663d13a67f84fb02a6b9ee44a6e8b53c32cc6044)) -- fix dark theme refreshing flashing white screen ([26adbc9](https://github.com/anncwb/vue-vben-admin/commit/26adbc92be1c8ce5ce6f93302fb806058ef087cf)) -- fix the default value of props ([8b2e0f6](https://github.com/anncwb/vue-vben-admin/commit/8b2e0f665f15edd211f558bc0526465e07e7bab0)) -- improve login page style ([780a8a6](https://github.com/anncwb/vue-vben-admin/commit/780a8a67b874ca1c8d05c2561f88081cc4ec4b28)) -- Improve the picture cropping component ([#463](https://github.com/anncwb/vue-vben-admin/issues/463)) ([700306b](https://github.com/anncwb/vue-vben-admin/commit/700306bb45d5f2b975c20bd2581fb87a210e589c)) -- login page overflow show problem ([#455](https://github.com/anncwb/vue-vben-admin/issues/455)) ([af6d58e](https://github.com/anncwb/vue-vben-admin/commit/af6d58eb26875f02afb419d9d4d5ee2454292863)) -- password icon dislocation ([#501](https://github.com/anncwb/vue-vben-admin/issues/501)) ([bd83ecc](https://github.com/anncwb/vue-vben-admin/commit/bd83eccdc55c697d0db83bc3a7cf2829cafe96e7)) -- trigger resize in full screen to ensure that the height of other components is normal,fix [#508](https://github.com/anncwb/vue-vben-admin/issues/508) ([ca71760](https://github.com/anncwb/vue-vben-admin/commit/ca717602a602ae90e5c175cdfda0bbcc200b72ad)) -- update Axios.ts ([#492](https://github.com/anncwb/vue-vben-admin/issues/492)) ([e1b30a5](https://github.com/anncwb/vue-vben-admin/commit/e1b30a5075a2a2f9e2c538350950e6e09b6decd1)) - -### Features - -- **axios:** Do you want to return the original response header? For example, use this property when you need to get the response header ([56d8af1](https://github.com/anncwb/vue-vben-admin/commit/56d8af147ec88bb98a37fa3ddf47c2aa16a4110e)) -- **demo:** add permission table demo ([9e20841](https://github.com/anncwb/vue-vben-admin/commit/9e208411a24d4ccc9306555cc45aa7135d0df78f)) -- **form:** add 'layout', 'labelAlign', 'rowProps' option ([#651](https://github.com/anncwb/vue-vben-admin/issues/651)) ([785732f](https://github.com/anncwb/vue-vben-admin/commit/785732f438916d7767ad44789c16216a6f6505a8)) -- **form:** add form field nested support ([#591](https://github.com/anncwb/vue-vben-admin/issues/591)) ([ec3d51d](https://github.com/anncwb/vue-vben-admin/commit/ec3d51d69b66500f4f604151255920460d1906ce)) -- **form:** add prop autoSubmitOnEnter ([#620](https://github.com/anncwb/vue-vben-admin/issues/620)) ([9b2d41e](https://github.com/anncwb/vue-vben-admin/commit/9b2d41ea44ed0da4dde22856bf23b52748244642)) -- **form:** add Slider demo ([#555](https://github.com/anncwb/vue-vben-admin/issues/555)) ([e80280f](https://github.com/anncwb/vue-vben-admin/commit/e80280fb81b0bcdd74066c08fd4403e36b00b026)) -- **form:** adding resetSchema method ([c639e49](https://github.com/anncwb/vue-vben-admin/commit/c639e493a5a32789e397990953189541170169c8)) -- **form:** helpMessage Increase function type value ([#616](https://github.com/anncwb/vue-vben-admin/issues/616)) ([f455fb9](https://github.com/anncwb/vue-vben-admin/commit/f455fb97f9b70ca4979561a82ae0f25825527013)) -- **form:** requires Increase function type value ([#649](https://github.com/anncwb/vue-vben-admin/issues/649)) ([765064a](https://github.com/anncwb/vue-vben-admin/commit/765064a190b1a24dfb9ae808e99807ddae2ed212)) -- **qrcode:** custom drawing support ([#580](https://github.com/anncwb/vue-vben-admin/issues/580)) ([2b76b88](https://github.com/anncwb/vue-vben-admin/commit/2b76b88481dab2c580e684987a80028710d4698d)) -- **table:** 表格的数据列和操作列的字段可以根据权限和业务来控制是否显示 ([5a3861b](https://github.com/anncwb/vue-vben-admin/commit/5a3861b9cfc79da3297f8ddd045b88f0daca0ada)) -- **table:** Table operation columns support permission codes ([6afee41](https://github.com/anncwb/vue-vben-admin/commit/6afee415a3a8007f13af57892d62759ffbcde5a5)) -- **user:** add user login expiration example ([5465f05](https://github.com/anncwb/vue-vben-admin/commit/5465f058ceb7b130e456feaebb17c3beedb092a5)) -- add codeEditor component ([a812685](https://github.com/anncwb/vue-vben-admin/commit/a812685084b45ce3c6b6675bb1569e324f742416)) -- add flowChart Component ([#488](https://github.com/anncwb/vue-vben-admin/issues/488)) ([2576735](https://github.com/anncwb/vue-vben-admin/commit/2576735adeb42ddd39bbaae6f4f5662df781b83a)) -- add JsonPreview component ([0649011](https://github.com/anncwb/vue-vben-admin/commit/0649011eba9b86b543223aca99721da754dcea14)) -- add spin prop for Icon ([#477](https://github.com/anncwb/vue-vben-admin/issues/477)) ([6dd7d0f](https://github.com/anncwb/vue-vben-admin/commit/6dd7d0f928ebb4c6d7be66f4cd134fb291fc7dc2)) -- persistent save tab, fix [#359](https://github.com/anncwb/vue-vben-admin/issues/359) ([967b28c](https://github.com/anncwb/vue-vben-admin/commit/967b28c4c06cf92e9ab90cff51f59a0d6ced5d7b)) - -### Performance Improvements - -- let svg-icon support ssr ([94a826d](https://github.com/anncwb/vue-vben-admin/commit/94a826d02858e115adf8c1db4c0d0d7d795d7281)) -- **tree:** improve the beforeRightClick callback to support more configuration of the menu ([#608](https://github.com/anncwb/vue-vben-admin/issues/608)) ([adff788](https://github.com/anncwb/vue-vben-admin/commit/adff788de54a46fd035b569892135be377dd4f92)) -- add AppendFormDemo ([#503](https://github.com/anncwb/vue-vben-admin/issues/503)) ([85b92a9](https://github.com/anncwb/vue-vben-admin/commit/85b92a9add2b560559b4ef60ecf93e22f5941edb)) -- add Coordinating the selection of provinces and cities ([#534](https://github.com/anncwb/vue-vben-admin/issues/534)) ([5fae2b0](https://github.com/anncwb/vue-vben-admin/commit/5fae2b02eae7dc91baef774ca9dfdf0da91b8040)) -- improve countTo ([#499](https://github.com/anncwb/vue-vben-admin/issues/499)) ([94b2222](https://github.com/anncwb/vue-vben-admin/commit/94b2222c085e30cbc4a7a49dfac13af15aec98b9)) -- improve cropper example ([#491](https://github.com/anncwb/vue-vben-admin/issues/491)) ([5e36a8b](https://github.com/anncwb/vue-vben-admin/commit/5e36a8b5754afe916236f1c58a159aa7df69cf83)) -- improve flowChart logic ([e1bc33f](https://github.com/anncwb/vue-vben-admin/commit/e1bc33f5c5660f62591997c1949c887ac7387871)) -- merge locale file ([c04e894](https://github.com/anncwb/vue-vben-admin/commit/c04e8943bcdcdee612044a534d6c1281c956c3c1)) -- optimize i18n to add the initial locale to the locale pool during initialization ([#577](https://github.com/anncwb/vue-vben-admin/issues/577)) ([ae3f832](https://github.com/anncwb/vue-vben-admin/commit/ae3f8329c25ef24c44c54690116fd7d3dc35ae85)) -- set header can use For Qs ([#562](https://github.com/anncwb/vue-vben-admin/issues/562)) ([5724bc5](https://github.com/anncwb/vue-vben-admin/commit/5724bc5b3b960f7c0686c8e60c2b682b16841e6f)) - -# [2.3.0](https://github.com/anncwb/vue-vben-admin/compare/v2.2.0...v2.3.0) (2021-04-10) - -### Bug Fixes - -- **api-select:** make sure the type is correct, fix [#468](https://github.com/anncwb/vue-vben-admin/issues/468) ([37c5741](https://github.com/anncwb/vue-vben-admin/commit/37c5741601951349f622801a48a7bf9e45d723a4)) -- **menu:** improve menu logic, fix [#461](https://github.com/anncwb/vue-vben-admin/issues/461) ([ee1c349](https://github.com/anncwb/vue-vben-admin/commit/ee1c3498587951a6a4cc0b49edb9dacf3f2af5c3)) -- **theme:** make sure the menu style is correct, fix [#382](https://github.com/anncwb/vue-vben-admin/issues/382) ([c77f7e6](https://github.com/anncwb/vue-vben-admin/commit/c77f7e62aba51072325dffdb01d3c0cc87c578b0)) -- **theme:** make sure the steps style is correct, fix [#414](https://github.com/anncwb/vue-vben-admin/issues/414) ([640a2c1](https://github.com/anncwb/vue-vben-admin/commit/640a2c17986e2b59be57125e91051ec879f31eeb)) -- improve login page style ([780a8a6](https://github.com/anncwb/vue-vben-admin/commit/780a8a67b874ca1c8d05c2561f88081cc4ec4b28)) -- Improve the picture cropping component ([#463](https://github.com/anncwb/vue-vben-admin/issues/463)) ([700306b](https://github.com/anncwb/vue-vben-admin/commit/700306bb45d5f2b975c20bd2581fb87a210e589c)) -- login page overflow show problem ([#455](https://github.com/anncwb/vue-vben-admin/issues/455)) ([af6d58e](https://github.com/anncwb/vue-vben-admin/commit/af6d58eb26875f02afb419d9d4d5ee2454292863)) - -### Features - -- persistent save tab, fix [#359](https://github.com/anncwb/vue-vben-admin/issues/359) ([967b28c](https://github.com/anncwb/vue-vben-admin/commit/967b28c4c06cf92e9ab90cff51f59a0d6ced5d7b)) - -# [2.2.0](https://github.com/anncwb/vue-vben-admin/compare/v2.1.1...v2.2.0) (2021-04-07) - -### Bug Fixes - -- **abakysis:** fix tooltip style,fix [#436](https://github.com/anncwb/vue-vben-admin/issues/436) ([1e4a250](https://github.com/anncwb/vue-vben-admin/commit/1e4a250da10b01bfd4e667d533f6cae9b8c58fe9)) -- **breadcrumb:** ensure the breadcrumbs display the icon correctly, fix [#433](https://github.com/anncwb/vue-vben-admin/issues/433) ([0b66360](https://github.com/anncwb/vue-vben-admin/commit/0b66360cc9f60c5064be4c3cae39091541f3be8c)) -- **build:** fix build error ([6d6e0a1](https://github.com/anncwb/vue-vben-admin/commit/6d6e0a1bfef3a152d31776520e1445203d2ba3f4)) -- **drawer:** ensure the slot is working ([b9b470f](https://github.com/anncwb/vue-vben-admin/commit/b9b470f4df1cd57ca501666b6b3270a4d4d4f873)) -- **echart:** legend not work ([b25ceb4](https://github.com/anncwb/vue-vben-admin/commit/b25ceb4201bce806dc129f24c2d98fd2ff0392d1)) -- **menu:** ensure the menu is activated correctly,fix [#432](https://github.com/anncwb/vue-vben-admin/issues/432) ([bb67692](https://github.com/anncwb/vue-vben-admin/commit/bb67692cfdd5089f0f1d60d4a36b52592db22dde)) -- **mock:** make sure the background mode login is normal, fix [#452](https://github.com/anncwb/vue-vben-admin/issues/452) ([1e66987](https://github.com/anncwb/vue-vben-admin/commit/1e669870cc15384bf76f32ee95008f0c998b477b)) -- **server:** grammatical errors ([ee4829c](https://github.com/anncwb/vue-vben-admin/commit/ee4829c15d7c8e978eb616edb7f1e61c258d469b)) -- **table:** ensure data responsiveness, fix [#447](https://github.com/anncwb/vue-vben-admin/issues/447) ([64b6313](https://github.com/anncwb/vue-vben-admin/commit/64b6313b4e43fdc2e9b292f554889b845e26182f)) -- **table:** make sure the editing line is working, fix [#439](https://github.com/anncwb/vue-vben-admin/issues/439) ([b54b794](https://github.com/anncwb/vue-vben-admin/commit/b54b794264ecb513567b841c5a12856965d02754)) -- **table-action:** ensure that the click event is not triggered, fix [#441](https://github.com/anncwb/vue-vben-admin/issues/441) ([67a7a76](https://github.com/anncwb/vue-vben-admin/commit/67a7a76b735aafe2e1a8258c75c4a3c5dd657de6)) -- **use-loading:** rendering fails when used with onMounted, fix [#438](https://github.com/anncwb/vue-vben-admin/issues/438) ([6b99622](https://github.com/anncwb/vue-vben-admin/commit/6b996229e1449b1721ce6797ba6a964850e2e215)) -- **useColumn:** fixed table column changes with hidden columns disappearing after dropping ([#453](https://github.com/anncwb/vue-vben-admin/issues/453)) ([f05cc6d](https://github.com/anncwb/vue-vben-admin/commit/f05cc6d34e935c342e1f7ada6692ea0178b7c984)) - -### Features - -- dark mode ([5b8eb4a](https://github.com/anncwb/vue-vben-admin/commit/5b8eb4a49a097a47caf491c44df427522ab58daa)) -- **api-select:** add immediate option,close [#430](https://github.com/anncwb/vue-vben-admin/issues/430) ([5b4a41c](https://github.com/anncwb/vue-vben-admin/commit/5b4a41ced412fe3623618791ffa3123a3a2cfcdc)) -- **print:** add print example ([2f99892](https://github.com/anncwb/vue-vben-admin/commit/2f99892d96770d550e1cf58e052c40b85efb53c2)) -- **tree:** add headerTitle slot ([6bb19fb](https://github.com/anncwb/vue-vben-admin/commit/6bb19fb2d4fa57d8006281d52acd80baaa054b3e)) - -### Performance Improvements - -- code optimization ([37f6660](https://github.com/anncwb/vue-vben-admin/commit/37f6660c574f0cf8b432f66b67062c3bb0314d5c)) -- delete tinymce useless style files ([edc7525](https://github.com/anncwb/vue-vben-admin/commit/edc7525103f2e0fd90562b2e30839c11ed62556d)) -- refoctor useTitle ([979058a](https://github.com/anncwb/vue-vben-admin/commit/979058ad95d9669cb113033f76b5dafb932aad0f)) - -## [2.1.1](https://github.com/anncwb/vue-vben-admin/compare/v2.1.0...v2.1.1) (2021-03-25) - -### Bug Fixes - -- **form:** ensure that the hidden fields of the form are verified properly, fix [#413](https://github.com/anncwb/vue-vben-admin/issues/413) ([237f41d](https://github.com/anncwb/vue-vben-admin/commit/237f41da68592ede236b722157c91f9d7b45db1b)) -- **icon:** ensure the menu icon style is correct, fix [#425](https://github.com/anncwb/vue-vben-admin/issues/425) ([5c57a1d](https://github.com/anncwb/vue-vben-admin/commit/5c57a1dda13975c13e65511a39e7483e4a5d3999)) -- add route base close [#404](https://github.com/anncwb/vue-vben-admin/issues/404) ([8ad127c](https://github.com/anncwb/vue-vben-admin/commit/8ad127c293872aa10db03044bbc68715dc1b804a)) -- ensure permissionMode exists close [#409](https://github.com/anncwb/vue-vben-admin/issues/409) ([8fb0396](https://github.com/anncwb/vue-vben-admin/commit/8fb03961f50051695983f8cb415d6009b9d6b643)) -- refresh error ([5bf90ee](https://github.com/anncwb/vue-vben-admin/commit/5bf90eea627638517e3ced024289696a6ece8e74)) -- **input-count:** make sure the reset function works close [#381](https://github.com/anncwb/vue-vben-admin/issues/381) ([3c4de9b](https://github.com/anncwb/vue-vben-admin/commit/3c4de9b0be06350f0d9ad97bfb5f7f773c38be38)) -- **menu:** ensure the menu has meta attributes close [#397](https://github.com/anncwb/vue-vben-admin/issues/397) ([b2a1951](https://github.com/anncwb/vue-vben-admin/commit/b2a1951fd00433cb5e1c9dce982c53a9c9edd874)) -- **menu:** fix the menu disappeared in background mode ([50915c9](https://github.com/anncwb/vue-vben-admin/commit/50915c9754473ba9096b3b1cceedf0d7e7212ad9)) -- **menu:** make sure the menu is displayed properly on the small screen close [#336](https://github.com/anncwb/vue-vben-admin/issues/336) ([82c3186](https://github.com/anncwb/vue-vben-admin/commit/82c3186309971517183fc44bfcac159612e48a7b)) -- **progress:** fix progress sometimes cannot done ([#388](https://github.com/anncwb/vue-vben-admin/issues/388)) ([8360b1d](https://github.com/anncwb/vue-vben-admin/commit/8360b1d6886b5639cf43da5ab866156d140a0f01)) -- **route:** ensure that the first level menu can be hidden ([e2cc5af](https://github.com/anncwb/vue-vben-admin/commit/e2cc5af9375f59d2891be769010ef5d3ccfe9755)) -- **table:** ensure that the height calculation is correct close [#395](https://github.com/anncwb/vue-vben-admin/issues/395) ([1d7608e](https://github.com/anncwb/vue-vben-admin/commit/1d7608ee40c27ce81e031947ed6c679cc8b04c77)) -- **table:** fix table check column configuration failure close [#391](https://github.com/anncwb/vue-vben-admin/issues/391) ([c3096e2](https://github.com/anncwb/vue-vben-admin/commit/c3096e26ff24c8afd9555e676c898030664846d7)) -- **tree:** ensure that the check event is emitted close [#400](https://github.com/anncwb/vue-vben-admin/issues/400) ([16ef134](https://github.com/anncwb/vue-vben-admin/commit/16ef13477c8f06c13ff3611b9e67e430fac433e7)) -- ensure the breadcrumb level is correct ([e49072c](https://github.com/anncwb/vue-vben-admin/commit/e49072c31339ba58473ffa883308cc3c2c4c43e9)) -- LayoutMap cannot get correctly ([#398](https://github.com/anncwb/vue-vben-admin/issues/398)) ([7c16c2f](https://github.com/anncwb/vue-vben-admin/commit/7c16c2fa9e6cb2e87894666d6687eed3fc744b64)) -- welcome page not cached in back-end mode ([#389](https://github.com/anncwb/vue-vben-admin/issues/389)) ([f0b93b5](https://github.com/anncwb/vue-vben-admin/commit/f0b93b50e7b6b9c444f8422f91be73085be8c5fe)) -- **v-auth:** ensure the background mode is correct close [#330](https://github.com/anncwb/vue-vben-admin/issues/330) ([67962f1](https://github.com/anncwb/vue-vben-admin/commit/67962f1deea31d695d20ae0ea7fc39b39c1eea47)) - -### Features - -- **route:** add hideChildrenInMenu option close [#346](https://github.com/anncwb/vue-vben-admin/issues/346) ([b67cf22](https://github.com/anncwb/vue-vben-admin/commit/b67cf22dfc8d27428b045f47fcd9e2797b81a81d)) -- **table:** add expandAll/collapseAll function close [#333](https://github.com/anncwb/vue-vben-admin/issues/333) ([391da9e](https://github.com/anncwb/vue-vben-admin/commit/391da9ec2884885f9dfe86ddb869ccc0d193491e)) - -# [2.1.0](https://github.com/anncwb/vue-vben-admin/compare/v2.0.3...v2.1.0) (2021-03-15) - -### Bug Fixes - -- **button:** fix button style error close [#312](https://github.com/anncwb/vue-vben-admin/issues/312) ([7a6c87f](https://github.com/anncwb/vue-vben-admin/commit/7a6c87f8c1aa34a7a00506fb89fb231e3a176f6f)) -- **menu:** fix hideMenu not working close [#338](https://github.com/anncwb/vue-vben-admin/issues/338) ([5b2fbfb](https://github.com/anncwb/vue-vben-admin/commit/5b2fbfb6ce4054ece60c851c45baf60f3a07a4db)) -- **page-wraper:** fix PageWrapper the scroll bar on the right side of the content area when the user clicks on the tab page to reload the page ([#341](https://github.com/anncwb/vue-vben-admin/issues/341)) ([fcff2cb](https://github.com/anncwb/vue-vben-admin/commit/fcff2cb1911f1e18017f25b3509d1c67f7e86e81)) -- **page-wrapper:** fix PageWrapper title not showing ([9e3adaa](https://github.com/anncwb/vue-vben-admin/commit/9e3adaa30c7cdaf23855922100e16717856ba1d9)) -- **table:** ensure that editable cell values are echoed correctly close [#335](https://github.com/anncwb/vue-vben-admin/issues/335) ([fab7a6c](https://github.com/anncwb/vue-vben-admin/commit/fab7a6c58d586300d58e1b6837927e1569b57aa5)) -- **table:** ensure that the height calculation is normal close [#349](https://github.com/anncwb/vue-vben-admin/issues/349) ([6095cb5](https://github.com/anncwb/vue-vben-admin/commit/6095cb54afe3f4fcabbfff26ac6704ecfbbddae5)) -- **table:** ensure that the table height is correct when the data is empty ([53867a8](https://github.com/anncwb/vue-vben-admin/commit/53867a846154d9a3529f50d20d92ce5fdb41986f)) -- **table:** ensure that the value of the table action is updated correctly close [#301](https://github.com/anncwb/vue-vben-admin/issues/301) [#313](https://github.com/anncwb/vue-vben-admin/issues/313) ([7156e47](https://github.com/anncwb/vue-vben-admin/commit/7156e47c1813ec01594d9dff4a1e7d593f3c17db)) -- **table:** fix table height calculation problem ([0fe42a0](https://github.com/anncwb/vue-vben-admin/commit/0fe42a06c1f2ef69805dbfeecbcac919ff0aedd0)), closes [#348](https://github.com/anncwb/vue-vben-admin/issues/348) -- **table:** fix table row misalignment close [#353](https://github.com/anncwb/vue-vben-admin/issues/353) ([e15737b](https://github.com/anncwb/vue-vben-admin/commit/e15737b9d17d8ebea4f4e9897aeae9b250910a15)) -- **table:** fix TableAction row height error close [#350](https://github.com/anncwb/vue-vben-admin/issues/350) ([a759e44](https://github.com/anncwb/vue-vben-admin/commit/a759e44c6e5c223d2fef52c5a9698e571eed2d52)) -- **transition:** fix transition not work close [#334](https://github.com/anncwb/vue-vben-admin/issues/334) ([7d8b8db](https://github.com/anncwb/vue-vben-admin/commit/7d8b8db256f78b228b2b4629a472834a4cce9bd4)) -- **tree:** ebsure the expansion is functioning properly close [#362](https://github.com/anncwb/vue-vben-admin/issues/362) ([a405de8](https://github.com/anncwb/vue-vben-admin/commit/a405de8d202710264e802edb270bbd5cd4a1ab80)) -- **tree:** tree can customize title close [#344](https://github.com/anncwb/vue-vben-admin/issues/344) ([ed422b7](https://github.com/anncwb/vue-vben-admin/commit/ed422b7c56bf9d44be001b8a54358d69c100ff35)) -- **useTableScroll:** query paginationel every time to get the correct height ([#355](https://github.com/anncwb/vue-vben-admin/issues/355)) ([f818bb9](https://github.com/anncwb/vue-vben-admin/commit/f818bb9a107e43adfb8ef2a095635f5fffb5800b)) - -### Features - -- **icon:** added svg icon picker ([1418dc6](https://github.com/anncwb/vue-vben-admin/commit/1418dc6a597a8410711359f07ae66f0fea858977)) -- **map:** added AMap/Baidu/Google Map example close [#81](https://github.com/anncwb/vue-vben-admin/issues/81) ([a9462f0](https://github.com/anncwb/vue-vben-admin/commit/a9462f0d4dacb8db9300c416b2d3f094be624220)) -- **time:** added time compoennt close [#285](https://github.com/anncwb/vue-vben-admin/issues/285) ([a89eeef](https://github.com/anncwb/vue-vben-admin/commit/a89eeef6f3a0b9863d28cf516b126a938eed7361)) - -### Performance Improvements - -- **icon:** icon and SvgIcon integration ([e8fe6a9](https://github.com/anncwb/vue-vben-admin/commit/e8fe6a929be025a889ddec624ff9c2729313c818)) - -## [2.0.3](https://github.com/anncwb/vue-vben-admin/compare/v2.0.2...v2.0.3) (2021-03-07) - -### Bug Fixes - -- **breadcrumb:** ensure that the single-level breadcrumbs jump correctly close [#321](https://github.com/anncwb/vue-vben-admin/issues/321) ([e0dc5cf](https://github.com/anncwb/vue-vben-admin/commit/e0dc5cf2f299fd4c1efdf4f00b9f0f72f07d5937)) -- **description:** ensure that props respond ([ce93e46](https://github.com/anncwb/vue-vben-admin/commit/ce93e46faf1d7250dd3acd3fd97ccd6382b2f822)) -- **form:** allow the setFieldsValue method to be null or undefined close [#320](https://github.com/anncwb/vue-vben-admin/issues/320) ([8f76ef4](https://github.com/anncwb/vue-vben-admin/commit/8f76ef4e70de58ba5c4497d8b10a036a54a9ac87)) -- **form:** ensure that the Form component does not verify hidden form items ([43a45b7](https://github.com/anncwb/vue-vben-admin/commit/43a45b7c996c84f19d00cb9754277b943daf9a10)) -- **form:** fix the problem of form props monitoring close [#322](https://github.com/anncwb/vue-vben-admin/issues/322) ([83a3460](https://github.com/anncwb/vue-vben-admin/commit/83a34603562e6358203b834b8feb59b0b44dbbcd)) -- **menu:** fix menu icon missing close [#328](https://github.com/anncwb/vue-vben-admin/issues/328) ([d5d4c4b](https://github.com/anncwb/vue-vben-admin/commit/d5d4c4b4136158e061e4a3b6b306af6d4e8cd621)) -- **table:** fix pagination error ([745fcfc](https://github.com/anncwb/vue-vben-admin/commit/745fcfc014e3e9e13d6a415a8f094cfef68be908)) -- **tree:** fix the logic problem of show attribute of ActionItem under BasicTree ([80b47c8](https://github.com/anncwb/vue-vben-admin/commit/80b47c84cd490388c6db659921f1103c443d7b9d)) - -### Features - -- add SvgIcon component ([9c2a2a0](https://github.com/anncwb/vue-vben-admin/commit/9c2a2a0c00dae6f334c99acc9ab2f571fd8905c0)) -- **tree:** add clickRowToExpand option close [#318](https://github.com/anncwb/vue-vben-admin/issues/318) ([e696089](https://github.com/anncwb/vue-vben-admin/commit/e696089660131786ea24632ed75adc57b6ea58f4)) - -### Performance Improvements - -- optimize local loading speed close [#329](https://github.com/anncwb/vue-vben-admin/issues/329) ([491f1fc](https://github.com/anncwb/vue-vben-admin/commit/491f1fcfff17f2297e3fee00e1542778aed08e56)) -- **login:** enter to log in ([b93f20f](https://github.com/anncwb/vue-vben-admin/commit/b93f20f0df91689191b8414657171e9f17ba5d68)) -- **table:** the table fills the height according to the screen close [#310](https://github.com/anncwb/vue-vben-admin/issues/310) ([551fe50](https://github.com/anncwb/vue-vben-admin/commit/551fe50a44d0b6358cf3861f772ca223ea56f0e2)) - -## [2.0.2](https://github.com/anncwb/vue-vben-admin/compare/v2.0.0...v2.0.2) (2021-03-03) - -### Bug Fixes - -- change transition-duration to make animate smoothly ([#294](https://github.com/anncwb/vue-vben-admin/issues/294)) ([5eac9b2](https://github.com/anncwb/vue-vben-admin/commit/5eac9b23d6d8ad91e110169519bfd3ab50f985a9)) -- ensure that storage is deleted correctly close [#292](https://github.com/anncwb/vue-vben-admin/issues/292) ([ec7bef7](https://github.com/anncwb/vue-vben-admin/commit/ec7bef792b2a780736c2b1713af3638fa0b69eed)) -- ensure that the correct components are dynamically imported ([b476e1c](https://github.com/anncwb/vue-vben-admin/commit/b476e1c84c52dab7030fd19b34ecd33e65fadcb2)) -- ensure to request the interface correctly ([11d3f39](https://github.com/anncwb/vue-vben-admin/commit/11d3f395caf7e2268630090eb34f4e5c114a96b7)) -- expose tree information in the event close [#315](https://github.com/anncwb/vue-vben-admin/issues/315) ([b6bb816](https://github.com/anncwb/vue-vben-admin/commit/b6bb81630de728c146bf0e559bef88b69d4b8a21)) -- fix login page style ([7b4fcd2](https://github.com/anncwb/vue-vben-admin/commit/7b4fcd2ecac8107f7d052dee08cb8007dc5e5dd9)) -- improve persistent cache logic ([15567e4](https://github.com/anncwb/vue-vben-admin/commit/15567e478c0f274b0f8f0a7410ea5cb636bacc3d)) -- **dashboard:** fix workbench page style ([#280](https://github.com/anncwb/vue-vben-admin/issues/280)) ([7d9b521](https://github.com/anncwb/vue-vben-admin/commit/7d9b521c693b59da5fa28130b5753afa0914e598)) -- **image:** fix preview style close [#276](https://github.com/anncwb/vue-vben-admin/issues/276) ([f675fff](https://github.com/anncwb/vue-vben-admin/commit/f675fff2e66054b4157b2a330dbf151822b0befd)) -- **login:** fix login style close [#306](https://github.com/anncwb/vue-vben-admin/issues/306) ([a84586e](https://github.com/anncwb/vue-vben-admin/commit/a84586e2f49a2966ac5cb02d945e62e107b247d1)) -- **modal:** ensure that the height is correct in the modal full screen state close [#308](https://github.com/anncwb/vue-vben-admin/issues/308) ([37508ca](https://github.com/anncwb/vue-vben-admin/commit/37508ca4113701458cae84fff64062427ba43898)) -- **style:** fix anticon style ([e250ad5](https://github.com/anncwb/vue-vben-admin/commit/e250ad567f3169d4ef7baec8954be2e18c6932e6)) -- **table:** ensure the table setting button dividing line is hidden ([7c2f851](https://github.com/anncwb/vue-vben-admin/commit/7c2f85169248b369f95c5866ef7e90d4fb1739ef)) -- **table:** fix known errors in editable tables close [#267](https://github.com/anncwb/vue-vben-admin/issues/267) ([4f8e1c1](https://github.com/anncwb/vue-vben-admin/commit/4f8e1c1b5ffc78242b300e85be22b1fa07c7d902)) -- **table:** get the selected rows of the table correctly ([6013689](https://github.com/anncwb/vue-vben-admin/commit/601368921f075aa1870d1c3ce8f4a8330260206a)) -- **watermark:** watermark causes a blank bar ([#297](https://github.com/anncwb/vue-vben-admin/issues/297)) ([66fc1b7](https://github.com/anncwb/vue-vben-admin/commit/66fc1b78450fa7846b0d58e6da5f2135e6456238)) - -### Features - -- added system management sample page ([4628d94](https://github.com/anncwb/vue-vben-admin/commit/4628d94415c1787da8b04499e295967f15c4eef5)) -- **icon-picker:** add icon-picker component ([b6cea4a](https://github.com/anncwb/vue-vben-admin/commit/b6cea4a950e92a0f91e06bcc60b4653e1d2709ef)) -- **moda;:** can switch full screen by double-clicking on the head close [#277](https://github.com/anncwb/vue-vben-admin/issues/277) ([e3851dc](https://github.com/anncwb/vue-vben-admin/commit/e3851dc5ea290ef6eb4d12ce2469311b1bee53cd)) -- **tree:** actionItem added show attribute close [#314](https://github.com/anncwb/vue-vben-admin/issues/314) ([8b62fa0](https://github.com/anncwb/vue-vben-admin/commit/8b62fa0cb0559ec3ea8a1b82a2d44165b2337522)) -- **tree:** add renderIcon props close [#309](https://github.com/anncwb/vue-vben-admin/issues/309) ([72b42d7](https://github.com/anncwb/vue-vben-admin/commit/72b42d7b3539919a9baa4f1a7316842f85991c1e)) -- **ws:** added WebSocket examples and service scripts ([c625462](https://github.com/anncwb/vue-vben-admin/commit/c625462e98eec006aaeeef14280775cafeb72364)) -- add dept management page ([3b8ca42](https://github.com/anncwb/vue-vben-admin/commit/3b8ca420c763fe0e386a8dbc023f4f8eb8742252)) -- added settingButtonPosition configuration close [#275](https://github.com/anncwb/vue-vben-admin/issues/275) ([da04913](https://github.com/anncwb/vue-vben-admin/commit/da04913ef324fff122732b445c1b1d1d662b87a3)) -- axios supports form-data format requests ([c41fa75](https://github.com/anncwb/vue-vben-admin/commit/c41fa75265beb00f629dcda808957cb58b905bc2)) - -### Performance Improvements - -- **tree:** strengthen BasicTree function ([cd8e924](https://github.com/anncwb/vue-vben-admin/commit/cd8e924d4641fc46cacd4a934478d8861e8c3c04)) -- hide table full screen button by default ([500900a](https://github.com/anncwb/vue-vben-admin/commit/500900abe16d3e27e1c9e0446a13386c6129d449)) -- imporve axios logic ([a821d9a](https://github.com/anncwb/vue-vben-admin/commit/a821d9a3a279f0e6a5b7dbb316725d603ce30f74)) -- improve login logic ([a09a0ee](https://github.com/anncwb/vue-vben-admin/commit/a09a0eedd29fdc9a9bd5414bd12c08e37c72982a)) -- improve persistent logic ([f57eb94](https://github.com/anncwb/vue-vben-admin/commit/f57eb944edfd967f5f45566ec5bedbf12f147492)) -- move src/types to root ([fcee7d4](https://github.com/anncwb/vue-vben-admin/commit/fcee7d4eb71471dd40567c8d7c97302eeee80697)) -- remove useless code ([be3a3ed](https://github.com/anncwb/vue-vben-admin/commit/be3a3ed699f73d352d49623ef07288093a3332c4)) -- replace crypto-es with crypto-js ([bba7768](https://github.com/anncwb/vue-vben-admin/commit/bba7768759c5d4dedd6599417154c4cb8ab64920)) - -## [2.0.1](https://github.com/anncwb/vue-vben-admin/compare/v2.0.0...v2.0.1) (2021-02-21) - -### Bug Fixes - -- **dashboard:** fix workbench page style ([#280](https://github.com/anncwb/vue-vben-admin/issues/280)) ([7d9b521](https://github.com/anncwb/vue-vben-admin/commit/7d9b521c693b59da5fa28130b5753afa0914e598)) -- **image:** fix preview style close [#276](https://github.com/anncwb/vue-vben-admin/issues/276) ([f675fff](https://github.com/anncwb/vue-vben-admin/commit/f675fff2e66054b4157b2a330dbf151822b0befd)) -- **style:** fix anticon style ([e250ad5](https://github.com/anncwb/vue-vben-admin/commit/e250ad567f3169d4ef7baec8954be2e18c6932e6)) -- **table:** fix known errors in editable tables close [#267](https://github.com/anncwb/vue-vben-admin/issues/267) ([4f8e1c1](https://github.com/anncwb/vue-vben-admin/commit/4f8e1c1b5ffc78242b300e85be22b1fa07c7d902)) - -### Features - -- **moda;:** can switch full screen by double-clicking on the head close [#277](https://github.com/anncwb/vue-vben-admin/issues/277) ([e3851dc](https://github.com/anncwb/vue-vben-admin/commit/e3851dc5ea290ef6eb4d12ce2469311b1bee53cd)) -- added settingButtonPosition configuration close [#275](https://github.com/anncwb/vue-vben-admin/issues/275) ([da04913](https://github.com/anncwb/vue-vben-admin/commit/da04913ef324fff122732b445c1b1d1d662b87a3)) - -# [2.0.0](https://github.com/anncwb/vue-vben-admin/compare/v2.0.0-rc.18...v2.0.0) (2021-02-17) - -### Bug Fixes - -- **i18n:** fix useMessage i18n type [#262](https://github.com/anncwb/vue-vben-admin/issues/262) ([d753155](https://github.com/anncwb/vue-vben-admin/commit/d7531554a274ad9d793ea621739dfffdc7f73db8)) -- **table:** fix the table in the editable row status and press Enter to confirm [#258](https://github.com/anncwb/vue-vben-admin/issues/258) ([64533f6](https://github.com/anncwb/vue-vben-admin/commit/64533f6204f96f79c6006d9911e9417cd9800d0d)) -- correct debugger code ([759e532](https://github.com/anncwb/vue-vben-admin/commit/759e5320790504f0d274289001543c1397e8b617)) -- some color error ([33b2365](https://github.com/anncwb/vue-vben-admin/commit/33b2365f6e645edf2a6c1cf38596aaec52b35df6)) -- **description:** not rendering while show method return false ([#253](https://github.com/anncwb/vue-vben-admin/issues/253)) ([23eba27](https://github.com/anncwb/vue-vben-admin/commit/23eba274560a294f50e4b7c529ae8a63a266fb87)), closes [#252](https://github.com/anncwb/vue-vben-admin/issues/252) -- fix collapse header title not rendering ([#256](https://github.com/anncwb/vue-vben-admin/issues/256)) ([c81d48e](https://github.com/anncwb/vue-vben-admin/commit/c81d48e734b09217fa42df2358e616a970006eab)) -- **pop-confirm-button:** fix responsive failure [#246](https://github.com/anncwb/vue-vben-admin/issues/246) ([c57dea0](https://github.com/anncwb/vue-vben-admin/commit/c57dea0438fc5ba0fbf1716b9e76e2fba1f33f84)) -- fix the problem of mock error under post [#247](https://github.com/anncwb/vue-vben-admin/issues/247) ([9b6f37c](https://github.com/anncwb/vue-vben-admin/commit/9b6f37caef75f8752ea8bd07a78377dcaa59922b)) -- suppoer build sourcemap ([3ba8285](https://github.com/anncwb/vue-vben-admin/commit/3ba828558646a7fa233ebbbda27f71c3121dd7c7)) -- **type:** fix .vue file type error ([22088e8](https://github.com/anncwb/vue-vben-admin/commit/22088e820c79a9832179c8fb7c5cffe30b9b57e9)) -- **upload:** fix maxNumber not work [#240](https://github.com/anncwb/vue-vben-admin/issues/240) ([91e004e](https://github.com/anncwb/vue-vben-admin/commit/91e004e21148c38e572cfbb6b75f0a6f353c15b6)) - -### Features - -- added brotli|gzip compression and related test commands ([993538d](https://github.com/anncwb/vue-vben-admin/commit/993538de21dbb9e54e308afb40ff096ba0ab0e19)) -- support echarts 5.0 ([370b12f](https://github.com/anncwb/vue-vben-admin/commit/370b12f5154f4a531c3a27c3ccc2601845872344)) -- **modal:** exporse redoModalHeight ([a3a903b](https://github.com/anncwb/vue-vben-admin/commit/a3a903bc86e7248424f94f734d21c86c5327ed20)) - -### Performance Improvements - -- adjust the return value of the interface to obtain user information in array format [#259](https://github.com/anncwb/vue-vben-admin/issues/259) ([5894093](https://github.com/anncwb/vue-vben-admin/commit/589409305f58ebc2f6b110bd7b31f924ecd06c16)) -- remove unless code ([2365754](https://github.com/anncwb/vue-vben-admin/commit/23657547ab28fa65c2369ded8e73929dee76c750)) -- update style ([aaae668](https://github.com/anncwb/vue-vben-admin/commit/aaae66835a9f1bdfa316e187c01557e5b54959ab)) - -# [2.0.0-rc.18](https://github.com/anncwb/vue-vben-admin/compare/v2.0.0-rc.17...v2.0.0-rc.18) (2021-02-04) - -### Bug Fixes - -- **build:** fix rollup compact not work ([783e658](https://github.com/anncwb/vue-vben-admin/commit/783e65813d41ad9a3030412edede6f25f8f8cb49)) -- **descriotion:** fix type [#228](https://github.com/anncwb/vue-vben-admin/issues/228) ([4909a4c](https://github.com/anncwb/vue-vben-admin/commit/4909a4cb25ee62661e38cac38a8c3a388fdabbdf)) -- **form:** format destructuring assignment error ([#238](https://github.com/anncwb/vue-vben-admin/issues/238)) ([612995a](https://github.com/anncwb/vue-vben-admin/commit/612995a5326ef183d9f454059da6a2914ce5dd2f)) -- **menu:** fix the menu outside link does not jump ([55d4b77](https://github.com/anncwb/vue-vben-admin/commit/55d4b77b04d7a87b416a37019fbf047df1eeec41)) -- **menu:** top submenu disappeared problem [#214](https://github.com/anncwb/vue-vben-admin/issues/214) ([0ec1a62](https://github.com/anncwb/vue-vben-admin/commit/0ec1a62e596c363f3f017d6ac3b374a1b5caa7c5)) -- **modal:** fullscreen height calculation error [#203](https://github.com/anncwb/vue-vben-admin/issues/203) ([b45f8c5](https://github.com/anncwb/vue-vben-admin/commit/b45f8c5021a4225026ed698c083a1af42a08faff)) -- **moment:** fix moment error [#217](https://github.com/anncwb/vue-vben-admin/issues/217) ([61cf0f7](https://github.com/anncwb/vue-vben-admin/commit/61cf0f791e8ee05676fe7fa382b6a2c2b1bea92d)) -- **ripple:** fix ripple style [#211](https://github.com/anncwb/vue-vben-admin/issues/211) ([2201629](https://github.com/anncwb/vue-vben-admin/commit/22016291e4df206dbca351d00ae033c952276ebe)) -- **table:** fix the table: cancel editing and not restore the initial value [#235](https://github.com/anncwb/vue-vben-admin/issues/235) ([1d0ec36](https://github.com/anncwb/vue-vben-admin/commit/1d0ec3629f9cdd40c16b62ce61f9230dcd56a82f)) -- modifyVars not work ([b107b52](https://github.com/anncwb/vue-vben-admin/commit/b107b5288695130592a82951012b743fc825880f)) -- **optimize-deps:** fix resize-observer-polyfill error ([1fac4b4](https://github.com/anncwb/vue-vben-admin/commit/1fac4b4ba76d432b9a56e142a8d56571e825950f)) -- **simple-menu:** collapse openmenus error [#204](https://github.com/anncwb/vue-vben-admin/issues/204) ([ca4f1a8](https://github.com/anncwb/vue-vben-admin/commit/ca4f1a8faf7d588c0d57d0dc81f4dc04cd757380)) -- **table:** cell content does not wrap [#210](https://github.com/anncwb/vue-vben-admin/issues/210) ([ea93553](https://github.com/anncwb/vue-vben-admin/commit/ea9355398fe89235bf2e657c291541bd79a41d98)) -- **table:** fix the initial data display of editable cells ([#218](https://github.com/anncwb/vue-vben-admin/issues/218)) ([9ea257e](https://github.com/anncwb/vue-vben-admin/commit/9ea257e1fbd9e50369b0065eb4db37d4f9c24970)) -- **use-table:** fix types ([c889fb1](https://github.com/anncwb/vue-vben-admin/commit/c889fb174bbd8301479cd67ed99cb5f3552f9988)) -- error action style ([da64c1d](https://github.com/anncwb/vue-vben-admin/commit/da64c1dac95b96984283e496070ab9dc086dca4d)) - -### Features - -- production mode compressed image ([de332ae](https://github.com/anncwb/vue-vben-admin/commit/de332ae3f55afa611e86322753d5a713ea00307d)) -- theme color switch ([3d1681e](https://github.com/anncwb/vue-vben-admin/commit/3d1681ee9ae2b8e8a8f9d7afeaef3b059aa20b48)) -- vite preview ([c1a4600](https://github.com/anncwb/vue-vben-admin/commit/c1a4600b8a0f42c37d90c05198627062eb5742e2)) -- **api-select:** added numberToString prop [#200](https://github.com/anncwb/vue-vben-admin/issues/200) ([5d51d48](https://github.com/anncwb/vue-vben-admin/commit/5d51d48787f7b96637bc6abe5175578e0263092a)) - -### Performance Improvements - -- **form:** perf form in modal ([2882d6e](https://github.com/anncwb/vue-vben-admin/commit/2882d6e937a7d4996ae42ff62148d9a2f893fe47)) -- **mock:** when mock is not used, move mock.js out of the package file ([43503d5](https://github.com/anncwb/vue-vben-admin/commit/43503d597028926c93e4624d999cad4bbccc75fb)) -- **nprocess:** remove nprocess css ([733afdd](https://github.com/anncwb/vue-vben-admin/commit/733afddd19523550d8c7df5c523a0b0929afc608)) - -### Reverts - -- vite previre ([2eb2d2a](https://github.com/anncwb/vue-vben-admin/commit/2eb2d2a07529f7a33d2fbbf1e5fc2e1aac706b0f)) - -# [2.0.0-rc.17](https://github.com/anncwb/vue-vben-admin/compare/v2.0.0-rc.16...v2.0.0-rc.17) (2021-01-18) - -### Bug Fixes - -- **menu:** currentActiveMenu fails after refresh [#188](https://github.com/anncwb/vue-vben-admin/issues/188) ([6d5c49f](https://github.com/anncwb/vue-vben-admin/commit/6d5c49f0a208de5b745c36d2320dd4c2cffe7d75)) -- **menu-trigger:** menu-trigger lost ([b803c41](https://github.com/anncwb/vue-vben-admin/commit/b803c4100d5b40c04ae4c3b7153f7f8f32d7da81)) -- **mitt:** logout and clear the mitt ([0aeec5e](https://github.com/anncwb/vue-vben-admin/commit/0aeec5e9d727fc6291fa2d6edaedb4c3e1ef0dad)) -- **table:** index column value error [#187](https://github.com/anncwb/vue-vben-admin/issues/187) ([056fc13](https://github.com/anncwb/vue-vben-admin/commit/056fc131168c4e900e9257c3e03257a390c3d3ba)) -- **table:** tableAction icon [#182](https://github.com/anncwb/vue-vben-admin/issues/182) ([b9d53a7](https://github.com/anncwb/vue-vben-admin/commit/b9d53a7133de70922d6f2a0e16e5b623ffab84fb)) - -### Features - -- css import on demand ([c2f6542](https://github.com/anncwb/vue-vben-admin/commit/c2f6542b48abb85b2c80d13a36882899b11c140b)) - -### Performance Improvements - -- auto import mock file ([df6b5e9](https://github.com/anncwb/vue-vben-admin/commit/df6b5e926f3384a1c56e6607a39efcc4638e8dbc)) - -# [2.0.0-rc.16](https://github.com/anncwb/vue-vben-admin/compare/v2.0.0-rc.15...v2.0.0-rc.16) (2021-01-12) - -### Bug Fixes - -- **table:** table setting error [#174](https://github.com/anncwb/vue-vben-admin/issues/174) [#165](https://github.com/anncwb/vue-vben-admin/issues/165) ([c960020](https://github.com/anncwb/vue-vben-admin/commit/c9600208c52e3575fe8741e350833f7952bae3b7)) -- mock plugin error [#171](https://github.com/anncwb/vue-vben-admin/issues/171) ([3509ebe](https://github.com/anncwb/vue-vben-admin/commit/3509ebec165d26651cc02dc233bd9433c544bed5)) -- upload component not work [#169](https://github.com/anncwb/vue-vben-admin/issues/169) ([18ad1bc](https://github.com/anncwb/vue-vben-admin/commit/18ad1bcc6e927f70dc16bf7e3c1627c1f7f376f3)) -- useI18n type ([c22de5c](https://github.com/anncwb/vue-vben-admin/commit/c22de5c35b4781322c9ee17ad375ec0af2fe60a7)) -- **form:** formAction slot not work ([de5bf75](https://github.com/anncwb/vue-vben-admin/commit/de5bf757f241a097d62d61adf4d7346b73a09f92)) -- **layout:** fix layout scale error ([da76f3c](https://github.com/anncwb/vue-vben-admin/commit/da76f3c77bd044caaf65e2c7a5c1c9dd72b4ca44)) -- **modal:** height calc error [#161](https://github.com/anncwb/vue-vben-admin/issues/161) ([144ab57](https://github.com/anncwb/vue-vben-admin/commit/144ab577da06ff0bd1f258d1901b87864f232e45)) -- **table:** fix edit-table not work ([c031163](https://github.com/anncwb/vue-vben-admin/commit/c031163f34d7ec16aa5a7a406d5467a18e527c79)) -- **table:** fix table setting error [#162](https://github.com/anncwb/vue-vben-admin/issues/162) ([a2c89d2](https://github.com/anncwb/vue-vben-admin/commit/a2c89d2e842beb9f15f3fc00d651c42954a57ff7)) -- **table:** restore the property of the table ([5c27353](https://github.com/anncwb/vue-vben-admin/commit/5c2735346745cf91aa9812a0afbf62e4625faf40)) -- **table:** table columns setting error ([af55511](https://github.com/anncwb/vue-vben-admin/commit/af55511bd6e533ab68356aa9038f80f50f53cf26)) -- **table:** table columns setting will uncheck all render columns [#154](https://github.com/anncwb/vue-vben-admin/issues/154) ([aa596af](https://github.com/anncwb/vue-vben-admin/commit/aa596af608a313a5494db8e3ddbf0ef84c7f0c55)) -- **table:** table memory overflow ([7a07b70](https://github.com/anncwb/vue-vben-admin/commit/7a07b703d11afb832daa4bd2b87bf5cab3c61e04)) -- **transition:** fix transition not work ([a7a8b89](https://github.com/anncwb/vue-vben-admin/commit/a7a8b894c1062d8eb05a094fdbb7887044d0d973)) -- invalid error-log page path ([#158](https://github.com/anncwb/vue-vben-admin/issues/158)) ([17ecaea](https://github.com/anncwb/vue-vben-admin/commit/17ecaea97d1d4c61ddb79a23616a49598c9a10aa)) - -### Features - -- **tinymce:** add image upload [#170](https://github.com/anncwb/vue-vben-admin/issues/170) ([3ad1a4f](https://github.com/anncwb/vue-vben-admin/commit/3ad1a4f5a69b4242d55e6bc17aceab7279241e14)) -- added mixSide trigger ([1e5fcd2](https://github.com/anncwb/vue-vben-admin/commit/1e5fcd2cd2981b29f06cff08e588077b2dd02f45)) -- support vite2 ([eba5576](https://github.com/anncwb/vue-vben-admin/commit/eba55769ec765cd4fbf1faefdd4f3df5e38f11d9)) -- **layout:** added setting. Used to fix the left mixed mode menu ([97180e8](https://github.com/anncwb/vue-vben-admin/commit/97180e83f5055ebd138acc2a82c981d8a7399371)) -- **menu:** add mixSideTrigger setting ([0419a07](https://github.com/anncwb/vue-vben-admin/commit/0419a070413be34ea5455ed955fa51d8c522da86)) -- **modal:** add minHeight and height prop [#156](https://github.com/anncwb/vue-vben-admin/issues/156) ([5091a87](https://github.com/anncwb/vue-vben-admin/commit/5091a875ab520c51aec4c57cdd200d68016958ab)) -- **page-wrapper:** added pageWrapper component ([31ff055](https://github.com/anncwb/vue-vben-admin/commit/31ff0559fe3b635fc2091aac0e2f5e340629134c)) -- **table:** add summaryData prop [#163](https://github.com/anncwb/vue-vben-admin/issues/163) ([8d7d083](https://github.com/anncwb/vue-vben-admin/commit/8d7d0835adf4a7d1b8afc5e8bd911a60833006a4)) -- **tabs:** added tab folding ([0e7c57b](https://github.com/anncwb/vue-vben-admin/commit/0e7c57bd5ecafd8283bcc950b24bb63b59b70e5a)) - -### Performance Improvements - -- perf table ([cdf0a60](https://github.com/anncwb/vue-vben-admin/commit/cdf0a600e505daf429446b8a7968269e1034de04)) -- **i18n:** merge common lang ([efbde0d](https://github.com/anncwb/vue-vben-admin/commit/efbde0d57e20d07373d78d1226e2e83f396a74f3)) -- add @ant-design/icons-vue to optimizeDeps ([fb57cf7](https://github.com/anncwb/vue-vben-admin/commit/fb57cf734da31af94f3072c685b778a64fc740a5)) -- **menu:** mixSideTrigger setting ([#155](https://github.com/anncwb/vue-vben-admin/issues/155)) ([e821f4c](https://github.com/anncwb/vue-vben-admin/commit/e821f4c706c4108a4309a0589223e05e718f15cf)) - -# [2.0.0-rc.15](https://github.com/anncwb/vue-vben-admin/compare/v2.0.0-rc.14...v2.0.0-rc.15) (2020-12-31) - -### Bug Fixes - -- **build:** fix environment variable configuration file failure ([bd7b53f](https://github.com/anncwb/vue-vben-admin/commit/bd7b53f14adc05fd3d4af5027b5fb85015021ac9)) -- **charts:** fix echarts does not display after refresh [#140](https://github.com/anncwb/vue-vben-admin/issues/140) ([5cbfb2a](https://github.com/anncwb/vue-vben-admin/commit/5cbfb2a1f9ace8b991ac67c5b7d37b64eb2dbac8)) -- **demo:** fix demo error ([a0681cc](https://github.com/anncwb/vue-vben-admin/commit/a0681cca8f9de2e3686001fa715f53f6fc3cf1a1)) -- **form:** fix appendSchemaByField not work ([405d746](https://github.com/anncwb/vue-vben-admin/commit/405d7466dd935a845e91f4c6ece76b1475507eb7)) -- **form:** form validate error ([a305e59](https://github.com/anncwb/vue-vben-admin/commit/a305e59124f4cc88aaf6ec85a13fc998a18b9471)) -- **form:** form-item style error ([08df198](https://github.com/anncwb/vue-vben-admin/commit/08df198710ff597af2cbffa2afbb3a6ca13a1d63)) -- **iframe:** iframe loads early when closing multi-tabs ([73cee06](https://github.com/anncwb/vue-vben-admin/commit/73cee06daa26c056131fb5ec78afd912dd9832f7)) -- **locale:** fix locale.show not work ([10cd4fc](https://github.com/anncwb/vue-vben-admin/commit/10cd4fcdff2fa3961e095285ae7a26b38be52c2a)) -- **menu:** fix scrillbar not work ([de25557](https://github.com/anncwb/vue-vben-admin/commit/de25557f86945a96b89294043796ccf4ab476ad5)) -- **modal:** do not hide the scroll bar when opening the pop-up window [#151](https://github.com/anncwb/vue-vben-admin/issues/151) ([8f332e3](https://github.com/anncwb/vue-vben-admin/commit/8f332e3cd45814a181a24c884edf050936928755)) -- **sider:** mix mode adaptation in the left menu ([ed213d8](https://github.com/anncwb/vue-vben-admin/commit/ed213d878b78697f0bdb69cb474dfab45972b2cb)) -- **table:** Update useDataSource.ts ([#131](https://github.com/anncwb/vue-vben-admin/issues/131)) ([877311f](https://github.com/anncwb/vue-vben-admin/commit/877311f9df70b7d76f8a0f8b5082f061de439ec8)) -- **table:** wrong tag label style [#134](https://github.com/anncwb/vue-vben-admin/issues/134) ([e09e0a1](https://github.com/anncwb/vue-vben-admin/commit/e09e0a12531977d679ab0f4574f4016d4c5b2ad0)) -- **tinymce:** the editor reports an error under keep-alive [#152](https://github.com/anncwb/vue-vben-admin/issues/152) ([09c9f8a](https://github.com/anncwb/vue-vben-admin/commit/09c9f8a881d1f2c76b11fdeff08f3ca2893e0886)) -- **types:** fix routing type error [#145](https://github.com/anncwb/vue-vben-admin/issues/145) ([b6e5c3f](https://github.com/anncwb/vue-vben-admin/commit/b6e5c3f625f3e30b1fa7433e57b1294a8ce8d04b)) -- add an example of markdown embedded in the form [#138](https://github.com/anncwb/vue-vben-admin/issues/138) ([7db0c5c](https://github.com/anncwb/vue-vben-admin/commit/7db0c5c49f23a4ab4958b3f73d47516deafa6166)) - -### Features - -- **breadcrumb:** add breadcrumb demo [#143](https://github.com/anncwb/vue-vben-admin/issues/143) ([819bcbe](https://github.com/anncwb/vue-vben-admin/commit/819bcbe5263c721f1f77cb277d670a9868b229f7)) -- **hook:** add useKeyPress ([3c3e640](https://github.com/anncwb/vue-vben-admin/commit/3c3e640d69b48d8e9382acd25b60d906af038a9d)) -- add mainout page demo ([930383f](https://github.com/anncwb/vue-vben-admin/commit/930383f9ae17b18d697a35ef9c73ad17dbca1e13)) -- **layout:** add mix sidebar mode ([e6db0d3](https://github.com/anncwb/vue-vben-admin/commit/e6db0d39b9ba98f6396866715ed3b6d56994697a)) -- add ripple directive ([2e79c9f](https://github.com/anncwb/vue-vben-admin/commit/2e79c9f37adda4003e6b054561b26da69a762673)) - -### Performance Improvements - -- **form:** improve the form function ([ac1a369](https://github.com/anncwb/vue-vben-admin/commit/ac1a36950259844822c6300a00710b040dfc2640)) -- **import:** perf components import ([2ee01fa](https://github.com/anncwb/vue-vben-admin/commit/2ee01fa6ea3200ec964d4e1b4765e48dfa7aeb3a)) -- **modal-drawer:** replace the scrollbar assembly ([ebf7c8a](https://github.com/anncwb/vue-vben-admin/commit/ebf7c8aa53b7ed11c72734646d558a559e818473)) -- **route:** refactor guard ([3b126e0](https://github.com/anncwb/vue-vben-admin/commit/3b126e011c7ca7ac1b008c37aa2cf617242a2e9c)) -- Update useApexCharts.ts ([#139](https://github.com/anncwb/vue-vben-admin/issues/139)) ([5eecec0](https://github.com/anncwb/vue-vben-admin/commit/5eecec03126d131bd1210d4fcac3acfe3d5aeb40)) - -# [2.0.0-rc.14](https://github.com/anncwb/vue-vben-admin/compare/2.0.0-beta.3...v2.0.0-rc.14) (2020-12-15) - -### Bug Fixes - -- **form:** fix the form item setting not taking effect ([6936adb](https://github.com/anncwb/vue-vben-admin/commit/6936adb2c2af3c0bfbd238be1d61933601ff2b88)) -- **router:** reserving `Redirect` after reset ([#126](https://github.com/anncwb/vue-vben-admin/issues/126)) ([ec7efcf](https://github.com/anncwb/vue-vben-admin/commit/ec7efcf0f0161c8e14168bf69ba27ba36e2a1ac8)) -- fix modal and drawer component missing uid ([1293a73](https://github.com/anncwb/vue-vben-admin/commit/1293a7389ea797b1c1dad62e06657c846b1dcb3c)) -- **comp:** fix the memory overflow problem of component containing keywords ([6b3195b](https://github.com/anncwb/vue-vben-admin/commit/6b3195b4ca88a33044bcd014e8c5d090710e7fbb)) -- **form:** fix baseColProps not work ([c8ef82b](https://github.com/anncwb/vue-vben-admin/commit/c8ef82b2c11c9938f0f7a7f6a1a10010b82979dc)) -- **form:** fix form inputNumber verification error ([4ddee05](https://github.com/anncwb/vue-vben-admin/commit/4ddee05dee87c944ba95dca54a754e048b8cfc84)) -- **form:** fix form verification and console error message issues ([bb1b267](https://github.com/anncwb/vue-vben-admin/commit/bb1b267e2fc306608300ec09084b1f3d0cab7e59)) -- **icon:** fix g-icon not work ([f7ec3c9](https://github.com/anncwb/vue-vben-admin/commit/f7ec3c931e780b2b5d35bf65ea5b4ace26f7c356)) -- **keep-alive:** fix the problem that the multi-level routing cache page is rendered multiple times [#123](https://github.com/anncwb/vue-vben-admin/issues/123) ([0daca28](https://github.com/anncwb/vue-vben-admin/commit/0daca28362419911d642e4b3a5111e213eef49d9)) -- **login:** fix the problem of successful login and notify disappearing ([0434030](https://github.com/anncwb/vue-vben-admin/commit/0434030f2777ee65a4255287e1842fcb0b772f87)) -- **menu:** calc 0 不能省略单位 ([#124](https://github.com/anncwb/vue-vben-admin/issues/124)) ([d023fb1](https://github.com/anncwb/vue-vben-admin/commit/d023fb13742cc1f5cc1585b82f1a7b3c576ee66c)) -- **menu:** fix externalLink not work ([7bae4c3](https://github.com/anncwb/vue-vben-admin/commit/7bae4c37525c6534ec0b0c3ea8c1b2257af74a33)) -- **menu:** fix menu icon style ([1bc237d](https://github.com/anncwb/vue-vben-admin/commit/1bc237d77a068e99b0e803ab4f16d8bbcf54ff6b)) -- **menu:** fix menu split mode problem ([1ef49e5](https://github.com/anncwb/vue-vben-admin/commit/1ef49e542d23ca44696ec5dd2f6498a4ea8135aa)) -- **theme:** css filter breaking fixed position ([#125](https://github.com/anncwb/vue-vben-admin/issues/125)) ([c911af4](https://github.com/anncwb/vue-vben-admin/commit/c911af4aca49e6f9fe099e74a4d454286554e181)) -- 整体图标调整 ([5dc8226](https://github.com/anncwb/vue-vben-admin/commit/5dc8226ce14559f48f8b979809f8a054ce7935e5)) -- file upload key loss [#120](https://github.com/anncwb/vue-vben-admin/issues/120) ([29461a8](https://github.com/anncwb/vue-vben-admin/commit/29461a856826fbb7726848982387ea78f8573754)) -- **menu:** fix the calculation error of the top menu width ([de1f006](https://github.com/anncwb/vue-vben-admin/commit/de1f00628479c4d31e6ed904d4b0fd7e312cc030)) -- **table:** fix table setting error ([59ad824](https://github.com/anncwb/vue-vben-admin/commit/59ad82442bf213bac547940086ff4e14d0cd342a)) -- **table:** fix unsuccessful saving of row edit table ([#117](https://github.com/anncwb/vue-vben-admin/issues/117)) ([404db2f](https://github.com/anncwb/vue-vben-admin/commit/404db2fb4975c69851dbf73a9ea8f981fb0ddb56)) -- **upload:** fix file upload key loss [#120](https://github.com/anncwb/vue-vben-admin/issues/120) ([fb5395b](https://github.com/anncwb/vue-vben-admin/commit/fb5395b5401b4b1f9e605d2721784482a76d49cc)) -- **upload:** repair file upload and delete invalidation ([bd6b203](https://github.com/anncwb/vue-vben-admin/commit/bd6b203fa969d173574657940a50b649c778b0b4)) -- fix cssVar hmr error ([2b95be8](https://github.com/anncwb/vue-vben-admin/commit/2b95be8013e70e1b891601cecb6d9e03a56d1ac2)) -- fix descriotions title not work ([819127e](https://github.com/anncwb/vue-vben-admin/commit/819127e807123cccc7ae50f0fdffb43a662465d4)) -- fix form submit error ([94bf854](https://github.com/anncwb/vue-vben-admin/commit/94bf854dd98f37ffb39e9086c565a0610c250205)) -- fix form validate error ([1db72c8](https://github.com/anncwb/vue-vben-admin/commit/1db72c8fe13384f24e9cc1bdc839d5e4176ea9b4)) -- fix keepAlive not work ([b884654](https://github.com/anncwb/vue-vben-admin/commit/b884654761f93455014fd1dcb0e40c030d8fb360)) -- fix menu style not work ([bda3e5d](https://github.com/anncwb/vue-vben-admin/commit/bda3e5da30b434dd3a5879695261422fdd365455)) -- fix mock data error [#109](https://github.com/anncwb/vue-vben-admin/issues/109) ([41a4b82](https://github.com/anncwb/vue-vben-admin/commit/41a4b827a22e785453238da6b9b8b5b1c604b91a)) -- fix notify type error ([cb1ae34](https://github.com/anncwb/vue-vben-admin/commit/cb1ae34f1120d2555ff039fc945235c3f45e13a8)) -- fix spelling errors of i18n words ([68a96b7](https://github.com/anncwb/vue-vben-admin/commit/68a96b7f81a1ad72c93a53c2ebfde046c66c215f)) -- fix spin style ([fca0bb1](https://github.com/anncwb/vue-vben-admin/commit/fca0bb164a0f2e03acb5090bf59634225f5c06ee)) -- fix table column settings not displayed by setting ([54d1405](https://github.com/anncwb/vue-vben-admin/commit/54d14056462566521f2528480c13fb24279156ae)) -- fix the display problem of table icon ([de499a1](https://github.com/anncwb/vue-vben-admin/commit/de499a145556427304abe075b62e6869f44dc640)) -- fix the original page after login expired ([6676c95](https://github.com/anncwb/vue-vben-admin/commit/6676c9506be7b3095c466c83432d40b2a36565fb)) -- fix win system dynamicImport error ([a90d93f](https://github.com/anncwb/vue-vben-admin/commit/a90d93fc4d8dd8491702183f3db700c33dbcc5a8)) -- page switching did not return to the top ([fef3644](https://github.com/anncwb/vue-vben-admin/commit/fef3644067b7ccac96ec9ae122e3f1c8b8fc58ef)) -- pageLoading not working ([3f78b5a](https://github.com/anncwb/vue-vben-admin/commit/3f78b5aa0cd3e7a6f17d58512ca93ee2905d5e2f)) -- style error ([7bfe5f7](https://github.com/anncwb/vue-vben-admin/commit/7bfe5f753d77620027248a6238bccd8a23f7ad7c)) -- **charts:** fix useCharts resize not work ([6d9585b](https://github.com/anncwb/vue-vben-admin/commit/6d9585b46f849ea4cf3dc93d46f15c2c09d04891)) -- **form:** fix updateSchema error [#100](https://github.com/anncwb/vue-vben-admin/issues/100) ([4982786](https://github.com/anncwb/vue-vben-admin/commit/498278660112a52b7c6e608159d20920d6047e04)) -- 修复链接 ([#49](https://github.com/anncwb/vue-vben-admin/issues/49)) ([28392c3](https://github.com/anncwb/vue-vben-admin/commit/28392c3d6efc2fb3298255bc2c466167e8a4e91c)) -- fix editable cells cannot be entered ([4500214](https://github.com/anncwb/vue-vben-admin/commit/4500214b2a158965281e43e673622e4492e8ca26)) -- fix expandTransition ([3355066](https://github.com/anncwb/vue-vben-admin/commit/335506628e15e29e08df55d4b7e7cf6333fe25be)) -- fix fullscreen bg color not work ([#75](https://github.com/anncwb/vue-vben-admin/issues/75)) ([0c28ffa](https://github.com/anncwb/vue-vben-admin/commit/0c28ffa8e6a93e8923b7d3a32292db8ae786242c)) -- **table:** fix table typo ([69af37e](https://github.com/anncwb/vue-vben-admin/commit/69af37ec88e21acf926fdf5969c2189dc7450822)) -- fix menu permission failure ([b8353fe](https://github.com/anncwb/vue-vben-admin/commit/b8353fe1f262b87cc20af56aaf380ae1a5599724)) -- fix message type error ([35d2bfc](https://github.com/anncwb/vue-vben-admin/commit/35d2bfc5623fcf3a608ae12e9781b2e23ff4130d)) -- fix the problem of closing multiple tabs ([275ad9f](https://github.com/anncwb/vue-vben-admin/commit/275ad9f14e8fa75620ff35c906c06c616fb2104f)) -- **mock:** fix mock paging tool error ([b36d948](https://github.com/anncwb/vue-vben-admin/commit/b36d9486a544dd3badea23d86088af98aadad8f4)) -- **table:** fix table search criteria collapse failure ([84b8302](https://github.com/anncwb/vue-vben-admin/commit/84b8302c0921ea7fbcd1c42fa057b94660129857)) -- fix missing cache of refresh page ([02d6a39](https://github.com/anncwb/vue-vben-admin/commit/02d6a3940277a5939d25d16fda58e09346821e0e)) -- fix npm build error ([a3b7a65](https://github.com/anncwb/vue-vben-admin/commit/a3b7a6537ae25af076fdcccb50dd6967f0def40b)) -- fix table small style ([#67](https://github.com/anncwb/vue-vben-admin/issues/67)) ([da4aea1](https://github.com/anncwb/vue-vben-admin/commit/da4aea1399f67759b06266aa410036f69fde9521)) -- **table:** fix table type error ([05980a8](https://github.com/anncwb/vue-vben-admin/commit/05980a817e68c2a57eed2db7cf23bd7eb4ec10ba)) -- build error ([7bd0b8e](https://github.com/anncwb/vue-vben-admin/commit/7bd0b8eb6ffb143b4f341efeeb60b4e90f0e4ddf)) -- fix abnormal breadcrumb status ([144fde8](https://github.com/anncwb/vue-vben-admin/commit/144fde8a688217440071c7b0ac70e46f6832635a)) -- fix base-help style not work ([1fb759e](https://github.com/anncwb/vue-vben-admin/commit/1fb759ec7cf2c6104670025073920ca352413b10)) -- fix drawer autoHeight ([88de82c](https://github.com/anncwb/vue-vben-admin/commit/88de82c493b068b6d9bb5e29475350ed092fe482)) -- fix missing page refresh parameters ([349d197](https://github.com/anncwb/vue-vben-admin/commit/349d1978b154f6e9e74e36de7cc56a2ca261d0b0)) -- fix modal dragging failure when destroyOnClose=true ([#51](https://github.com/anncwb/vue-vben-admin/issues/51)) ([9c02d8e](https://github.com/anncwb/vue-vben-admin/commit/9c02d8ec08b309e7f982f417a4c907f33ccc96f0)) -- fix npm script ([b84de1a](https://github.com/anncwb/vue-vben-admin/commit/b84de1a515600d2ead1c2b5f6db949e7bf6ab923)) -- fix require error ([06e1d38](https://github.com/anncwb/vue-vben-admin/commit/06e1d3879be187f99f5142e054884e1c09ac8dfa)) -- fix routing switch, tab is not activated ([beb4c3a](https://github.com/anncwb/vue-vben-admin/commit/beb4c3a37f314b97657a1d85e7db2abf40dbe6c3)) -- fix script preview no build ([c2333f5](https://github.com/anncwb/vue-vben-admin/commit/c2333f5d044c74c9df82c6c3134681ba21e0d0cd)) -- fix table auto height ([ddc3786](https://github.com/anncwb/vue-vben-admin/commit/ddc3786b168a2931200ef61cc68dd80a18d714cc)) -- fix the failure of table expansion icon animation ([8e885d6](https://github.com/anncwb/vue-vben-admin/commit/8e885d6967747f3204e61ca85bde25ac2b8ba2a4)) -- fix the failure of table expansion icon animation ([db06289](https://github.com/anncwb/vue-vben-admin/commit/db06289481965524f42ed36a056bd54ba1a46dfe)) -- fix the problem of folding display name of the first level menu ([e3cbc93](https://github.com/anncwb/vue-vben-admin/commit/e3cbc9326ecedf386919f344df5dbdef8eb3d78c)) -- fix the problem of page blank caused by page refresh ([7653610](https://github.com/anncwb/vue-vben-admin/commit/7653610c7bc45e97cb744994835cf7fb5074ff7b)) -- fix the style problem of the table border in the production environment ([f2c7638](https://github.com/anncwb/vue-vben-admin/commit/f2c7638bd7789bddacd56ea2ab809f4a0b3b86cb)) -- fix the top menu adaptive failure ([2f12556](https://github.com/anncwb/vue-vben-admin/commit/2f12556d26ba386d9dca2ecf8a88e3764abab870)) -- fix window npm script ([a0b09e7](https://github.com/anncwb/vue-vben-admin/commit/a0b09e74baf1f4e514da85ed9b1859ca2820fb37)) -- form col style ([840332a](https://github.com/anncwb/vue-vben-admin/commit/840332abf733dd1dc404523d38c5377114f4b6c2)) -- some error ([2407b33](https://github.com/anncwb/vue-vben-admin/commit/2407b3368c3fc5128bbfced98a1d2c70fa3e02e0)) -- **modal:** fix modal not showing footer ([fb0c776](https://github.com/anncwb/vue-vben-admin/commit/fb0c7763eddde38d3746cb424ebe9662ac576c86)) -- **tree:** fix tree style ([#99](https://github.com/anncwb/vue-vben-admin/issues/99)) ([e8ccdc7](https://github.com/anncwb/vue-vben-admin/commit/e8ccdc7f34891ea31768aea9ebcfc33227d37eb7)) -- **use-redo:** refresh the page to keep the parameters([#104](https://github.com/anncwb/vue-vben-admin/issues/104)) ([e04aaa0](https://github.com/anncwb/vue-vben-admin/commit/e04aaa06459c6613e59aa6ae5906b998b0685bdb)) -- fix the disappearance of tab switching parameters ([#56](https://github.com/anncwb/vue-vben-admin/issues/56)) ([6bffdb5](https://github.com/anncwb/vue-vben-admin/commit/6bffdb5c64aa139cf6119b50aeed42629a65f07b)) -- fix the occupancy problem of the folding button ([#90](https://github.com/anncwb/vue-vben-admin/issues/90)) ([cd35d3e](https://github.com/anncwb/vue-vben-admin/commit/cd35d3e0d16cb57cb15c2ca20c8a663f21e4bfbf)) -- fix the problem of collapsed display when the menu has no child nodes ([5cff73b](https://github.com/anncwb/vue-vben-admin/commit/5cff73bcafc27a36f111949d33f463dd2bb52571)) -- fix topMenu align not work ([25d43a5](https://github.com/anncwb/vue-vben-admin/commit/25d43a5f7c9182f2ca620f1daf0d5f47d2e4fb2d)) -- fix useTimeoutFn not work ([b49950a](https://github.com/anncwb/vue-vben-admin/commit/b49950a3906de6626eedb973590d02e4d95b98b9)) -- hmr multiple registered components ([7a6181e](https://github.com/anncwb/vue-vben-admin/commit/7a6181e8c72cd110cdfc09f624f8be43e76ef74c)) -- repair local development post request proxy to https error problem ([#63](https://github.com/anncwb/vue-vben-admin/issues/63)) ([34c09fc](https://github.com/anncwb/vue-vben-admin/commit/34c09fcea82e3529519a5acc563a22adcd5faae1)) -- repair packaging error ([526e6ce](https://github.com/anncwb/vue-vben-admin/commit/526e6ce22bf15cd04a09faf53a08ac43da491534)) -- Repair tree component click to select ([#33](https://github.com/anncwb/vue-vben-admin/issues/33)) ([67df9b8](https://github.com/anncwb/vue-vben-admin/commit/67df9b8c93a26b0edb4f3d5d5c589d355803cea0)) -- replace taskfile module ([e828baa](https://github.com/anncwb/vue-vben-admin/commit/e828baa67b5f8e6fa28354d85563d127b6b70d6b)) -- reset back to default value after fixing form query ([1c075a7](https://github.com/anncwb/vue-vben-admin/commit/1c075a7a32dd05454bc45d4eb686e2234c3c6175)) -- the action column appears repeatedly in the table ([#53](https://github.com/anncwb/vue-vben-admin/issues/53)) ([74d4742](https://github.com/anncwb/vue-vben-admin/commit/74d47424069c4dca71579637916431aa80014fd8)) -- the login tab page in tabs ([#60](https://github.com/anncwb/vue-vben-admin/issues/60)) ([bfac425](https://github.com/anncwb/vue-vben-admin/commit/bfac425d1e12943b55e9afb732a36d84f6a02404)) -- the useMessage icon style problem ([a2c413a](https://github.com/anncwb/vue-vben-admin/commit/a2c413a838bb3f737e28e95302ccf0a0171c91b6)) -- type error ([ecfb702](https://github.com/anncwb/vue-vben-admin/commit/ecfb702b09e296efd5bf095d65840147d47b7923)) -- typo ([7658f4d](https://github.com/anncwb/vue-vben-admin/commit/7658f4d6e82dc532b378ec13157756f0e1cd78de)) -- update account page demo ([#92](https://github.com/anncwb/vue-vben-admin/issues/92)) ([9f8796e](https://github.com/anncwb/vue-vben-admin/commit/9f8796ee586a5f33e20713f53d2aa447b6aa312e)) -- update upload component ([815250e](https://github.com/anncwb/vue-vben-admin/commit/815250ed341ccaec23e7ea34db6cc478a47ad065)) -- **excel:** update excel demo ([a207caf](https://github.com/anncwb/vue-vben-admin/commit/a207cafec98461b39882f352f2bf5c7d3c21716a)) -- **table:** fix table actionColOptions not work ([5a6db8c](https://github.com/anncwb/vue-vben-admin/commit/5a6db8c640376ca67b451a9647b9958946e5c3ab)) -- **table:** fix table type error ([db0bfc8](https://github.com/anncwb/vue-vben-admin/commit/db0bfc886314b193e7cb86a80b6c13b2743aa652)) -- **table:** fix the problem that multi-level header configuration does not take effect ([cdf2c59](https://github.com/anncwb/vue-vben-admin/commit/cdf2c59e5c3b070d039c04fb746b53147f5e0ced)) -- **tinymce:** fixed multiple editors showing only one ([#83](https://github.com/anncwb/vue-vben-admin/issues/83)) ([1093ec3](https://github.com/anncwb/vue-vben-admin/commit/1093ec3e6e4fe1f49b7458c29e518744fe56532f)) - -### Features - -- add account center page ([#86](https://github.com/anncwb/vue-vben-admin/issues/86)) ([78d4d41](https://github.com/anncwb/vue-vben-admin/commit/78d4d41c85f5341bb5dfd2a1cbb6e60d6858b084)) -- add accountSetting page ([#85](https://github.com/anncwb/vue-vben-admin/issues/85)) ([7ad4cee](https://github.com/anncwb/vue-vben-admin/commit/7ad4cee79ade617a13358f7417ce3e1182c1027f)) -- add basic-list page ([2f75a94](https://github.com/anncwb/vue-vben-admin/commit/2f75a948899713e10b200e0f39a48d4b62ef231e)) -- add card-list page ([3a132f3](https://github.com/anncwb/vue-vben-admin/commit/3a132f3f4f4e08b4675c157548aa093b3a1c3c94)) -- add collapsedShowTitle setting ([5737e47](https://github.com/anncwb/vue-vben-admin/commit/5737e478f671e7f1c60f7db08a0007f154b6f4b8)) -- add count-to component and demo ([afc7263](https://github.com/anncwb/vue-vben-admin/commit/afc7263efb90c0410041358a9dd5f10ec685ac2f)) -- add design setting ([bae53f3](https://github.com/anncwb/vue-vben-admin/commit/bae53f3e2c62b3fca246432307f45a6363c4c176)) -- add error handle ([7101587](https://github.com/anncwb/vue-vben-admin/commit/7101587b9676c91e9079044a096df08848f1f602)) -- add file download demo ([db3092d](https://github.com/anncwb/vue-vben-admin/commit/db3092db2eb7d5346778847757adb2b9c4041ed5)) -- add lazyContainer comp and demo ([fdeaa00](https://github.com/anncwb/vue-vben-admin/commit/fdeaa00bf24b0710ca341fafba8327c786ab9879)) -- add markdown component ([5fb069f](https://github.com/anncwb/vue-vben-admin/commit/5fb069f432799e0d17a7102fae70757e320dc0c5)) -- add notice ([#47](https://github.com/anncwb/vue-vben-admin/issues/47)) ([7a1e94c](https://github.com/anncwb/vue-vben-admin/commit/7a1e94c49d546e155d8c17b492ff6b1e5fb55121)) -- add permissionCacheType setting ([26b6109](https://github.com/anncwb/vue-vben-admin/commit/26b6109ca08a28c37355474bf8593f2e2b741ef6)) -- add pwa ([a1b9902](https://github.com/anncwb/vue-vben-admin/commit/a1b9902b97da03d0ee1e99a021fc6497b8f51fa6)) -- add README.en-US.md ([#37](https://github.com/anncwb/vue-vben-admin/issues/37)) ([7437896](https://github.com/anncwb/vue-vben-admin/commit/74378960345e706b45fab1f39fba045a1e95a547)) -- add result page demo ([21e0548](https://github.com/anncwb/vue-vben-admin/commit/21e0548e34cf70ebf97967089f458e759ca326d9)) -- add search page ([dddda5b](https://github.com/anncwb/vue-vben-admin/commit/dddda5b296025d1d6b37ec15930a02722b8e1b0c)) -- add search-list page ([4cb3784](https://github.com/anncwb/vue-vben-admin/commit/4cb3784f13fc516c6343798e8bf8a435e14d774c)) -- add tab drag and drop sort ([cedba37](https://github.com/anncwb/vue-vben-admin/commit/cedba37e4cf63456c97f7e391761f176137e0165)) -- add table setting ([8b3a4d3](https://github.com/anncwb/vue-vben-admin/commit/8b3a4d37a8addd151b918cf64bce6361376dec9e)) -- add tag display to the menu ([a3887f8](https://github.com/anncwb/vue-vben-admin/commit/a3887f8cd99546cde8882d77271cc430eb7a83f5)) -- add the parameter sortFn to the table ([491ba9a](https://github.com/anncwb/vue-vben-admin/commit/491ba9a3cc19ceb97dd9a6448831b64c86e1e475)) -- add the parameter submitOnReset to the form ([#54](https://github.com/anncwb/vue-vben-admin/issues/54)) ([d09406e](https://github.com/anncwb/vue-vben-admin/commit/d09406e3cb8cfc069ce79b5f4194f7d959f63daf)) -- add tinymce embedded form example ([58f988a](https://github.com/anncwb/vue-vben-admin/commit/58f988a7184dd7bdec415627e16b56b80f36b661)) -- add useDesign ([74e62cb](https://github.com/anncwb/vue-vben-admin/commit/74e62cbc712bdd4d4826e5fe80f537d87e44ffce)) -- added base64 file stream download ([a161bfa](https://github.com/anncwb/vue-vben-admin/commit/a161bfa818cb63d9cc0b00ae062eb16b1efaf74f)) -- auto import route ([8a1bfdf](https://github.com/anncwb/vue-vben-admin/commit/8a1bfdf13de966acc5eb41718ccb085d3efc4581)) -- axios add joinTime field ([f646e37](https://github.com/anncwb/vue-vben-admin/commit/f646e37754d21ba7c89437176bd9e375924dee03)) -- first screen loading waiting animation ([4811cce](https://github.com/anncwb/vue-vben-admin/commit/4811cce809453df78dc2c25cd9805eae483297fc)) -- global loading add text ([4f98978](https://github.com/anncwb/vue-vben-admin/commit/4f98978edacbe72610a226267628ab20b57cfc4e)) -- integrate upload components into form by default ([be2b8a7](https://github.com/anncwb/vue-vben-admin/commit/be2b8a7e175033dace7a521ab26cd319c5cfdea6)) -- multi-language component ([dc09de1](https://github.com/anncwb/vue-vben-admin/commit/dc09de1e052d6b104c5af3a426af6b0e7bb147c7)) -- multi-language layout ([e5f8ce3](https://github.com/anncwb/vue-vben-admin/commit/e5f8ce3fd8ec25c6fdb122867cd33e4e84a6f43f)) -- multi-language support ([1901129](https://github.com/anncwb/vue-vben-admin/commit/19011296ed61f820356f6b201cbb274d57dcb7d3)) -- new menu and top bar color selection color matching ([7692ffb](https://github.com/anncwb/vue-vben-admin/commit/7692ffb95b94672b6fbc8c25fd43d9dd1a1da81e)) -- projectSetting add closeMessageOnSwitch and removeAllHttpPending ([e83cb06](https://github.com/anncwb/vue-vben-admin/commit/e83cb06bb93544369c8934d1065bf46835e3f003)) -- restore the breadcrumb display icon function ([f65bed7](https://github.com/anncwb/vue-vben-admin/commit/f65bed72ac8c63aaed640d59703f73e83de80da5)) -- right-click menu supports multiple levels ([f645680](https://github.com/anncwb/vue-vben-admin/commit/f645680a3b9a1f75395329970551d9e5d6bd845b)) -- routes with parameters can be cached ([90b3fab](https://github.com/anncwb/vue-vben-admin/commit/90b3fab28ef53135f3cab1f69a4675f98a130857)) -- support mobile layout adaptation ([c774a6d](https://github.com/anncwb/vue-vben-admin/commit/c774a6d3a03d9507a9023d600aa9dd9592f52fb3)) -- support vscode i18n-ally plugin ([962f90d](https://github.com/anncwb/vue-vben-admin/commit/962f90de445d7935ad76ea7b74a98f12ce9a7498)) -- the cache can be configured to be encrypted ([234c1d1](https://github.com/anncwb/vue-vben-admin/commit/234c1d1fae6a7f2c78e456f992f91622ca599060)) -- **analysis:** add analysis page ([52ee35c](https://github.com/anncwb/vue-vben-admin/commit/52ee35c4beca8fc07737aa28328663e86ba797d4)) -- **breadcrumb:** support showIcon ([#48](https://github.com/anncwb/vue-vben-admin/issues/48)) ([d8b25b4](https://github.com/anncwb/vue-vben-admin/commit/d8b25b488ba4c6626d3b94ed84270e96f403d859)) -- **chart:** add useEcharts and useApexChart demo ([21d0ed9](https://github.com/anncwb/vue-vben-admin/commit/21d0ed92dffd28f45c98afee547d25d9b40dde7f)) -- **desc-page:** add desc page demo ([7a00036](https://github.com/anncwb/vue-vben-admin/commit/7a000366b92b942727dd2cd7c0aec193f8c1a7b0)) -- **excel:** import/export ([#40](https://github.com/anncwb/vue-vben-admin/issues/40)) ([c0692b0](https://github.com/anncwb/vue-vben-admin/commit/c0692b0f43b50be56e399c4aa07c0c4244080e9f)) -- **form:** support function type of form item ([5832ee6](https://github.com/anncwb/vue-vben-admin/commit/5832ee6697e23afefc25ba2aa4df9476b5034bf4)) -- **form-page:** add form page demo ([0b6110a](https://github.com/anncwb/vue-vben-admin/commit/0b6110a8fc92a11df6501346e093246a5abe2b0e)) -- **from:** add required in schema ([2859067](https://github.com/anncwb/vue-vben-admin/commit/28590676214b1c5fdbf6878e40da45a7bc0c5874)) -- **tinymce:** add line height ([#58](https://github.com/anncwb/vue-vben-admin/issues/58)) ([adffefd](https://github.com/anncwb/vue-vben-admin/commit/adffefd702688ba5fa8c5df616b8f3685a0fb778)) -- **tinymce:** add rich editor ([c0e4c9e](https://github.com/anncwb/vue-vben-admin/commit/c0e4c9e5a55524840e9598d24d84dcada8b57102)) -- **transition:** add transition comp and demo ([3713487](https://github.com/anncwb/vue-vben-admin/commit/3713487c85f4b512ab3e13fcb4c89a14b9ee8d50)) -- **trigger:** add trigger config ([4f6b65b](https://github.com/anncwb/vue-vben-admin/commit/4f6b65b8a1b7e694718b4aa42aced1e59e90ec9e)) -- the Button component extends the and attributes ([8f5016e](https://github.com/anncwb/vue-vben-admin/commit/8f5016e3f3476539a763162ea235cf2aac230eea)) -- the production environment can be dynamically configured ([bb3b8f8](https://github.com/anncwb/vue-vben-admin/commit/bb3b8f817de15d336968354515649f7142cd5683)) -- **workbench:** add workbench page ([1cd75fc](https://github.com/anncwb/vue-vben-admin/commit/1cd75fcf5ba7a3114399db8f22cf8eb6f2e4d783)) - -### Performance Improvements - -- **setting-drawer:** perf setting-drawer ([ed41e50](https://github.com/anncwb/vue-vben-admin/commit/ed41e5082fd2e6109c2ad3ff77199d15ac14342a)) -- **tabs:** perf multiple-tabs ([f81c401](https://github.com/anncwb/vue-vben-admin/commit/f81c401959dda4b8d568c00786b691c21abbb59c)) -- **tabs:** perf multiple-tabs ([27e50b4](https://github.com/anncwb/vue-vben-admin/commit/27e50b47479af8eaeb4be020aeb0fcbdb4308295)) -- Add the style injection of the top row to the form. ([#102](https://github.com/anncwb/vue-vben-admin/issues/102)) ([b9d3d60](https://github.com/anncwb/vue-vben-admin/commit/b9d3d60e0f8fe1166a0addcc8295365cbe65a7bf)) -- adjust the logic of ([b350098](https://github.com/anncwb/vue-vben-admin/commit/b350098f442be1b8143b44e09e735179676f755c)) -- code style ([f96d6b2](https://github.com/anncwb/vue-vben-admin/commit/f96d6b221c7ad97e0ed80250acb192b6be92c4a6)) -- enhance openModal and openDrawer ([b6d5e5c](https://github.com/anncwb/vue-vben-admin/commit/b6d5e5c96f89c31d4df11e71f2d4cb5ecf8f0b92)) -- layout code adjustment ([4392917](https://github.com/anncwb/vue-vben-admin/commit/439291746fe237410140575be2a634a74e8ef382)) -- layout style optimization ([7702832](https://github.com/anncwb/vue-vben-admin/commit/77028321816f00799cc3f70d3f0d6bde27c34522)) -- mobile style adjustment ([1899146](https://github.com/anncwb/vue-vben-admin/commit/1899146f71ab2020dc01bd84b282e6b614ad3d57)) -- optimize lazy loading components ([87fcd0d](https://github.com/anncwb/vue-vben-admin/commit/87fcd0d21ea78ce916a4f2b9cdcceda5e7866eee)) -- optimize multiple-tab switching effect ([f2bdf0b](https://github.com/anncwb/vue-vben-admin/commit/f2bdf0b86dd818f3cc59fdb0c55eb1b53b222f7f)) -- optimize preview and ContextMenu functions ([bbfb06f](https://github.com/anncwb/vue-vben-admin/commit/bbfb06f0ad1e345b0e716da730acaf7c0a778e4b)) -- optimize settingDrawer code ([4ff6b73](https://github.com/anncwb/vue-vben-admin/commit/4ff6b73c2bb57764db2bcd8212d82f028e25e36d)) -- optimize tab switching speed ([4baf90a](https://github.com/anncwb/vue-vben-admin/commit/4baf90a5c87493939830129efaa146624faabbcc)) -- optimize the size of the first screen ([968f791](https://github.com/anncwb/vue-vben-admin/commit/968f791f4b7112730813c8c990379051c3f8340d)) -- optimized page switching effect ([5f2a927](https://github.com/anncwb/vue-vben-admin/commit/5f2a927cd50a5efe4c9576528d944553c5243277)) -- perf component ([73c8e0c](https://github.com/anncwb/vue-vben-admin/commit/73c8e0c1583afa83353ff36d1d9ec847776d3016)) -- perf context menu ([6e03e05](https://github.com/anncwb/vue-vben-admin/commit/6e03e05032474c858151b3835eb5318486a56729)) -- perf excel comp code ([eecde4c](https://github.com/anncwb/vue-vben-admin/commit/eecde4c7e947cf392dbd8eace2db8ed9aea417b1)) -- perf loading logic ([f4621cc](https://github.com/anncwb/vue-vben-admin/commit/f4621cc66411d8ff4ca852b548a79cd3da9be1ce)) -- perf menu ([88f4a3f](https://github.com/anncwb/vue-vben-admin/commit/88f4a3f02a0c0f35953c93427fe700d414b6ec50)) -- perf menu mini style ([66acb21](https://github.com/anncwb/vue-vben-admin/commit/66acb21edda3fcac61849c7c03c6b396992d8d06)) -- perf modal and drawer ([81baf1d](https://github.com/anncwb/vue-vben-admin/commit/81baf1d5c4606aab83c0e65397ce4b090c2e4e08)) -- tsx use useExpose ([9bb7514](https://github.com/anncwb/vue-vben-admin/commit/9bb751475dc212d4e2829468cf1a11502137071e)) -- **button:** delete the button component useless code ([bdce845](https://github.com/anncwb/vue-vben-admin/commit/bdce84537aa58b9507744a3a14c8d598e88e95fc)) -- **drawer:** perf drawer ([28f7f7b](https://github.com/anncwb/vue-vben-admin/commit/28f7f7bf7f3ae49759b44395f6b06c2c61359d04)) -- **lazy-container:** optimize lazyContainer code ([0f4b847](https://github.com/anncwb/vue-vben-admin/commit/0f4b847d69e90e5bbb4fb0883fb5ea1dd1daf1e7)) -- **logo:** optimize logo code ([e79e540](https://github.com/anncwb/vue-vben-admin/commit/e79e540b48be80fb08b67a99e64bede3816b2c9e)) -- **menu:** optimize layout menu ([96c10d6](https://github.com/anncwb/vue-vben-admin/commit/96c10d6c0fb46b56b0e74e09a8e20bcfc9f54cde)) -- **modal:** optimize table embedding height calculation problem ([9abf176](https://github.com/anncwb/vue-vben-admin/commit/9abf1763c78ead7de21ece6d328337a6a1da5f05)) -- **strength-meter:** modify name word ([#38](https://github.com/anncwb/vue-vben-admin/issues/38)) ([19477cd](https://github.com/anncwb/vue-vben-admin/commit/19477cd980661ace337ec6e3295f76c44d05763c)) -- **table:** optimize effect performance ([a1ffb61](https://github.com/anncwb/vue-vben-admin/commit/a1ffb61804940f1ebaea741b0df41485ad95d5f2)) -- **upload:** improve upload component ([661db0c](https://github.com/anncwb/vue-vben-admin/commit/661db0c767772bb7a30da9d3eeaf2b47858ccf0b)) -- **use-message:** fix typo ([bcab4b7](https://github.com/anncwb/vue-vben-admin/commit/bcab4b774d384a5de9b87a0c700a9937c79eb5cd)) -- perf TableAction ([4b384b1](https://github.com/anncwb/vue-vben-admin/commit/4b384b137c58428f0cf28621e183250da4576479)) -- performance optimization ([70fba7e](https://github.com/anncwb/vue-vben-admin/commit/70fba7ecac80a1cd8ec08052e8265641f2b56204)) -- pwa icon ([404c73d](https://github.com/anncwb/vue-vben-admin/commit/404c73de450c165ffe623ca2969322bae1786a73)) -- remove optional chain ([e034d1b](https://github.com/anncwb/vue-vben-admin/commit/e034d1bacc5501a83188d20129951422bc127e3b)) -- review tinymce code ([f75425d](https://github.com/anncwb/vue-vben-admin/commit/f75425d13bc9f6003021fd4b5d6451ae096c09b7)) -- set cache default time ([c620f82](https://github.com/anncwb/vue-vben-admin/commit/c620f8279f1056ddab84b3907fb50b3af4fe9247)) -- tabs optimization ([6e40051](https://github.com/anncwb/vue-vben-admin/commit/6e4005111db58ca10f10e9aa4bca4aec57363736)) -- the existing tab switching no longer displays animation and processbar ([e9536b5](https://github.com/anncwb/vue-vben-admin/commit/e9536b5b7ccc5f667496c4ec7ab838738f804a71)) -- the routeModule can ignore the layou configuration without writing ([4c658f4](https://github.com/anncwb/vue-vben-admin/commit/4c658f4868c7df6e0b8f18728c5d5ae53b04448a)) -- update form types ([a0c3197](https://github.com/anncwb/vue-vben-admin/commit/a0c3197454b59a231cf6d27048b2e9c0bd7bf77f)) - -### Reverts - -- **table:** revert form type annotation ([261936b](https://github.com/anncwb/vue-vben-admin/commit/261936b117d1d261ecb8fafc0f6c839cb2913918)) - -# [2.0.0-beta.3](https://github.com/anncwb/vue-vben-admin/compare/2.0.0-beta.2...2.0.0-beta.3) (2020-10-07) - -### Features - -- **setting:** add openNProgress setting ([67d0ff0](https://github.com/anncwb/vue-vben-admin/commit/67d0ff0e251f584883d50fd71b2413b6ca94729d)) -- **table:** add table component ([faf3f46](https://github.com/anncwb/vue-vben-admin/commit/faf3f4602ecf4b16ff57994668edc8433a43945d)) - -# [2.0.0-beta.2](https://github.com/anncwb/vue-vben-admin/compare/2.0.0-beta.1...2.0.0-beta.2) (2020-10-07) - -### Features - -- **img-preview:** add imgPreview componnt ([e6093aa](https://github.com/anncwb/vue-vben-admin/commit/e6093aa4f48f3b3c16b1640c56512e6e3cf84c4b)) - -# [2.0.0-beta.1](https://github.com/anncwb/vue-vben-admin/compare/2f268ca8f43d98687ffd809e2c1d140d29033bd6...2.0.0-beta.1) (2020-09-30) - -### Bug Fixes - -- fix form,transition,build bug ([2f268ca](https://github.com/anncwb/vue-vben-admin/commit/2f268ca8f43d98687ffd809e2c1d140d29033bd6)) diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/CHANGELOG.zh_CN.md b/templates/abp-vnext-pro-nuget-simplify/vben28/CHANGELOG.zh_CN.md deleted file mode 100644 index db0623216..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/CHANGELOG.zh_CN.md +++ /dev/null @@ -1,1317 +0,0 @@ -## 2.8.0(2021-11.03) - -### 升级说明 - -- 包管理器由`yarn`改为 `pnpm` -- 删除`node_modules`和`yarn.lock`,全局安装`pnpm` -- 执行`pnpm install` - -### ✨ Features - -- **其它** - - `.env`文件中的`VITE_PROXY`配置支持单引号 - - 移除 build 过程中的警告 - -### 🐛 Bug Fixes - -- **BasicTable** - - 修复可编辑单元格某些情况下无法提交的问题 - - 修复`inset`属性不起作用的问题 - - 修复`useTable`与`BasicTable`实例的`reload`方法`await`表现不一致的问题 - - 修复`clickToRowSelect`会无视行选择框 disabled 状态的问题 - - 修复`BasicTable`在某些情况下,分页会被重置的问题 - - 修改 `deleteTableDataRecord` 方法 -- **BasicModal** - - 修复点击遮罩、按下`Esc`键都不能关闭`Modal`的问题 - - 修复点击关闭按钮、最大化按钮旁边的空白区域也会导致`Modal`关闭的问题 -- **BasicTree** 修复节点插槽不起作用的问题 -- **CodeEditor** 修复可能会造成的`Build`失败的问题 -- **BasicForm** 修复自定义 FormItem 组件的内容宽度可能超出范围的问题 -- **ApiTreeSelect** 修复`params`变化未能触发重新请求 api 数据的问题 -- **其它** - - 修复多标签在某些情况下关闭页签不会跳转路由的问题 - - 修复部分组件可能会造成热更新异常的问题 - - 修复直接`import`部分`antdv`子组件时会在 build 过程中报错的问题,如:TabPane、RadioGroup - -## 2.7.2(2021-09-14) - -### ✨ Features - -- **BasicForm** 表单组件新增`Divider`,用于较长表单的区域分割 -- **BasicTable** - - 单元格编辑新增提交回调,将根据回调函数返回的结果来决定是否将数据提交到表格 - - 行编辑添加校验方法,允许只校验而不提交值,以便异步保存数据成功后才提交倒表格 - - 修复`rowClassName`属性无法和`striped`同时使用的问题 -- 新增组件 **MarkdownViewer** 用于显示 Markdown 格式的富文本 - -### 🐛 Bug Fixes - -- **CodeEditor** 修复 JSON 编辑器在格式化无效 JSON 文本时会抛出异常的问题 -- **Tinymce** 修复 inline 模式在一些场景下会出现异常的问题 -- **BasicTable** - - 修复可编辑单元格的内容为空时,不会显示编辑图标的问题 - - 修复表尾合计行与表格主体部分的列有时候未能对齐的问题 -- **MarkDown** 修复初始 value 属性的值不起作用的问题 -- **BasicUpload** 修复`accept`属性不支持`MIME`及点开头的后缀名的问题 -- **ApiSelect** 修复`value`属性的类型定义问题 -- **其它** - - 修复部分封装组件在使用插槽时报错的问题 - - 修复`useECharts`的`theme`参数不起作用的问题 - - 修复`Token`失效时,按 F5 刷新页面可能会出现页面加载异常的问题 - - 修复`useRedo`的不当调用可能会导致重定向`path`异常的问题 - - 修复`vite`自定义模式名称不支持下划线的问题 - -## 2.7.1(2021-08-16) - -- 升级 vue 3.2,如果运行失败,删除 node_modules 后重装即可 - -### ✨ Features - -- **BasicTree** 添加搜索功能相关属性和方法 -- **BasicForm** 新增`alwaysShowLines`用于设置折叠时保留显示的行数 - -### 🐛 Bug Fixes - -- **Cropper** 修复未能及时销毁的问题 -- **BasicTable** - - 修复`CellFormat`无法使用`Map`类型数据的问题 - - 修复可编辑单元格未能正确显示`0`值的问题 - - 修复 selection-change 事件在取消勾选时未能正确触发的问题 - - 修复浅色主题下的全屏状态背景颜色不正确的问题 - - 修复`getSelectRows`不支持远程数据跨页选择时获取完整数据的问题 - - 修复在`editComponentProps`中为编辑组件提供的`size`属性无效的问题 -- **Qrcode** 修复二维码组件在创建时未能及时绘制的问题 -- **BasicModal** 修复`helpMessage`属性不起作用的问题 -- **BasicButton** 修复按钮样式表现与 antd 官方不一致的问题 -- **其它** 修复`useRedo`(重新加载当前路由)会丢失路由`params`数据的问题 - -## 2.7.0(2021-08-03) - -## (破坏性更新) Breaking changes - -- 将项目`tailwindcss`还原回`windicss`,尝试了`tailwindcss`,问题可能还挺多,先切换回`windicss`提高开发效率,切换成本较低。 - - 目前项目不兼容地方有 - - `xl:!m-4` 之类的写法需要改为`!xl:m-4`,注意只有`!`这个不兼容,没用到则不用改 - - 内存溢出问题可能还在(频率低,重启下即可,重启 vite 较快) - -### ✨ Features - -- **Preview** 添加新的属性及事件 -- **Dark Theme** 新增对 tailwindcss 夜间模式的支持 -- **其它** 为 useLoading 添加 setTip 方法 - -### 🐛 Bug Fixes - -- **ApiTreeSelect** 修复未能正确监听`params`变化的问题 -- **ImgRotateDragVerify** 修复组件`resume`方法无法调用的问题 -- **TableAction** 修复 stopButtonPropagation 属性某些情况下不起作用的问题 -- **PageWrapper** 修复`class`属性无效的问题 -- **BasicTree** 修复`checkAll`方法会影响到`disabled`状态节点的问题 -- **BasicTable** - - 修复可编辑单元格不支持`ellipsis`配置的问题 - - 修复全屏模式下看不到子组件弹出层(popconfirm 以及 select、treeSelect 等编辑组件)的问题 - - 修复启用`expandRowByClick`时,点击不可展开的行可能会导致样式错误的问题 - - 修复`pagination`属性动态改变不生效的问题 - - 修复`getSelectRows`不支持树形表格子级数据的问题 -- **Dark Theme** 黑暗主题下的配色问题修正 - - 修复`Tree`组件被选中节点的背景颜色 - - 修复`Alert`组件的颜色配置 - - 修复禁用状态下的`link`类型的按钮颜色问题 - - 修复`Tree`已勾选的复选框的样式问题 -- **其它** 修复 useScript 未能自动移除 script 节点的问题 - -## 2.6.1(2021-07-19) - -### ✨ Features - -- **NoticeList** 添加分页、超长自动省略、标题点击事件、标题删除线等功能 -- **MixSider** 优化 Mix 菜单布局时 底部折叠按钮 的样式,与其它菜单布局时的风格保持一致 -- **ApiTreeSelect** 扩展`antdv`的`TreeSelect`组件,支持远程数据源,用法类似`ApiSelect` -- **BasicTable** - - 新增`ApiTreeSelect`编辑组件 - - 新增`headerTop`插槽 -- **其它** 可以为不同的用户指定不同的后台首页: - - 在`getUserInfo`接口返回的用户信息中增加`homePath`字段(可选)即可为当前用户定制首页路径 - -### 🐛 Bug Fixes - -- **BasicTable** - - 修复滚动条样式问题(移除了滚动样式补丁) - - 修复树形表格的带有展开图标的单元格的内容对齐问题 - - 修复操作列的按钮在 disabled 状态下的颜色显示 - - 修复可编辑单元格的值不能直接通过修改`dataSource`来更新显示的问题 - - 修复使用`ApiSelect`编辑组件时的数据回显问题 - - 修复在部分场景下编辑组件可能会报`onXXX`类型错误的问题 -- **TableAction** - - 仅在 `action.tooltip`存在的情况下 才创建 Tooltip 组件 - - 修复组件内的圆形按钮内容没有居中的问题 -- **AppSearch** 修复可能会搜索隐藏菜单的问题 -- **BasicUpload** 修复处理非`array`值时报错的问题 -- **Form** 修复`FormItem`的`suffix`插槽样式问题 -- **Menu** - - 修复左侧混合菜单的悬停触发逻辑 - - 修复顶栏菜单在显示包含需要隐藏的菜单项目时出错的问题 - - 修复悬停触发模式下左侧混合菜单会在没有子菜单且被激活时直接跳转路由 -- **Breadcrumb** 修复带有重定向的菜单点击无法跳转的问题 -- **Markdown** 修复初始化异常以及不能正确地动态设置 value 的问题 -- **Modal** 确保 props 正确被传递 -- **MultipleTab** 修复可能会意外创建登录路由标签的问题 -- **BasicTree** 修复搜索功能可能导致`checkedKeys`丢失的问题 -- **CodeEditor** 修复 value 不支持 v-model 用法的问题 -- **CountdownInput** 修复不支持`input`插槽的问题 -- **ApiSelect** 修复`options-change`事件参数不是`select`所使用的标准`options`数据的问题 -- **其它** - - 修复菜单默认折叠的配置不起作用的问题 - - 修复`safari`浏览器报错导致网站打不开 - - 修复在 window 上,拉取代码后 eslint 因 endOfLine 而报错问题 - - 修复因动态路由而产生的 `Vue Router warn` - -### 🎫 Chores - -- 添加 test 环境测试命令 - -## 2.6.0(2021-07-04) - -### ✨ Features - -- **Axios** 新增`withToken`配置,用于控制请求是否携带 token -- **BasicUpload** - - 新增在预览 `Modal` 中删除文件时触发`preview-delete` 事件 - - `value` 支持 `v-model` 用法 -- **Route 配置** - - 增加`ignoreRoute`用于在`ROUTE_MAPPING`或`BACK`权限模式下仅生成菜单 - - 增加`hidePathForChildren`配置,标识为子项目生成菜单时忽略本级`path` -- **TableAction** 新增`tooltip`配置,可以为按钮增加 tooltip 提示 -- **CropperAvatar** - - 新增`value`用于设置当前头像 - - 新增`onChange`用于接受头像剪裁并上传成功事件 - - 新增`btnText`、`btnProps` 用于自定义上传按钮文案和属性 - - 为剪裁`Modal`内的操作按钮添加工具提示 -- **Modal** 为右上角的操作按钮添加工具提示 - -### 🐛 Bug Fixes - -- **Modal** - - 修复点击遮罩不能关闭的问题 - - 修复 `setModalProps` 不支持设置 `defaultFullscreen` 的问题 -- **Table** - - 修复 `editComponentProps` 不支持 `onChange`的问题 - - 修复启用`clickToRowSelect`时,点击行不会触发`selection-change`事件的问题 - - 修复全局配置`fetchSetting`可能会被局部配置意外修改的问题 - - 修复`handleSearchInfoFn`的参数包含多余空白键的问题 - - 修复为 table 提供 rowSelection.onChange 时,无法手动变更 table 的选中项的问题 - - 修复滚动条在无需显示的时候仍然持续显示的问题 -- **Icon** 修复 SvgIcon 缺少部分样式的问题 -- **Menu** - - 修复路由映射模式下,单级菜单刷新不会激活 - - 修复侧边菜单底部的折叠自定义失效的问题 -- **Form** 修复`submitButtonOptions`和`resetButtonOptions`的类型定义 -- **PopConfirmButton** 移除`Button`上多余的`title` -- **Axios** 修复非`GET`请求时,无法同时提交`params`和`data`数据的问题 -- **其它** - - 修复锁屏功能可以通过刷新页面或复制 URL 打开新的浏览器标签来跳过锁定状态的问题 - - 修复多个窗口同时打开页面时,`Token` 不会同步的问题 - - 修复`ROLE`权限模式下`hasPermission`不工作的问题 -- **Table** 修复`handleSearchInfoFn`的参数包含多余空白键的问题 -- **Tailwindcss** 移除控制台警告 - -## 2.5.2(2021-06-27) - -### ⚡ Performance Improvements - -- **Icon** 移除 Icon 组件全局注册,防止特定情况下热更新问题 - -### ✨ Features - -- **Menu** 新增 `permissionMode=PermissionModeEnum.ROUTE_MAPPING`模式 - - 项目默认改为该模式,删除原有菜单文件 - - 如果之前已经写好了菜单,可以更改为`PermissionModeEnum.ROLE`模式即可 - -### 🐛 Bug Fixes - -- **Drawer** 修复`visible`状态异常 - -## 2.5.1(2021-06-26) - -### ⚡ Performance Improvements - -- 升级`vue`与`ant-design-vue`版本,解决兼容问题 -- **Tree** 性能优化 - -### 🐛 Bug Fixes - -- **Table** 修复分页抖动问题 -- **Upload** 确保携带自定义参数 -- **Dropdown** 修复 popConfirm 的图标显示问题 -- **Table** 修复树形表格的编辑事件不正常的问题 -- **Table** 修复当表格数据为空时,getDataSource 返回的值不是表格所使用的数据源的问题 - -## 2.5.0(2021-06-20) - -## (破坏性更新) Breaking changes - -- 将项目`windicss`改为`tailwindcss`,解决内存溢出问题 - - 目前项目不兼容地方有 - - `!xl:m-4` 之类的写法需要改为`xl:!m-4`,注意只有`!`这个不兼容,没用到则不用改 - - `windicss`自身新增的特性需要调整,比如`Attribute`模式不兼容 - -### ✨ Refactor - -- 移除`useExpose`,使用组件自身提供的`expose`代替 - -### ⚡ Performance Improvements - -- **Locale** 合并多语言文件,减少文件数量 -- **Utils** Mitt 默认导出由 `Class` 改为 `Function` -- **Axios** `isTransformRequestResult`更名为`isTransformResponse` - -### ✨ Features - -- **CropperImage** `Cropper` 头像裁剪新增圆形裁剪功能 -- **CropperAvatar** 新增头像上传组件 -- **Drawer** `useDrawer`新增`closeDrawer`函数 -- **Preview** 新增`createImgPreview`图片预览函数 -- **Setup** 新增引导页示例 -- **Tests** 添加 jest 测试套件,暂不支持 Vue 组件单测 -- **Axios** 新增`authenticationScheme`配置,用于指定认证方案 -- **Setting** 新增 `sessionTimeoutProcessing` 项目配置项,用于配置会话超时如何处理 - -### 🐛 Bug Fixes - -- **Modal** 修复全屏高度计算错误 -- **Modal** 修复关闭事件触发多次问题 -- **PageWrapper** 修复高度计算问题 -- **FlowChart** 修复拖放菜单丢失 -- 修复后台模式下,Iframe 路由错误 -- **PageWrapper** 修复 footer 与全局页脚同时开启时的高度计算问题 -- **Menu** 修复菜单折叠动画抖动问题 -- **Store**修复 pinia 版本升级之后类型错误 - -## 2.4.2(2021-06-10) - -### ✨ Refactor - -- `CountTo`组件重构 - -### ✨ Features - -- `radioButtonGroup` 支持`boolean`值 -- `useModalInner` 新增 `redoModalHeight`用于在 Modal 内部重设`Modal`高度 -- `useECharts` 新增`getInstance`用于获取`echart`实例 -- `TableAction` 新增 `stopButtonPropagation` 阻止操作按钮点击事件冒泡 -- `BasicTable` 在行编辑模式下,可以获取或设置其它处于列的编辑组件的值 -- `ApiSelect` 组件在`params`改变后会自动重新`fetch`数据 -- `TableImg` 组件改进 -- `BasicTable` 新增 `columns-change` 事件用于监听用户改变列排序、展示、固定状态 -- `Tinymce`支持动态修改 readonly -- `BasicTable`新增`updateTableDataRecord`方法用于更新指定行数据 -- `useModal`新增`closeModal`方法用于关闭`Modal` - -### 🐛 Bug Fixes - -- 修复`redoModalHeight`不能减小高度的问题 -- 修复 `BasicForm`设置 schemas 数据不生效的问题 -- 修复多标签可能导致`KeepAlive`失效的问题 -- 修复默认的`axios`拦截器不能处理自定义 code 的问题 -- 修复锁屏弹窗的高度问题 -- 修复`BaiscTable`的`列展示`复选框的半选状态显示不正确的问题 -- 修复`BasicUpload`组件的预览列表某些情况下不能显示的问题 -- 修复`RadioButtonGroup`的`options`设置`disabled`不生效的问题 -- 修复`Tinymce`组件在只读模式下上传图片的按钮仍然可用的问题 -- 修复`BasicForm`特定情况下的卡顿问题 -- 修复"目录"路由不起作用的问题 - -## 2.4.1(2021-06-01) - -### ✨ Features - -- 可编辑表格新增`DatePicker`和`TimePicker`组件 -- `Tree` 组件新增`defaultExpandLevel`配置 - -### ⚡ Performance Improvements - -- 菜单搜索默认聚焦 - -### 🐛 Bug Fixes - -- 修复`CodeEditor`已知问题 -- 修复`i18n`控制台警告问题 -- 修复可编辑表格`align`配置不生效问题 -- 确保`axios`只对`Object`参数进行处理 -- 修复`Tree`组件 `defaultExpandAll` 配置失效 -- 修复`TableAction` 分割线丢失问题 -- 修复表格已知问题 -- 修复首次加载或改变语言导致重载时,不会设置 HTML 的 lang 属性 - -## 2.4.0 (2021-05-25) - -### ✨ Features - -- 新增图形编辑器示例 -- 新增代码编辑器(包含 Json 编辑器) -- 新增 `JsonPreview`Json 数据查看组件 -- 表格的数据列(column)和操作列(actionColumn)的字段可以根据权限和业务来控制是否显示 -- 新增权限控制表格示例(AuthColumn.vue) -- 新增用户登录过期示例 - -### ⚡ Performance Improvements - -- 合并部分语言文件,减少文件数量 - -### 🐛 Bug Fixes - -- 修复黑暗主题刷新闪烁的白屏 -- 修复标签页关闭其他功能失效问题 -- 修复表单已知问题 -- 修复自动锁屏失效 - -## 2.3.0 (2021-04-10) - -## (破坏性更新) Breaking changes - -- 使用 `pinia` 替换 `vuex`,`vuex-module-decorators`。 - - - 影响,之前如果有自己使用 vuex-module-decorators,需要改造为 pinia。 - - 原因: - - pinia 于 vuex5api 基本类似,且简单易懂。 - - 后续切换 vuex5 成本非常低,也可以当作第三方状态管理库使用 - -- 移除 `useKeyPress` 使用`vueuse`-`onKeyStroke`代替 -- 移除 `useDebounceFn` 使用`vueuse`-`useDebounceFn`代替 -- 移除 `useThrottle` 使用`vueuse`-`useThrottleFn`代替 - -### ✨ Features - -- 标签页支持持久化保存 - -### ✨ Refactor - -- 移除 `useElResize` - -### 🐛 Bug Fixes - -- 登录页样式修复 -- 修复菜单已知问题 -- 修复主题样式切换问题 - -## 2.2.0 (2021-04-06) - -### ✨ Features - -- 新增`headerTitle` slot -- 新增打印示例 -- 新增关于界面 - -### ✨ Refactor - -- 移除 useFullScreen 函数 -- tinymce 由 Cdn 改为 npm(打包体积偏大) -- Dashboard 重构 -- 移除 ApexCharts 及示例 - -### 🐛 Bug Fixes - -- 确保面包屑正确的显示图标 -- 修复 tinymce 上传按钮全屏模式下消失问题 -- 确保 title 在重新登录后正常改变 -- 确保后台模式登录正常 -- 修复 TableAction 点击事件问题 - -## 2.1.1 (2021-03-26) - -### ✨ Features - -- 路由新增 hideChildrenInMenu 配置。用于隐藏子菜单 -- 树形表格内置展开/折叠全部函数 - -### ✨ Refactor - -- 重构路由多层模式,解决嵌套 keepalive 执行多次问题 - -### 🐛 Bug Fixes - -- 确保 CountDownInput 组件重置清空值 -- 修复分割模式下在小屏幕中显示问题 -- 修复表格高度计算问题 -- 修复后台路由获取不到组件问题 -- 修复 Modal 组件 loadingTip 配置不生效 -- 修复后台权限指令不生效 -- 确保 progress 进度条正确关闭 -- 修复表格勾选列配置失效问题 -- 确保一级菜单可以被隐藏 -- 确保表单隐藏字段校验正常 - -### 🎫 Chores - -- 移除 ls-lint - -## 2.1.0 (2021-03-15) - -### ✨ Features - -- 图标选择器新增 svg 模式 -- 新增时间组件 -- 新增高德/百度/谷歌地图示例 - -### ✨ Refactor - -- 重构项目以解决循环依赖项导致的热更新问题 -- 移除 vueHelper/useClickoutside,使用@vueuse/core 代替 - -### 🐛 Bug Fixes - -- 确保 `table action` 的值被正确更新 -- 修复页面切换的动画无法关闭 -- 修复`PageWrapper`title 不显示 -- 修复表格已知问题 -- 修复 BasicTree 组件不能自定义 title 问题 -- 修复主题切换后按钮样式问题 - -## 2.0.3 (2021-03-07) - -### ✨ Features - -- `BasicTree` 新增`clickRowToExpand`,用于单击树节点展开 -- 新增 SvgIcon 插件及示例 -- 账号管理界面增加左侧部门树· - -### ⚡ Performance Improvements - -- 表格关闭分页时不再携带分页参数 -- 登录页监听回车事件进行登录 -- 当表格设置自适应大小时,根据屏幕来铺满了高度. -- Tree 滚动条优化 -- 优化本地开发加载速度 - -### 🐛 Bug Fixes - -- 修复`Description`已知问题 -- 修复`BasicForm`已知问题 -- 修复`BasicTree`下 ActionItem 的 show 属性逻辑问题 -- 修复树组件 demo 示例样式错误 -- 修复账号管理新增未清空旧数据 -- form 组件应允许 setFieldsValue 方法值为 null 或者 undefined -- 确保单级面包屑正确跳转 -- 确保 Form 组件不校验隐藏的表单项 - -## 2.0.2 (2021-03-04) - -### ✨ Refactor - -- 重构多语言模块,支持懒加载及远程加载 - -### ✨ Features - -- axios 支持 form-data 格式请求 -- 新增图标选择器组件(支持本地和在线方式) -- 新增 WebSocket 示例和服务脚本 -- Tree 组件新增 `renderIcon` 属性用于控制层级图标显示 -- Tree->actionItem 新增 show 属性,用于动态控制按钮显示 -- Tree 新增工具栏/title/搜索功能 -- 新增部门管理/修改密码/账号管理/角色管理/菜单管理示例界面 - -### ⚡ Performance Improvements - -- 登录界面动画优化 -- 修复 github 仓库体积过大问题. -- 默认隐藏表格全屏按钮 -- `crypto-es`改为`crypto-js`,减小打包体积 -- `types`目录移动到根目录,兼容其他目录全局类型 - -### 🐛 Bug Fixes - -- 修复验证码组件警告问题 -- 修复表格不能正确的获取选中行 -- 修复全屏状态下 modal 高度计算错误 -- 修复部分表格样式问题 -- 修复树形表格 `indentSize`设置失效 - -## 2.0.1 (2021-02-21) - -### ✨ Refactor - -- 登录页重构,新增注册页面/重置密码页面/手机登录/二维码登录 - -### ✨ Features - -- 新增 `settingButtonPosition`配置项,用于配置`设置`按钮位置 -- `modal`可以通过双击头部切换全屏 -- 新增`CountDownInput`组件 - -### ⚡ Performance Improvements - -- 优化可编辑居中样式及下拉框宽度过短 -- 表格新增编辑时`edit-change`事件监听 - -### 🐛 Bug Fixes - -- 修复图片预览样式错误 -- 修复图标样式问题 -- 修复可编辑表格下拉回显问题 - -## 2.0.0 (2021-02-18) - -## (破坏性更新) Breaking changes - -- `echarts` 升级到 5.0,并且进行按需引入(只需使用 `useECharts` 即可). - -### ✨ Refactor - -- 移除`global.less`,`mixin.less`,`design/helper`,由`windicss`代替,有用到的需要修改对应的样式 - -### ✨ Features - -- useModal 新增返回值函数 `redoModalHeight`,用于在 modal 内为动态内容时刷新 modal 高度 -- 升级 husky 到 5.0 -- 新增 `brotli`|`gzip`压缩及相关测试命令 -- 重新引入 `windicss` (与`tailwind`一样).在速度上更快 - -### ⚡ Performance Improvements - -- 调整获取用户信息接口返回值为数组格式 -- 将 error-log 列表固定为系统路由 - -### 🐛 Bug Fixes - -- 修复 Upload 组件 maxNumber 失效问题 -- 修复打包 sourcemap 报错 -- 修复代码 debugger 位置显示错误 -- 修复 mock 插件 post 请求错误问题 -- 修复部分主题颜色值错误 -- 修复表格在可编辑行状态回车确认 - -### 🎫 Chores - -- 文档更新 -- 升级 ant-design-vue 到 `2.0.0` -- 升级 vite 到 `2.0.0` - -## 2.0.0-rc.18 (2021-02-05) - -### ✨ Features - -- `ApiSelect`新增 `numberToString`属性,用于将 value 为`number`的值全部转化为`string` -- 新增主题色切换 -- 打包图片压缩 - -### ⚡ Performance Improvements - -当不使用 mock 时,将 `mock.js` 移出打包文件 - -### 🐛 Bug Fixes - -- 修复 modal 高度计算错误 -- 修复菜单折叠状态下点击标签页弹出菜单 -- 修复 form 表单初始化值为 0 问题 -- 修复表格换行问题 -- 修复菜单外链不跳转 -- 修复菜单顶部显示问题 -- 修复`modifyVars`配置失效问题 - -## 2.0.0-rc.17 (2021-01-18) - -### ✨ Refactor - -- 新增 `SimpleMenu`组件替代左侧菜单组件(顶部菜单没有替换,功能尽量做到简单不卡)。解决菜单卡顿问题。 -- `ant-design-vue`组件不再全局注册。以便于更好配合 css 按需引入。如果需要全局注册,需要自己加 - -### ✨ Features - -- `css` 按需引入 - -### 🐛 Bug Fixes - -- 修复 `TableAction`图标问题 -- 修复菜单折叠按钮丢失问题 -- 修复菜单相关问题 -- 修复 moment 多语言问题 - -## 2.0.0-rc.16 (2021-01-12) - -### ✨ Refactor - -- 独立组件配置到 `/@/settings/componentsSetting` -- `colorSetting`和`designSetting`现在合并为`designSetting` -- `ant-design-vue`组件注册移动到`components/registerComponent` -- 移除 `setup` 文件夹 -- 升级到`vite2` -- 图片预览改为`Image`组件实现,暂时移除函数式使用方式 - -### ✨ Features - -- 新增`mixSideTrigger`配置。用于配置左侧混合模式菜单打开方式。可选`hover`,默认`click` -- 新增`mixSideFixed`配置。用于固定左侧混合模式菜单 -- modal 组件新增`height`和`min-height`属性 -- 新增`PageWrapper`组件。并应用于示例页面 -- 新增标签页折叠功能 -- 兼容旧版浏览器 -- tinymce 新增图片上传 - -### 🐛 Bug Fixes - -- 修复表格列配置已知问题 -- 恢复 table 的`isTreeTable`属性 -- 修复表格内存溢出问题 -- 修复`layout` 收缩展开功能在分割模式下失效 -- 修复 modal 高度计算错误 -- 修复文件上传错误 -- 修复表格已知问题 - -### 🎫 Chores - -- 文档更新 - -## 2.0.0-rc.15 (2020-12-31) - -### ✨ 表格破坏性更新 - -- 重构了可编辑单元格及可编辑行。具体看示例。写法已改变。针对可编辑表格。 - -- 表格编辑支持表单校验 - -- 在表格列配置增加了以下配置 - -```bash -{ - - # 默认是否显示列。不显示的可以在列配置打开 - defaultHidden?: boolean; - # 列头右侧帮助文本 - helpMessage?: string | string[]; - # 自定义格式化 单元格内容。 支持时间/枚举自动转化 - format?: CellFormat; - - # Editable - # 是否是可编辑单元格 - edit?: boolean; - # 是否是可编辑行 - editRow?: boolean; - # 编辑状态。 - editable?: boolean; - # 编辑组件 - editComponent?: ComponentType; - # 所对应组件的参数 - editComponentProps?: Recordable; - # 校验 - editRule?: boolean | ((text: string, record: Recordable) => Promise); - # 值枚举转化 - editValueMap?: (value: any) => string; - # 触发编辑正航 - record.onEditRow?: () => void; -} - -``` - -### ✨ 表格重构 - -- 新增`clickToRowSelect`属性。用于控制点击行是否选中勾选框 -- 监听行点击事件 -- 表格列配置按钮增加 列拖拽,列固定功能。 -- 表格列配置新增`defaultHidden` 属性。用于默认隐藏。可在表格列配置勾选显示 -- 更强大的列配置 -- useTable:支持动态改变参数。可以传入`Ref`类型与`Computed`类型进行动态更改 -- useTable:新增返回 `getForm`函数。可以用于操作表格内的表单 -- 修复表格已知的问题 - -### ✨ Features - -- 新增 `v-ripple`水波纹指令 -- 新增左侧菜单混合模式 -- 新增 markdown 嵌入表单内示例 -- 新增主框架外页面示例 -- `route.meta` 新增`currentActiveMenu`,`hideTab`,`hideMenu`参数 用于控制详情页面包屑级菜单显示隐藏。 -- 新增面包屑导航示例 -- form: 新增`suffix`属性,用于配置后缀内容 -- form: 新增远程下拉`ApiSelect`及示例 -- form: 新增`autoFocusFirstItem`配置。用于配置是否聚焦表单第一个输入框 -- useForm: 支持动态改变参数。可以传入`Ref`类型与`Computed`类型进行动态更改 - -### ⚡ Performance Improvements - -- 优化`modal`与`drawer`滚动条组件 -- table: 移除 `isTreeTable`属性 -- 全局引入`less`文件。无需手动在组件再次引入 - -### 🎫 Chores - -- 升级`ant-design-vue`到`2.0.0-rc.7` -- 升级`vue`到`3.0.5` - -### 🐛 Bug Fixes - -- 修复混合模式下滚动条丢失问题 -- 修复环境变量配置失效以及 history 模式下 logo 地址问题 -- 修复图表库切换页面导致宽高计算错误 -- 修复多语言配置 `Locale.show`导致配置不生效 -- 修复路由类型错误 -- 修复菜单分割时权限失效问题 -- 关闭多标签页时 iframe 提前加载 -- 修复`modal`与`drawer`已知问题 -- 修复左侧菜单混合模式适配问题 - -## 2.0.0-rc.14 (2020-12-15) - -### ✨ Features - -- 移除左侧菜单搜索,新增顶部菜单搜索功能 -- layout 移动端适配。业务页面未适配 -- axios 加入 joinTime 配置。控制响应是否加入时间戳 - -### ⚡ Performance Improvements - -- 异步引入组件 -- 优化整体结构 -- 替换菜单默认滚动条为滚动组件 -- 菜单性能优化 - -### 🎫 Chores - -- 返回顶部样式调整,避免遮住其他元素 -- 升级`ant-design-vue`到`2.0.0-rc.5` -- 刷新按钮布局调整 -- `route.meta` 移除 `externalLink` 属性 - -### ✨ Refactor - -- `openModal`与`openDrawer`第三个参数`openOnSet`默认设置为 true - -### 🐛 Bug Fixes - -- 修复多级路由缓存导致组件渲染多次的问题 -- 修复地图图表切换后消失问题 -- 修复登录成功 notify 消失问题 -- 修改 `VirtualScroll`和`ImportExcel`组件名为`VScroll`与`ImpExcel`,暂时解决含有关键字的组件在 vue 模版内使用内存溢出 -- 修复 axios 大小写问题 -- 修复按钮样式问题 -- 修复菜单分割模式问题 -- 修复 `Modal`与`Drawer`组件在使用 emits 数据传递失效问题 -- 修复菜单已知问题 -- 修复上传组件 api 失效问题 -- 修复菜单权限过滤失效问题 - -## 2.0.0-rc.13 (2020-12-10) - -## (破坏性更新) Breaking changes - -- 路由重构, 不再支持以前的格式。改为支持 vue-router 最初的默认结构,具体格式可以参考示例更改。实现多级路由缓存,不再将路由转化为 2 级。 -- 重构面包屑,使用 antd 的面包屑组件。之前的组件已删除 - -### ✨ Features - -- 还原 antdv 默认 loading,重构 `Loading` 组件,增加`useLoading`和`v-loading`指令。并增加示例 -- i18n 支持 vscode `i18n-ally`插件 -- 新增多级路由缓存示例 -- 打包代码拆分(试验) -- 提取上传地址到全局变量,打包可以动态配置 - -### ✨ Refactor - -- tree 组件 ref 函数调用删除 `$` -- 锁屏界面重构美化,删除不必要的背景图片 - -### ⚡ Performance Improvements - -- 页面切换 loading 逻辑修改。对于已经加载过的页面不管有没有关闭,再次打开不会在显示 loading(已经打开过的页面再次打开速度比较快,可以不需要 loading,同理顶部进度条逻辑也一样),刷新后恢复。 - -### 🎫 Chores - -- 首屏 loading 修改 -- 升级`vue`到`3.0.4` -- 升级`ant-design-vue`到`2.0.0-rc.3` -- 重新引入`vueuse` -- 移除 route meta 内的`afterCloseLoading`属性 -- 文档更新 - -### 🐛 Bug Fixes - -- 修复表格 i18n 错误 -- 修复菜单图标大小不一致 -- 修复顶部菜单宽度计算问题 -- 修复表格 tabSetting 问题 -- 修复文件上传删除失效 -- 修复表格行编辑保存错误问题 - -## 2.0.0-rc.12 (2020-11-30) - -## (破坏性更新) Breaking changes - -- ClickOutSide 组件引入方式由 `import ClickOutSide from '/@/components/ClickOutSide/index.vue'`变更为`import { ClickOutSide } from '/@/components/ClickOutSide'` -- Button 组件引入方式由 `import Button from '/@/components/Button/index.vue'`变更为`import { Button } from '/@/components/Button'` -- StrengthMeter 组件引入方式由 `import StrengthMeter from '/@/components/StrengthMeter'`变更为`import { StrengthMeter } from '/@/components/StrengthMeter'` -- 除示例外加入全局国际化功能,支持中文与英文 - -### ✨ Refactor - -- 重构整体 layout。更改代码实现方式。代码更精简 -- 配置项重构 -- 移除 messageSetting 配置 -- BasicTitle 组件 `showSpan`=> `span` - -### ✨ Features - -- 缓存可以配置是否加密,默认生产环境开启 Aes 加密 -- 新增标签页拖拽排序 -- 新增 LayoutFooter.默认显示,可以在配置内关闭 - -### ⚡ Performance Improvements - -- 优化`Modal`组件全屏动画不流畅问题 - -### 🐛 Bug Fixes - -- tree: 修复文本超出挡住操作按钮问题 -- useRedo: 修复通过 useRedo 刷新页面参数丢失问题 -- form: 修复表单校验先设置在校验及控制台错误信息问题 -- `modal`&`drawer` 修复组件传递数组参数问题 -- form: 修复`updateSchema`赋值含有`[]`时不生效 -- table: 修复表格 `TableAction` 图标显示问题 -- table: 修复表格列设置通过`setColumns`设置不显示 - -### 🎫 Chores - -- 更新 antdv 到`2.0.0-rc.2` -- 更新 vue 到`3.0.3` -- 更新 vite 到`1.0.0.rc13` -- 暂时删除 `@vueuse/core`.等稳定后在集成。目前不太稳定。 - -## 2.0.0-rc.11 (2020-11-18) - -### ✨ Features - -- 新增 base64 文件流下载 -- 优化上传组件及示例 -- 新增可编辑行示例 -- 新增个人页 -- 新增表单页 -- 新增详情页 -- 将上传组件默认集成到 form - -### 🎫 Chores - -- 更新 antdv 到`2.0.0-rc.1`(暂时还原到 beta15,rc1 菜单卡顿太严重.) -- 添加部分注释 - -### ✨ Refactor - -- 移除`useModal`与`useDrawer`的`receiveDrawerDataRef`和`transferDrawerData`属性 -- `useModal`与`useDrawer`对应的`openModal`与`openDrawer`扩展第三个参数。用于再次打开触发回调 - -### 🐛 Bug Fixes - -- 修复表单 inputNumber 校验错误 -- 修复表单默认值设置错误 -- 修复菜单折叠按钮隐藏时占位问题 -- 修复表单 baseColProps 不生效 - -## 2.0.0-rc.10 (2020-11-13) - -### ✨ Refactor - -- 重构 hook,引入 `@vueuse`,删除其中已有的`hook`,优化现有的 hook -- `useEvent` 更名->`useEventListener` -- 表单`ComponentType`删除 `SelectOptGroup`,`SelectOption`,`Transfer`,`Radio`,四个类型。修改`RadioButtonGroup`组件 - -### ✨ Features - -- 表单项的`componentsProps`支持函数类型 -- 菜单新增 tag 显示,支持 4 中类型颜色及 dot 圆点显示 -- 新增菜单及顶栏颜色选择配色 -- 增加示例结果页 -- 新增文件下载示例 - -### ⚡ Wip - -- 上传组件(未完成,测试中...) - -### ⚡ Performance Improvements - -- 优化 settingDrawer 代码 -- 优化多标签页切换速度 -- 增加表单自定义及动态能力 - -### 🐛 Bug Fixes - -- 修复多个富文本编辑器只显示一个 -- 修复登录过期后重新登录未跳转原来页面的 -- 修复 window 系统动态引入错误 -- 修复页面类型错误 -- 修复表单 switch 和 checkBox 单独使用报错 - -## 2.0.0-rc.9 (2020-11-9) - -### ✨ Features - -- 菜单 trigger 可以选择位置 -- 增加富文本嵌入表单的示例 -- 表单组件 schema 增加 `required`属性。简化配置 -- openModal 和 openDrawer 第二个参数可以代替`transferModalData`传参到内部 -- 带参路由可以被缓存 - -### ✨ Refactor - -- 重构由后台生成菜单的逻辑 -- Route Module 结构改造 - -### ⚡ Performance Improvements - -- 菜单性能继续优化,更流畅 -- 优化懒加载组件及示例 -- layout 样式微调 - -### 🎫 Chores - -- 删除菜单背景图 -- 更新`ant-design-vue`版本为`beta15` -- 更新`vite`版本为`rc.9` -- 异常页调整 -- `BasicTitle` 色块默认不显示 - -### 🐛 Bug Fixes - -- 修复升级之后 table 类型问题 -- 修复分割菜单且左侧菜单没有数据时候,继续展示上一次子菜单的问题 -- 修复`useMessage`类型问题 -- 修复表单项设置`disabled`不生效问题 -- 修复`useECharts`在`resize`时不能自适应,报错 -- 修复`useWatermark`在清空后`resize`未删除 -- 修复表单校验问题 -- 修复多级表头配置不生效问题 - -## 2.0.0-rc.8 (2020-11-2) - -### ✨ Features - -- 全局 loading 添加文本 -- 右键菜单支持多级 - -### 🎫 Chores - -- 登录缓存从 sessionStorage 改为 LocalStorage - -### ⚡ Performance Improvements - -- 更新`ant-design-vue`到`beta.12` -- Layout 界面布局样式调整 -- 优化懒加载组件 -- 优化表格渲染性能 -- 表单折叠搜索添图标添加动画 -- routeModule 可以忽略 layout 配置不写。方便配置一级菜单 - -### 🐛 Bug Fixes - -- 修复表格类型错误 -- 修复 mock 分页工具错误 -- 修复表格开启搜索表单折叠问题 -- 修复表格 size 为 samll 时候,fixed 列样式问题 -- 修复多标签页关闭报错问题 -- 修复 message 类型错误 - -## 2.0.0-rc.7 (2020-10-31) - -### ✨ Features - -- 表单组件现在支持直接传入 model 直接进行 set 操作,参考**组件->弹窗扩展->打开弹窗并传递数据** - -- modal 的 useModalInner 现在支持传入回调函数,用于接收外部`transferModalData`传进来的值, - - - 用于处理打开弹窗对表单等组件的设置值。参考**组件->弹窗扩展->打开弹窗并传递数据** - - `receiveModalDataRef`这个值暂时保留。尽量少用。后续可能会删除。 - -- drawer 的 useDrawerInner 现在支持传入回调函数,用于接收外部`transferModalData`传进来的值, - - 用于处理打开抽屉对表单等组件的设置值。参考**组件->抽屉扩展->打开抽屉并传递数据** - - `receiveModalDataRef`这个值暂时保留。尽量少用。后续可能会删除。 - -### ✨ Refactor - -- 表单代码优化重构 - -### ⚡ Performance Improvements - -- Modal slot 可以覆盖 -- 优化表格嵌入高度计算问题 - -### 🎫 Chores - -- 添加部分注释 -- pwa 图标补充 -- types 类型调整 -- 升级`ant-design-vue`到`beta.11`,并修改带来的已知问题,部分问题发现后在解决 - -### 🐛 Bug Fixes - -- 修复本地代理 post 接口到 https 地址超时错误 -- 修复 modal 在不显示 footer 的时候全屏高度计算问题 -- 修复表单重置未删除校验信息错误 -- 修复顶部菜单分割模式样式问题 -- 修复表格展开图标动画失效 - -## 2.0.0-rc.6 (2020-10-28) - -### ✨ Features - -- 新增`pwa`功能,可在`.env.production`开启 -- Button 组件扩展 `preIcon`和`postIcon`属性用于在文本前后添加图标 -- 恢复面包屑显示图标功能 - -### 🎫 Chores - -- 升级 vite 版本为`v1.0.0.rc8` -- vite.config.ts 内部 plugins 抽取 -- build 目录结构调整 -- 依赖更新 -- 文档更新 -- 修改默认路由切换动画 - -### ⚡ Performance Improvements - -- `setTitle`逻辑调整 -- 将系统用到的 sessionStorage 及 LocalStorage 缓存设置默认 `7` 天过期 - -### ✨ Refactor - -- 独立出`vite-plugin-html`,并修改相关插入 html 的逻辑 - -### 🐛 Bug Fixes - -- 修复热更新时多次注册组件警告问题 -- 修复登录后出现登录标签页 -- 修复路由切换参数消失问题 -- 修复 useMessage 图标样式问题 - -## 2.0.0-rc.5 (2020-10-26) - -### ✨ Features - -- 更新组件文档 -- 面包屑支持显示图标 -- 新增 tinymce 富文本组件 -- 表单新增 submitOnReset 控制是否在重置时重新发起请求 -- 表格新增`sortFn`支持自定义排序 -- 新增动画组件及示例 -- 新增懒加载/延时加载组件及示例 - -### ✨ Refactor - -- Drawer 组件的 detailType 修改为 isDetail - -### 🎫 Chores - -- 删除代码内的可选链语法 -- 表单重置逻辑修改 -- 关闭多标签页 tabs 动画 -- 升级 vite 版本为`v1.0.0.rc6` -- 删除中文路径警告。rc6 已修复 - -### 🐛 Bug Fixes - -- 修复抽屉组件自动高度及显示 footer 显示问题 -- 修复表单查询后重置回默认值 -- 修复菜单没有子节点时显示折叠的问题 -- 修复面包屑显示样式问题 -- 修复 modal 在 destroyOnClose=true 时多次打开拖拽失效 -- 修复表格出现多个 action 列 - -# 2.0.0-rc.4 (2020-10-21) - -### ✨ Features - -- 表格新增配置工具栏 -- 新增消息通知模块 - -### 🎫 Chores - -- 表格默认不显示边框 -- 依赖更新 -- 更新 vue 为`v3.0.2` -- 界面样式微调 - -### ⚡ Performance Improvements - -- 优化首屏体积大小 -- 优化 TableAction 组件 -- 减小菜单折叠宽度 - -### 🐛 Bug Fixes - -- 修复一级菜单折叠显示菜单名问题 -- 修复预览命令不打包问题 -- 修复表格 actionColOptions 参数不生效问题 -- 修复表格刷新表单 loading 不生效问题 -- 修复带参界面刷新参数丢失问题 - -# 2.0.0-rc.3 (2020-10-19) - -### ✨ Features - -- 新增 excel 组件及 excel/xml/csv/html 导出示例 -- 新增 excel 导入示例 -- 新增全局错误处理 -- 新增 markdown 组件及示例 -- 新增折叠菜单时可显示菜单名 - -### Docs - -- 添加项目文档 - -### 🎫 Chores - -- 升级依赖 -- 其他细节优化 - -### 🐛 Bug Fixes - -- 修复顶部菜单自适应问题 -- 修复 window 系统打包报错问题 - -# 2.0.0-rc.2 (2020-10-17) - -### ✨ Features - -- 打包可以配置输出`gizp` -- 打包可以配置删除`console` -- 路由及菜单不需要在手动引入,改为自动引入 - -### 🎫 Chores - -- 升级 vue 到`3.0.1` -- 将`vite`版本改为每日构建版本 - -### 🐛 Bug Fixes - -- 修复菜单报错 -- 修复表格自适应高度问题 -- 修复`window系统`执行 script 报错问题 -- 修复折叠组件问题 - -### ⚡ Performance Improvements - -- 删除菜单最小化背景 -- 阻止页面刷新重新渲染菜单 -- 其他一些细节优化 - -# 2.0.0-rc.1 (2020-10-14) - -### ✨ Features - -- 添加带参 tab - -### ⚡ Performance Improvements - -- 菜单折叠优化 -- 页面细节优化 -- 打包后压缩 html -- 预览组件及右键菜单函数化重构 -- 预览组件操作列居中 - -### 🎫 Chores - -- 更新依赖 -- 添加`README.en-US.md` -- 添加`CHANGELOG.en-US.md` - -### 🐛 Bug Fixes - -- 修复页面刷新跳转到登录页 - -# 2.0.0-beta.7 (2020-10-12) - -### ⚡ Performance Improvements - -- 现有的选项卡切换不再显示动画和和进度条 - -### ✨ Features - -- 新增 `CountTo`组件及示例 demo -- 项目配置文件新增 `closeMessageOnSwitch`和`removeAllHttpPending` -- 生产环境独立出配置文件,用于动态配置项目配置 -- 新增 `useEcharts`和`useApexChart`来方便图表使用,同时新增相关 demo -- 新增工作台界面 -- 新增分析页界面 - -### 🎫 Chores - -- 更新依赖 - -### 🐛 Bug Fixes - -- 修复路由切换,tab 未激活问题 - -# 2.0.0-beta.56 (2020-10-11) - -### 💄 Styles - -- 菜单样式调整 - -### 🐛 Bug Fixes - -- 修复可编辑表格不能输入问题 -- 修复打包报错,生产环境不需要设计 proxy - -### ⚡ Performance Improvements - -- 优化多标签页切换速度 -- 首屏加载动画 - -# 2.0.0-beta.5 (2020-10-10) - -### ♻ Code Refactoring - -- 删除`tailwind css` - -### ⚡ Performance Improvements - -- 优化页面切换速度 - -### 🎫 Chores - -- 添加 `.vscode`和`.github`配置 -- 更改菜单图标 -- 新增`.env`配置文件 -- 更新 readme.md - -### 🐛 Bug Fixes - -- 修复`Tree`组件勾选事件失效问题 - -# 2.0.0-beta.4 (2020-10-08) - -### 🎫 Chores - -- 删除多余依赖 - -### 🐛 Bug Fixes - -- 修复页面刷新空白 -- 修复表格在生产环境样式失效 - -# 2.0.0-beta.3 (2020-10-07) - -### ✨ Features - -- 项目配置文件新增`openNProgress`用于控制是否开启顶部控制条 -- 添加`table`组件及 demo - -### 🎫 Chores - -- 添加` github workflows` - -# 2.0.0-beta.2 (2020-10-07) - -### ✨ Features - -- 新增图片预览组件 - -### 🔧 Continuous Integration - -- 增加 githubAction 脚本 - -# 2.0.0-beta.1(2020-09-30) - -### 🎫 Chores - -- 从 1.0 迁移部分代码 -- 添加 README.md 描述文件 - -### 🐛 Bug Fixes - -- 修复表单,动画及打包失败问题 diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/Dockerfile b/templates/abp-vnext-pro-nuget-simplify/vben28/Dockerfile deleted file mode 100644 index f00d2c365..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -FROM node:16-alpine as build-stage -WORKDIR /app -COPY . ./ -ENV NODE_OPTIONS=--max-old-space-size=16384 - -RUN npm install pnpm -g -RUN pnpm i -RUN npm run build - - -FROM nginx:1.17.3-alpine as production-stage -COPY --from=build-stage app/_nginx/nginx.conf /etc/nginx/nginx.conf -COPY --from=build-stage app/_nginx/env.js /etc/nginx/env.js -COPY --from=build-stage app/_nginx/default.conf /etc/nginx/conf.d/default.conf -COPY --from=build-stage app/dist/ /usr/share/nginx/html -EXPOSE 80 - -CMD ["nginx", "-g", "daemon off;"] diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/LICENSE b/templates/abp-vnext-pro-nuget-simplify/vben28/LICENSE deleted file mode 100644 index ba2fe3b14..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020-present, Vben - -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. diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/README.md b/templates/abp-vnext-pro-nuget-simplify/vben28/README.md deleted file mode 100644 index d686aa654..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/README.md +++ /dev/null @@ -1,169 +0,0 @@ -
VbenAdmin Logo

- -[![license](https://img.shields.io/github/license/anncwb/vue-vben-admin.svg)](LICENSE) - -

Vue vben admin

-
- -**English** | [中文](./README.zh-CN.md) - -## Introduction - -Vue Vben Admin is a free and open source middle and back-end template. Using the latest `vue3`, `vite2`, `TypeScript` and other mainstream technology development, the out-of-the-box middle and back-end front-end solutions can also be used for learning reference. - -## Feature - -- **State of The Art Development**:Use front-end front-end technology development such as Vue3/vite2 -- **TypeScript**: Application-level JavaScript language -- **Theming**: Configurable themes -- **International**:Built-in complete internationalization program -- **Mock Server** Built-in mock data scheme -- **Authority** Built-in complete dynamic routing permission generation scheme. -- **Component** Multiple commonly used components are encapsulated twice - -## Preview - -- [vue-vben-admin](https://vvbin.cn/next/) - Full version Chinese site -- [vue-vben-admin-gh-pages](https://anncwb.github.io/vue-vben-admin/) - Full version of the github site -- [vben-admin-thin-next](https://vvbin.cn/thin/next/) - Simplified Chinese site -- [vben-admin-thin-gh-pages](https://anncwb.github.io/vben-admin-thin-next/) -Simplified github site - -Test account: vben/123456 - -

- VbenAdmin Logo - VbenAdmin Logo - VbenAdmin Logo -

- -### Use Gitpod - -Open the project in Gitpod (free online dev environment for GitHub) and start coding immediately. - -[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/anncwb/vue-vben-admin) - -## Documentation - -[Document](https://vvbin.cn/doc-next/) - -## Preparation - -- [node](http://nodejs.org/) and [git](https://git-scm.com/) - Project development environment -- [Vite](https://vitejs.dev/) - Familiar with vite features -- [Vue3](https://v3.vuejs.org/) - Familiar with Vue basic syntax -- [TypeScript](https://www.typescriptlang.org/) - Familiar with the basic syntax of `TypeScript` -- [Es6+](http://es6.ruanyifeng.com/) - Familiar with es6 basic syntax -- [Vue-Router-Next](https://next.router.vuejs.org/) - Familiar with the basic use of vue-router -- [Ant-Design-Vue](https://2x.antdv.com/docs/vue/introduce-cn/) - ui basic use -- [Mock.js](https://github.com/nuysoft/Mock) - mockjs basic syntax - -## Install and use - -- Get the project code - -```bash -git clone https://github.com/anncwb/vue-vben-admin.git -``` - -- Installation dependencies - -```bash -cd vue-vben-admin - -pnpm install - -``` - -- run - -```bash -pnpm serve -``` - -- build - -```bash -pnpm build -``` - -## Change Log - -[CHANGELOG](./CHANGELOG.zh_CN.md) - -## Project - -- [vue-vben-admin](https://github.com/anncwb/vue-vben-admin) - full version -- [vue-vben-admin-thin-next](https://github.com/anncwb/vben-admin-thin-next) - Simplified version - -## How to contribute - -You are very welcome to join![Raise an issue](https://github.com/anncwb/vue-vben-admin/issues/new/choose) Or submit a Pull Request。 - -**Pull Request:** - -1. Fork code! -2. Create your own branch: `git checkout -b feat/xxxx` -3. Submit your changes: `git commit -am 'feat(function): add xxxxx'` -4. Push your branch: `git push origin feat/xxxx` -5. submit`pull request` - -## Git Contribution submission specification - -- reference [vue](https://github.com/vuejs/vue/blob/dev/.github/COMMIT_CONVENTION.md) specification ([Angular](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular)) - - - `feat` Add new features - - `fix` Fix the problem/BUG - - `style` The code style is related and does not affect the running result - - `perf` Optimization/performance improvement - - `refactor` Refactor - - `revert` Undo edit - - `test` Test related - - `docs` Documentation/notes - - `chore` Dependency update/scaffolding configuration modification etc. - - `workflow` Workflow improvements - - `ci` Continuous integration - - `types` Type definition file changes - - `wip` In development - -## Related warehouse - -If these plugins are helpful to you, you can give a star support - -- [vite-plugin-mock](https://github.com/anncwb/vite-plugin-mock) - Used for local and development environment data mock -- [vite-plugin-html](https://github.com/anncwb/vite-plugin-html) - Used for html template conversion and compression -- [vite-plugin-style-import](https://github.com/anncwb/vite-plugin-style-import) - Used for component library style introduction on demand -- [vite-plugin-theme](https://github.com/anncwb/vite-plugin-theme) - Used for online switching of theme colors and other color-related configurations -- [vite-plugin-imagemin](https://github.com/anncwb/vite-plugin-imagemin) - Used to pack compressed image resources -- [vite-plugin-compression](https://github.com/anncwb/vite-plugin-compression) - Used to pack input .gz|.brotil files -- [vite-plugin-svg-icons](https://github.com/anncwb/vite-plugin-svg-icons) - Used to quickly generate svg sprite - -## Browser support - -The `Chrome 80+` browser is recommended for local development - -Support modern browsers, not IE - -| [ Edge](http://godban.github.io/browsers-support-badges/)
IE | [ Edge](http://godban.github.io/browsers-support-badges/)
Edge | [Firefox](http://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome | [Safari](http://godban.github.io/browsers-support-badges/)
Safari | -| :-: | :-: | :-: | :-: | :-: | -| not support | last 2 versions | last 2 versions | last 2 versions | last 2 versions | - -## Maintainer - -[@Vben](https://github.com/anncwb) - -## Donate - -If you think this project is helpful to you, you can help the author buy a cup of coffee to show your support! - -![donate](https://anncwb.github.io/anncwb/images/sponsor.png) - -Paypal Me - -## Discord - -- [github discussions](https://github.com/anncwb/vue-vben-admin/discussions) -- [Discord](https://discord.gg/8GuAdwDhj6) - -## License - -[MIT © Vben-2020](./LICENSE) diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/README.zh-CN.md b/templates/abp-vnext-pro-nuget-simplify/vben28/README.zh-CN.md deleted file mode 100644 index 408af3cc8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/README.zh-CN.md +++ /dev/null @@ -1,175 +0,0 @@ -
VbenAdmin Logo

- -[![license](https://img.shields.io/github/license/anncwb/vue-vben-admin.svg)](LICENSE) - -

Vue vben admin

-
- -**中文** | [English](./README.md) - -## 简介 - -Vue Vben Admin 是一个免费开源的中后台模版。使用了最新的`vue3`,`vite2`,`TypeScript`等主流技术开发,开箱即用的中后台前端解决方案,也可用于学习参考。 - -## 特性 - -- **最新技术栈**:使用 Vue3/vite2 等前端前沿技术开发 -- **TypeScript**: 应用程序级 JavaScript 的语言 -- **主题**:可配置的主题 -- **国际化**:内置完善的国际化方案 -- **Mock 数据** 内置 Mock 数据方案 -- **权限** 内置完善的动态路由权限生成方案 -- **组件** 二次封装了多个常用的组件 - -## 预览 - -- [vue-vben-admin](https://vvbin.cn/next/) - 完整版中文站点 -- [vue-vben-admin-gh-pages](https://anncwb.github.io/vue-vben-admin/) - 完整版 github 站点 -- [vben-admin-thin-next](https://vvbin.cn/thin/next/) - 简化版中文站点 -- [vben-admin-thin-gh-pages](https://anncwb.github.io/vben-admin-thin-next/) - 简化版 github 站点 - -测试账号: vben/123456 - -

- VbenAdmin Logo - VbenAdmin Logo - VbenAdmin Logo -

- -### 使用 Gitpod - -在 Gitpod(适用于 GitHub 的免费在线开发环境)中打开项目,并立即开始编码. - -[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/anncwb/vue-vben-admin) - -## 文档 - -[文档地址](https://vvbin.cn/doc-next/) - -## 准备 - -- [node](http://nodejs.org/) 和 [git](https://git-scm.com/) -项目开发环境 -- [Vite](https://vitejs.dev/) - 熟悉 vite 特性 -- [Vue3](https://v3.vuejs.org/) - 熟悉 Vue 基础语法 -- [TypeScript](https://www.typescriptlang.org/) - 熟悉`TypeScript`基本语法 -- [Es6+](http://es6.ruanyifeng.com/) - 熟悉 es6 基本语法 -- [Vue-Router-Next](https://next.router.vuejs.org/) - 熟悉 vue-router 基本使用 -- [Ant-Design-Vue](https://2x.antdv.com/docs/vue/introduce-cn/) - ui 基本使用 -- [Mock.js](https://github.com/nuysoft/Mock) - mockjs 基本语法 - -## 安装使用 - -- 获取项目代码 - -```bash -git clone https://github.com/anncwb/vue-vben-admin.git -``` - -- 安装依赖 - -```bash -cd vue-vben-admin - -pnpm install - -``` - -- 运行 - -```bash -pnpm serve -``` - -- 打包 - -```bash -pnpm build -``` - -## 更新日志 - -[CHANGELOG](./CHANGELOG.zh_CN.md) - -## 项目地址 - -- [vue-vben-admin](https://github.com/anncwb/vue-vben-admin) - 完整版 -- [vue-vben-admin-thin-next](https://github.com/anncwb/vben-admin-thin-next) - 简化版 - -## 如何贡献 - -非常欢迎你的加入![提一个 Issue](https://github.com/anncwb/vue-vben-admin/issues/new/choose) 或者提交一个 Pull Request。 - -**Pull Request:** - -1. Fork 代码! -2. 创建自己的分支: `git checkout -b feat/xxxx` -3. 提交你的修改: `git commit -am 'feat(function): add xxxxx'` -4. 推送您的分支: `git push origin feat/xxxx` -5. 提交`pull request` - -## Git 贡献提交规范 - -- 参考 [vue](https://github.com/vuejs/vue/blob/dev/.github/COMMIT_CONVENTION.md) 规范 ([Angular](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular)) - - - `feat` 增加新功能 - - `fix` 修复问题/BUG - - `style` 代码风格相关无影响运行结果的 - - `perf` 优化/性能提升 - - `refactor` 重构 - - `revert` 撤销修改 - - `test` 测试相关 - - `docs` 文档/注释 - - `chore` 依赖更新/脚手架配置修改等 - - `workflow` 工作流改进 - - `ci` 持续集成 - - `types` 类型定义文件更改 - - `wip` 开发中 - -## 浏览器支持 - -本地开发推荐使用`Chrome 80+` 浏览器 - -支持现代浏览器, 不支持 IE - -| [ Edge](http://godban.github.io/browsers-support-badges/)
IE | [ Edge](http://godban.github.io/browsers-support-badges/)
Edge | [Firefox](http://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome | [Safari](http://godban.github.io/browsers-support-badges/)
Safari | -| :-: | :-: | :-: | :-: | :-: | -| not support | last 2 versions | last 2 versions | last 2 versions | last 2 versions | - -## 相关仓库 - -如果这些插件对你有帮助,可以给一个 star 支持下 - -- [vite-plugin-mock](https://github.com/anncwb/vite-plugin-mock) - 用于本地及开发环境数据 mock -- [vite-plugin-html](https://github.com/anncwb/vite-plugin-html) - 用于 html 模版转换及压缩 -- [vite-plugin-style-import](https://github.com/anncwb/vite-plugin-style-import) - 用于组件库样式按需引入 -- [vite-plugin-theme](https://github.com/anncwb/vite-plugin-theme) - 用于在线切换主题色等颜色相关配置 -- [vite-plugin-imagemin](https://github.com/anncwb/vite-plugin-imagemin) - 用于打包压缩图片资源 -- [vite-plugin-compression](https://github.com/anncwb/vite-plugin-compression) - 用于打包输出.gz|.brotil 文件 -- [vite-plugin-svg-icons](https://github.com/anncwb/vite-plugin-svg-icons) - 用于快速生成 svg 雪碧图 - -## 后台整合示例 - -- [lamp-cloud](https://github.com/zuihou/lamp-cloud) - 基于 SpringCloud Alibaba 的微服务中后台快速开发平台 -- [matecloud](https://github.com/matevip/matecloud) - MateCloud 微服务脚手架,基于 Spring Cloud 2020.0.3、SpringBoot 2.5.3 的全开源平台 - -## 维护者 - -[@Vben](https://github.com/anncwb) - -## 捐赠 - -如果你觉得这个项目对你有帮助,你可以帮作者买一杯咖啡表示支持! - -![donate](https://anncwb.github.io/anncwb/images/sponsor.png) - -Paypal Me - -## 交流 - -`Vue-vben-Admin` 是完全开源免费的项目,在帮助开发者更方便地进行中大型管理系统开发,同时也提供 QQ 交流群使用问题欢迎在群内提问。 - -- QQ 群 `569291866` - -## License - -[MIT © Vben-2020](./LICENSE) diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/_nginx/default.conf b/templates/abp-vnext-pro-nuget-simplify/vben28/_nginx/default.conf deleted file mode 100644 index c6416fa1a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/_nginx/default.conf +++ /dev/null @@ -1,38 +0,0 @@ -server { - listen 80; - # listen 443; - # ssl on; - # ssl_certificate /etc/nginx/ssl/server.crt; - # ssl_certificate_key /etc/nginx/ssl/server.key; - - server_name localhost; - - #charset koi8-r; - #access_log /var/log/nginx/host.access.log main; - - location / { - if ($request_filename ~* .*\.html$) { - add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate"; - } - - root /usr/share/nginx/html; - index index.html index.htm; - try_files $uri $uri/ /index.html; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } - - location /env { - js_content getenv; - } - - #error_page 404 /404.html; - - # redirect server error pages to the static page /50x.html - # - error_page 500 502 503 504 /50x.html; - location = /50x.html { - root /usr/share/nginx/html; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/_nginx/env.js b/templates/abp-vnext-pro-nuget-simplify/vben28/_nginx/env.js deleted file mode 100644 index 57f0b31ad..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/_nginx/env.js +++ /dev/null @@ -1,15 +0,0 @@ -function getenv(r) { - var strEnv = '{'+ - '"Shortsha": "'+ process.env.SHORTSHA +'",' - + '"HOSTNAME": "'+ process.env.HOSTNAME +'",' - + '"RefName": "ValRefName",' - + '"BuildTime": "ValBuildTime",' - + '"CommitTitle": "ValTitle",' - + '"CommitDescription": "ValDescription",' - + '"PipelineUrl": "ValPipelineUrl",' - + '"CommitUser": "ValUser",' - + '"UI_ENVIRONMENT": "'+ process.env.UI_ENVIRONMENT +'"' - +'}'; - r.headersOut['Content-Type'] = "application/json; charset=utf-8"; - r.return(200, strEnv); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/_nginx/nginx.conf b/templates/abp-vnext-pro-nuget-simplify/vben28/_nginx/nginx.conf deleted file mode 100644 index c27bf162a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/_nginx/nginx.conf +++ /dev/null @@ -1,46 +0,0 @@ -user nginx; -worker_processes auto; - -error_log /var/log/nginx/error.log warn; -pid /var/run/nginx.pid; - -load_module modules/ngx_http_js_module.so; - -events { - worker_connections 1024; -} - - -http { - js_include env.js; - include /etc/nginx/mime.types; - default_type application/octet-stream; - - log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - - access_log /var/log/nginx/access.log main; - - sendfile on; - #tcp_nopush on; - - keepalive_timeout 65; - send_timeout 600; - - #开启gzip功能 - gzip on; - #开启gzip静态压缩功能 - gzip_static on; - #gzip缓存大小 - gzip_buffers 4 16k; - #gzip http版本 - gzip_http_version 1.1; - #gzip 压缩级别 1-10 - gzip_comp_level 5; - #gzip 压缩类型 - gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;# 是否在http header中添加Vary: Accept-Encoding,建议开启gzip_vary on; - - - include /etc/nginx/conf.d/*.conf; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/config/themeConfig.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/config/themeConfig.ts deleted file mode 100644 index c816b6dee..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/config/themeConfig.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { generate } from '@ant-design/colors'; - -export const primaryColor = '#0960bd'; - -export const darkMode = 'light'; - -type Fn = (...arg: any) => any; - -type GenerateTheme = 'default' | 'dark'; - -export interface GenerateColorsParams { - mixLighten: Fn; - mixDarken: Fn; - tinycolor: any; - color?: string; -} - -export function generateAntColors(color: string, theme: GenerateTheme = 'default') { - return generate(color, { - theme, - }); -} - -export function getThemeColors(color?: string) { - const tc = color || primaryColor; - const lightColors = generateAntColors(tc); - const primary = lightColors[5]; - const modeColors = generateAntColors(primary, 'dark'); - - return [...lightColors, ...modeColors]; -} - -export function generateColors({ - color = primaryColor, - mixLighten, - mixDarken, - tinycolor, -}: GenerateColorsParams) { - const arr = new Array(19).fill(0); - const lightens = arr.map((_t, i) => { - return mixLighten(color, i / 5); - }); - - const darkens = arr.map((_t, i) => { - return mixDarken(color, i / 5); - }); - - const alphaColors = arr.map((_t, i) => { - return tinycolor(color) - .setAlpha(i / 20) - .toRgbString(); - }); - - const shortAlphaColors = alphaColors.map((item) => item.replace(/\s/g, '').replace(/0\./g, '.')); - - const tinycolorLightens = arr - .map((_t, i) => { - return tinycolor(color) - .lighten(i * 5) - .toHexString(); - }) - .filter((item) => item !== '#ffffff'); - - const tinycolorDarkens = arr - .map((_t, i) => { - return tinycolor(color) - .darken(i * 5) - .toHexString(); - }) - .filter((item) => item !== '#000000'); - return [ - ...lightens, - ...darkens, - ...alphaColors, - ...shortAlphaColors, - ...tinycolorDarkens, - ...tinycolorLightens, - ].filter((item) => !item.includes('-')); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/constant.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/constant.ts deleted file mode 100644 index 2c6119c8d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/constant.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * The name of the configuration file entered in the production environment - */ -export const GLOB_CONFIG_FILE_NAME = '_app.config.js'; - -export const OUTPUT_DIR = 'dist'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/generate/generateModifyVars.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/generate/generateModifyVars.ts deleted file mode 100644 index 44670e2f6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/generate/generateModifyVars.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { generateAntColors, primaryColor } from '../config/themeConfig'; -import { getThemeVariables } from 'ant-design-vue/dist/theme'; -import { resolve } from 'path'; - -/** - * less global variable - */ -export function generateModifyVars(dark = false) { - const palettes = generateAntColors(primaryColor); - const primary = palettes[5]; - - const primaryColorObj: Record = {}; - - for (let index = 0; index < 10; index++) { - primaryColorObj[`primary-${index + 1}`] = palettes[index]; - } - - const modifyVars = getThemeVariables({ dark }); - return { - ...modifyVars, - // Used for global import to avoid the need to import each style file separately - // reference: Avoid repeated references - hack: `${modifyVars.hack} @import (reference) "${resolve('src/design/config.less')}";`, - 'primary-color': primary, - ...primaryColorObj, - 'info-color': primary, - 'processing-color': primary, - 'success-color': '#55D187', // Success color - 'error-color': '#ED6F6F', // False color - 'warning-color': '#EFBD47', // Warning color - //'border-color-base': '#EEEEEE', - 'font-size-base': '14px', // Main font size - 'border-radius-base': '2px', // Component/float fillet - 'link-color': primary, // Link color - 'app-content-background': '#fafafa', // Link color - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/generate/icon/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/generate/icon/index.ts deleted file mode 100644 index b01fec4cb..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/generate/icon/index.ts +++ /dev/null @@ -1,72 +0,0 @@ -import path from 'path'; -import fs from 'fs-extra'; -import inquirer from 'inquirer'; -import colors from 'picocolors'; -import pkg from '../../../package.json'; - -async function generateIcon() { - const dir = path.resolve(process.cwd(), 'node_modules/@iconify/json'); - - const raw = await fs.readJSON(path.join(dir, 'collections.json')); - - const collections = Object.entries(raw).map(([id, v]) => ({ - ...(v as any), - id, - })); - - const choices = collections.map((item) => ({ key: item.id, value: item.id, name: item.name })); - - inquirer - .prompt([ - { - type: 'list', - name: 'useType', - choices: [ - { key: 'local', value: 'local', name: 'Local' }, - { key: 'onLine', value: 'onLine', name: 'OnLine' }, - ], - message: 'How to use icons?', - }, - { - type: 'list', - name: 'iconSet', - choices: choices, - message: 'Select the icon set that needs to be generated?', - }, - { - type: 'input', - name: 'output', - message: 'Select the icon set that needs to be generated?', - default: 'src/components/Icon/data', - }, - ]) - .then(async (answers) => { - const { iconSet, output, useType } = answers; - const outputDir = path.resolve(process.cwd(), output); - fs.ensureDir(outputDir); - const genCollections = collections.filter((item) => [iconSet].includes(item.id)); - const prefixSet: string[] = []; - for (const info of genCollections) { - const data = await fs.readJSON(path.join(dir, 'json', `${info.id}.json`)); - if (data) { - const { prefix } = data; - const isLocal = useType === 'local'; - const icons = Object.keys(data.icons).map( - (item) => `${isLocal ? prefix + ':' : ''}${item}`, - ); - - await fs.writeFileSync( - path.join(output, `icons.data.ts`), - `export default ${isLocal ? JSON.stringify(icons) : JSON.stringify({ prefix, icons })}`, - ); - prefixSet.push(prefix); - } - } - fs.emptyDir(path.join(process.cwd(), 'node_modules/.vite')); - console.log( - `✨ ${colors.cyan(`[${pkg.name}]`)}` + ' - Icon generated successfully:' + `[${prefixSet}]`, - ); - }); -} - -generateIcon(); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/getConfigFileName.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/getConfigFileName.ts deleted file mode 100644 index d61cd4162..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/getConfigFileName.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Get the configuration file variable name - * @param env - */ -export const getConfigFileName = (env: Record) => { - return `__PRODUCTION__${env.VITE_GLOB_APP_SHORT_NAME || '__APP'}__CONF__` - .toUpperCase() - .replace(/\s/g, ''); -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/script/buildConf.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/script/buildConf.ts deleted file mode 100644 index aa7b84399..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/script/buildConf.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Generate additional configuration files when used for packaging. The file can be configured with some global variables, so that it can be changed directly externally without repackaging - */ -import { GLOB_CONFIG_FILE_NAME, OUTPUT_DIR } from '../constant'; -import fs, { writeFileSync } from 'fs-extra'; -import colors from 'picocolors'; - -import { getEnvConfig, getRootPath } from '../utils'; -import { getConfigFileName } from '../getConfigFileName'; - -import pkg from '../../package.json'; - -interface CreateConfigParams { - configName: string; - config: any; - configFileName?: string; -} - -function createConfig(params: CreateConfigParams) { - const { configName, config, configFileName } = params; - try { - const windowConf = `window.${configName}`; - // Ensure that the variable will not be modified - const configStr = `${windowConf}=${JSON.stringify(config)}; - Object.freeze(${windowConf}); - Object.defineProperty(window, "${configName}", { - configurable: false, - writable: false, - }); - `.replace(/\s/g, ''); - fs.mkdirp(getRootPath(OUTPUT_DIR)); - writeFileSync(getRootPath(`${OUTPUT_DIR}/${configFileName}`), configStr); - - console.log(colors.cyan(`✨ [${pkg.name}]`) + ` - configuration file is build successfully:`); - console.log(colors.gray(OUTPUT_DIR + '/' + colors.green(configFileName)) + '\n'); - } catch (error) { - console.log(colors.red('configuration file configuration file failed to package:\n' + error)); - } -} - -export function runBuildConfig() { - const config = getEnvConfig(); - const configFileName = getConfigFileName(config); - createConfig({ config, configName: configFileName, configFileName: GLOB_CONFIG_FILE_NAME }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/script/postBuild.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/script/postBuild.ts deleted file mode 100644 index 42635d88b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/script/postBuild.ts +++ /dev/null @@ -1,23 +0,0 @@ -// #!/usr/bin/env node - -import { runBuildConfig } from './buildConf'; -import colors from 'picocolors'; - -import pkg from '../../package.json'; - -export const runBuild = async () => { - try { - const argvList = process.argv.splice(2); - - // Generate configuration file - if (!argvList.includes('disabled-config')) { - runBuildConfig(); - } - - console.log(`✨ ${colors.cyan(`[${pkg.name}]`)}` + ' - build successfully!'); - } catch (error) { - console.log(colors.red('vite build error:\n' + error)); - process.exit(1); - } -}; -runBuild(); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/utils.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/utils.ts deleted file mode 100644 index c201514f9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/utils.ts +++ /dev/null @@ -1,92 +0,0 @@ -import fs from 'fs'; -import path from 'path'; -import dotenv from 'dotenv'; - -export function isDevFn(mode: string): boolean { - return mode === 'development'; -} - -export function isProdFn(mode: string): boolean { - return mode === 'production'; -} - -/** - * Whether to generate package preview - */ -export function isReportMode(): boolean { - return process.env.REPORT === 'true'; -} - -// Read all environment variable configuration files to process.env -export function wrapperEnv(envConf: Recordable): ViteEnv { - const ret: any = {}; - - for (const envName of Object.keys(envConf)) { - let realName = envConf[envName].replace(/\\n/g, '\n'); - realName = realName === 'true' ? true : realName === 'false' ? false : realName; - - if (envName === 'VITE_PORT') { - realName = Number(realName); - } - if (envName === 'VITE_PROXY' && realName) { - try { - realName = JSON.parse(realName.replace(/'/g, '"')); - } catch (error) { - realName = ''; - } - } - ret[envName] = realName; - if (typeof realName === 'string') { - process.env[envName] = realName; - } else if (typeof realName === 'object') { - process.env[envName] = JSON.stringify(realName); - } - } - return ret; -} - -/** - * 获取当前环境下生效的配置文件名 - */ -function getConfFiles() { - const script = process.env.npm_lifecycle_script; - const reg = new RegExp('--mode ([a-z_\\d]+)'); - const result = reg.exec(script as string) as any; - if (result) { - const mode = result[1] as string; - return ['.env', `.env.${mode}`]; - } - return ['.env', '.env.production']; -} - -/** - * Get the environment variables starting with the specified prefix - * @param match prefix - * @param confFiles ext - */ -export function getEnvConfig(match = 'VITE_GLOB_', confFiles = getConfFiles()) { - let envConfig = {}; - confFiles.forEach((item) => { - try { - const env = dotenv.parse(fs.readFileSync(path.resolve(process.cwd(), item))); - envConfig = { ...envConfig, ...env }; - } catch (e) { - console.error(`Error in parsing ${item}`, e); - } - }); - const reg = new RegExp(`^(${match})`); - Object.keys(envConfig).forEach((key) => { - if (!reg.test(key)) { - Reflect.deleteProperty(envConfig, key); - } - }); - return envConfig; -} - -/** - * Get user root directory - * @param dir file path - */ -export function getRootPath(...dir: string[]) { - return path.resolve(process.cwd(), ...dir); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/compress.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/compress.ts deleted file mode 100644 index ff4f6311d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/compress.ts +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Used to package and output gzip. Note that this does not work properly in Vite, the specific reason is still being investigated - * https://github.com/anncwb/vite-plugin-compression - */ -import type { PluginOption } from 'vite'; -import compressPlugin from 'vite-plugin-compression'; - -export function configCompressPlugin( - compress: 'gzip' | 'brotli' | 'none', - deleteOriginFile = false, -): PluginOption | PluginOption[] { - const compressList = compress.split(','); - - const plugins: PluginOption[] = []; - - if (compressList.includes('gzip')) { - plugins.push( - compressPlugin({ - ext: '.gz', - deleteOriginFile, - }), - ); - } - - if (compressList.includes('brotli')) { - plugins.push( - compressPlugin({ - ext: '.br', - algorithm: 'brotliCompress', - deleteOriginFile, - }), - ); - } - return plugins; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/html.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/html.ts deleted file mode 100644 index 6af034ac4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/html.ts +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Plugin to minimize and use ejs template syntax in index.html. - * https://github.com/anncwb/vite-plugin-html - */ -import type { PluginOption } from 'vite'; -import { createHtmlPlugin } from 'vite-plugin-html'; -import pkg from '../../../package.json'; -import { GLOB_CONFIG_FILE_NAME } from '../../constant'; - -export function configHtmlPlugin(env: ViteEnv, isBuild: boolean) { - const { VITE_GLOB_APP_TITLE, VITE_PUBLIC_PATH } = env; - - const path = VITE_PUBLIC_PATH.endsWith('/') ? VITE_PUBLIC_PATH : `${VITE_PUBLIC_PATH}/`; - - const getAppConfigSrc = () => { - return `${path || '/'}${GLOB_CONFIG_FILE_NAME}?v=${pkg.version}-${new Date().getTime()}`; - }; - - const htmlPlugin: PluginOption[] = createHtmlPlugin({ - minify: isBuild, - inject: { - // Inject data into ejs template - data: { - title: VITE_GLOB_APP_TITLE, - }, - // Embed the generated app.config.js file - tags: isBuild - ? [ - { - tag: 'script', - attrs: { - src: getAppConfigSrc(), - }, - }, - ] - : [], - }, - }); - return htmlPlugin; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/imagemin.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/imagemin.ts deleted file mode 100644 index de155517b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/imagemin.ts +++ /dev/null @@ -1,34 +0,0 @@ -// // Image resource files used to compress the output of the production environment -// // https://github.com/anncwb/vite-plugin-imagemin -// import viteImagemin from 'vite-plugin-imagemin'; - -// export function configImageminPlugin() { -// const plugin = viteImagemin({ -// // gifsicle: { -// // optimizationLevel: 7, -// // interlaced: false, -// // }, -// optipng: { -// optimizationLevel: 7, -// }, -// mozjpeg: { -// quality: 20, -// }, -// pngquant: { -// quality: [0.8, 0.9], -// speed: 4, -// }, -// svgo: { -// plugins: [ -// { -// name: 'removeViewBox', -// }, -// { -// name: 'removeEmptyAttrs', -// active: false, -// }, -// ], -// }, -// }); -// return plugin; -// } diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/index.ts deleted file mode 100644 index 278444d68..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/index.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { PluginOption } from 'vite'; -import vue from '@vitejs/plugin-vue'; -import vueJsx from '@vitejs/plugin-vue-jsx'; -import legacy from '@vitejs/plugin-legacy'; -import purgeIcons from 'vite-plugin-purge-icons'; -import windiCSS from 'vite-plugin-windicss'; -import VitePluginCertificate from 'vite-plugin-mkcert'; -import vueSetupExtend from 'vite-plugin-vue-setup-extend'; -import { configHtmlPlugin } from './html'; -import { configPwaConfig } from './pwa'; -import { configMockPlugin } from './mock'; -import { configCompressPlugin } from './compress'; -import { configStyleImportPlugin } from './styleImport'; -import { configVisualizerConfig } from './visualizer'; -import { configThemePlugin } from './theme'; -import { configImageminPlugin } from './imagemin'; -import { configSvgIconsPlugin } from './svgSprite'; - -export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) { - const { - VITE_USE_IMAGEMIN, - VITE_USE_MOCK, - VITE_LEGACY, - VITE_BUILD_COMPRESS, - VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE, - } = viteEnv; - - const vitePlugins: (PluginOption | PluginOption[])[] = [ - // have to - vue(), - // have to - vueJsx(), - // support name - vueSetupExtend(), - VitePluginCertificate({ - source: 'coding', - }), - ]; - - // vite-plugin-windicss - vitePlugins.push(windiCSS()); - - // @vitejs/plugin-legacy - VITE_LEGACY && isBuild && vitePlugins.push(legacy()); - - // vite-plugin-html - vitePlugins.push(configHtmlPlugin(viteEnv, isBuild)); - - // vite-plugin-svg-icons - vitePlugins.push(configSvgIconsPlugin(isBuild)); - - // vite-plugin-mock - VITE_USE_MOCK && vitePlugins.push(configMockPlugin(isBuild)); - - // vite-plugin-purge-icons - vitePlugins.push(purgeIcons()); - - // vite-plugin-style-import - vitePlugins.push(configStyleImportPlugin(isBuild)); - - // rollup-plugin-visualizer - vitePlugins.push(configVisualizerConfig()); - - // vite-plugin-theme - vitePlugins.push(configThemePlugin(isBuild)); - - // The following plugins only work in the production environment - if (isBuild) { - // vite-plugin-imagemin - // VITE_USE_IMAGEMIN && vitePlugins.push(configImageminPlugin()); - - // rollup-plugin-gzip - vitePlugins.push( - configCompressPlugin(VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE), - ); - - // vite-plugin-pwa - vitePlugins.push(configPwaConfig(viteEnv)); - } - - return vitePlugins; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/mock.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/mock.ts deleted file mode 100644 index d241e2673..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/mock.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Mock plugin for development and production. - * https://github.com/anncwb/vite-plugin-mock - */ -import { viteMockServe } from 'vite-plugin-mock'; - -export function configMockPlugin(isBuild: boolean) { - return viteMockServe({ - ignore: /^\_/, - mockPath: 'mock', - localEnabled: !isBuild, - prodEnabled: isBuild, - injectCode: ` - import { setupProdMockServer } from '../mock/_createProductionServer'; - - setupProdMockServer(); - `, - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/pwa.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/pwa.ts deleted file mode 100644 index 90ef5bc02..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/pwa.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Zero-config PWA for Vite - * https://github.com/antfu/vite-plugin-pwa - */ -import { VitePWA } from 'vite-plugin-pwa'; - -export function configPwaConfig(env: ViteEnv) { - const { VITE_USE_PWA, VITE_GLOB_APP_TITLE, VITE_GLOB_APP_SHORT_NAME } = env; - - if (VITE_USE_PWA) { - // vite-plugin-pwa - const pwaPlugin = VitePWA({ - manifest: { - name: VITE_GLOB_APP_TITLE, - short_name: VITE_GLOB_APP_SHORT_NAME, - icons: [ - { - src: './resource/img/pwa-192x192.png', - sizes: '192x192', - type: 'image/png', - }, - { - src: './resource/img/pwa-512x512.png', - sizes: '512x512', - type: 'image/png', - }, - ], - }, - }); - return pwaPlugin; - } - return []; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/styleImport.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/styleImport.ts deleted file mode 100644 index 1f606c4d7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/styleImport.ts +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Introduces component library styles on demand. - * https://github.com/anncwb/vite-plugin-style-import - */ -import { createStyleImportPlugin } from 'vite-plugin-style-import'; - -export function configStyleImportPlugin(_isBuild: boolean) { - // if (!isBuild) { - // return []; - // } - const styleImportPlugin = createStyleImportPlugin({ - libs: [ - { - libraryName: 'ant-design-vue', - esModule: true, - resolveStyle: (name) => { - // 这里是无需额外引入样式文件的“子组件”列表 - const ignoreList = [ - 'anchor-link', - 'sub-menu', - 'menu-item', - 'menu-divider', - 'menu-item-group', - 'breadcrumb-item', - 'breadcrumb-separator', - 'form-item', - 'step', - 'select-option', - 'select-opt-group', - 'card-grid', - 'card-meta', - 'collapse-panel', - 'descriptions-item', - 'list-item', - 'list-item-meta', - 'table-column', - 'table-column-group', - 'tab-pane', - 'tab-content', - 'timeline-item', - 'tree-node', - 'skeleton-input', - 'skeleton-avatar', - 'skeleton-title', - 'skeleton-paragraph', - 'skeleton-image', - 'skeleton-button', - ]; - // 这里是需要额外引入样式的子组件列表 - // 单独引入子组件时需引入组件样式,否则会在打包后导致子组件样式丢失 - const replaceList = { - 'typography-text': 'typography', - 'typography-title': 'typography', - 'typography-paragraph': 'typography', - 'typography-link': 'typography', - 'dropdown-button': 'dropdown', - 'input-password': 'input', - 'input-search': 'input', - 'input-group': 'input', - 'radio-group': 'radio', - 'checkbox-group': 'checkbox', - 'layout-sider': 'layout', - 'layout-content': 'layout', - 'layout-footer': 'layout', - 'layout-header': 'layout', - 'month-picker': 'date-picker', - 'range-picker': 'date-picker', - }; - - return ignoreList.includes(name) - ? '' - : replaceList.hasOwnProperty(name) - ? `ant-design-vue/es/${replaceList[name]}/style/index` - : `ant-design-vue/es/${name}/style/index`; - }, - }, - ], - }); - return styleImportPlugin; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/svgSprite.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/svgSprite.ts deleted file mode 100644 index 61f637f4e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/svgSprite.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Vite Plugin for fast creating SVG sprites. - * https://github.com/anncwb/vite-plugin-svg-icons - */ - -import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'; -import path from 'path'; - -export function configSvgIconsPlugin(isBuild: boolean) { - const svgIconsPlugin = createSvgIconsPlugin({ - iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')], - svgoOptions: isBuild, - // default - symbolId: 'icon-[dir]-[name]', - }); - return svgIconsPlugin; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/theme.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/theme.ts deleted file mode 100644 index 118983f77..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/theme.ts +++ /dev/null @@ -1,89 +0,0 @@ -/** - * Vite plugin for website theme color switching - * https://github.com/anncwb/vite-plugin-theme - */ -import type { PluginOption } from 'vite'; -import path from 'path'; -import { - viteThemePlugin, - antdDarkThemePlugin, - mixLighten, - mixDarken, - tinycolor, -} from 'vite-plugin-theme'; -import { getThemeColors, generateColors } from '../../config/themeConfig'; -import { generateModifyVars } from '../../generate/generateModifyVars'; - -export function configThemePlugin(isBuild: boolean): PluginOption[] { - const colors = generateColors({ - mixDarken, - mixLighten, - tinycolor, - }); - const plugin = [ - viteThemePlugin({ - resolveSelector: (s) => { - s = s.trim(); - switch (s) { - case '.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon': - return '.ant-steps-item-icon > .ant-steps-icon'; - case '.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)': - case '.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover': - case '.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active': - return s; - case '.ant-steps-item-icon > .ant-steps-icon': - return s; - case '.ant-select-item-option-selected:not(.ant-select-item-option-disabled)': - return s; - default: - if (s.indexOf('.ant-btn') >= -1) { - // 按钮被重新定制过,需要过滤掉class防止覆盖 - return s; - } - } - return s.startsWith('[data-theme') ? s : `[data-theme] ${s}`; - }, - colorVariables: [...getThemeColors(), ...colors], - }), - antdDarkThemePlugin({ - preloadFiles: [ - path.resolve(process.cwd(), 'node_modules/ant-design-vue/dist/antd.less'), - //path.resolve(process.cwd(), 'node_modules/ant-design-vue/dist/antd.dark.less'), - path.resolve(process.cwd(), 'src/design/index.less'), - ], - filter: (id) => (isBuild ? !id.endsWith('antd.less') : true), - // extractCss: false, - darkModifyVars: { - ...generateModifyVars(true), - 'text-color': '#c9d1d9', - 'primary-1': 'rgb(255 255 255 / 8%)', - 'text-color-base': '#c9d1d9', - 'component-background': '#151515', - 'heading-color': 'rgb(255 255 255 / 65%)', - // black: '#0e1117', - // #8b949e - 'text-color-secondary': '#8b949e', - 'border-color-base': '#303030', - // 'border-color-split': '#30363d', - 'item-active-bg': '#111b26', - 'app-content-background': '#1e1e1e', - 'tree-node-selected-bg': '#11263c', - - 'alert-success-border-color': '#274916', - 'alert-success-bg-color': '#162312', - 'alert-success-icon-color': '#49aa19', - 'alert-info-border-color': '#153450', - 'alert-info-bg-color': '#111b26', - 'alert-info-icon-color': '#177ddc', - 'alert-warning-border-color': '#594214', - 'alert-warning-bg-color': '#2b2111', - 'alert-warning-icon-color': '#d89614', - 'alert-error-border-color': '#58181c', - 'alert-error-bg-color': '#2a1215', - 'alert-error-icon-color': '#a61d24', - }, - }), - ]; - - return plugin as unknown as PluginOption[]; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/visualizer.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/visualizer.ts deleted file mode 100644 index 75d4451eb..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/plugin/visualizer.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Package file volume analysis - */ -import visualizer from 'rollup-plugin-visualizer'; -import { isReportMode } from '../../utils'; - -export function configVisualizerConfig() { - if (isReportMode()) { - return visualizer({ - filename: './node_modules/.cache/visualizer/stats.html', - open: true, - gzipSize: true, - brotliSize: true, - }) as Plugin; - } - return []; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/proxy.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/proxy.ts deleted file mode 100644 index 8525397b6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/build/vite/proxy.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Used to parse the .env.development proxy configuration - */ -import type { ProxyOptions } from 'vite'; - -type ProxyItem = [string, string]; - -type ProxyList = ProxyItem[]; - -type ProxyTargetList = Record; - -const httpsRE = /^https:\/\//; - -/** - * Generate proxy - * @param list - */ -export function createProxy(list: ProxyList = []) { - const ret: ProxyTargetList = {}; - for (const [prefix, target] of list) { - const isHttps = httpsRE.test(target); - - // https://github.com/http-party/node-http-proxy#options - ret[prefix] = { - target: target, - changeOrigin: true, - ws: true, - rewrite: (path) => path.replace(new RegExp(`^${prefix}`), ''), - // https is require secure=false - ...(isHttps ? { secure: false } : {}), - }; - } - return ret; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/commitlint.config.js b/templates/abp-vnext-pro-nuget-simplify/vben28/commitlint.config.js deleted file mode 100644 index 54598876e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/commitlint.config.js +++ /dev/null @@ -1,33 +0,0 @@ -module.exports = { - ignores: [(commit) => commit.includes('init')], - extends: ['@commitlint/config-conventional'], - rules: { - 'body-leading-blank': [2, 'always'], - 'footer-leading-blank': [1, 'always'], - 'header-max-length': [2, 'always', 108], - 'subject-empty': [2, 'never'], - 'type-empty': [2, 'never'], - 'subject-case': [0], - 'type-enum': [ - 2, - 'always', - [ - 'feat', - 'fix', - 'perf', - 'style', - 'docs', - 'test', - 'refactor', - 'build', - 'ci', - 'chore', - 'revert', - 'wip', - 'workflow', - 'types', - 'release', - ], - ], - }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/index.html b/templates/abp-vnext-pro-nuget-simplify/vben28/index.html deleted file mode 100644 index f615e97cc..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/index.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - - <%= title %> - - - - -
- -
-
- -
- -
-
<%= title %>
-
-
-
- - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/_createProductionServer.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/mock/_createProductionServer.ts deleted file mode 100644 index a44310b91..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/_createProductionServer.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { createProdMockServer } from 'vite-plugin-mock/es/createProdMockServer'; - -const modules = import.meta.globEager('./**/*.ts'); - -const mockModules: any[] = []; -Object.keys(modules).forEach((key) => { - if (key.includes('/_')) { - return; - } - mockModules.push(...modules[key].default); -}); - -/** - * Used in a production environment. Need to manually import all modules - */ -export function setupProdMockServer() { - createProdMockServer(mockModules); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/_util.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/mock/_util.ts deleted file mode 100644 index 97c87564f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/_util.ts +++ /dev/null @@ -1,60 +0,0 @@ -// Interface data format used to return a unified format - -export function resultSuccess(result: T, { message = 'ok' } = {}) { - return { - code: 0, - result, - message, - type: 'success', - }; -} - -export function resultPageSuccess( - page: number, - pageSize: number, - list: T[], - { message = 'ok' } = {}, -) { - const pageData = pagination(page, pageSize, list); - - return { - ...resultSuccess({ - items: pageData, - total: list.length, - }), - message, - }; -} - -export function resultError(message = 'Request failed', { code = -1, result = null } = {}) { - return { - code, - result, - message, - type: 'error', - }; -} - -export function pagination(pageNo: number, pageSize: number, array: T[]): T[] { - const offset = (pageNo - 1) * Number(pageSize); - const ret = - offset + Number(pageSize) >= array.length - ? array.slice(offset, array.length) - : array.slice(offset, offset + Number(pageSize)); - return ret; -} - -export interface requestParams { - method: string; - body: any; - headers?: { authorization?: string }; - query: any; -} - -/** - * @description 本函数用于从request数据中获取token,请根据项目的实际情况修改 - * - */ -export function getRequestToken({ headers }: requestParams): string | undefined { - return headers?.authorization; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/account.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/account.ts deleted file mode 100644 index a39249315..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/account.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { MockMethod } from 'vite-plugin-mock'; -import { resultSuccess, resultError } from '../_util'; -import { ResultEnum } from '../../src/enums/httpEnum'; - -const userInfo = { - name: 'Vben', - userid: '00000001', - email: 'test@gmail.com', - signature: '海纳百川,有容乃大', - introduction: '微笑着,努力着,欣赏着', - title: '交互专家', - group: '某某某事业群-某某平台部-某某技术部-UED', - tags: [ - { - key: '0', - label: '很有想法的', - }, - { - key: '1', - label: '专注设计', - }, - { - key: '2', - label: '辣~', - }, - { - key: '3', - label: '大长腿', - }, - { - key: '4', - label: '川妹子', - }, - { - key: '5', - label: '海纳百川', - }, - ], - notifyCount: 12, - unreadCount: 11, - country: 'China', - address: 'Xiamen City 77', - phone: '0592-268888888', -}; - -export default [ - { - url: '/basic-api/account/getAccountInfo', - timeout: 1000, - method: 'get', - response: () => { - return resultSuccess(userInfo); - }, - }, - { - url: '/basic-api/user/sessionTimeout', - method: 'post', - statusCode: 401, - response: () => { - return resultError(); - }, - }, - { - url: '/basic-api/user/tokenExpired', - method: 'post', - statusCode: 200, - response: () => { - return resultError('Token Expired!', { code: ResultEnum.TIMEOUT as number }); - }, - }, -] as MockMethod[]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/api-cascader.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/api-cascader.ts deleted file mode 100644 index 6334ef5b1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/api-cascader.ts +++ /dev/null @@ -1,325 +0,0 @@ -import { MockMethod } from 'vite-plugin-mock'; -import { resultSuccess } from '../_util'; - -const areaList: any[] = [ - { - id: '530825900854620160', - code: '430000', - parentCode: '100000', - levelType: 1, - name: '湖南省', - province: '湖南省', - city: null, - district: null, - town: null, - village: null, - parentPath: '430000', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 16:33:42', - customized: false, - usable: true, - }, - { - id: '530825900883980288', - code: '430100', - parentCode: '430000', - levelType: 2, - name: '长沙市', - province: '湖南省', - city: '长沙市', - district: null, - town: null, - village: null, - parentPath: '430000,430100', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 16:33:42', - customized: false, - usable: true, - }, - { - id: '530825900951089152', - code: '430102', - parentCode: '430100', - levelType: 3, - name: '芙蓉区', - province: '湖南省', - city: '长沙市', - district: '芙蓉区', - town: null, - village: null, - parentPath: '430000,430100,430102', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 16:33:42', - customized: false, - usable: true, - }, - { - id: '530825901014003712', - code: '430104', - parentCode: '430100', - levelType: 3, - name: '岳麓区', - province: '湖南省', - city: '长沙市', - district: '岳麓区', - town: null, - village: null, - parentPath: '430000,430100,430104', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 16:33:42', - customized: false, - usable: true, - }, - { - id: '530825900988837888', - code: '430103', - parentCode: '430100', - levelType: 3, - name: '天心区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: null, - village: null, - parentPath: '430000,430100,430103', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 16:33:42', - customized: false, - usable: true, - }, - { - id: '530826672489115648', - code: '430103002', - parentCode: '430103', - levelType: 4, - name: '坡子街街道', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: null, - parentPath: '430000,430100,430103,430103002', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-12-14 15:26:43', - customized: false, - usable: true, - }, - { - id: '530840241171607552', - code: '430103002001', - parentCode: '430103002', - levelType: 5, - name: '八角亭社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '八角亭社区', - parentPath: '430000,430100,430103,430103002,430103002001', - createTime: '2020-11-30 15:47:31', - updateTime: '2021-01-20 14:07:23', - customized: false, - usable: true, - }, - { - id: '530840241200967680', - code: '430103002002', - parentCode: '430103002', - levelType: 5, - name: '西牌楼社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '西牌楼社区', - parentPath: '430000,430100,430103,430103002,430103002002', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', - customized: false, - usable: true, - }, - { - id: '530840241230327808', - code: '430103002003', - parentCode: '430103002', - levelType: 5, - name: '太平街社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '太平街社区', - parentPath: '430000,430100,430103,430103002,430103002003', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', - customized: false, - usable: true, - }, - { - id: '530840241259687936', - code: '430103002005', - parentCode: '430103002', - levelType: 5, - name: '坡子街社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '坡子街社区', - parentPath: '430000,430100,430103,430103002,430103002005', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', - customized: false, - usable: true, - }, - { - id: '530840241284853760', - code: '430103002006', - parentCode: '430103002', - levelType: 5, - name: '青山祠社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '青山祠社区', - parentPath: '430000,430100,430103,430103002,430103002006', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', - customized: false, - usable: true, - }, - { - id: '530840241310019584', - code: '430103002007', - parentCode: '430103002', - levelType: 5, - name: '沙河社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '沙河社区', - parentPath: '430000,430100,430103,430103002,430103002007', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', - customized: false, - usable: true, - }, - { - id: '530840241381322752', - code: '430103002008', - parentCode: '430103002', - levelType: 5, - name: '碧湘社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '碧湘社区', - parentPath: '430000,430100,430103,430103002,430103002008', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', - customized: false, - usable: true, - }, - { - id: '530840241410682880', - code: '430103002009', - parentCode: '430103002', - levelType: 5, - name: '创远社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '创远社区', - parentPath: '430000,430100,430103,430103002,430103002009', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', - customized: false, - usable: true, - }, - { - id: '530840241431654400', - code: '430103002010', - parentCode: '430103002', - levelType: 5, - name: '楚湘社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '楚湘社区', - parentPath: '430000,430100,430103,430103002,430103002010', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', - customized: false, - usable: true, - }, - { - id: '530840241465208832', - code: '430103002011', - parentCode: '430103002', - levelType: 5, - name: '西湖社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '西湖社区', - parentPath: '430000,430100,430103,430103002,430103002011', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', - customized: false, - usable: true, - }, - { - id: '530840241502957568', - code: '430103002012', - parentCode: '430103002', - levelType: 5, - name: '登仁桥社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '登仁桥社区', - parentPath: '430000,430100,430103,430103002,430103002012', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', - customized: false, - usable: true, - }, - { - id: '530840241553289216', - code: '430103002013', - parentCode: '430103002', - levelType: 5, - name: '文庙坪社区', - province: '湖南省', - city: '长沙市', - district: '天心区', - town: '坡子街街道', - village: '文庙坪社区', - parentPath: '430000,430100,430103,430103002,430103002013', - createTime: '2020-11-30 15:47:31', - updateTime: '2020-11-30 17:30:41', - customized: false, - usable: true, - }, -]; -export default [ - { - url: '/basic-api/cascader/getAreaRecord', - timeout: 1000, - method: 'post', - response: ({ body }) => { - const { parentCode } = body || {}; - if (!parentCode) { - return resultSuccess(areaList.filter((it) => it.code === '430000')); - } - return resultSuccess(areaList.filter((it) => it.parentCode === parentCode)); - }, - }, -] as MockMethod[]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/select-demo.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/select-demo.ts deleted file mode 100644 index 631c6bb05..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/select-demo.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { MockMethod } from 'vite-plugin-mock'; -import { resultSuccess } from '../_util'; - -const demoList = (keyword, count = 20) => { - const result = { - list: [] as any[], - }; - for (let index = 0; index < count; index++) { - result.list.push({ - name: `${keyword ?? ''}选项${index}`, - id: `${index}`, - }); - } - return result; -}; - -export default [ - { - url: '/basic-api/select/getDemoOptions', - timeout: 1000, - method: 'get', - response: ({ query }) => { - const { keyword, count } = query; - console.log(keyword); - return resultSuccess(demoList(keyword, count)); - }, - }, -] as MockMethod[]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/system.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/system.ts deleted file mode 100644 index c41772736..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/system.ts +++ /dev/null @@ -1,202 +0,0 @@ -import { MockMethod } from 'vite-plugin-mock'; -import { resultError, resultPageSuccess, resultSuccess } from '../_util'; - -const accountList = (() => { - const result: any[] = []; - for (let index = 0; index < 20; index++) { - result.push({ - id: `${index}`, - account: '@first', - email: '@email', - nickname: '@cname()', - role: '@first', - createTime: '@datetime', - remark: '@cword(10,20)', - 'status|1': ['0', '1'], - }); - } - return result; -})(); - -const roleList = (() => { - const result: any[] = []; - for (let index = 0; index < 4; index++) { - result.push({ - id: index + 1, - orderNo: `${index + 1}`, - roleName: ['超级管理员', '管理员', '文章管理员', '普通用户'][index], - roleValue: '@first', - createTime: '@datetime', - remark: '@cword(10,20)', - menu: [['0', '1', '2'], ['0', '1'], ['0', '2'], ['2']][index], - 'status|1': ['0', '1'], - }); - } - return result; -})(); - -const deptList = (() => { - const result: any[] = []; - for (let index = 0; index < 3; index++) { - result.push({ - id: `${index}`, - deptName: ['华东分部', '华南分部', '西北分部'][index], - orderNo: index + 1, - createTime: '@datetime', - remark: '@cword(10,20)', - 'status|1': ['0', '0', '1'], - children: (() => { - const children: any[] = []; - for (let j = 0; j < 4; j++) { - children.push({ - id: `${index}-${j}`, - deptName: ['研发部', '市场部', '商务部', '财务部'][j], - orderNo: j + 1, - createTime: '@datetime', - remark: '@cword(10,20)', - 'status|1': ['0', '1'], - parentDept: `${index}`, - children: undefined, - }); - } - return children; - })(), - }); - } - return result; -})(); - -const menuList = (() => { - const result: any[] = []; - for (let index = 0; index < 3; index++) { - result.push({ - id: `${index}`, - icon: ['ion:layers-outline', 'ion:git-compare-outline', 'ion:tv-outline'][index], - component: 'LAYOUT', - type: '0', - menuName: ['Dashboard', '权限管理', '功能'][index], - permission: '', - orderNo: index + 1, - createTime: '@datetime', - 'status|1': ['0', '0', '1'], - children: (() => { - const children: any[] = []; - for (let j = 0; j < 4; j++) { - children.push({ - id: `${index}-${j}`, - type: '1', - menuName: ['菜单1', '菜单2', '菜单3', '菜单4'][j], - icon: 'ion:document', - permission: ['menu1:view', 'menu2:add', 'menu3:update', 'menu4:del'][index], - component: [ - '/dashboard/welcome/index', - '/dashboard/analysis/index', - '/dashboard/workbench/index', - '/dashboard/test/index', - ][j], - orderNo: j + 1, - createTime: '@datetime', - 'status|1': ['0', '1'], - parentMenu: `${index}`, - children: (() => { - const children: any[] = []; - for (let k = 0; k < 4; k++) { - children.push({ - id: `${index}-${j}-${k}`, - type: '2', - menuName: '按钮' + (j + 1) + '-' + (k + 1), - icon: '', - permission: - ['menu1:view', 'menu2:add', 'menu3:update', 'menu4:del'][index] + - ':btn' + - (k + 1), - component: [ - '/dashboard/welcome/index', - '/dashboard/analysis/index', - '/dashboard/workbench/index', - '/dashboard/test/index', - ][j], - orderNo: j + 1, - createTime: '@datetime', - 'status|1': ['0', '1'], - parentMenu: `${index}-${j}`, - children: undefined, - }); - } - return children; - })(), - }); - } - return children; - })(), - }); - } - return result; -})(); - -export default [ - { - url: '/basic-api/system/getAccountList', - timeout: 100, - method: 'get', - response: ({ query }) => { - const { page = 1, pageSize = 20 } = query; - return resultPageSuccess(page, pageSize, accountList); - }, - }, - { - url: '/basic-api/system/getRoleListByPage', - timeout: 100, - method: 'get', - response: ({ query }) => { - const { page = 1, pageSize = 20 } = query; - return resultPageSuccess(page, pageSize, roleList); - }, - }, - { - url: '/basic-api/system/setRoleStatus', - timeout: 500, - method: 'post', - response: ({ query }) => { - const { id, status } = query; - return resultSuccess({ id, status }); - }, - }, - { - url: '/basic-api/system/getAllRoleList', - timeout: 100, - method: 'get', - response: () => { - return resultSuccess(roleList); - }, - }, - { - url: '/basic-api/system/getDeptList', - timeout: 100, - method: 'get', - response: () => { - return resultSuccess(deptList); - }, - }, - { - url: '/basic-api/system/getMenuList', - timeout: 100, - method: 'get', - response: () => { - return resultSuccess(menuList); - }, - }, - { - url: '/basic-api/system/accountExist', - timeout: 500, - method: 'post', - response: ({ body }) => { - const { account } = body || {}; - if (account && account.indexOf('admin') !== -1) { - return resultError('该字段不能包含admin'); - } else { - return resultSuccess(`${account} can use`); - } - }, - }, -] as MockMethod[]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/table-demo.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/table-demo.ts deleted file mode 100644 index f3a0f16fd..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/table-demo.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { MockMethod } from 'vite-plugin-mock'; -import { Random } from 'mockjs'; -import { resultPageSuccess } from '../_util'; - -function getRandomPics(count = 10): string[] { - const arr: string[] = []; - for (let i = 0; i < count; i++) { - arr.push(Random.image('800x600', Random.color(), Random.color(), Random.title())); - } - return arr; -} - -const demoList = (() => { - const result: any[] = []; - for (let index = 0; index < 200; index++) { - result.push({ - id: `${index}`, - beginTime: '@datetime', - endTime: '@datetime', - address: '@city()', - name: '@cname()', - name1: '@cname()', - name2: '@cname()', - name3: '@cname()', - name4: '@cname()', - name5: '@cname()', - name6: '@cname()', - name7: '@cname()', - name8: '@cname()', - avatar: Random.image('400x400', Random.color(), Random.color(), Random.first()), - imgArr: getRandomPics(Math.ceil(Math.random() * 3) + 1), - imgs: getRandomPics(Math.ceil(Math.random() * 3) + 1), - date: `@date('yyyy-MM-dd')`, - time: `@time('HH:mm')`, - 'no|100000-10000000': 100000, - 'status|1': ['normal', 'enable', 'disable'], - }); - } - return result; -})(); - -export default [ - { - url: '/basic-api/table/getDemoList', - timeout: 100, - method: 'get', - response: ({ query }) => { - const { page = 1, pageSize = 20 } = query; - return resultPageSuccess(page, pageSize, demoList); - }, - }, -] as MockMethod[]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/tree-demo.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/tree-demo.ts deleted file mode 100644 index 6fdcb8591..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/demo/tree-demo.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { MockMethod } from 'vite-plugin-mock'; -import { resultSuccess } from '../_util'; - -const demoTreeList = (keyword) => { - const result = { - list: [] as Recordable[], - }; - for (let index = 0; index < 5; index++) { - const children: Recordable[] = []; - for (let j = 0; j < 3; j++) { - children.push({ - title: `${keyword ?? ''}选项${index}-${j}`, - value: `${index}-${j}`, - key: `${index}-${j}`, - }); - } - result.list.push({ - title: `${keyword ?? ''}选项${index}`, - value: `${index}`, - key: `${index}`, - children, - }); - } - return result; -}; - -export default [ - { - url: '/basic-api/tree/getDemoOptions', - timeout: 1000, - method: 'get', - response: ({ query }) => { - const { keyword } = query; - console.log(keyword); - return resultSuccess(demoTreeList(keyword)); - }, - }, -] as MockMethod[]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/sys/menu.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/mock/sys/menu.ts deleted file mode 100644 index 1c47e667c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/sys/menu.ts +++ /dev/null @@ -1,270 +0,0 @@ -import { resultSuccess, resultError, getRequestToken, requestParams } from '../_util'; -import { MockMethod } from 'vite-plugin-mock'; -import { createFakeUserList } from './user'; - -// single -const dashboardRoute = { - path: '/dashboard', - name: 'Dashboard', - component: 'LAYOUT', - redirect: '/dashboard/analysis', - meta: { - title: 'routes.dashboard.dashboard', - hideChildrenInMenu: true, - icon: 'bx:bx-home', - }, - children: [ - { - path: 'analysis', - name: 'Analysis', - component: '/dashboard/analysis/index', - meta: { - hideMenu: true, - hideBreadcrumb: true, - title: 'routes.dashboard.analysis', - currentActiveMenu: '/dashboard', - icon: 'bx:bx-home', - }, - }, - { - path: 'workbench', - name: 'Workbench', - component: '/dashboard/workbench/index', - meta: { - hideMenu: true, - hideBreadcrumb: true, - title: 'routes.dashboard.workbench', - currentActiveMenu: '/dashboard', - icon: 'bx:bx-home', - }, - }, - ], -}; - -const backRoute = { - path: 'back', - name: 'PermissionBackDemo', - meta: { - title: 'routes.demo.permission.back', - }, - - children: [ - { - path: 'page', - name: 'BackAuthPage', - component: '/demo/permission/back/index', - meta: { - title: 'routes.demo.permission.backPage', - }, - }, - { - path: 'btn', - name: 'BackAuthBtn', - component: '/demo/permission/back/Btn', - meta: { - title: 'routes.demo.permission.backBtn', - }, - }, - ], -}; - -const authRoute = { - path: '/permission', - name: 'Permission', - component: 'LAYOUT', - redirect: '/permission/front/page', - meta: { - icon: 'carbon:user-role', - title: 'routes.demo.permission.permission', - }, - children: [backRoute], -}; - -const levelRoute = { - path: '/level', - name: 'Level', - component: 'LAYOUT', - redirect: '/level/menu1/menu1-1', - meta: { - icon: 'carbon:user-role', - title: 'routes.demo.level.level', - }, - - children: [ - { - path: 'menu1', - name: 'Menu1Demo', - meta: { - title: 'Menu1', - }, - children: [ - { - path: 'menu1-1', - name: 'Menu11Demo', - meta: { - title: 'Menu1-1', - }, - children: [ - { - path: 'menu1-1-1', - name: 'Menu111Demo', - component: '/demo/level/Menu111', - meta: { - title: 'Menu111', - }, - }, - ], - }, - { - path: 'menu1-2', - name: 'Menu12Demo', - component: '/demo/level/Menu12', - meta: { - title: 'Menu1-2', - }, - }, - ], - }, - { - path: 'menu2', - name: 'Menu2Demo', - component: '/demo/level/Menu2', - meta: { - title: 'Menu2', - }, - }, - ], -}; - -const sysRoute = { - path: '/system', - name: 'System', - component: 'LAYOUT', - redirect: '/system/account', - meta: { - icon: 'ion:settings-outline', - title: 'routes.demo.system.moduleName', - }, - children: [ - { - path: 'account', - name: 'AccountManagement', - meta: { - title: 'routes.demo.system.account', - ignoreKeepAlive: true, - }, - component: '/demo/system/account/index', - }, - { - path: 'account_detail/:id', - name: 'AccountDetail', - meta: { - hideMenu: true, - title: 'routes.demo.system.account_detail', - ignoreKeepAlive: true, - showMenu: false, - currentActiveMenu: '/system/account', - }, - component: '/demo/system/account/AccountDetail', - }, - { - path: 'role', - name: 'RoleManagement', - meta: { - title: 'routes.demo.system.role', - ignoreKeepAlive: true, - }, - component: '/demo/system/role/index', - }, - - { - path: 'menu', - name: 'MenuManagement', - meta: { - title: 'routes.demo.system.menu', - ignoreKeepAlive: true, - }, - component: '/demo/system/menu/index', - }, - { - path: 'dept', - name: 'DeptManagement', - meta: { - title: 'routes.demo.system.dept', - ignoreKeepAlive: true, - }, - component: '/demo/system/dept/index', - }, - { - path: 'changePassword', - name: 'ChangePassword', - meta: { - title: 'routes.demo.system.password', - ignoreKeepAlive: true, - }, - component: '/demo/system/password/index', - }, - ], -}; - -const linkRoute = { - path: '/link', - name: 'Link', - component: 'LAYOUT', - meta: { - icon: 'ion:tv-outline', - title: 'routes.demo.iframe.frame', - }, - children: [ - { - path: 'doc', - name: 'Doc', - meta: { - title: 'routes.demo.iframe.doc', - frameSrc: 'https://vvbin.cn/doc-next/', - }, - }, - { - path: 'https://vvbin.cn/doc-next/', - name: 'DocExternal', - component: 'LAYOUT', - meta: { - title: 'routes.demo.iframe.docExternal', - }, - }, - ], -}; - -export default [ - { - url: '/basic-api/getMenuList', - timeout: 1000, - method: 'get', - response: (request: requestParams) => { - const token = getRequestToken(request); - if (!token) { - return resultError('Invalid token!'); - } - const checkUser = createFakeUserList().find((item) => item.token === token); - if (!checkUser) { - return resultError('Invalid user token!'); - } - const id = checkUser.userId; - let menu: Object[]; - switch (id) { - case '1': - dashboardRoute.redirect = dashboardRoute.path + '/' + dashboardRoute.children[0].path; - menu = [dashboardRoute, authRoute, levelRoute, sysRoute, linkRoute]; - break; - case '2': - dashboardRoute.redirect = dashboardRoute.path + '/' + dashboardRoute.children[1].path; - menu = [dashboardRoute, authRoute, levelRoute, linkRoute]; - break; - default: - menu = []; - } - - return resultSuccess(menu); - }, - }, -] as MockMethod[]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/sys/user.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/mock/sys/user.ts deleted file mode 100644 index 5b569d4d9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/mock/sys/user.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { MockMethod } from 'vite-plugin-mock'; -import { resultError, resultSuccess, getRequestToken, requestParams } from '../_util'; - -export function createFakeUserList() { - return [ - { - userId: '1', - username: 'vben', - realName: 'Vben Admin', - avatar: 'https://q1.qlogo.cn/g?b=qq&nk=190848757&s=640', - desc: 'manager', - password: '123456', - token: 'fakeToken1', - homePath: '/dashboard/analysis', - roles: [ - { - roleName: 'Super Admin', - value: 'super', - }, - ], - }, - { - userId: '2', - username: 'test', - password: '123456', - realName: 'test user', - avatar: 'https://q1.qlogo.cn/g?b=qq&nk=339449197&s=640', - desc: 'tester', - token: 'fakeToken2', - homePath: '/dashboard/workbench', - roles: [ - { - roleName: 'Tester', - value: 'test', - }, - ], - }, - ]; -} - -const fakeCodeList: any = { - '1': ['1000', '3000', '5000'], - - '2': ['2000', '4000', '6000'], -}; -export default [ - // mock user login - { - url: '/basic-api/login', - timeout: 200, - method: 'post', - response: ({ body }) => { - const { username, password } = body; - const checkUser = createFakeUserList().find( - (item) => item.username === username && password === item.password, - ); - if (!checkUser) { - return resultError('Incorrect account or password!'); - } - const { userId, username: _username, token, realName, desc, roles } = checkUser; - return resultSuccess({ - roles, - userId, - username: _username, - token, - realName, - desc, - }); - }, - }, - { - url: '/basic-api/getUserInfo', - method: 'get', - response: (request: requestParams) => { - const token = getRequestToken(request); - if (!token) return resultError('Invalid token'); - const checkUser = createFakeUserList().find((item) => item.token === token); - if (!checkUser) { - return resultError('The corresponding user information was not obtained!'); - } - return resultSuccess(checkUser); - }, - }, - { - url: '/basic-api/getPermCode', - timeout: 200, - method: 'get', - response: (request: requestParams) => { - const token = getRequestToken(request); - if (!token) return resultError('Invalid token'); - const checkUser = createFakeUserList().find((item) => item.token === token); - if (!checkUser) { - return resultError('Invalid token!'); - } - const codeList = fakeCodeList[checkUser.userId]; - - return resultSuccess(codeList); - }, - }, - { - url: '/basic-api/logout', - timeout: 200, - method: 'get', - response: (request: requestParams) => { - const token = getRequestToken(request); - if (!token) return resultError('Invalid token'); - const checkUser = createFakeUserList().find((item) => item.token === token); - if (!checkUser) { - return resultError('Invalid token!'); - } - return resultSuccess(undefined, { message: 'Token has been destroyed' }); - }, - }, - { - url: '/basic-api/testRetry', - statusCode: 405, - method: 'get', - response: () => { - return resultError('Error!'); - }, - }, -] as MockMethod[]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/nswag/nswag.json b/templates/abp-vnext-pro-nuget-simplify/vben28/nswag/nswag.json deleted file mode 100644 index e7f8cbcf9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/nswag/nswag.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "runtime": "Net70", - "defaultVariables": null, - "documentGenerator": { - "fromDocument": { - "url": "http://localhost:44315/swagger/MyProjectName/swagger.json", - "output": null, - "newLineBehavior": "Auto" - } - }, - "codeGenerators": { - "openApiToTypeScriptClient": { - "className": "{controller}ServiceProxy", - "moduleName": "", - "namespace": "", - "typeScriptVersion": 2.7, - "template": "Axios", - "promiseType": "Promise", - "httpClass": "HttpClient", - "withCredentials": false, - "useSingletonProvider": false, - "injectionTokenType": "OpaqueToken", - "rxJsVersion": 6.0, - "dateTimeType": "DayJS", - "nullValue": "Undefined", - "generateClientClasses": true, - "generateClientInterfaces": false, - "generateOptionalParameters": false, - "exportTypes": true, - "wrapDtoExceptions": false, - "exceptionClass": "ApiException", - "clientBaseClass": "ServiceProxyBase", - "wrapResponses": false, - "wrapResponseMethods": [], - "generateResponseClasses": true, - "responseClass": "SwaggerResponse", - "protectedMethods": [], - "configurationClass": null, - "useTransformOptionsMethod": true, - "useTransformResultMethod": true, - "generateDtoTypes": true, - "operationGenerationMode": "MultipleClientsFromFirstTagAndPathSegments", - "markOptionalProperties": false, - "generateCloneMethod": false, - "typeStyle": "Class", - "enumStyle": "Enum", - "useLeafType": false, - "classTypes": [], - "extendedClasses": [], - "extensionCode": null, - "generateDefaultValues": true, - "excludedTypeNames": [], - "excludedParameterNames": [], - "handleReferences": false, - "generateConstructorInterface": true, - "convertConstructorInterfaceData": false, - "importRequiredTypes": true, - "useGetBaseUrlMethod": false, - "baseUrlTokenName": null, - "queryNullValue": "", - "useAbortSignal": false, - "inlineNamedDictionaries": false, - "inlineNamedAny": false, - "templateDirectory": "./templates", - "typeNameGeneratorType": null, - "propertyNameGeneratorType": null, - "enumNameGeneratorType": null, - "serviceHost": null, - "serviceSchemes": null, - "output": "../src/services/ServiceProxies.ts", - "newLineBehavior": "Auto" - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/nswag/refresh.bat b/templates/abp-vnext-pro-nuget-simplify/vben28/nswag/refresh.bat deleted file mode 100644 index 0011273b1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/nswag/refresh.bat +++ /dev/null @@ -1 +0,0 @@ -"..\node_modules\.bin\nswag" run /runtime:Net70 diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/nswag/templates/AxiosClient.liquid b/templates/abp-vnext-pro-nuget-simplify/vben28/nswag/templates/AxiosClient.liquid deleted file mode 100644 index 99980540e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/nswag/templates/AxiosClient.liquid +++ /dev/null @@ -1,92 +0,0 @@ -{% if HasOperations -%} -{% if GenerateClientInterfaces -%} -{% if ExportTypes %}export {% endif %}interface I{{ Class }} { -{% for operation in Operations -%} - {% template Client.Method.Documentation %} - {{ operation.MethodAccessModifier }}{{ operation.ActualOperationName }}({% for parameter in operation.Parameters %}{{ parameter.VariableName }}{% if GenerateOptionalParameters and parameter.IsOptional %}?{% endif %}: {{ parameter.Type }}{{ parameter.TypePostfix }}{% if parameter.IsLast == false %}, {% endif %}{% endfor %}): Promise<{{ operation.ResultType }}>; -{% endfor -%}} -{% endif -%} - -{% if ExportTypes %}export {% endif %}class {{ Class }} {% if HasBaseClass %}extends {{ BaseClass }} {% endif %}{% if GenerateClientInterfaces %}implements I{{ Class }} {% endif %}{ - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: {% if SupportsStrictNullChecks %}((key: string, value: any) => any) | undefined{% else %}(key: string, value: any) => any{% endif %} = undefined; - -{% if HasExtendedConstructor == false -%} - constructor({% if HasConfigurationClass %}configuration: {{ ConfigurationClass }}, {% endif %}baseUrl?: string, instance?: AxiosInstance) { -{% if HasBaseClass -%} - super({% if HasConfigurationClass %}configuration{% endif %}); -{% endif -%} - this.instance = instance ? instance : axios.create(); -{% if UseGetBaseUrlMethod -%} - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : this.getBaseUrl("{{ BaseUrl }}"); -{% else -%} - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; -{% endif -%} - } -{% endif -%} -{% if HasExtensionCode -%} - - {{ ExtensionCode }} -{% endif -%} -{% for operation in Operations -%} - - {% template Client.Method.Documentation %} - {{ operation.MethodAccessModifier }}{{ operation.ActualOperationName }}({% for parameter in operation.Parameters %}{{ parameter.VariableName }}{% if GenerateOptionalParameters and parameter.IsOptional %}?{% endif %}: {{ parameter.Type }}{{ parameter.TypePostfix }}{% if parameter.IsLast == false %}, {% endif %}{% endfor %} {% if operation.Parameters.size > 0 %},{%endif%} cancelToken?: CancelToken | undefined): Promise<{{ operation.ResultType }}> { - {% template Client.RequestUrl %} - -{% if operation.HasBody -%} - {% template Client.RequestBody %} - -{% endif -%} - let options_ = { -{% if operation.HasBody -%} - data: content_, -{% endif -%} -{% if operation.IsFile -%} - responseType: "blob", -{% endif -%} - method: "{{ operation.HttpMethodUpper | upcase }}", - url: url_, - headers: { -{% for parameter in operation.HeaderParameters -%} - "{{ parameter.Name }}": {{ parameter.VariableName }} !== undefined && {{ parameter.VariableName }} !== null ? "" + {{ parameter.VariableName }} : "", -{% endfor -%} -{% if operation.HasContent or operation.ConsumesFormUrlEncoded -%} - "Content-Type": "{{ operation.Consumes }}", -{% endif -%} -{% if operation.HasResultType and operation.HasAcceptHeaderParameterParameter == false -%} - "Accept": "{{ operation.Produces }}" -{% endif -%} - }, - cancelToken - }; - -{% if UseTransformOptionsMethod -%} - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { -{% else -%} - return this.instance.request(options_).catch((_error: any) => { -{% endif -%} - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { -{% if UseTransformResultMethod -%} - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.process{{ operation.ActualOperationNameUpper }}(_response)); -{% else -%} - return this.process{{ operation.ActualOperationNameUpper }}(_response); -{% endif -%} - }); - } - - protected process{{ operation.ActualOperationNameUpper }}(response: AxiosResponse): Promise<{{ operation.ResultType }}> { - const status = response.status; - {% template Client.ProcessResponse %} - } -{% endfor -%} -} -{% endif -%} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/nswag/templates/Class.liquid b/templates/abp-vnext-pro-nuget-simplify/vben28/nswag/templates/Class.liquid deleted file mode 100644 index 1522d91ee..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/nswag/templates/Class.liquid +++ /dev/null @@ -1,189 +0,0 @@ -{% if HasDescription -%} -/** {{ Description }} */ -{% endif -%} -{% if ExportTypes %}export {% endif %}{% if IsAbstract %}abstract {% endif %}class {{ ClassName }}{{ Inheritance }} { -{% for property in Properties -%} -{% if property.HasDescription -%} - /** {{ property.Description }} */ -{% endif -%} - {% if property.IsReadOnly %}readonly {% endif %}{{ property.PropertyName }}{% if property.IsOptional %}?{% elsif RequiresStrictPropertyInitialization %}!{% endif %}: {{ property.Type }}{{ property.TypePostfix }}; -{% endfor -%} -{% if HasIndexerProperty -%} - - [key: string]: {{ IndexerPropertyValueType }}; -{% endif -%} -{% if HasDiscriminator -%} - - protected _discriminator: string; -{% endif -%} - -{% assign condition_temp = HasInheritance == false or ConvertConstructorInterfaceData -%} -{% if GenerateConstructorInterface or HasBaseDiscriminator -%} - constructor({% if GenerateConstructorInterface %}data?: I{{ ClassName }}{% endif %}) { -{% if HasInheritance -%} - super({% if GenerateConstructorInterface %}data{% endif %}); -{% endif -%} -{% if GenerateConstructorInterface and condition_temp -%} - if (data) { -{% if HasInheritance == false -%} - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } -{% endif -%} -{% if ConvertConstructorInterfaceData -%} -{% for property in Properties -%} -{% if property.SupportsConstructorConversion -%} -{% if property.IsArray -%} - if (data.{{ property.PropertyName }}) { - this.{{ property.PropertyName }} = []; - for (let i = 0; i < data.{{ property.PropertyName }}.length; i++) { - let item = data.{{ property.PropertyName }}[i]; - this.{{ property.PropertyName }}[i] = item && !(item).toJSON ? new {{ property.ArrayItemType }}(item) : <{{ property.ArrayItemType }}>item; - } - } -{% elsif property.IsDictionary -%} - if (data.{{ property.PropertyName }}) { - this.{{ property.PropertyName }} = {}; - for (let key in data.{{ property.PropertyName }}) { - if (data.{{ property.PropertyName }}.hasOwnProperty(key)) { - let item = data.{{ property.PropertyName }}[key]; - this.{{ property.PropertyName }}[key] = item && !(item).toJSON ? new {{ property.DictionaryItemType }}(item) : <{{ property.DictionaryItemType }}>item; - } - } - } -{% else -%} - this.{{ property.PropertyName }} = data.{{ property.PropertyName }} && !(data.{{ property.PropertyName }}).toJSON ? new {{ property.Type }}(data.{{ property.PropertyName }}) : <{{ property.Type }}>this.{{ property.PropertyName }}; -{% endif -%} -{% endif -%} -{% endfor -%} -{% endif -%} - } -{% endif -%} -{% if HasDefaultValues -%} - {% if GenerateConstructorInterface %}if (!data) {% endif %}{ -{% for property in Properties -%} -{% if property.HasDefaultValue -%} - this.{{ property.PropertyName }} = {{ property.DefaultValue }}; -{% endif -%} -{% endfor -%} - } -{% endif -%} -{% if HasBaseDiscriminator -%} - this._discriminator = "{{ DiscriminatorName }}"; -{% endif -%} - } -{% endif -%} - - {% if HasInheritance and SupportsOverrideKeyword %}override {% endif %}init(_data?: any{% if HandleReferences %}, _mappings?: any{% endif %}) { -{% if HasInheritance -%} - super.init(_data); -{% endif -%} -{% if HasIndexerProperty or HasProperties -%} - if (_data) { -{% if HasIndexerProperty -%} - for (var property in _data) { - if (_data.hasOwnProperty(property)) - this[property] = _data[property]; - } -{% endif -%} -{% for property in Properties -%} - {{ property.ConvertToClassCode | strip | tab }} -{% endfor -%} - } -{% endif -%} - } - - static {% if HasInheritance and SupportsOverrideKeyword %}override {% endif %}fromJS(data: any{% if HandleReferences %}, _mappings?: any{% endif %}): {{ ClassName }}{% if HandleReferences %} | null{% endif %} { - data = typeof data === 'object' ? data : {}; -{% if HandleReferences -%} -{% if HasBaseDiscriminator -%} -{% for derivedClass in DerivedClasses -%} - if (data["{{ BaseDiscriminator }}"] === "{{ derivedClass.Discriminator }}") -{% if derivedClass.IsAbstract -%} - throw new Error("The abstract class '{{ derivedClass.ClassName }}' cannot be instantiated."); -{% else -%} - return createInstance<{{ derivedClass.ClassName }}>(data, _mappings, {{ derivedClass.ClassName }}); -{% endif -%} -{% endfor -%} -{% endif -%} -{% if IsAbstract -%} - throw new Error("The abstract class '{{ ClassName }}' cannot be instantiated."); -{% else -%} - return createInstance<{{ ClassName }}>(data, _mappings, {{ ClassName }}); -{% endif -%} -{% else -%} -{% if HasBaseDiscriminator -%} -{% for derivedClass in DerivedClasses -%} - if (data["{{ BaseDiscriminator }}"] === "{{ derivedClass.Discriminator }}") { -{% if derivedClass.IsAbstract -%} - throw new Error("The abstract class '{{ derivedClass.ClassName }}' cannot be instantiated."); -{% else -%} - let result = new {{ derivedClass.ClassName }}(); - result.init(data); - return result; -{% endif -%} - } -{% endfor -%} -{% endif -%} -{% if IsAbstract -%} - throw new Error("The abstract class '{{ ClassName }}' cannot be instantiated."); -{% else -%} - let result = new {{ ClassName }}(); - result.init(data); - return result; -{% endif -%} -{% endif -%} - } - - {% if HasInheritance and SupportsOverrideKeyword %}override {% endif %}toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; -{% if HasIndexerProperty -%} - for (var property in this) { - if (this.hasOwnProperty(property)) - data[property] = this[property]; - } -{% endif -%} -{% if HasDiscriminator -%} - data["{{ BaseDiscriminator }}"] = this._discriminator; -{% endif -%} -{% for property in Properties -%} - {{ property.ConvertToJavaScriptCode | replace: "toISOString","toLocaleString" | tab }} -{% endfor -%} -{% if HasInheritance -%} - super.toJSON(data); -{% endif -%} - return data; - } -{% if GenerateCloneMethod -%} - - clone(): {{ ClassName }} { -{% if IsAbstract -%} - throw new Error("The abstract class '{{ ClassName }}' cannot be instantiated."); -{% else -%} - const json = this.toJSON(); - let result = new {{ ClassName }}(); - result.init(json); - return result; -{% endif -%} - } -{% endif -%} -} -{% if GenerateConstructorInterface -%} - -{% if HasDescription -%} -/** {{ Description }} */ -{% endif -%} -{% if ExportTypes %}export {% endif %}interface I{{ ClassName }}{{ InterfaceInheritance }} { -{% for property in Properties -%} -{% if property.HasDescription -%} - /** {{ property.Description }} */ -{% endif -%} - {{ property.PropertyName }}{% if property.IsOptional %}?{% endif %}: {{ property.ConstructorInterfaceType }}{{ property.TypePostfix }}; -{% endfor -%} -{% if HasIndexerProperty -%} - - [key: string]: {{ IndexerPropertyValueType }}; -{% endif -%} -} -{% endif -%} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/nswag/templates/File.liquid b/templates/abp-vnext-pro-nuget-simplify/vben28/nswag/templates/File.liquid deleted file mode 100644 index c170afb4f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/nswag/templates/File.liquid +++ /dev/null @@ -1,160 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -//---------------------- -// -// Generated using the NSwag toolchain v{{ ToolchainVersion }} (http://NSwag.org) -// -//---------------------- -// ReSharper disable InconsistentNaming - -{{ ExtensionCodeImport -}} -{% if ImportRequiredTypes -%} -{% if GenerateClientClasses -%} -{% if Framework.IsAngular -%} - -{% if Framework.UseRxJs5 -%} -import 'rxjs/add/observable/fromPromise'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/observable/throw'; -import 'rxjs/add/operator/map'; -import 'rxjs/add/operator/toPromise'; -import 'rxjs/add/operator/mergeMap'; -import 'rxjs/add/operator/catch'; - -import { Observable } from 'rxjs/Observable'; -{% else -%} -import { mergeMap as {{ Framework.RxJs.ObservableMergeMapMethod }}, catchError as {{ Framework.RxJs.ObservableCatchMethod }} } from 'rxjs/operators'; -import { Observable, {% if UseTransformOptionsMethod %}from as {{ Framework.RxJs.ObservableFromMethod }}, {% endif %}throwError as {{ Framework.RxJs.ObservableThrowMethod }}, of as {{ Framework.RxJs.ObservableOfMethod }} } from 'rxjs'; -{% endif -%} -import { Injectable, Inject, Optional, {{ Framework.Angular.InjectionTokenType }} } from '@angular/core'; -{% if Framework.Angular.UseHttpClient -%} -import { HttpClient, HttpHeaders, HttpResponse, HttpResponseBase } from '@angular/common/http'; -{% else -%} -import { Http, Headers, ResponseContentType, Response{% if UseTransformOptionsMethod %}, RequestOptionsArgs{% endif %} } from '@angular/http'; -{% endif -%} -{% endif -%} -{% if Framework.IsAurelia -%} - -import { inject } from 'aurelia-framework'; -import { HttpClient, RequestInit } from 'aurelia-fetch-client'; -{% endif -%} -{% if Framework.IsAngularJS -%} - -import * as ng from 'angular'; -{% endif -%} -{% if Framework.IsAxios -%} -import {ServiceProxyBase} from './ServiceProxyBase' -import axios, { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse, CancelToken } from 'axios'; -{% endif -%} -{% if Framework.IsKnockout -%} - -import * as ko from 'knockout'; -{% endif -%} -{% if Framework.IsJQuery -%} - -import * as jQuery from 'jquery'; -{% endif -%} -{% endif -%} -{% if Framework.UseMomentJS -%} - -import moment from 'moment'; -{% if RequiresMomentJSDuration -%} -import 'moment-duration-format'; -{% endif -%} -{% endif -%} -{% if Framework.UseDayJS -%} - -import dayjs from 'dayjs'; -{% endif -%} -{% if Framework.UseLuxon -%} - -import { DateTime, Duration } from "luxon"; -{% endif -%} -{% endif -%} - -{% if HasModuleName -%} -{% if ExportTypes %}export {% endif %}module {{ ModuleName }} { -{% endif -%} -{% if HasNamespace -%} -namespace {{ Namespace }} { -{% endif -%} -{% if GenerateClientClasses and Framework.IsAngular -%} -{% if ExportTypes %}export {% endif %}const {{ Framework.Angular.BaseUrlTokenName }} = new {{ Framework.Angular.InjectionTokenType }}{% if Framework.Angular.InjectionTokenType == "InjectionToken" %}{% endif %}('{{ Framework.Angular.BaseUrlTokenName }}'); - -{% endif -%} -{{ ExtensionCodeTop }} - -{{ Clients }} - -{{ Types }} - -{% if WrapResponses and GenerateResponseClasses -%} -{% for responseClassName in ResponseClassNames -%} -{% if ExportTypes %}export {% endif %}class {{ responseClassName }} { - status: number; - headers: { [key: string]: any; }; - result: TResult; - - constructor(status: number, headers: { [key: string]: any; }, result: TResult) - { - this.status = status; - this.headers = headers; - this.result = result; - } -} - -{% endfor -%} -{% endif -%} -{% if RequiresFileParameterInterface -%} -{% if ExportTypes %}export {% endif %}interface FileParameter { - data: any; - fileName: string; -} - -{% endif -%} -{% if RequiresFileResponseInterface -%} -{% if ExportTypes %}export {% endif %}interface FileResponse { - data: Blob; - status: number; - fileName?: string; - headers?: { [name: string]: any }; -} - -{% endif -%} -{% if RequiresExceptionClass -%} -{% if ExportTypes %}export {% endif %}class {{ ExceptionClassName }} extends Error { - message: string; - status: number; - response: string; - headers: { [key: string]: any; }; - result: any; - - constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) { - super(); - - this.message = message; - this.status = status; - this.response = response; - this.headers = headers; - this.result = result; - } - - protected is{{ ExceptionClassName }} = true; - - static is{{ ExceptionClassName }}(obj: any): obj is {{ ExceptionClassName }} { - return obj.is{{ ExceptionClassName }} === true; - } -} - -{% endif -%} -{% if GenerateClientClasses -%} -{% template File.Utilities %} -{% endif -%} - -{{ ExtensionCodeBottom }} -{% if HasNamespace -%} -} -{% endif -%} -{% if HasModuleName -%} -} -{% endif -%} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/package.json b/templates/abp-vnext-pro-nuget-simplify/vben28/package.json deleted file mode 100644 index 7940cb02f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/package.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "name": "vben-admin", - "version": "2.8.0", - "author": { - "name": "vben", - "email": "anncwb@126.com", - "url": "https://github.com/anncwb" - }, - "scripts": { - "nswag": "cd nswag &.\\refresh.bat", - "bootstrap": "pnpm install", - "serve": "npm run dev", - "dev": "vite", - "build": "cross-env NODE_ENV=production vite build && esno ./build/script/postBuild.ts", - "build:test": "cross-env vite build --mode test && esno ./build/script/postBuild.ts", - "build:no-cache": "pnpm clean:cache && npm run build", - "report": "cross-env REPORT=true npm run build", - "type:check": "vue-tsc --noEmit --skipLibCheck", - "preview": "npm run build && vite preview", - "preview:dist": "vite preview", - "log": "conventional-changelog -p angular -i CHANGELOG.md -s", - "clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite", - "clean:lib": "rimraf node_modules", - "lint:eslint": "eslint --cache --max-warnings 0 \"{src,mock}/**/*.{vue,ts,tsx}\" --fix", - "lint:prettier": "prettier --write \"src/**/*.{js,json,tsx,css,less,scss,vue,html,md}\"", - "lint:stylelint": "stylelint --cache --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/", - "lint:lint-staged": "lint-staged", - "test:unit": "jest", - "test:gzip": "npx http-server dist --cors --gzip -c-1", - "test:br": "npx http-server dist --cors --brotli -c-1", - "reinstall": "rimraf pnpm-lock.yaml && rimraf package.lock.json && rimraf node_modules && npm run bootstrap", - "gen:icon": "esno ./build/generate/icon/index.ts" - }, - "dependencies": { - "@ant-design/colors": "^6.0.0", - "@ant-design/icons-vue": "^6.1.0", - "@iconify/iconify": "^2.2.1", - "@logicflow/core": "^1.1.13", - "@logicflow/extension": "^1.1.13", - "@microsoft/signalr": "^7.0.2", - "@vue/runtime-core": "^3.2.33", - "@vue/shared": "^3.2.33", - "@vueuse/core": "^8.3.0", - "@vueuse/shared": "^8.3.0", - "@zxcvbn-ts/core": "^2.0.1", - "ali-oss": "^6.16.0", - "ant-design-vue": "^3.2.0", - "axios": "^0.26.1", - "codemirror": "^5.65.3", - "cropperjs": "^1.5.12", - "crypto-js": "^4.1.1", - "dayjs": "^1.11.1", - "echarts": "^5.3.2", - "intro.js": "^5.1.0", - "lodash-es": "^4.17.21", - "mockjs": "^1.1.0", - "nprogress": "^0.2.0", - "nswag": "^13.18.2", - "path-to-regexp": "^6.2.0", - "pinia": "2.0.12", - "print-js": "^1.6.0", - "qrcode": "^1.5.0", - "qs": "^6.10.3", - "resize-observer-polyfill": "^1.5.1", - "showdown": "^2.1.0", - "sortablejs": "^1.15.0", - "tinymce": "^5.10.3", - "uuid": "^8.3.2", - "vditor": "^3.8.13", - "vue": "3.2.33", - "vue-i18n": "^9.1.9", - "vue-json-pretty": "^2.0.6", - "vue-router": "^4.0.14", - "vue-types": "^4.1.1", - "xlsx": "^0.18.5", - "oidc-client": "^1.11.5", - "jwt-decode": "^3.1.2" - }, - "devDependencies": { - "@commitlint/cli": "^16.2.3", - "@commitlint/config-conventional": "^16.2.1", - "@iconify/json": "^2.1.30", - "@purge-icons/generated": "^0.8.1", - "@types/codemirror": "^5.60.5", - "@types/crypto-js": "^4.1.1", - "@types/fs-extra": "^9.0.13", - "@types/inquirer": "^8.2.1", - "@types/intro.js": "^3.0.2", - "@types/lodash-es": "^4.17.6", - "@types/mockjs": "^1.0.6", - "@types/node": "^17.0.25", - "@types/nprogress": "^0.2.0", - "@types/qrcode": "^1.4.2", - "@types/qs": "^6.9.7", - "@types/showdown": "^1.9.4", - "@types/sortablejs": "^1.10.7", - "@typescript-eslint/eslint-plugin": "^5.20.0", - "@typescript-eslint/parser": "^5.20.0", - "@vitejs/plugin-legacy": "^1.8.1", - "@vitejs/plugin-vue": "^2.3.1", - "@vitejs/plugin-vue-jsx": "^1.3.10", - "@vue/compiler-sfc": "^3.2.33", - "@vue/test-utils": "^2.0.0-rc.21", - "autoprefixer": "^10.4.4", - "commitizen": "^4.2.4", - "conventional-changelog-cli": "^2.2.2", - "cross-env": "^7.0.3", - "dotenv": "^16.0.0", - "eslint": "^8.13.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.0.0", - "eslint-plugin-vue": "^8.6.0", - "esno": "^0.14.1", - "fs-extra": "^10.1.0", - "inquirer": "^8.2.2", - "less": "^4.1.2", - "lint-staged": "12.3.7", - "npm-run-all": "^4.1.5", - "picocolors": "^1.0.0", - "postcss": "^8.4.12", - "postcss-html": "^1.4.1", - "postcss-less": "^6.0.0", - "prettier": "^2.6.2", - "rimraf": "^3.0.2", - "rollup": "^2.70.2", - "rollup-plugin-visualizer": "^5.6.0", - "stylelint": "^14.7.1", - "stylelint-config-prettier": "^9.0.3", - "stylelint-config-recommended": "^7.0.0", - "stylelint-config-recommended-vue": "^1.4.0", - "stylelint-config-standard": "^25.0.0", - "stylelint-order": "^5.0.0", - "ts-node": "^10.7.0", - "typescript": "^4.6.3", - "vite": "^2.9.5", - "vite-plugin-compression": "^0.5.1", - "vite-plugin-html": "^3.2.0", - "vite-plugin-mkcert": "^1.6.0", - "vite-plugin-mock": "^2.9.6", - "vite-plugin-purge-icons": "^0.8.1", - "vite-plugin-pwa": "^0.11.13", - "vite-plugin-style-import": "^2.0.0", - "vite-plugin-svg-icons": "^2.0.1", - "vite-plugin-theme": "^0.8.6", - "vite-plugin-vue-setup-extend": "^0.4.0", - "vite-plugin-windicss": "^1.8.4", - "vue-eslint-parser": "^8.3.0", - "vue-tsc": "^0.33.9" - }, - "resolutions": { - "bin-wrapper": "npm:bin-wrapper-china", - "rollup": "^2.56.3" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/anncwb/vue-vben-admin.git" - }, - "license": "MIT", - "bugs": { - "url": "https://github.com/anncwb/vue-vben-admin/issues" - }, - "homepage": "https://github.com/anncwb/vue-vben-admin", - "engines": { - "node": "^12 || >=14" - }, - "lint-staged": { - "*.{js,jsx,ts,tsx}": [ - "eslint --fix", - "prettier --write" - ], - "{!(package)*.json,*.code-snippets,.!(browserslist)*rc}": [ - "prettier --write--parser json" - ], - "package.json": [ - "prettier --write" - ], - "*.vue": [ - "eslint --fix", - "prettier --write", - "stylelint --fix" - ], - "*.{scss,less,styl,html}": [ - "stylelint --fix", - "prettier --write" - ], - "*.md": [ - "prettier --write" - ] - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/postcss.config.js b/templates/abp-vnext-pro-nuget-simplify/vben28/postcss.config.js deleted file mode 100644 index a47ef4f95..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/postcss.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - plugins: { - autoprefixer: {}, - }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/prettier.config.js b/templates/abp-vnext-pro-nuget-simplify/vben28/prettier.config.js deleted file mode 100644 index 51f8d01be..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/prettier.config.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - printWidth: 100, - semi: true, - vueIndentScriptAndStyle: true, - singleQuote: true, - trailingComma: 'all', - proseWrap: 'never', - htmlWhitespaceSensitivity: 'strict', - endOfLine: 'auto', -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/public/favicon.ico b/templates/abp-vnext-pro-nuget-simplify/vben28/public/favicon.ico deleted file mode 100644 index f0fc9071eb258a555de8fe811ff8d64b9a5462a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16958 zcmdU%ZBSI#8OJxoQO0qa3?H0~!`OVvWHL)WwbBxr=w|8wr1_3quh%iX=Z z?6S_`+pShsh<@>>Dt z)7xiIHu^?FLt({q|B3Xc1UJ{Y?H@VwGJh3c7cy>@d@`R~akk)%^=ADfzQ+VR_47GJ zi$7Wp?vZd|SJYz!W5?U5qwjEDQc!+yvxfU`MWd}{D9STr*MpT0?C*B;%YclR4)&j1 zyU_M1jmyERbHMXm5NAc6kzUlQ>l5jn*!TVVgUW!{QPqb7oqziL_sY}ElHW1_`%G%{ zQ%dg+nWq0@8QbyH5|$PtS+|-kKF<@tPIi9IROs*Oc5|QI0)9BNB~4djcSHg=jqkG^ zc0Md^oSIp@yRj2Lmw~icuMEKca3#if*+r`@Jnpj7DGiy3p&Gx_kcbD%I>Rsrc`%*PzplJ)hPUHM+KBqNcn-8zp%KAFG zS^3(3Gptv*D_!;}%YJDUI~>22b$-{v@_x6Lb9}QYleJWy<IcQ|Bs1b~JyGZUc4prZ*4KU&ZT}K)|0E~TR{UYVFApij1Aio~-;uAO zH7vE&Ygf9Q41!zu|J_^4YV*pS-*aAB!*2BSv8)#pIREv|9tPXPzkijun>8Po`v#>y zo|4V&1wH$!_xtR;4Gh5^y0ii4KPvzA#AH!Ve|^jo+0E-WVCxc`jLN*QW@lX&?Cjiu z3U=bN0@m5k!oJ;gkjEwc(>t}1(|byI8zOtqSay=f>9u#TFP404h+QFv)uIi6J%aYE zXm3SXSAU-ykDNsPtseO)&&=oJ8I1u|Tk@H8=|7$ENH)Zm|A+OgEMc1*j($|OYCAiY zoW=6rNDLG^=0s8(=0$ugAiGEVb^h|I)8)SUH?HHFtTJ}s&5hi)kv+_Ld5x1*okq{Q zkv6Z;yF4F~$HRHl2B_`R{-T~b=#7Il13S6Bh>vIgJAIy=SB&#|^H9bMJUh1od|nLx zM}oO$spRnIIT-BJ9$*9Qq<`9<_orTyktSH|yg!&}Z6rnGY~tO?VDYt#pt3vWMVJdM zq_Y-Jb)!C9y7XU|zj~g_cuEtfu*qPTZK9N-wZGBd+yT?T*rl>>UF`O$&kA{XS51>k zxEA~6s(K!u{`^NZ_oFm=er?BV6?WS(mv`t8XJkB!%eHfxaXj09vH_Bn&fGlJeRODq z=i6Q1>cZ&@f5rNAHa~SKoyEv?t&Tw}@+mANF6IzXyze z-}4`^!K>FfZ*8W$pL5&su5SNi=fy9C`~hwM4Fwe(>E`8b2HVQz>WN>BaUtbL``5C6 zT7AM>|F`}nm5trI$HvFTSm}G8I@^?*U$9df7QfKw-_ol!{`ty}H3Yk1@8UQYN^DMc z%16nsWLNTcR$pNDiW)a}X3rt7cEMQxx72IRe|+VyNiXH>Lwz?{wrc;w$)B*pZHyE8 z*YdB{UJ4pN=v{8}kFMM8qI;$O554<|8;junI&lvlD`>n>y8W+t z9~TViKgNmT=V^{K*{CTq`e`xx@v=H)p(i5jvn4168 z7I{4|dV84B{;xV6^>;D;hZ{fUe{-R@S-$LlDEV>Ui`^Oip6k9UHP0hEox|ShxW?mz z6~9^D|3Jm2`Lh2d_&Z>)+fOxcuI{>KO?I;JVaXpOInRaZZlSu}YP}2o+ui-#-u*aw zhtb)TGQN6@3rl{ph3|jT9vI!L)Vu#J__^Zorv~G*H+H@H?>gJWXbtbl<>H)#@}aWT z-^H9`*W{n^yJfcNcprL zJ>%)K*Dz5BrH?xy&hrn_KmDpU=SG8L!t<~FutHU4E$FvF3F< z|0I6;(S2H9&%dV-r2*(- z8Oql+uT$1PP|qkk3N96L7@90OfEjl=ISlS-*}kk+aBaQX!lH}r|F^HWST*K68_@=@+oI{_{<}W zlK)d4jYqW6J90=O9|_1qf^pg3Abg%28Sv!DK=^}lyocIle}?dFj(3OupzxFA@CUSf z`E&68YLzR(ZF14h`a0fcw9Da6UvLXK2w%ua$W8b{u1-1IC_~7-oqQ;aX8^qjJqf)z R^@tK5f*vWt)8xx~|39(0x z2s#MenDBE9406{yy;Ue_5#Ns6&wF1qkx{2ZA=hC%@ki zdvN!Mjn_GK?_bI)F9B$j4DG>P2xk$f*4hQcO3$LF? zUNmGX(0h0M0b4p!)lc#DYs)cT1+v1P!>V7;MUD!G)L`OtA7+r|Bo@me*2`z8DL@j) zwU(Hp$z5P`o&NJ_$M$!$VYQ0E8C|shcgs2}9oBES3^T~Or~fza`Dqw(g*yCqJ%*EB-R;WhmtH`2V` zm5(^oU#smin7N@_>4RVQQp48~59G^VT2*0RRl<&hN+t7fqgulW&eum0xzID}L>#u4 z4MD{9zSU{MBrBZ69M!9L_R+qatlftiPEyGTJj&14V5l zc#`F>@JxQ%ZOgrHtM6RN)36uWB#mW{9&m~7nSPh$5PtJOu3J|MEJ9+gG1 zqU?3Cy=M?^Ds^ru!VZleN`;h)Wsox(n1Lw&Cr17gebE6OC9Cw&d-$nWaXMGP_{vd? z1zorOQeHOg7C1gorjsi#rc~r5&=yxj7$+_+5rz&SJVFTW=2%(zd|wkeiKs?&Yd6n2 zE5gQJW4(jj$xC23q^P!F>|)2A`fUYSU){-WODUn=OB`VM>s5?JTpNECHQ(~hA6>ej-Ug3~aN%;52w_XfxK7*3Xr zhSzW~kFp66SHEjdv4OuMHj@Z)sG;u&F%xvEkr8qzTy;IawkjPl3RKZSXJ;iP#_n=Z=S6U#1rtxdpU61|7q zNOaIZNU4lO2ZTEG>#$43uh#D?xVaaCwCF7GKogY=r_I8*$*(_kn{zDt&bL|FL6?<8 zR;TWrN>WES;chzNPOno)2e2apkGM>?mi+}odM+X$NO4*m9wGItN|Sv0a=Fl|!iVz$ zns9#IGu;XFRh)+T58`yf zG-3ur%XE`_Gga5eE$b+%7&#O&ju)XBOgI(fCoOiI=*z9$&xz@K9pHUkV7NNF+xZ)Y z?72CM)CmWKYBs_NkHhlzz(Awvjj+?08gbNueAe=rtyqMZ_Su9l_OA%h$kr&r!kDU) zePkOKX+PYY4>q;my`_|`;P^tDhM&v=ma^h1Mfl)cy#Lj|@_Bn^`)ClW)N!D|$|!ax zAB}bWA}(_GiFC4I*4XswchLRwB14V)$AQ!4Iq?3R3(US07pWVCz{rUsDFnh6DpBj8 zSwvqrssmfsnL@a&0k{7t2G0+L3>`fn)RU7JWkuzoG@vOLox$`Cfdp3drlyvM%mMJDnBAgk}amRg@(y~rw9q4^_`~RIfgkbC4aaI$nI)onbo_5) z%x~9usB4FI`mRq{WCp1ka6wQ)%W1grQ4(+nQ%X#!>1i8RqPc7E6D@3mKLI@fNhFt` zT7MwcBM>&XC0jpk-5GGXuDKN23OWToclp2~aaU2NU zA53O4GXbHQOGxi? z_ZhH^SY}ZL(*>R*8-stm=wuzi(bfa@RACTVqr+zwsjsDJ~(3n5gMN~Y~CW@sp%ur#c?zHqrFBtC0n z#&iX%i9P~BqI$GF#{kmK1Mjr&^@+YBCv$R~PiF*l!y(NRFGF+hW*RZ~B6Z4Tl{Q*Z z4lyejIgL7TTLPWChQo^ge4W=b2H!Ma%0ADEXvtuKrm~;1JGn$Ij4B25vF0A74ffui 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℘T7WurH3|@k8^I&g~j7C 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 s+6jerali:not(.tox-checklist--hidden){margin: .25em 0;list-style: none;} - -.tox-checklist>li:not(.tox-checklist--hidden)::before{position: absolute;width: 1em;height: 1em;margin-top: .125em;margin-left: -1.5em;cursor: pointer;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");background-size: 100%;content: '';} - -.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");} - -[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-right: -1.5em;margin-left: 0;} - -code[class*=language-],pre[class*=language-]{font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size: .875rem;-webkit-hyphens: none;-ms-hyphens: none;hyphens: none;line-height: 1.5;word-spacing: normal;color: #000;text-shadow: 0 1px #fff;word-break: normal;word-wrap: normal;white-space: pre;-moz-tab-size: 4;tab-size: 4;} - -code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow: none;background: #b3d4fc;} - -code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow: none;background: #b3d4fc;}@media print{code[class*=language-],pre[class*=language-]{text-shadow: none;}} - -pre[class*=language-]{padding: 1em;margin: .5em 0;overflow: auto;} - -:not(pre)>code[class*=language-],pre[class*=language-]{background: 0 0 !important;border: 1px solid #ccc;} - -:not(pre)>code[class*=language-]{padding: .1em;border-radius: .3em;} - -.token.cdata,.token.comment,.token.doctype,.token.prolog{color: #708090;} - -.token.punctuation{color: #999;} - -.namespace{opacity: .7;} - -.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color: #905;} - -.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color: #690;} - -.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color: #a67f59;background: hsla(0,0%,100%,.5);} - -.token.atrule,.token.attr-value,.token.keyword{color: #07a;} - -.token.function{color: #dd4a68;} - -.token.important,.token.regex,.token.variable{color: #e90;} - -.token.bold,.token.important{font-weight: 700;} - -.token.italic{font-style: italic;} - -.token.entity{cursor: help;} - -:not([dir=rtl]) code[class*=language-],:not([dir=rtl]) pre[class*=language-]{text-align: left;direction: ltr;} - -[dir=rtl] code[class*=language-],[dir=rtl] pre[class*=language-]{text-align: right;direction: rtl;} - -.mce-content-body{overflow-wrap: break-word;word-wrap: break-word;} - -.mce-content-body .mce-visual-caret{position: absolute;background-color: #000;background-color: currentColor;} - -.mce-content-body .mce-visual-caret-hidden{display: none;} - -.mce-content-body [data-mce-caret]{position: absolute;top: 0;right: auto;left: -1000px;padding: 0;margin: 0;} - -.mce-content-body .mce-offscreen-selection{position: absolute;left: -9999999999px;max-width: 1000000px;} - -.mce-content-body [contentEditable=false]{cursor: default;} - -.mce-content-body [contentEditable=true]{cursor: text;} - -.tox-cursor-format-painter{cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default;} - -.mce-content-body figure.align-left{float: left;} - -.mce-content-body figure.align-right{float: right;} - -.mce-content-body figure.image.align-center{display: table;margin-right: auto;margin-left: auto;} - -.mce-preview-object{position: relative;display: inline-block;margin: 0 2px 0 2px;line-height: 0;border: 1px solid gray;} - -.mce-preview-object .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);} - -.mce-preview-object[data-mce-selected="2"] .mce-shim{display: none;} - -.mce-object{background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border: 1px dashed #aaa;} - -.mce-pagebreak{display: block;width: 100%;height: 5px;margin-top: 15px;cursor: default;border: 1px dashed #aaa;page-break-before: always;}@media print{.mce-pagebreak{border: 0;}} - -.tiny-pageembed .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);} - -.tiny-pageembed[data-mce-selected="2"] .mce-shim{display: none;} - -.tiny-pageembed{position: relative;display: inline-block;} - -.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{position: relative;display: block;width: 100%;padding: 0;overflow: hidden;} - -.tiny-pageembed--16by9::before,.tiny-pageembed--1by1::before,.tiny-pageembed--21by9::before,.tiny-pageembed--4by3::before{display: block;content: "";} - -.tiny-pageembed--21by9::before{padding-top: 42.857143%;} - -.tiny-pageembed--16by9::before{padding-top: 56.25%;} - -.tiny-pageembed--4by3::before{padding-top: 75%;} - -.tiny-pageembed--1by1::before{padding-top: 100%;} - -.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{position: absolute;top: 0;left: 0;width: 100%;height: 100%;border: 0;} - -.mce-content-body div.mce-resizehandle{position: absolute;z-index: 10000;width: 10px;height: 10px;background-color: #4099ff;border-color: #4099ff;border-style: solid;border-width: 1px;box-sizing: border-box;} - -.mce-content-body div.mce-resizehandle:hover{background-color: #4099ff;} - -.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor: nwse-resize;} - -.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor: nesw-resize;} - -.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor: nwse-resize;} - -.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor: nesw-resize;} - -.mce-content-body .mce-clonedresizable{position: absolute;z-index: 10000;outline: 1px dashed #000;opacity: .5;} - -.mce-content-body .mce-resize-helper{position: absolute;z-index: 10001;display: none;padding: 5px;margin: 5px 10px;font-family: sans-serif;font-size: 12px;line-height: 14px;color: #fff;white-space: nowrap;background: #555;background: rgba(0,0,0,.75);border: 1px;border-radius: 3px;} - -.mce-match-marker{color: #fff;background: #aaa;} - -.mce-match-marker-selected{color: #fff;background: #39f;} - -.mce-content-body img[data-mce-selected],.mce-content-body table[data-mce-selected]{outline: 3px solid #b4d7ff;} - -.mce-content-body hr[data-mce-selected]{outline: 3px solid #b4d7ff;outline-offset: 1px;} - -.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline: 3px solid #b4d7ff;} - -.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline: 3px solid #b4d7ff;} - -.mce-content-body [contentEditable=false][data-mce-selected]{cursor: not-allowed;outline: 3px solid #b4d7ff;} - -.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline: 0;} - -.mce-content-body [data-mce-selected=inline-boundary]{background-color: #b4d7ff;} - -.mce-content-body .mce-edit-focus{outline: 3px solid #b4d7ff;} - -.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{background-color: #b4d7ff !important;} - -.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background: 0 0;} - -.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background: 0 0;} - -.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{-webkit-touch-callout: none;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;} - -.mce-content-body img::-moz-selection{background: 0 0;} - -.mce-content-body img::selection{background: 0 0;} - -.ephox-snooker-resizer-bar{background-color: #b4d7ff;opacity: 0;} - -.ephox-snooker-resizer-cols{cursor: col-resize;} - -.ephox-snooker-resizer-rows{cursor: row-resize;} - -.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity: 1;} - -.mce-spellchecker-word{height: 2rem;cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.5'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;} - -.mce-spellchecker-grammar{cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23008800'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;} - -.mce-toc{border: 1px solid gray;} - -.mce-toc h2{margin: 4px;} - -.mce-toc li{list-style-type: none;} - -.mce-item-table,.mce-item-table caption,.mce-item-table td,.mce-item-table th{border: 1px dashed #bbb;} - -.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{padding-top: 10px;margin-left: 3px;background-repeat: no-repeat;border: 1px dashed #bbb;} - -.mce-visualblocks p{background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);} - -.mce-visualblocks h1{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);} - -.mce-visualblocks h2{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);} - -.mce-visualblocks h3{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);} - -.mce-visualblocks h4{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);} - -.mce-visualblocks h5{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);} - -.mce-visualblocks h6{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);} - -.mce-visualblocks div:not([data-mce-bogus]){background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);} - -.mce-visualblocks section{background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);} - -.mce-visualblocks article{background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);} - -.mce-visualblocks blockquote{background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);} - -.mce-visualblocks address{background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);} - -.mce-visualblocks pre{background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);} - -.mce-visualblocks figure{background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);} - -.mce-visualblocks figcaption{border: 1px dashed #bbb;} - -.mce-visualblocks hgroup{background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);} - -.mce-visualblocks aside{background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);} - -.mce-visualblocks ul{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);} - -.mce-visualblocks ol{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);} - -.mce-visualblocks dl{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);} - -.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left: 3px;} - -.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x: right;margin-right: 3px;} - -.mce-nbsp,.mce-shy{background: #aaa;} - -.mce-shy::after{content: '-';} - -.tox-toolbar-dock-fadeout{opacity: 0;visibility: hidden;} - -.tox-toolbar-dock-fadein{opacity: 1;visibility: visible;} - -.tox-toolbar-dock-transition{transition: visibility 0s linear .3s,opacity .3s ease;} - -.tox-toolbar-dock-transition.tox-toolbar-dock-fadein{transition-delay: 0s;} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/content.min.css b/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/content.min.css deleted file mode 100644 index 6e7165f09..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/content.min.css +++ /dev/null @@ -1,235 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - */ -.mce-content-body .mce-item-anchor{display: inline-block;width: 8px !important;height: 12px !important;padding: 0 2px;cursor: default;background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;-webkit-user-select: all;-moz-user-select: all;-ms-user-select: all;user-select: all;-webkit-user-modify: read-only;-moz-user-modify: read-only;} - -.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset: 1px;} - -.tox-comments-visible .tox-comment{background-color: #fff0b7;} - -.tox-comments-visible .tox-comment--active{background-color: #ffe168;} - -.tox-checklist>li:not(.tox-checklist--hidden){margin: .25em 0;list-style: none;} - -.tox-checklist>li:not(.tox-checklist--hidden)::before{position: absolute;width: 1em;height: 1em;margin-top: .125em;margin-left: -1.5em;cursor: pointer;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");background-size: 100%;content: '';} - -.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");} - -[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-right: -1.5em;margin-left: 0;} - -code[class*=language-],pre[class*=language-]{font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size: .875rem;-webkit-hyphens: none;-ms-hyphens: none;hyphens: none;line-height: 1.5;word-spacing: normal;color: #000;text-shadow: 0 1px #fff;word-break: normal;word-wrap: normal;white-space: pre;-moz-tab-size: 4;tab-size: 4;} - -code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow: none;background: #b3d4fc;} - -code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow: none;background: #b3d4fc;}@media print{code[class*=language-],pre[class*=language-]{text-shadow: none;}} - -pre[class*=language-]{padding: 1em;margin: .5em 0;overflow: auto;} - -:not(pre)>code[class*=language-],pre[class*=language-]{background: 0 0 !important;border: 1px solid #ccc;} - -:not(pre)>code[class*=language-]{padding: .1em;border-radius: .3em;} - -.token.cdata,.token.comment,.token.doctype,.token.prolog{color: #708090;} - -.token.punctuation{color: #999;} - -.namespace{opacity: .7;} - -.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color: #905;} - -.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color: #690;} - -.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color: #a67f59;background: hsla(0,0%,100%,.5);} - -.token.atrule,.token.attr-value,.token.keyword{color: #07a;} - -.token.function{color: #dd4a68;} - -.token.important,.token.regex,.token.variable{color: #e90;} - -.token.bold,.token.important{font-weight: 700;} - -.token.italic{font-style: italic;} - -.token.entity{cursor: help;} - -:not([dir=rtl]) code[class*=language-],:not([dir=rtl]) pre[class*=language-]{text-align: left;direction: ltr;} - -[dir=rtl] code[class*=language-],[dir=rtl] pre[class*=language-]{text-align: right;direction: rtl;} - -.mce-content-body{overflow-wrap: break-word;word-wrap: break-word;} - -.mce-content-body .mce-visual-caret{position: absolute;background-color: #000;background-color: currentColor;} - -.mce-content-body .mce-visual-caret-hidden{display: none;} - -.mce-content-body [data-mce-caret]{position: absolute;top: 0;right: auto;left: -1000px;padding: 0;margin: 0;} - -.mce-content-body .mce-offscreen-selection{position: absolute;left: -9999999999px;max-width: 1000000px;} - -.mce-content-body [contentEditable=false]{cursor: default;} - -.mce-content-body [contentEditable=true]{cursor: text;} - -.tox-cursor-format-painter{cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default;} - -.mce-content-body figure.align-left{float: left;} - -.mce-content-body figure.align-right{float: right;} - -.mce-content-body figure.image.align-center{display: table;margin-right: auto;margin-left: auto;} - -.mce-preview-object{position: relative;display: inline-block;margin: 0 2px 0 2px;line-height: 0;border: 1px solid gray;} - -.mce-preview-object .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);} - -.mce-preview-object[data-mce-selected="2"] .mce-shim{display: none;} - -.mce-object{background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border: 1px dashed #aaa;} - -.mce-pagebreak{display: block;width: 100%;height: 5px;margin-top: 15px;cursor: default;border: 1px dashed #aaa;page-break-before: always;}@media print{.mce-pagebreak{border: 0;}} - -.tiny-pageembed .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);} - -.tiny-pageembed[data-mce-selected="2"] .mce-shim{display: none;} - -.tiny-pageembed{position: relative;display: inline-block;} - -.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{position: relative;display: block;width: 100%;padding: 0;overflow: hidden;} - -.tiny-pageembed--16by9::before,.tiny-pageembed--1by1::before,.tiny-pageembed--21by9::before,.tiny-pageembed--4by3::before{display: block;content: "";} - -.tiny-pageembed--21by9::before{padding-top: 42.857143%;} - -.tiny-pageembed--16by9::before{padding-top: 56.25%;} - -.tiny-pageembed--4by3::before{padding-top: 75%;} - -.tiny-pageembed--1by1::before{padding-top: 100%;} - -.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{position: absolute;top: 0;left: 0;width: 100%;height: 100%;border: 0;} - -.mce-content-body div.mce-resizehandle{position: absolute;z-index: 10000;width: 10px;height: 10px;background-color: #4099ff;border-color: #4099ff;border-style: solid;border-width: 1px;box-sizing: border-box;} - -.mce-content-body div.mce-resizehandle:hover{background-color: #4099ff;} - -.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor: nwse-resize;} - -.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor: nesw-resize;} - -.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor: nwse-resize;} - -.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor: nesw-resize;} - -.mce-content-body .mce-clonedresizable{position: absolute;z-index: 10000;outline: 1px dashed #000;opacity: .5;} - -.mce-content-body .mce-resize-helper{position: absolute;z-index: 10001;display: none;padding: 5px;margin: 5px 10px;font-family: sans-serif;font-size: 12px;line-height: 14px;color: #fff;white-space: nowrap;background: #555;background: rgba(0,0,0,.75);border: 1px;border-radius: 3px;} - -.mce-match-marker{color: #fff;background: #aaa;} - -.mce-match-marker-selected{color: #fff;background: #39f;} - -.mce-content-body img[data-mce-selected],.mce-content-body table[data-mce-selected]{outline: 3px solid #b4d7ff;} - -.mce-content-body hr[data-mce-selected]{outline: 3px solid #b4d7ff;outline-offset: 1px;} - -.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline: 3px solid #b4d7ff;} - -.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline: 3px solid #b4d7ff;} - -.mce-content-body [contentEditable=false][data-mce-selected]{cursor: not-allowed;outline: 3px solid #b4d7ff;} - -.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline: 0;} - -.mce-content-body [data-mce-selected=inline-boundary]{background-color: #b4d7ff;} - -.mce-content-body .mce-edit-focus{outline: 3px solid #b4d7ff;} - -.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{background-color: #b4d7ff !important;} - -.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background: 0 0;} - -.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background: 0 0;} - -.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{-webkit-touch-callout: none;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;} - -.mce-content-body img::-moz-selection{background: 0 0;} - -.mce-content-body img::selection{background: 0 0;} - -.ephox-snooker-resizer-bar{background-color: #b4d7ff;opacity: 0;} - -.ephox-snooker-resizer-cols{cursor: col-resize;} - -.ephox-snooker-resizer-rows{cursor: row-resize;} - -.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity: 1;} - -.mce-spellchecker-word{height: 2rem;cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.5'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;} - -.mce-spellchecker-grammar{cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23008800'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;} - -.mce-toc{border: 1px solid gray;} - -.mce-toc h2{margin: 4px;} - -.mce-toc li{list-style-type: none;} - -.mce-item-table,.mce-item-table caption,.mce-item-table td,.mce-item-table th{border: 1px dashed #bbb;} - -.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{padding-top: 10px;margin-left: 3px;background-repeat: no-repeat;border: 1px dashed #bbb;} - -.mce-visualblocks p{background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);} - -.mce-visualblocks h1{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);} - -.mce-visualblocks h2{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);} - -.mce-visualblocks h3{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);} - -.mce-visualblocks h4{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);} - -.mce-visualblocks h5{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);} - -.mce-visualblocks h6{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);} - -.mce-visualblocks div:not([data-mce-bogus]){background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);} - -.mce-visualblocks section{background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);} - -.mce-visualblocks article{background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);} - -.mce-visualblocks blockquote{background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);} - -.mce-visualblocks address{background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);} - -.mce-visualblocks pre{background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);} - -.mce-visualblocks figure{background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);} - -.mce-visualblocks figcaption{border: 1px dashed #bbb;} - -.mce-visualblocks hgroup{background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);} - -.mce-visualblocks aside{background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);} - -.mce-visualblocks ul{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);} - -.mce-visualblocks ol{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);} - -.mce-visualblocks dl{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);} - -.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left: 3px;} - -.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x: right;margin-right: 3px;} - -.mce-nbsp,.mce-shy{background: #aaa;} - -.mce-shy::after{content: '-';} - -body{font-family: sans-serif;} - -table{border-collapse: collapse;} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/content.mobile.min.css b/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/content.mobile.min.css deleted file mode 100644 index c0522520e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/content.mobile.min.css +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - */ -.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{position: absolute;display: inline-block;background-color: green;opacity: .5;} - -body{-webkit-text-size-adjust: none;} - -body img{max-width: 96vw;} - -body table img{max-width: 95%;} - -body{font-family: sans-serif;} - -table{border-collapse: collapse;} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/skin.min.css b/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/skin.min.css deleted file mode 100644 index d8dc9b2da..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/skin.min.css +++ /dev/null @@ -1,875 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - */ -.tox{font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 16px;font-style: normal;font-weight: 400;line-height: normal;color: #222f3e;text-decoration: none;text-shadow: none;text-transform: none;white-space: normal;vertical-align: initial;cursor: auto;box-sizing: content-box;-webkit-tap-highlight-color: transparent;} - -.tox :not(svg){font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;line-height: inherit;color: inherit;text-align: inherit;text-decoration: inherit;text-shadow: inherit;text-transform: inherit;white-space: inherit;vertical-align: inherit;cursor: inherit;box-sizing: inherit;direction: inherit;-webkit-tap-highlight-color: inherit;} - -.tox :not(svg){position: static;float: none;width: auto;height: auto;max-width: none;padding: 0;margin: 0;background: 0 0;border: 0;outline: 0;} - -.tox:not([dir=rtl]){text-align: left;direction: ltr;} - -.tox[dir=rtl]{text-align: right;direction: rtl;} - -.tox-tinymce{position: relative;display: flex;overflow: hidden;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;border: 1px solid #000;border-radius: 0;visibility: inherit !important;box-shadow: none;box-sizing: border-box;flex-direction: column;} - -.tox-editor-container{display: flex;flex: 1 1 auto;flex-direction: column;overflow: hidden;} - -.tox-editor-container>:first-child{border-top: none !important;} - -.tox-tinymce-aux{font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;} - -.tox-tinymce :focus,.tox-tinymce-aux :focus{outline: 0;} - -button::-moz-focus-inner{border: 0;} - -.tox-silver-sink{z-index: 1300;} - -.tox .tox-anchorbar{display: flex;flex: 0 0 auto;} - -.tox .tox-bar{display: flex;flex: 0 0 auto;} - -.tox .tox-button{display: inline-block;padding: 4px 16px;margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 14px;font-weight: 700;line-height: 24px;letter-spacing: 1;color: #fff;text-align: center;text-decoration: none;text-transform: capitalize;white-space: nowrap;cursor: pointer;background-color: #207ab7;background-image: none;background-position: none;background-repeat: none;border-color: #207ab7;border-style: solid;border-width: 1px;border-radius: 3px;outline: 0;box-shadow: none;box-sizing: border-box;} - -.tox .tox-button[disabled]{color: rgba(255,255,255,.5);cursor: not-allowed;background-color: #207ab7;background-image: none;border-color: #207ab7;box-shadow: none;} - -.tox .tox-button:focus:not(:disabled){color: #fff;background-color: #1c6ca1;background-image: none;border-color: #1c6ca1;box-shadow: none;} - -.tox .tox-button:hover:not(:disabled){color: #fff;background-color: #1c6ca1;background-image: none;border-color: #1c6ca1;box-shadow: none;} - -.tox .tox-button:active:not(:disabled){color: #fff;background-color: #185d8c;background-image: none;border-color: #185d8c;box-shadow: none;} - -.tox .tox-button--secondary{padding: 4px 16px;color: #fff;text-decoration: none;text-transform: capitalize;background-color: #3d546f;background-image: none;background-position: none;background-repeat: none;border-color: #3d546f;border-style: solid;border-width: 1px;border-radius: 3px;outline: 0;box-shadow: none;} - -.tox .tox-button--secondary[disabled]{color: rgba(255,255,255,.5);background-color: #3d546f;background-image: none;border-color: #3d546f;box-shadow: none;} - -.tox .tox-button--secondary:focus:not(:disabled){color: #fff;background-color: #34485f;background-image: none;border-color: #34485f;box-shadow: none;} - -.tox .tox-button--secondary:hover:not(:disabled){color: #fff;background-color: #34485f;background-image: none;border-color: #34485f;box-shadow: none;} - -.tox .tox-button--secondary:active:not(:disabled){color: #fff;background-color: #2b3b4e;background-image: none;border-color: #2b3b4e;box-shadow: none;} - -.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding: 4px;} - -.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display: block;fill: currentColor;} - -.tox .tox-button-link{display: inline-block;padding: 0;margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 16px;font-weight: 400;line-height: 1.3;white-space: nowrap;cursor: pointer;background: 0;border: none;box-sizing: border-box;} - -.tox .tox-button-link--sm{font-size: 14px;} - -.tox .tox-button--naked{color: #fff;background-color: transparent;border-color: transparent;box-shadow: unset;} - -.tox .tox-button--naked:hover:not(:disabled){color: #fff;background-color: #34485f;border-color: #34485f;box-shadow: none;} - -.tox .tox-button--naked:focus:not(:disabled){color: #fff;background-color: #34485f;border-color: #34485f;box-shadow: none;} - -.tox .tox-button--naked:active:not(:disabled){color: #fff;background-color: #2b3b4e;border-color: #2b3b4e;box-shadow: none;} - -.tox .tox-button--naked .tox-icon svg{fill: currentColor;} - -.tox .tox-button--naked.tox-button--icon{color: currentColor;} - -.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color: #fff;} - -.tox .tox-checkbox{display: flex;height: 36px;min-width: 36px;cursor: pointer;border-radius: 3px;align-items: center;} - -.tox .tox-checkbox__input{position: absolute;top: auto;left: -10000px;width: 1px;height: 1px;overflow: hidden;} - -.tox .tox-checkbox__icons{width: 24px;height: 24px;padding: calc(4px - 1px);border-radius: 3px;box-shadow: 0 0 0 2px transparent;box-sizing: content-box;} - -.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display: block;fill: rgba(255,255,255,.2);} - -.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display: none;fill: #207ab7;} - -.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display: none;fill: #207ab7;} - -.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display: none;} - -.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display: block;} - -.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display: none;} - -.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display: block;} - -.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{padding: calc(4px - 1px);border-radius: 3px;box-shadow: inset 0 0 0 1px #207ab7;} - -.tox:not([dir=rtl]) .tox-checkbox__label{margin-left: 4px;} - -.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left: 4px;} - -.tox[dir=rtl] .tox-checkbox__label{margin-right: 4px;} - -.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right: 4px;} - -.tox .tox-collection--toolbar .tox-collection__group{display: flex;padding: 0;} - -.tox .tox-collection--grid .tox-collection__group{display: flex;max-height: 208px;padding: 0;overflow-x: hidden;overflow-y: auto;flex-wrap: wrap;} - -.tox .tox-collection--list .tox-collection__group{padding: 4px 0;border-color: #1a1a1a;border-style: solid;border-top-width: 1px;border-right-width: 0;border-bottom-width: 0;border-left-width: 0;} - -.tox .tox-collection--list .tox-collection__group:first-child{border-top-width: 0;} - -.tox .tox-collection__group-heading{padding: 4px 8px;margin-top: -4px;margin-bottom: 4px;font-size: 12px;font-style: normal;font-weight: 400;color: #fff;text-transform: none;cursor: default;background-color: #333;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;-webkit-touch-callout: none;} - -.tox .tox-collection__item{display: flex;color: #fff;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;align-items: center;-webkit-touch-callout: none;} - -.tox .tox-collection--list .tox-collection__item{padding: 4px 8px;} - -.tox .tox-collection--toolbar .tox-collection__item{padding: 4px;border-radius: 3px;} - -.tox .tox-collection--grid .tox-collection__item{padding: 4px;border-radius: 3px;} - -.tox .tox-collection--list .tox-collection__item--enabled{color: contrast(inherit,#222f3e,#fff);background-color: inherit;} - -.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color: #fff;background-color: #434e5b;} - -.tox .tox-collection--toolbar .tox-collection__item--enabled{color: #fff;background-color: #6f7882;} - -.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color: #fff;background-color: #434e5b;} - -.tox .tox-collection--grid .tox-collection__item--enabled{color: #fff;background-color: #6f7882;} - -.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){color: #fff;background-color: #434e5b;} - -.tox .tox-collection__item--state-disabled{color: rgba(255,255,255,.5);cursor: default;background-color: transparent;} - -.tox .tox-collection__item-icon{display: flex;width: 24px;height: 24px;align-items: center;justify-content: center;} - -.tox .tox-collection__item-icon svg{fill: currentColor;} - -.tox .tox-collection--toolbar-lg .tox-collection__item-icon{width: 48px;height: 48px;} - -.tox .tox-collection__item[role=menuitemcheckbox]:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display: none;} - -.tox .tox-collection__item-label{display: inline-block;font-size: 14px;font-style: normal;font-weight: 400;line-height: 24px;color: currentColor;text-transform: none;word-break: break-all;flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-collection__item-accessory{display: inline-block;height: 24px;font-size: 14px;line-height: 24px;color: rgba(255,255,255,.5);text-transform: normal;} - -.tox .tox-collection__item-caret{align-items: center;display: flex;min-height: 24px;} - -.tox .tox-collection__item-caret::after{min-height: inherit;font-size: 0;content: '';} - -.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left: 8px;} - -.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item-label:first-child{margin-left: 4px;} - -.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left: 16px;text-align: right;} - -.tox:not([dir=rtl]) .tox-collection__item-caret{margin-left: 16px;} - -.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right: 8px;} - -.tox[dir=rtl] .tox-collection--list .tox-collection__item-label:first-child{margin-right: 4px;} - -.tox[dir=rtl] .tox-collection__item-icon-rtl .tox-collection__item-icon svg{transform: rotateY(180deg);} - -.tox[dir=rtl] .tox-collection__item-accessory{margin-right: 16px;text-align: left;} - -.tox[dir=rtl] .tox-collection__item-caret{margin-right: 16px;transform: rotateY(180deg);} - -.tox .tox-color-picker-container{display: flex;flex-direction: row;height: 225px;margin: 0;} - -.tox .tox-sv-palette{display: flex;height: 100%;box-sizing: border-box;} - -.tox .tox-sv-palette-spectrum{height: 100%;} - -.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width: 225px;} - -.tox .tox-sv-palette-thumb{position: absolute;width: 12px;height: 12px;background: 0 0;border: 1px solid #000;border-radius: 50%;box-sizing: content-box;} - -.tox .tox-sv-palette-inner-thumb{position: absolute;width: 10px;height: 10px;border: 1px solid #fff;border-radius: 50%;} - -.tox .tox-hue-slider{width: 25px;height: 100%;box-sizing: border-box;} - -.tox .tox-hue-slider-spectrum{width: 100%;height: 100%;background: linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);} - -.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width: 20px;} - -.tox .tox-hue-slider-thumb{width: 100%;height: 4px;background: #fff;border: 1px solid #000;box-sizing: content-box;} - -.tox .tox-rgb-form{display: flex;flex-direction: column;justify-content: space-between;} - -.tox .tox-rgb-form div{display: flex;width: inherit;margin-bottom: 5px;align-items: center;justify-content: space-between;} - -.tox .tox-rgb-form input{width: 6em;} - -.tox .tox-rgb-form input.tox-invalid{border: 1px solid red !important;} - -.tox .tox-rgb-form .tox-rgba-preview{margin-bottom: 0;border: 1px solid #000;flex-grow: 2;} - -.tox:not([dir=rtl]) .tox-sv-palette{margin-right: 15px;} - -.tox:not([dir=rtl]) .tox-hue-slider{margin-right: 15px;} - -.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left: -1px;} - -.tox:not([dir=rtl]) .tox-rgb-form label{margin-right: .5em;} - -.tox[dir=rtl] .tox-sv-palette{margin-left: 15px;} - -.tox[dir=rtl] .tox-hue-slider{margin-left: 15px;} - -.tox[dir=rtl] .tox-hue-slider-thumb{margin-right: -1px;} - -.tox[dir=rtl] .tox-rgb-form label{margin-left: .5em;} - -.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin: 2px 0 3px 4px;} - -.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{margin: -4px 0;border: 0;} - -.tox .tox-swatches__row{display: flex;} - -.tox .tox-swatch{width: 30px;height: 30px;transition: transform .15s,box-shadow .15s;} - -.tox .tox-swatch:focus,.tox .tox-swatch:hover{transform: scale(.8);box-shadow: 0 0 0 1px rgba(127,127,127,.3) inset;} - -.tox .tox-swatch--remove{align-items: center;display: flex;justify-content: center;} - -.tox .tox-swatch--remove svg path{stroke: #e74c3c;} - -.tox .tox-swatches__picker-btn{display: flex;width: 30px;height: 30px;padding: 0;cursor: pointer;background-color: transparent;border: 0;outline: 0;align-items: center;justify-content: center;} - -.tox .tox-swatches__picker-btn svg{width: 24px;height: 24px;} - -.tox .tox-swatches__picker-btn:hover{background: #434e5b;} - -.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left: auto;} - -.tox[dir=rtl] .tox-swatches__picker-btn{margin-right: auto;} - -.tox .tox-comment-thread{position: relative;background: #2b3b4e;} - -.tox .tox-comment-thread>:not(:first-child){margin-top: 8px;} - -.tox .tox-comment{position: relative;padding: 8px 8px 16px 8px;background: #2b3b4e;border: 1px solid #000;border-radius: 3px;box-shadow: 0 4px 8px 0 rgba(34,47,62,.1);} - -.tox .tox-comment__header{display: flex;color: #fff;align-items: center;justify-content: space-between;} - -.tox .tox-comment__date{font-size: 12px;color: rgba(255,255,255,.5);} - -.tox .tox-comment__body{position: relative;margin-top: 8px;font-size: 14px;font-style: normal;font-weight: 400;line-height: 1.3;color: #fff;text-transform: initial;} - -.tox .tox-comment__body textarea{width: 100%;white-space: normal;resize: none;} - -.tox .tox-comment__expander{padding-top: 8px;} - -.tox .tox-comment__expander p{font-size: 14px;font-style: normal;color: rgba(255,255,255,.5);} - -.tox .tox-comment__body p{margin: 0;} - -.tox .tox-comment__buttonspacing{padding-top: 16px;text-align: center;} - -.tox .tox-comment-thread__overlay::after{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 5;display: flex;background: #2b3b4e;content: "";opacity: .9;} - -.tox .tox-comment__reply{display: flex;flex-shrink: 0;flex-wrap: wrap;justify-content: flex-end;margin-top: 8px;} - -.tox .tox-comment__reply>:first-child{width: 100%;margin-bottom: 8px;} - -.tox .tox-comment__edit{display: flex;flex-wrap: wrap;justify-content: flex-end;margin-top: 16px;} - -.tox .tox-comment__gradient::after{position: absolute;bottom: 0;display: block;width: 100%;height: 5em;margin-top: -40px;background: linear-gradient(rgba(43,59,78,0),#2b3b4e);content: "";} - -.tox .tox-comment__overlay{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 5;display: flex;text-align: center;background: #2b3b4e;opacity: .9;flex-direction: column;flex-grow: 1;} - -.tox .tox-comment__loading-text{position: relative;display: flex;color: #fff;align-items: center;flex-direction: column;} - -.tox .tox-comment__loading-text>div{padding-bottom: 16px;} - -.tox .tox-comment__overlaytext{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 10;padding: 1em;font-size: 14px;flex-direction: column;} - -.tox .tox-comment__overlaytext p{color: #fff;text-align: center;background-color: #2b3b4e;box-shadow: 0 0 8px 8px #2b3b4e;} - -.tox .tox-comment__overlaytext div:nth-of-type(2){font-size: .8em;} - -.tox .tox-comment__busy-spinner{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 1103;display: flex;background-color: #2b3b4e;align-items: center;justify-content: center;} - -.tox .tox-comment__scroll{display: flex;flex-direction: column;flex-shrink: 1;overflow: auto;} - -.tox .tox-conversations{margin: 8px;} - -.tox:not([dir=rtl]) .tox-comment__edit{margin-left: 8px;} - -.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left: 8px;} - -.tox[dir=rtl] .tox-comment__edit{margin-right: 8px;} - -.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right: 8px;} - -.tox .tox-user{align-items: center;display: flex;} - -.tox .tox-user__avatar svg{fill: rgba(255,255,255,.5);} - -.tox .tox-user__name{font-size: 12px;font-style: normal;font-weight: 700;color: rgba(255,255,255,.5);text-transform: uppercase;} - -.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right: 8px;} - -.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left: 8px;} - -.tox[dir=rtl] .tox-user__avatar svg{margin-left: 8px;} - -.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right: 8px;} - -.tox .tox-dialog-wrap{position: fixed;top: 0;right: 0;bottom: 0;left: 0;z-index: 1100;display: flex;align-items: center;justify-content: center;} - -.tox .tox-dialog-wrap__backdrop{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 1101;background-color: rgba(34,47,62,.75);} - -.tox .tox-dialog{position: relative;z-index: 1102;display: flex;width: 95vw;max-width: 480px;max-height: 100%;overflow: hidden;background-color: #2b3b4e;border-color: #000;border-style: solid;border-width: 1px;border-radius: 3px;box-shadow: 0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);flex-direction: column;} - -.tox .tox-dialog__header{position: relative;display: flex;padding: 8px 16px 0 16px;margin-bottom: 16px;font-size: 16px;color: #fff;background-color: #2b3b4e;border-bottom: none;align-items: center;justify-content: space-between;} - -.tox .tox-dialog__header .tox-button{z-index: 1;} - -.tox .tox-dialog__draghandle{position: absolute;top: 0;left: 0;width: 100%;height: 100%;cursor: grab;} - -.tox .tox-dialog__draghandle:active{cursor: grabbing;} - -.tox .tox-dialog__dismiss{margin-left: auto;} - -.tox .tox-dialog__title{margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 20px;font-style: normal;font-weight: 400;line-height: 1.3;text-transform: normal;} - -.tox .tox-dialog__body{display: flex;min-width: 0;padding: 0 16px;font-size: 16px;font-style: normal;font-weight: 400;line-height: 1.3;color: #fff;text-align: left;text-transform: normal;flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-dialog__body-nav{align-items: flex-start;display: flex;flex-direction: column;} - -.tox .tox-dialog__body-nav-item{display: inline-block;margin-bottom: 8px;font-size: 14px;line-height: 1.3;color: rgba(255,255,255,.5);text-decoration: none;border-bottom: 2px solid transparent;} - -.tox .tox-dialog__body-nav-item--active{color: #207ab7;border-bottom: 2px solid #207ab7;} - -.tox .tox-dialog__body-content{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;max-height: 650px;overflow: auto;} - -.tox .tox-dialog__body-content>*{margin-top: 16px;margin-bottom: 0;} - -.tox .tox-dialog__body-content>:first-child{margin-top: 0;} - -.tox .tox-dialog__body-content>:last-child{margin-bottom: 0;} - -.tox .tox-dialog__body-content>:only-child{margin-top: 0;margin-bottom: 0;} - -.tox .tox-dialog--width-lg{height: 650px;max-width: 1200px;} - -.tox .tox-dialog--width-md{max-width: 800px;} - -.tox .tox-dialog--width-md .tox-dialog__body-content{overflow: auto;} - -.tox .tox-dialog__body-content--centered{text-align: center;} - -.tox .tox-dialog__body-content--spacious{margin-bottom: 16px;} - -.tox .tox-dialog__footer{display: flex;padding: 8px 16px;margin-top: 16px;background-color: #2b3b4e;border-top: 1px solid #000;align-items: center;justify-content: space-between;} - -.tox .tox-dialog__busy-spinner{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 1103;display: flex;background-color: rgba(34,47,62,.75);align-items: center;justify-content: center;} - -.tox .tox-dialog__table{width: 100%;border-collapse: collapse;} - -.tox .tox-dialog__table thead th{padding-bottom: 8px;font-weight: 700;} - -.tox .tox-dialog__table tbody tr{border-bottom: 1px solid #000;} - -.tox .tox-dialog__table tbody tr:last-child{border-bottom: none;} - -.tox .tox-dialog__table td{padding-top: 8px;padding-bottom: 8px;} - -.tox .tox-dialog__popups{position: absolute;z-index: 1100;width: 100%;} - -.tox .tox-dialog__body-iframe{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;} - -.tox .tox-dialog__body-iframe .tox-navobj{display: flex;flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex: 1;-ms-flex-preferred-size: auto;height: 100%;} - -body.tox-dialog__disable-scroll{overflow: hidden;} - -.tox.tox-platform-ie .tox-dialog-wrap{position: -ms-device-fixed;} - -.tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right: 32px;} - -.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left: 8px;} - -.tox[dir=rtl] .tox-dialog__body{text-align: right;} - -.tox[dir=rtl] .tox-dialog__body-nav{margin-left: 32px;} - -.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right: 8px;} - -.tox .tox-dropzone-container{display: flex;flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-dropzone{display: flex;min-height: 100px;padding: 10px;background: #fff;border: 2px dashed #000;box-sizing: border-box;align-items: center;flex-direction: column;flex-grow: 1;justify-content: center;} - -.tox .tox-dropzone p{margin: 0 0 16px 0;color: rgba(255,255,255,.5);} - -.tox .tox-edit-area{position: relative;display: flex;overflow: hidden;border-top: 1px solid #000;flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-edit-area__iframe{position: absolute;width: 100%;height: 100%;background-color: #fff;border: 0;box-sizing: border-box;flex: 1;-ms-flex-preferred-size: auto;} - -.tox.tox-inline-edit-area{border: 1px dotted #000;} - -.tox .tox-control-wrap{flex: 1;position: relative;} - -.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display: none;} - -.tox .tox-control-wrap svg{display: block;} - -.tox .tox-control-wrap__status-icon-wrap{position: absolute;top: 50%;transform: translateY(-50%);} - -.tox .tox-control-wrap__status-icon-invalid svg{fill: #c00;} - -.tox .tox-control-wrap__status-icon-unknown svg{fill: orange;} - -.tox .tox-control-wrap__status-icon-valid svg{fill: green;} - -.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right: 32px;} - -.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right: 4px;} - -.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left: 32px;} - -.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left: 4px;} - -.tox .tox-autocompleter{max-width: 25em;} - -.tox .tox-autocompleter .tox-menu{max-width: 25em;} - -.tox .tox-color-input{display: flex;} - -.tox .tox-color-input .tox-textfield{display: flex;border-radius: 3px 0 0 3px;} - -.tox .tox-color-input span{display: flex;width: 35px;cursor: pointer;border-color: rgba(34,47,62,.2);border-style: solid;border-width: 1px 1px 1px 0;border-radius: 0 3px 3px 0;box-shadow: none;box-sizing: border-box;} - -.tox .tox-color-input span:focus{border-color: #207ab7;} - -.tox[dir=rtl] .tox-color-input .tox-textfield{border-radius: 0 3px 3px 0;} - -.tox[dir=rtl] .tox-color-input span{border-width: 1px 0 1px 1px;border-radius: 3px 0 0 3px;} - -.tox .tox-label,.tox .tox-toolbar-label{display: block;padding: 0 8px 0 0;font-size: 14px;font-style: normal;font-weight: 400;line-height: 1.3;color: rgba(255,255,255,.5);text-transform: normal;white-space: nowrap;} - -.tox .tox-toolbar-label{padding: 0 8px;} - -.tox[dir=rtl] .tox-label{padding: 0 0 0 8px;} - -.tox .tox-form{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;} - -.tox .tox-form__group{margin-bottom: 4px;box-sizing: border-box;} - -.tox .tox-form__group--error{color: #c00;} - -.tox .tox-form__group--collection{display: flex;} - -.tox .tox-form__grid{display: flex;flex-direction: row;flex-wrap: wrap;justify-content: space-between;} - -.tox .tox-form__grid--2col>.tox-form__group{width: calc(50% - (8px / 2));} - -.tox .tox-form__grid--3col>.tox-form__group{width: calc(100% / 3 - (8px / 2));} - -.tox .tox-form__grid--4col>.tox-form__group{width: calc(25% - (8px / 2));} - -.tox .tox-form__controls-h-stack{align-items: center;display: flex;} - -.tox .tox-form__group--inline{align-items: center;display: flex;} - -.tox .tox-form__group--stretched{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;} - -.tox .tox-form__group--stretched .tox-textarea{flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-form__group--stretched .tox-navobj{display: flex;flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex: 1;-ms-flex-preferred-size: auto;height: 100%;} - -.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left: 4px;} - -.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right: 4px;} - -.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display: none;} - -.tox .tox-textarea,.tox .tox-textfield,.tox .tox-toolbar-textfield,.tox:not([dir=rtl]) .tox-selectfield select,.tox[dir=rtl] .tox-selectfield select{width: 100%;padding: 5px 4.75px;margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 16px;line-height: 24px;color: #fff;background-color: #2b3b4e;border-color: #000;border-style: solid;border-width: 1px;border-radius: 3px;outline: 0;box-shadow: none;box-sizing: border-box;resize: none;-webkit-appearance: none;-moz-appearance: none;appearance: none;} - -.tox .tox-selectfield select:focus,.tox .tox-textarea:focus,.tox .tox-textfield:focus{border-color: #207ab7;outline: 0;box-shadow: none;} - -.tox .tox-toolbar-textfield{max-width: 250px;margin-top: 2px;margin-bottom: 3px;border-width: 0;} - -.tox .tox-naked-btn{display: block;padding: 0;margin: 0;color: #207ab7;cursor: pointer;background-color: transparent;border: 0;border-color: transparent;box-shadow: unset;} - -.tox .tox-naked-btn svg{display: block;fill: #fff;} - -.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left: 4px;} - -.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right: 4px;} - -.tox .tox-selectfield{position: relative;cursor: pointer;} - -.tox .tox-selectfield select::-ms-expand{display: none;} - -.tox .tox-selectfield svg{position: absolute;top: 50%;pointer-events: none;transform: translateY(-50%);} - -.tox:not([dir=rtl]) .tox-selectfield select{padding-right: 24px;} - -.tox:not([dir=rtl]) .tox-selectfield svg{right: 8px;} - -.tox[dir=rtl] .tox-selectfield select{padding-left: 24px;} - -.tox[dir=rtl] .tox-selectfield svg{left: 8px;} - -.tox .tox-textarea{white-space: pre-wrap;-webkit-appearance: textarea;-moz-appearance: textarea;appearance: textarea;} - -.tox-fullscreen{position: fixed;top: 0;left: 0;width: 100%;height: 100%;padding: 0;margin: 0;overflow: hidden;border: 0;} - -.tox-fullscreen .tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display: none;} - -.tox-fullscreen .tox.tox-tinymce.tox-fullscreen{z-index: 1200;} - -.tox-fullscreen .tox.tox-tinymce-aux{z-index: 1201;} - -.tox .tox-image-tools{width: 100%;} - -.tox .tox-image-tools__toolbar{align-items: center;display: flex;justify-content: center;} - -.tox .tox-image-tools__image{position: relative;width: 100%;height: 380px;overflow: auto;background-color: #666;} - -.tox .tox-image-tools__image,.tox .tox-image-tools__image+.tox-image-tools__toolbar{margin-top: 8px;} - -.tox .tox-image-tools__image-bg{background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==);} - -.tox .tox-image-tools__toolbar>.tox-spacer{flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-croprect-block{position: absolute;background: #000;opacity: .5;zoom: 1;} - -.tox .tox-croprect-handle{position: absolute;top: 0;left: 0;width: 20px;height: 20px;border: 2px solid #fff;} - -.tox .tox-croprect-handle-move{position: absolute;cursor: move;border: 0;} - -.tox .tox-croprect-handle-nw{top: 100px;left: 100px;margin: -2px 0 0 -2px;cursor: nw-resize;border-width: 2px 0 0 2px;} - -.tox .tox-croprect-handle-ne{top: 100px;left: 200px;margin: -2px 0 0 -20px;cursor: ne-resize;border-width: 2px 2px 0 0;} - -.tox .tox-croprect-handle-sw{top: 200px;left: 100px;margin: -20px 2px 0 -2px;cursor: sw-resize;border-width: 0 0 2px 2px;} - -.tox .tox-croprect-handle-se{top: 200px;left: 200px;margin: -20px 0 0 -20px;cursor: se-resize;border-width: 0 2px 2px 0;} - -.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-left: 8px;} - -.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-left: 32px;} - -.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-left: 32px;} - -.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-right: 8px;} - -.tox[dir=rtl] .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-right: 32px;} - -.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-right: 32px;} - -.tox .tox-insert-table-picker{display: flex;flex-wrap: wrap;width: 169px;} - -.tox .tox-insert-table-picker>div{width: 16px;height: 16px;border-color: #070a0d;border-style: solid;border-width: 0 1px 1px 0;box-sizing: content-box;} - -.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin: -4px 0;} - -.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color: rgba(32,122,183,.5);border-color: rgba(32,122,183,.5);} - -.tox .tox-insert-table-picker__label{display: block;width: 100%;padding: 4px;font-size: 14px;color: #fff;text-align: center;} - -.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right: 0;} - -.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right: 0;} - -.tox .tox-menu{z-index: 1;display: inline-block;overflow: hidden;vertical-align: top;background-color: #2b3b4e;border: 1px solid #000;border-radius: 3px;box-shadow: 0 4px 8px 0 rgba(34,47,62,.1);} - -.tox .tox-menu.tox-collection.tox-collection--list{padding: 0;} - -.tox .tox-menu.tox-collection.tox-collection--toolbar{padding: 4px;} - -.tox .tox-menu.tox-collection.tox-collection--grid{padding: 4px;} - -.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin: 0;} - -.tox .tox-menubar{display: flex;padding: 0 4px;margin-bottom: -1px;background: url("data:image/svg+xml;charset=utf8,%3Csvg height='43px' viewBox='0 0 40 43px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='42px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;background-color: #222f3e;flex: 0 0 auto;flex-shrink: 0;flex-wrap: wrap;} - -.tox .tox-mbtn{display: flex;width: auto;height: 34px;padding: 0 4px;margin: 2px 0 3px 0;overflow: hidden;font-size: 14px;font-style: normal;font-weight: 400;color: #fff;text-transform: normal;background: 0 0;border: 0;border-radius: 3px;outline: 0;box-shadow: none;align-items: center;flex: 0 0 auto;justify-content: center;} - -.tox .tox-mbtn[disabled]{color: rgba(255,255,255,.5);cursor: not-allowed;background-color: none;border-color: none;box-shadow: none;} - -.tox .tox-mbtn:hover:not(:disabled){color: #fff;background: #434e5b;box-shadow: none;} - -.tox .tox-mbtn:focus:not(:disabled){color: #fff;background: #434e5b;box-shadow: none;} - -.tox .tox-mbtn--active{color: #fff;background: #6f7882;box-shadow: none;} - -.tox .tox-mbtn__select-label{margin: 0 4px;font-weight: 400;cursor: default;} - -.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor: not-allowed;} - -.tox .tox-mbtn__select-chevron{display: flex;display: none;width: 16px;align-items: center;justify-content: center;} - -.tox .tox-notification{display: grid;padding: 5px;margin-top: 5px;background-color: #fffaea;border-color: #ffe89d;border-style: solid;border-width: 1px;opacity: 0;box-sizing: border-box;transition: transform .1s ease-in,opacity 150ms ease-in;grid-template-columns: minmax(40px,1fr) auto minmax(40px,1fr);} - -.tox .tox-notification--in{opacity: 1;} - -.tox .tox-notification--success{background-color: #dff0d8;border-color: #d6e9c6;} - -.tox .tox-notification--error{background-color: #f2dede;border-color: #ebccd1;} - -.tox .tox-notification--warn{background-color: #fcf8e3;border-color: #faebcc;} - -.tox .tox-notification--info{background-color: #d9edf7;border-color: #779ecb;} - -.tox .tox-notification__body{font-size: 14px;color: #fff;text-align: center;word-break: break-all;word-break: break-word;white-space: normal;align-self: center;grid-column-end: 3;-ms-grid-column-span: 1;grid-column-start: 2;grid-row-end: 2;grid-row-start: 1;} - -.tox .tox-notification__body>*{margin: 0;} - -.tox .tox-notification__body>*+*{margin-top: 1rem;} - -.tox .tox-notification__icon{align-self: center;-ms-grid-column-align: end;grid-column-end: 2;-ms-grid-column-span: 1;grid-column-start: 1;grid-row-end: 2;grid-row-start: 1;justify-self: end;} - -.tox .tox-notification__icon svg{display: block;} - -.tox .tox-notification__dismiss{align-self: start;-ms-grid-column-align: end;grid-column-end: 4;-ms-grid-column-span: 1;grid-column-start: 3;grid-row-end: 2;grid-row-start: 1;justify-self: end;} - -.tox .tox-notification .tox-progress-bar{-ms-grid-column-align: center;grid-column-end: 4;-ms-grid-column-span: 3;grid-column-start: 1;grid-row-end: 3;-ms-grid-row-span: 1;grid-row-start: 2;justify-self: center;} - -.tox .tox-pop{position: relative;display: inline-block;} - -.tox .tox-pop--resizing{transition: width .1s ease;} - -.tox .tox-pop--resizing .tox-toolbar{flex-wrap: nowrap;} - -.tox .tox-pop__dialog{min-width: 0;overflow: hidden;background-color: #222f3e;border: 1px solid #000;border-radius: 3px;box-shadow: 0 1px 3px rgba(0,0,0,.15);} - -.tox .tox-pop__dialog>:not(.tox-toolbar){margin: 4px 4px 4px 8px;} - -.tox .tox-pop__dialog .tox-toolbar{background-color: transparent;} - -.tox .tox-pop::after,.tox .tox-pop::before{position: absolute;display: block;width: 0;height: 0;border-style: solid;content: '';} - -.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{top: 100%;left: 50%;} - -.tox .tox-pop.tox-pop--bottom::after{margin-top: -1px;margin-left: -8px;border-color: #222f3e transparent transparent transparent;border-width: 8px;} - -.tox .tox-pop.tox-pop--bottom::before{margin-left: -9px;border-color: #000 transparent transparent transparent;border-width: 9px;} - -.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{top: 0;left: 50%;transform: translateY(-100%);} - -.tox .tox-pop.tox-pop--top::after{margin-top: 1px;margin-left: -8px;border-color: transparent transparent #222f3e transparent;border-width: 8px;} - -.tox .tox-pop.tox-pop--top::before{margin-left: -9px;border-color: transparent transparent #000 transparent;border-width: 9px;} - -.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{top: calc(50% - 1px);left: 0;transform: translateY(-50%);} - -.tox .tox-pop.tox-pop--left::after{margin-left: -15px;border-color: transparent #222f3e transparent transparent;border-width: 8px;} - -.tox .tox-pop.tox-pop--left::before{margin-left: -19px;border-color: transparent #000 transparent transparent;border-width: 10px;} - -.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{top: calc(50% + 1px);left: 100%;transform: translateY(-50%);} - -.tox .tox-pop.tox-pop--right::after{margin-left: -1px;border-color: transparent transparent transparent #222f3e;border-width: 8px;} - -.tox .tox-pop.tox-pop--right::before{margin-left: -1px;border-color: transparent transparent transparent #000;border-width: 10px;} - -.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left: 20px;} - -.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left: calc(100% - 20px);} - -.tox .tox-sidebar-wrap{display: flex;flex-direction: row;flex-grow: 1;min-height: 0;} - -.tox .tox-sidebar{display: flex;flex-direction: row;justify-content: flex-end;} - -.tox .tox-sidebar__slider{display: flex;overflow: hidden;} - -.tox .tox-sidebar__pane-container{display: flex;} - -.tox .tox-sidebar__pane{display: flex;} - -.tox .tox-sidebar--sliding-closed{opacity: 0;} - -.tox .tox-sidebar--sliding-open{opacity: 1;} - -.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition: width .5s ease,opacity .5s ease;} - -.tox .tox-slider{position: relative;display: flex;height: 24px;align-items: center;flex: 1;-ms-flex-preferred-size: auto;justify-content: center;} - -.tox .tox-slider__rail{width: 100%;height: 10px;min-width: 120px;background-color: transparent;border: 1px solid #000;border-radius: 3px;} - -.tox .tox-slider__handle{position: absolute;top: 50%;left: 50%;width: 14px;height: 24px;background-color: #207ab7;border: 2px solid #185d8c;border-radius: 3px;transform: translateX(-50%) translateY(-50%);box-shadow: none;} - -.tox .tox-source-code{overflow: auto;} - -.tox .tox-spinner{display: flex;} - -.tox .tox-spinner>div{width: 8px;height: 8px;background-color: rgba(255,255,255,.5);border-radius: 100%;animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both;} - -.tox .tox-spinner>div:nth-child(1){animation-delay: -.32s;} - -.tox .tox-spinner>div:nth-child(2){animation-delay: -.16s;}@keyframes tam-bouncing-dots{0%,100%,80%{transform: scale(0);} - -40%{transform: scale(1);}} - -.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left: 4px;} - -.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right: 4px;} - -.tox .tox-statusbar{position: relative;display: flex;height: 18px;padding: 0 8px;overflow: hidden;font-size: 12px;color: rgba(255,255,255,.5);text-transform: uppercase;background-color: #222f3e;border-top: 1px solid #000;align-items: center;flex: 0 0 auto;} - -.tox .tox-statusbar a{color: rgba(255,255,255,.5);text-decoration: none;} - -.tox .tox-statusbar a:hover{text-decoration: underline;} - -.tox .tox-statusbar__text-container{display: flex;flex: 1 1 auto;justify-content: flex-end;overflow: hidden;} - -.tox .tox-statusbar__path{display: flex;flex: 1 1 auto;margin-right: auto;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;} - -.tox .tox-statusbar__path>*{display: inline;white-space: nowrap;} - -.tox .tox-statusbar__wordcount{flex: 0 0 auto;margin-left: 1ch;} - -.tox .tox-statusbar__resize-handle{display: flex;padding-left: 1ch;margin-right: -8px;margin-left: auto;cursor: nwse-resize;align-items: flex-end;align-self: stretch;flex: 0 0 auto;justify-content: flex-end;} - -.tox .tox-statusbar__resize-handle svg{display: block;fill: rgba(255,255,255,.5);} - -.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right: 4px;} - -.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left: 1ch;} - -.tox[dir=rtl] .tox-statusbar{flex-direction: row-reverse;} - -.tox[dir=rtl] .tox-statusbar__path>*{margin-left: 4px;} - -.tox .tox-throbber{z-index: 1400;} - -.tox .tox-throbber__busy-spinner{position: absolute;top: 0;right: 0;bottom: 0;left: 0;display: flex;background-color: rgba(34,47,62,.6);align-items: center;justify-content: center;} - -.tox .tox-tbtn{display: flex;width: 34px;height: 34px;padding: 0;margin: 2px 0 3px 0;overflow: hidden;font-size: 14px;font-style: normal;font-weight: 400;color: #fff;text-transform: normal;background: 0 0;border: 0;border-radius: 3px;outline: 0;box-shadow: none;align-items: center;flex: 0 0 auto;justify-content: center;} - -.tox .tox-tbtn svg{display: block;fill: #fff;} - -.tox .tox-tbtn.tox-tbtn-more{width: inherit;padding-right: 5px;padding-left: 5px;} - -.tox .tox-tbtn--enabled{color: #fff;background: #6f7882;box-shadow: none;} - -.tox .tox-tbtn--enabled>*{transform: none;} - -.tox .tox-tbtn--enabled svg{fill: #fff;} - -.tox .tox-tbtn:hover{color: #fff;background: #434e5b;box-shadow: none;} - -.tox .tox-tbtn:hover svg{fill: #fff;} - -.tox .tox-tbtn:focus{color: #fff;background: #434e5b;box-shadow: none;} - -.tox .tox-tbtn:focus svg{fill: #fff;} - -.tox .tox-tbtn:active{color: #fff;background: #6f7882;box-shadow: none;} - -.tox .tox-tbtn:active svg{fill: #fff;} - -.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{color: rgba(255,255,255,.5);cursor: not-allowed;background: 0 0;box-shadow: none;} - -.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill: rgba(255,255,255,.5);} - -.tox .tox-tbtn:active>*{transform: none;} - -.tox .tox-tbtn--md{width: 51px;height: 51px;} - -.tox .tox-tbtn--lg{width: 68px;height: 68px;flex-direction: column;} - -.tox .tox-tbtn--return{width: 16px;height: unset;align-self: stretch;} - -.tox .tox-tbtn--labeled{width: unset;padding: 0 4px;} - -.tox .tox-tbtn__vlabel{display: block;margin-bottom: 4px;font-size: 10px;font-weight: 400;letter-spacing: -.025em;white-space: nowrap;} - -.tox .tox-tbtn--select{width: auto;padding: 0 4px;margin: 2px 0 3px 0;} - -.tox .tox-tbtn__select-label{margin: 0 4px;font-weight: 400;cursor: default;} - -.tox .tox-tbtn__select-chevron{align-items: center;display: flex;justify-content: center;width: 16px;} - -.tox .tox-tbtn__select-chevron svg{fill: rgba(255,255,255,.5);} - -.tox .tox-tbtn--bespoke .tox-tbtn__select-label{width: 7em;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;} - -.tox .tox-split-button{display: flex;margin: 2px 0 3px 0;overflow: hidden;border: 0;border-radius: 3px;box-sizing: border-box;} - -.tox .tox-split-button:hover{box-shadow: 0 0 0 1px #434e5b inset;} - -.tox .tox-split-button:focus{color: #fff;background: #434e5b;box-shadow: none;} - -.tox .tox-split-button>*{border-radius: 0;} - -.tox .tox-split-button__chevron{width: 16px;} - -.tox .tox-split-button__chevron svg{fill: rgba(255,255,255,.5);} - -.tox .tox-pop .tox-split-button__chevron svg{transform: rotate(-90deg);} - -.tox .tox-split-button .tox-tbtn{margin: 0;} - -.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{color: rgba(255,255,255,.5);background: 0 0;box-shadow: none;} - -.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{display: flex;padding: 0 0;margin-bottom: -1px;background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;background-color: #222f3e;border-top: 1px solid #000;flex: 0 0 auto;flex-shrink: 0;flex-wrap: wrap;} - -.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height: 0;opacity: 0;visibility: hidden;} - -.tox .tox-toolbar__overflow--growing{transition: height .3s ease,opacity .2s linear .1s;} - -.tox .tox-toolbar__overflow--shrinking{transition: opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s;} - -.tox .tox-pop .tox-toolbar{border-width: 0;} - -.tox .tox-toolbar--no-divider{background-image: none;} - -.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color: #222f3e;border: 1px solid #000;border-radius: 3px;box-shadow: 0 1px 3px rgba(0,0,0,.15);} - -.tox.tox-tinymce-aux:not([dir=rtl]) .tox-toolbar__overflow{margin-left: 4px;} - -.tox[dir=rtl] .tox-tbtn__icon-rtl svg{transform: rotateY(180deg);} - -.tox[dir=rtl].tox-tinymce-aux .tox-toolbar__overflow{margin-right: 4px;} - -.tox .tox-toolbar__group{display: flex;padding: 0 4px;margin: 0 0;align-items: center;flex-wrap: wrap;} - -.tox .tox-toolbar__group--pull-right{margin-left: auto;} - -.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right: 1px solid #000;} - -.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left: 1px solid #000;} - -.tox .tox-tooltip{position: relative;display: inline-block;padding: 8px;} - -.tox .tox-tooltip__body{padding: 4px 8px;font-size: 14px;font-style: normal;font-weight: 400;color: rgba(255,255,255,.75);text-transform: normal;background-color: #3d546f;border-radius: 3px;box-shadow: 0 2px 4px rgba(34,47,62,.3);} - -.tox .tox-tooltip__arrow{position: absolute;} - -.tox .tox-tooltip--down .tox-tooltip__arrow{position: absolute;bottom: 0;left: 50%;border-top: 8px solid #3d546f;border-right: 8px solid transparent;border-left: 8px solid transparent;transform: translateX(-50%);} - -.tox .tox-tooltip--up .tox-tooltip__arrow{position: absolute;top: 0;left: 50%;border-right: 8px solid transparent;border-bottom: 8px solid #3d546f;border-left: 8px solid transparent;transform: translateX(-50%);} - -.tox .tox-tooltip--right .tox-tooltip__arrow{position: absolute;top: 50%;right: 0;border-top: 8px solid transparent;border-bottom: 8px solid transparent;border-left: 8px solid #3d546f;transform: translateY(-50%);} - -.tox .tox-tooltip--left .tox-tooltip__arrow{position: absolute;top: 50%;left: 0;border-top: 8px solid transparent;border-right: 8px solid #3d546f;border-bottom: 8px solid transparent;transform: translateY(-50%);} - -.tox .tox-well{width: 100%;padding: 8px;border: 1px solid #000;border-radius: 3px;} - -.tox .tox-well>:first-child{margin-top: 0;} - -.tox .tox-well>:last-child{margin-bottom: 0;} - -.tox .tox-well>:only-child{margin: 0;} - -.tox .tox-custom-editor{display: flex;height: 525px;border: 1px solid #000;border-radius: 3px;} - -.tox .tox-dialog-loading::before{position: absolute;z-index: 1000;width: 100%;height: 100%;background-color: rgba(0,0,0,.5);content: "";} - -.tox .tox-tab{cursor: pointer;} - -.tox .tox-dialog__content-js{display: flex;flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-dialog__body-content .tox-collection{display: flex;flex: 1;-ms-flex-preferred-size: auto;} - -.tox ul{display: block;list-style-type: disc;-webkit-margin-before: 1em;margin-block-start: 1em;-webkit-margin-after: 1em;margin-block-end: 1em;-webkit-margin-start: 0;margin-inline-start: 0;-webkit-margin-end: 0;margin-inline-end: 0;-webkit-padding-start: 40px;padding-inline-start: 40px;} - -.tox a{color: #2276d2;cursor: pointer;} - -.tox .tox-image-tools-edit-panel{height: 60px;} - -.tox .tox-image-tools__sidebar{height: 60px;} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/skin.mobile.min.css b/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/skin.mobile.min.css deleted file mode 100644 index 14847d0a2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide-dark/skin.mobile.min.css +++ /dev/null @@ -1,239 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - */ -.tinymce-mobile-outer-container{all: initial;display: block;} - -.tinymce-mobile-outer-container *{float: none;padding: 0;margin: 0;line-height: 1;text-shadow: none;white-space: nowrap;cursor: inherit;border: 0;outline: 0;box-sizing: initial;-webkit-tap-highlight-color: transparent;} - -.tinymce-mobile-icon-arrow-back::before{content: "\e5cd";} - -.tinymce-mobile-icon-image::before{content: "\e412";} - -.tinymce-mobile-icon-cancel-circle::before{content: "\e5c9";} - -.tinymce-mobile-icon-full-dot::before{content: "\e061";} - -.tinymce-mobile-icon-align-center::before{content: "\e234";} - -.tinymce-mobile-icon-align-left::before{content: "\e236";} - -.tinymce-mobile-icon-align-right::before{content: "\e237";} - -.tinymce-mobile-icon-bold::before{content: "\e238";} - -.tinymce-mobile-icon-italic::before{content: "\e23f";} - -.tinymce-mobile-icon-unordered-list::before{content: "\e241";} - -.tinymce-mobile-icon-ordered-list::before{content: "\e242";} - -.tinymce-mobile-icon-font-size::before{content: "\e245";} - -.tinymce-mobile-icon-underline::before{content: "\e249";} - -.tinymce-mobile-icon-link::before{content: "\e157";} - -.tinymce-mobile-icon-unlink::before{content: "\eca2";} - -.tinymce-mobile-icon-color::before{content: "\e891";} - -.tinymce-mobile-icon-previous::before{content: "\e314";} - -.tinymce-mobile-icon-next::before{content: "\e315";} - -.tinymce-mobile-icon-large-font::before,.tinymce-mobile-icon-style-formats::before{content: "\e264";} - -.tinymce-mobile-icon-undo::before{content: "\e166";} - -.tinymce-mobile-icon-redo::before{content: "\e15a";} - -.tinymce-mobile-icon-removeformat::before{content: "\e239";} - -.tinymce-mobile-icon-small-font::before{content: "\e906";} - -.tinymce-mobile-format-matches::after,.tinymce-mobile-icon-readonly-back::before{content: "\e5ca";} - -.tinymce-mobile-icon-small-heading::before{content: "small";} - -.tinymce-mobile-icon-large-heading::before{content: "large";} - -.tinymce-mobile-icon-large-heading::before,.tinymce-mobile-icon-small-heading::before{font-family: sans-serif;font-size: 80%;} - -.tinymce-mobile-mask-edit-icon::before{content: "\e254";} - -.tinymce-mobile-icon-back::before{content: "\e5c4";} - -.tinymce-mobile-icon-heading::before{font-family: sans-serif;font-size: 80%;font-weight: 700;content: "Headings";} - -.tinymce-mobile-icon-h1::before{font-weight: 700;content: "H1";} - -.tinymce-mobile-icon-h2::before{font-weight: 700;content: "H2";} - -.tinymce-mobile-icon-h3::before{font-weight: 700;content: "H3";} - -.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask{position: absolute;top: 0;display: flex;width: 100%;height: 100%;background: rgba(51,51,51,.5);align-items: center;justify-content: center;} - -.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container{display: flex;font-family: sans-serif;font-size: 1em;border-radius: 50%;align-items: center;flex-direction: column;justify-content: space-between;} - -.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item{display: flex;width: 2.1em;height: 2.1em;border-radius: 50%;align-items: center;justify-content: center;} - -.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{align-items: center;display: flex;justify-content: center;flex-direction: column;font-size: 1em;}@media only screen and (min-device-width: 700px){.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{font-size: 1.2em;}} - -.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon{display: flex;width: 2.1em;height: 2.1em;color: #207ab7;background-color: #fff;border-radius: 50%;align-items: center;justify-content: center;} - -.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before{font-family: tinymce-mobile,sans-serif;content: "\e900";} - -.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon{z-index: 2;} - -.tinymce-mobile-android-container.tinymce-mobile-android-maximized{position: fixed;top: 0;right: 0;bottom: 0;left: 0;display: flex;background: #fff;border: none;flex-direction: column;} - -.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized){position: relative;} - -.tinymce-mobile-android-container .tinymce-mobile-editor-socket{display: flex;flex-grow: 1;} - -.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe{display: flex !important;flex-grow: 1;height: auto !important;} - -.tinymce-mobile-android-scroll-reload{overflow: hidden;} - -:not(.tinymce-mobile-readonly-mode)>.tinymce-mobile-android-selection-context-toolbar{margin-top: 23px;} - -.tinymce-mobile-toolstrip{z-index: 1;display: flex;background: #fff;flex: 0 0 auto;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar{display: flex;width: 100%;height: 2.5em;background-color: #fff;border-bottom: 1px solid #ccc;align-items: center;flex: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group{align-items: center;display: flex;height: 100%;flex-shrink: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group>div{align-items: center;display: flex;height: 100%;flex: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container{background: #f44336;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group{flex-grow: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{padding-right: .5em;padding-left: .5em;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button{display: flex;height: 80%;margin-right: 2px;margin-left: 2px;align-items: center;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected{color: #ccc;background: #c8cbcf;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type{color: #eceff1;background: #207ab7;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group{display: flex;height: 100%;padding-top: .4em;padding-bottom: .4em;align-items: center;flex: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog{position: relative;display: flex;width: 100%;min-height: 1.5em;padding-right: 0;padding-left: 0;overflow: hidden;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain{display: flex;width: 100%;height: 100%;transition: left cubic-bezier(.4,0,1,1) .15s;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen{display: flex;flex: 0 0 auto;justify-content: space-between;width: 100%;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input{font-family: sans-serif;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container{position: relative;display: flex;flex-grow: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x{position: absolute;right: 0;height: 100%;padding-right: 2px;font-size: .6em;font-weight: 700;color: #888;background: inherit;border: none;border-radius: 50%;align-self: center;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x{display: none;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous{align-items: center;display: flex;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before{display: flex;height: 100%;padding-right: .5em;padding-left: .5em;font-weight: 700;align-items: center;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before{visibility: hidden;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item{padding-top: 3px;margin: 0 2px;font-size: 10px;line-height: 10px;color: #ccc;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active{color: #c8cbcf;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before{margin-right: .9em;margin-left: .5em;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before{margin-right: .5em;margin-left: .9em;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider{position: relative;display: flex;padding: .28em 0;margin-right: 0;margin-left: 0;flex: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container{align-items: center;display: flex;flex-grow: 1;height: 100%;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line{display: flex;height: .2em;margin-top: .3em;margin-bottom: .3em;background: #ccc;flex: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container{padding-right: 2em;padding-left: 2em;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container{align-items: center;display: flex;flex-grow: 1;height: 100%;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient{display: flex;height: .2em;margin-top: .3em;margin-bottom: .3em;background: linear-gradient(to right,red 0,#feff00 17%,#0f0 33%,#00feff 50%,#00f 67%,#ff00fe 83%,red 100%);flex: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black{width: 1.2em;height: .2em;margin-top: .3em;margin-bottom: .3em;background: #000;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white{width: 1.2em;height: .2em;margin-top: .3em;margin-bottom: .3em;background: #fff;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb{position: absolute;top: 0;bottom: 0;left: -10px;display: flex;width: .5em;height: .5em;margin: auto;color: #fff;background-color: #455a64;border: .5em solid rgba(136,136,136,0);border-radius: 3em;transition: border 120ms cubic-bezier(.39,.58,.57,1);background-clip: padding-box;align-items: center;justify-content: center;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active{border: .5em solid rgba(136,136,136,.39);} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group>div{align-items: center;display: flex;height: 100%;flex: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper{flex-direction: column;justify-content: center;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{align-items: center;display: flex;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog){height: 100%;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container{display: flex;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input{padding-top: .1em;padding-bottom: .1em;padding-left: 5px;font-size: .85em;color: #455a64;background: #fff;border: none;border-radius: 0;flex-grow: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder{color: #888;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder{color: #888;} - -.tinymce-mobile-dropup{display: flex;width: 100%;overflow: hidden;background: #fff;} - -.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking{transition: height .3s ease-out;} - -.tinymce-mobile-dropup.tinymce-mobile-dropup-growing{transition: height .3s ease-in;} - -.tinymce-mobile-dropup.tinymce-mobile-dropup-closed{flex-grow: 0;} - -.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing){flex-grow: 1;} - -.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height: 200px;}@media only screen and (orientation: landscape){.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height: 200px;}}@media only screen and (min-device-width: 320px) and (max-device-width: 568px) and (orientation: landscape){.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height: 150px;}} - -.tinymce-mobile-styles-menu{position: relative;width: 100%;overflow: hidden;font-family: sans-serif;outline: 4px solid #000;} - -.tinymce-mobile-styles-menu [role=menu]{position: absolute;display: flex;width: 100%;height: 100%;flex-direction: column;} - -.tinymce-mobile-styles-menu [role=menu].transitioning{transition: transform .5s ease-in-out;} - -.tinymce-mobile-styles-menu .tinymce-mobile-styles-item{position: relative;display: flex;padding: 1em 1em;color: #455a64;cursor: pointer;border-bottom: 1px solid #ddd;} - -.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before{font-family: tinymce-mobile,sans-serif;color: #455a64;content: "\e314";} - -.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after{position: absolute;right: 0;padding-right: 1em;padding-left: 1em;font-family: tinymce-mobile,sans-serif;color: #455a64;content: "\e315";} - -.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after{position: absolute;right: 0;padding-right: 1em;padding-left: 1em;font-family: tinymce-mobile,sans-serif;} - -.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser,.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator{display: flex;min-height: 2.5em;padding-right: 1em;padding-left: 1em;color: #455a64;background: #fff;border-top: #455a64;align-items: center;} - -.tinymce-mobile-styles-menu [data-transitioning-destination=before][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=before]{transform: translate(-100%);} - -.tinymce-mobile-styles-menu [data-transitioning-destination=current][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=current]{transform: translate(0);} - -.tinymce-mobile-styles-menu [data-transitioning-destination=after][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=after]{transform: translate(100%);}@font-face{font-family: tinymce-mobile;font-style: normal;font-weight: 400;src: url(fonts/tinymce-mobile.woff?8x92w3) format('woff');}@media (min-device-width: 700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size: 25px;}}@media (max-device-width: 700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size: 18px;}} - -.tinymce-mobile-icon{font-family: tinymce-mobile,sans-serif;} - -.mixin-flex-and-centre{align-items: center;display: flex;justify-content: center;} - -.mixin-flex-bar{align-items: center;display: flex;height: 100%;} - -.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe{width: 100%;background-color: #fff;} - -.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{position: fixed;right: 2em;bottom: 1em;display: flex;width: 2.1em;height: 2.1em;font-size: 1em;color: #fff;background-color: #207ab7;border-radius: 50%;align-items: center;justify-content: center;}@media only screen and (min-device-width: 700px){.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{font-size: 1.2em;}} - -.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket{height: 300px;overflow: hidden;} - -.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe{height: 100%;} - -.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip{display: none;} - -input[type=file]::-webkit-file-upload-button{display: none;}@media only screen and (min-device-width: 320px) and (max-device-width: 568px) and (orientation: landscape){.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{bottom: 50%;}} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/content.inline.min.css b/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/content.inline.min.css deleted file mode 100644 index 748f313bb..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/content.inline.min.css +++ /dev/null @@ -1,239 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - */ -.mce-content-body .mce-item-anchor{display: inline-block;width: 8px !important;height: 12px !important;padding: 0 2px;cursor: default;background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;-webkit-user-select: all;-moz-user-select: all;-ms-user-select: all;user-select: all;-webkit-user-modify: read-only;-moz-user-modify: read-only;} - -.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset: 1px;} - -.tox-comments-visible .tox-comment{background-color: #fff0b7;} - -.tox-comments-visible .tox-comment--active{background-color: #ffe168;} - -.tox-checklist>li:not(.tox-checklist--hidden){margin: .25em 0;list-style: none;} - -.tox-checklist>li:not(.tox-checklist--hidden)::before{position: absolute;width: 1em;height: 1em;margin-top: .125em;margin-left: -1.5em;cursor: pointer;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");background-size: 100%;content: '';} - -.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");} - -[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-right: -1.5em;margin-left: 0;} - -code[class*=language-],pre[class*=language-]{font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size: .875rem;-webkit-hyphens: none;-ms-hyphens: none;hyphens: none;line-height: 1.5;word-spacing: normal;color: #000;text-shadow: 0 1px #fff;word-break: normal;word-wrap: normal;white-space: pre;-moz-tab-size: 4;tab-size: 4;} - -code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow: none;background: #b3d4fc;} - -code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow: none;background: #b3d4fc;}@media print{code[class*=language-],pre[class*=language-]{text-shadow: none;}} - -pre[class*=language-]{padding: 1em;margin: .5em 0;overflow: auto;} - -:not(pre)>code[class*=language-],pre[class*=language-]{background: 0 0 !important;border: 1px solid #ccc;} - -:not(pre)>code[class*=language-]{padding: .1em;border-radius: .3em;} - -.token.cdata,.token.comment,.token.doctype,.token.prolog{color: #708090;} - -.token.punctuation{color: #999;} - -.namespace{opacity: .7;} - -.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color: #905;} - -.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color: #690;} - -.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color: #a67f59;background: hsla(0,0%,100%,.5);} - -.token.atrule,.token.attr-value,.token.keyword{color: #07a;} - -.token.function{color: #dd4a68;} - -.token.important,.token.regex,.token.variable{color: #e90;} - -.token.bold,.token.important{font-weight: 700;} - -.token.italic{font-style: italic;} - -.token.entity{cursor: help;} - -:not([dir=rtl]) code[class*=language-],:not([dir=rtl]) pre[class*=language-]{text-align: left;direction: ltr;} - -[dir=rtl] code[class*=language-],[dir=rtl] pre[class*=language-]{text-align: right;direction: rtl;} - -.mce-content-body{overflow-wrap: break-word;word-wrap: break-word;} - -.mce-content-body .mce-visual-caret{position: absolute;background-color: #000;background-color: currentColor;} - -.mce-content-body .mce-visual-caret-hidden{display: none;} - -.mce-content-body [data-mce-caret]{position: absolute;top: 0;right: auto;left: -1000px;padding: 0;margin: 0;} - -.mce-content-body .mce-offscreen-selection{position: absolute;left: -9999999999px;max-width: 1000000px;} - -.mce-content-body [contentEditable=false]{cursor: default;} - -.mce-content-body [contentEditable=true]{cursor: text;} - -.tox-cursor-format-painter{cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default;} - -.mce-content-body figure.align-left{float: left;} - -.mce-content-body figure.align-right{float: right;} - -.mce-content-body figure.image.align-center{display: table;margin-right: auto;margin-left: auto;} - -.mce-preview-object{position: relative;display: inline-block;margin: 0 2px 0 2px;line-height: 0;border: 1px solid gray;} - -.mce-preview-object .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);} - -.mce-preview-object[data-mce-selected="2"] .mce-shim{display: none;} - -.mce-object{background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border: 1px dashed #aaa;} - -.mce-pagebreak{display: block;width: 100%;height: 5px;margin-top: 15px;cursor: default;border: 1px dashed #aaa;page-break-before: always;}@media print{.mce-pagebreak{border: 0;}} - -.tiny-pageembed .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);} - -.tiny-pageembed[data-mce-selected="2"] .mce-shim{display: none;} - -.tiny-pageembed{position: relative;display: inline-block;} - -.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{position: relative;display: block;width: 100%;padding: 0;overflow: hidden;} - -.tiny-pageembed--16by9::before,.tiny-pageembed--1by1::before,.tiny-pageembed--21by9::before,.tiny-pageembed--4by3::before{display: block;content: "";} - -.tiny-pageembed--21by9::before{padding-top: 42.857143%;} - -.tiny-pageembed--16by9::before{padding-top: 56.25%;} - -.tiny-pageembed--4by3::before{padding-top: 75%;} - -.tiny-pageembed--1by1::before{padding-top: 100%;} - -.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{position: absolute;top: 0;left: 0;width: 100%;height: 100%;border: 0;} - -.mce-content-body div.mce-resizehandle{position: absolute;z-index: 10000;width: 10px;height: 10px;background-color: #4099ff;border-color: #4099ff;border-style: solid;border-width: 1px;box-sizing: border-box;} - -.mce-content-body div.mce-resizehandle:hover{background-color: #4099ff;} - -.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor: nwse-resize;} - -.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor: nesw-resize;} - -.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor: nwse-resize;} - -.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor: nesw-resize;} - -.mce-content-body .mce-clonedresizable{position: absolute;z-index: 10000;outline: 1px dashed #000;opacity: .5;} - -.mce-content-body .mce-resize-helper{position: absolute;z-index: 10001;display: none;padding: 5px;margin: 5px 10px;font-family: sans-serif;font-size: 12px;line-height: 14px;color: #fff;white-space: nowrap;background: #555;background: rgba(0,0,0,.75);border: 1px;border-radius: 3px;} - -.mce-match-marker{color: #fff;background: #aaa;} - -.mce-match-marker-selected{color: #fff;background: #39f;} - -.mce-content-body img[data-mce-selected],.mce-content-body table[data-mce-selected]{outline: 3px solid #b4d7ff;} - -.mce-content-body hr[data-mce-selected]{outline: 3px solid #b4d7ff;outline-offset: 1px;} - -.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline: 3px solid #b4d7ff;} - -.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline: 3px solid #b4d7ff;} - -.mce-content-body [contentEditable=false][data-mce-selected]{cursor: not-allowed;outline: 3px solid #b4d7ff;} - -.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline: 0;} - -.mce-content-body [data-mce-selected=inline-boundary]{background-color: #b4d7ff;} - -.mce-content-body .mce-edit-focus{outline: 3px solid #b4d7ff;} - -.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{background-color: #b4d7ff !important;} - -.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background: 0 0;} - -.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background: 0 0;} - -.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{-webkit-touch-callout: none;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;} - -.mce-content-body img::-moz-selection{background: 0 0;} - -.mce-content-body img::selection{background: 0 0;} - -.ephox-snooker-resizer-bar{background-color: #b4d7ff;opacity: 0;} - -.ephox-snooker-resizer-cols{cursor: col-resize;} - -.ephox-snooker-resizer-rows{cursor: row-resize;} - -.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity: 1;} - -.mce-spellchecker-word{height: 2rem;cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.5'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;} - -.mce-spellchecker-grammar{cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23008800'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;} - -.mce-toc{border: 1px solid gray;} - -.mce-toc h2{margin: 4px;} - -.mce-toc li{list-style-type: none;} - -.mce-item-table,.mce-item-table caption,.mce-item-table td,.mce-item-table th{border: 1px dashed #bbb;} - -.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{padding-top: 10px;margin-left: 3px;background-repeat: no-repeat;border: 1px dashed #bbb;} - -.mce-visualblocks p{background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);} - -.mce-visualblocks h1{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);} - -.mce-visualblocks h2{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);} - -.mce-visualblocks h3{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);} - -.mce-visualblocks h4{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);} - -.mce-visualblocks h5{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);} - -.mce-visualblocks h6{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);} - -.mce-visualblocks div:not([data-mce-bogus]){background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);} - -.mce-visualblocks section{background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);} - -.mce-visualblocks article{background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);} - -.mce-visualblocks blockquote{background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);} - -.mce-visualblocks address{background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);} - -.mce-visualblocks pre{background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);} - -.mce-visualblocks figure{background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);} - -.mce-visualblocks figcaption{border: 1px dashed #bbb;} - -.mce-visualblocks hgroup{background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);} - -.mce-visualblocks aside{background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);} - -.mce-visualblocks ul{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);} - -.mce-visualblocks ol{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);} - -.mce-visualblocks dl{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);} - -.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left: 3px;} - -.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x: right;margin-right: 3px;} - -.mce-nbsp,.mce-shy{background: #aaa;} - -.mce-shy::after{content: '-';} - -.tox-toolbar-dock-fadeout{opacity: 0;visibility: hidden;} - -.tox-toolbar-dock-fadein{opacity: 1;visibility: visible;} - -.tox-toolbar-dock-transition{transition: visibility 0s linear .3s,opacity .3s ease;} - -.tox-toolbar-dock-transition.tox-toolbar-dock-fadein{transition-delay: 0s;} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/content.min.css b/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/content.min.css deleted file mode 100644 index 6e7165f09..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/content.min.css +++ /dev/null @@ -1,235 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - */ -.mce-content-body .mce-item-anchor{display: inline-block;width: 8px !important;height: 12px !important;padding: 0 2px;cursor: default;background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;-webkit-user-select: all;-moz-user-select: all;-ms-user-select: all;user-select: all;-webkit-user-modify: read-only;-moz-user-modify: read-only;} - -.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset: 1px;} - -.tox-comments-visible .tox-comment{background-color: #fff0b7;} - -.tox-comments-visible .tox-comment--active{background-color: #ffe168;} - -.tox-checklist>li:not(.tox-checklist--hidden){margin: .25em 0;list-style: none;} - -.tox-checklist>li:not(.tox-checklist--hidden)::before{position: absolute;width: 1em;height: 1em;margin-top: .125em;margin-left: -1.5em;cursor: pointer;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");background-size: 100%;content: '';} - -.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");} - -[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-right: -1.5em;margin-left: 0;} - -code[class*=language-],pre[class*=language-]{font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size: .875rem;-webkit-hyphens: none;-ms-hyphens: none;hyphens: none;line-height: 1.5;word-spacing: normal;color: #000;text-shadow: 0 1px #fff;word-break: normal;word-wrap: normal;white-space: pre;-moz-tab-size: 4;tab-size: 4;} - -code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow: none;background: #b3d4fc;} - -code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow: none;background: #b3d4fc;}@media print{code[class*=language-],pre[class*=language-]{text-shadow: none;}} - -pre[class*=language-]{padding: 1em;margin: .5em 0;overflow: auto;} - -:not(pre)>code[class*=language-],pre[class*=language-]{background: 0 0 !important;border: 1px solid #ccc;} - -:not(pre)>code[class*=language-]{padding: .1em;border-radius: .3em;} - -.token.cdata,.token.comment,.token.doctype,.token.prolog{color: #708090;} - -.token.punctuation{color: #999;} - -.namespace{opacity: .7;} - -.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color: #905;} - -.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color: #690;} - -.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color: #a67f59;background: hsla(0,0%,100%,.5);} - -.token.atrule,.token.attr-value,.token.keyword{color: #07a;} - -.token.function{color: #dd4a68;} - -.token.important,.token.regex,.token.variable{color: #e90;} - -.token.bold,.token.important{font-weight: 700;} - -.token.italic{font-style: italic;} - -.token.entity{cursor: help;} - -:not([dir=rtl]) code[class*=language-],:not([dir=rtl]) pre[class*=language-]{text-align: left;direction: ltr;} - -[dir=rtl] code[class*=language-],[dir=rtl] pre[class*=language-]{text-align: right;direction: rtl;} - -.mce-content-body{overflow-wrap: break-word;word-wrap: break-word;} - -.mce-content-body .mce-visual-caret{position: absolute;background-color: #000;background-color: currentColor;} - -.mce-content-body .mce-visual-caret-hidden{display: none;} - -.mce-content-body [data-mce-caret]{position: absolute;top: 0;right: auto;left: -1000px;padding: 0;margin: 0;} - -.mce-content-body .mce-offscreen-selection{position: absolute;left: -9999999999px;max-width: 1000000px;} - -.mce-content-body [contentEditable=false]{cursor: default;} - -.mce-content-body [contentEditable=true]{cursor: text;} - -.tox-cursor-format-painter{cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default;} - -.mce-content-body figure.align-left{float: left;} - -.mce-content-body figure.align-right{float: right;} - -.mce-content-body figure.image.align-center{display: table;margin-right: auto;margin-left: auto;} - -.mce-preview-object{position: relative;display: inline-block;margin: 0 2px 0 2px;line-height: 0;border: 1px solid gray;} - -.mce-preview-object .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);} - -.mce-preview-object[data-mce-selected="2"] .mce-shim{display: none;} - -.mce-object{background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border: 1px dashed #aaa;} - -.mce-pagebreak{display: block;width: 100%;height: 5px;margin-top: 15px;cursor: default;border: 1px dashed #aaa;page-break-before: always;}@media print{.mce-pagebreak{border: 0;}} - -.tiny-pageembed .mce-shim{position: absolute;top: 0;left: 0;width: 100%;height: 100%;background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);} - -.tiny-pageembed[data-mce-selected="2"] .mce-shim{display: none;} - -.tiny-pageembed{position: relative;display: inline-block;} - -.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{position: relative;display: block;width: 100%;padding: 0;overflow: hidden;} - -.tiny-pageembed--16by9::before,.tiny-pageembed--1by1::before,.tiny-pageembed--21by9::before,.tiny-pageembed--4by3::before{display: block;content: "";} - -.tiny-pageembed--21by9::before{padding-top: 42.857143%;} - -.tiny-pageembed--16by9::before{padding-top: 56.25%;} - -.tiny-pageembed--4by3::before{padding-top: 75%;} - -.tiny-pageembed--1by1::before{padding-top: 100%;} - -.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{position: absolute;top: 0;left: 0;width: 100%;height: 100%;border: 0;} - -.mce-content-body div.mce-resizehandle{position: absolute;z-index: 10000;width: 10px;height: 10px;background-color: #4099ff;border-color: #4099ff;border-style: solid;border-width: 1px;box-sizing: border-box;} - -.mce-content-body div.mce-resizehandle:hover{background-color: #4099ff;} - -.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor: nwse-resize;} - -.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor: nesw-resize;} - -.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor: nwse-resize;} - -.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor: nesw-resize;} - -.mce-content-body .mce-clonedresizable{position: absolute;z-index: 10000;outline: 1px dashed #000;opacity: .5;} - -.mce-content-body .mce-resize-helper{position: absolute;z-index: 10001;display: none;padding: 5px;margin: 5px 10px;font-family: sans-serif;font-size: 12px;line-height: 14px;color: #fff;white-space: nowrap;background: #555;background: rgba(0,0,0,.75);border: 1px;border-radius: 3px;} - -.mce-match-marker{color: #fff;background: #aaa;} - -.mce-match-marker-selected{color: #fff;background: #39f;} - -.mce-content-body img[data-mce-selected],.mce-content-body table[data-mce-selected]{outline: 3px solid #b4d7ff;} - -.mce-content-body hr[data-mce-selected]{outline: 3px solid #b4d7ff;outline-offset: 1px;} - -.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline: 3px solid #b4d7ff;} - -.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline: 3px solid #b4d7ff;} - -.mce-content-body [contentEditable=false][data-mce-selected]{cursor: not-allowed;outline: 3px solid #b4d7ff;} - -.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline: 0;} - -.mce-content-body [data-mce-selected=inline-boundary]{background-color: #b4d7ff;} - -.mce-content-body .mce-edit-focus{outline: 3px solid #b4d7ff;} - -.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{background-color: #b4d7ff !important;} - -.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background: 0 0;} - -.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background: 0 0;} - -.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{-webkit-touch-callout: none;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;} - -.mce-content-body img::-moz-selection{background: 0 0;} - -.mce-content-body img::selection{background: 0 0;} - -.ephox-snooker-resizer-bar{background-color: #b4d7ff;opacity: 0;} - -.ephox-snooker-resizer-cols{cursor: col-resize;} - -.ephox-snooker-resizer-rows{cursor: row-resize;} - -.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity: 1;} - -.mce-spellchecker-word{height: 2rem;cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.5'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;} - -.mce-spellchecker-grammar{cursor: default;background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23008800'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position: 0 calc(100% + 1px);background-repeat: repeat-x;background-size: auto 6px;} - -.mce-toc{border: 1px solid gray;} - -.mce-toc h2{margin: 4px;} - -.mce-toc li{list-style-type: none;} - -.mce-item-table,.mce-item-table caption,.mce-item-table td,.mce-item-table th{border: 1px dashed #bbb;} - -.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{padding-top: 10px;margin-left: 3px;background-repeat: no-repeat;border: 1px dashed #bbb;} - -.mce-visualblocks p{background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);} - -.mce-visualblocks h1{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);} - -.mce-visualblocks h2{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);} - -.mce-visualblocks h3{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);} - -.mce-visualblocks h4{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);} - -.mce-visualblocks h5{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);} - -.mce-visualblocks h6{background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);} - -.mce-visualblocks div:not([data-mce-bogus]){background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);} - -.mce-visualblocks section{background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);} - -.mce-visualblocks article{background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);} - -.mce-visualblocks blockquote{background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);} - -.mce-visualblocks address{background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);} - -.mce-visualblocks pre{background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);} - -.mce-visualblocks figure{background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);} - -.mce-visualblocks figcaption{border: 1px dashed #bbb;} - -.mce-visualblocks hgroup{background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);} - -.mce-visualblocks aside{background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);} - -.mce-visualblocks ul{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);} - -.mce-visualblocks ol{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);} - -.mce-visualblocks dl{background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);} - -.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left: 3px;} - -.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x: right;margin-right: 3px;} - -.mce-nbsp,.mce-shy{background: #aaa;} - -.mce-shy::after{content: '-';} - -body{font-family: sans-serif;} - -table{border-collapse: collapse;} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/content.mobile.min.css b/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/content.mobile.min.css deleted file mode 100644 index c0522520e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/content.mobile.min.css +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - */ -.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{position: absolute;display: inline-block;background-color: green;opacity: .5;} - -body{-webkit-text-size-adjust: none;} - -body img{max-width: 96vw;} - -body table img{max-width: 95%;} - -body{font-family: sans-serif;} - -table{border-collapse: collapse;} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff b/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff deleted file mode 100644 index 1e3be038a607cb7c2544ed8ae3d6621f77bf4c38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4624 zcmb7IeQaFC5#QN&AGUL{efE7g{=BM1W-|RaVdWQe^e?BC`eGz4^i8S3PQw?Hhd_eQHxTkckXZB zdzU((wCVGko!Qyh+1c6InRotvZ%+>+hNrBQtrFOI4t*}DZ$7=>Sr=uD3c$ZlKuKBQ z8~ervCczs9SOk2!>AAqrz+v$CC}f1JfYPDSqx->|V$6{ekbe8M#Bh3Gkg?)-Fdi3B zeB$}UFqn*$pv&q7*net~hsUOlfG7Ho2zaowY%JPRytMvu{&xRPm(h_~w##F>vqE&a5-ssH##mlfAk}44^ zXRJKd!Ifw&ce{$Y9BAg5c>e>p_Z;t!=P{izddGWie?aHLdKL3Cn9rG=d2vt;esWqH zoD}uAoi3Z~4+LABvADt+so4~t%VlyIJ{O3tm$NC+(!yenQD%NVr*btG$T3+_WX=LH z#1M2ZNEtrO+-x;l2i>M^5o%GQ@s?N+gw*19H@G~vl3Q5Zf*t6jjW0GOTmAmlWYgSS zJeiEo%~LA-FW|YAd_Em$OE#@dw)y*#@p!UtnWa);V1HY3ZBw!>(3gY{iFFa_c6iW9 zIQ@xck^{xu9_o;UyQH#ba@y?L$xW?8J35?$p1z46ZjIctZ8QCKCa29bMC1-t@pT>S zTUT1WMjQz-75d)5zJxv~@Yd)bY)ejQBx_XQiaMJ z>$5`NO3?L*ND{UQeF8%xl)$_>w9tmQpfEebzedazFeh#~d}suN+vzsqLiW~@TLhoe zk1%xEcxP2ZL)FuoXeYzb-J5goljDxPL2@@#RW)d&X#&6QO5U=04_628@ONSvtgpha zDqqmoVep`A4<+PK$V>K+T}}{8Rj+Q|UAzCtl!Fh)uXJg{x$}HMJH7LcBLzj-r{h;< zzote8Id%pcAyE;87D<8glyaFeq#k)OEDB%yA ze%CeZ!?4TEs#pj+%14DBZHn8jxaF2as6}p3+!6p-&@I>5lbP3&N$svcIF-`0R5(o2 zh7la++|;-euckH44a4BAwB++#-cZ z)kFyC=eUS-4D0t}H8LdZY!JD^sW@F85io)%=8HU)ouhEeo-K_dJ3BV+8fo0JXIjlP zZt0H`0=Yv~I|PpRZ)r5_iAYmY9V=wT@BsoN9<3vftB|}TOH;|yNk_e7(2-?y{&cSK zG=E5Nz^Ko4>KxcbY!Q13!=HBS$lM96_+0y3M1yWTAt2u5C;6MWMXbRN?RI{$eHnAx z&t=-PSjZ>Qe2V2-YGs1YWemAq zVHdG{9V$QvsY~Cgq-L*PZqMPGv|px$)K~3<%+fBtG{oIRPL_7ye$-(`C=tS)^xC}% zue73qiF&{nXJ*>-@668G!`IrAeB;ad09shzt{O?7omLE_X@H|#ozGt&64 zb-&_lLkZI8TzigPZvUr=4g2-8M6M8b9EQLgoPswYg)d)j&%gZHJO!2>(?;I*8d>aG z#oS295Kcq{uD4R2@VEG($}WWiF-6YK)kjqks%o_U{CIAVX2;tX7o|unkew5?Gn3(| zOePS^{$(;Xi4ph;`KO#;k+vaLt8n5@doi+OEvH&?*+3(WgqkT9-$b0fTHm;)r=NmR zJnJ9o>UvNR(JMoIdRBf{%kd}jmZ)b)#4>dnDfq0G(?~S%d zv50QeMR$Kzd*S$AEXdp5Fhqe0Pz zZ!oS2e!i-tWEJ2^YoVo}V7S0tV7CujimbVJtVNb#yB&<-f&xpSb@m2=wBZ|qU-_^; z?C{lk+;tlxk&Sh3Pwh(D7~kNh`O=~TMWuRUu^0=9)`CYEVwhvGWUt4Wd3`6*H)Zs>LLYQcC#*~B78EfTt7RQ*l)b{v zqntLNsC`h&zZCY{x*}gfPU4at;nfileU3>zeyLdO7;;lFIft~ zsm6#wb5Jjtv;_VxleU0<%cQON-O*ywHt`@C4fn-Y83}=|hJPOpN>1H%C#7)9etg_yG)$:first-child{border-top: none !important;} - -.tox-tinymce-aux{font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;} - -.tox-tinymce :focus,.tox-tinymce-aux :focus{outline: 0;} - -button::-moz-focus-inner{border: 0;} - -.tox-silver-sink{z-index: 1300;} - -.tox .tox-anchorbar{display: flex;flex: 0 0 auto;} - -.tox .tox-bar{display: flex;flex: 0 0 auto;} - -.tox .tox-button{display: inline-block;padding: 4px 16px;margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 14px;font-weight: 700;line-height: 24px;letter-spacing: 1;color: #fff;text-align: center;text-decoration: none;text-transform: capitalize;white-space: nowrap;cursor: pointer;background-color: #207ab7;background-image: none;background-position: none;background-repeat: none;border-color: #207ab7;border-style: solid;border-width: 1px;border-radius: 3px;outline: 0;box-shadow: none;box-sizing: border-box;} - -.tox .tox-button[disabled]{color: rgba(255,255,255,.5);cursor: not-allowed;background-color: #207ab7;background-image: none;border-color: #207ab7;box-shadow: none;} - -.tox .tox-button:focus:not(:disabled){color: #fff;background-color: #1c6ca1;background-image: none;border-color: #1c6ca1;box-shadow: none;} - -.tox .tox-button:hover:not(:disabled){color: #fff;background-color: #1c6ca1;background-image: none;border-color: #1c6ca1;box-shadow: none;} - -.tox .tox-button:active:not(:disabled){color: #fff;background-color: #185d8c;background-image: none;border-color: #185d8c;box-shadow: none;} - -.tox .tox-button--secondary{padding: 4px 16px;color: #222f3e;text-decoration: none;text-transform: capitalize;background-color: #f0f0f0;background-image: none;background-position: none;background-repeat: none;border-color: #f0f0f0;border-style: solid;border-width: 1px;border-radius: 3px;outline: 0;box-shadow: none;} - -.tox .tox-button--secondary[disabled]{color: rgba(34,47,62,.5);background-color: #f0f0f0;background-image: none;border-color: #f0f0f0;box-shadow: none;} - -.tox .tox-button--secondary:focus:not(:disabled){color: #222f3e;background-color: #e3e3e3;background-image: none;border-color: #e3e3e3;box-shadow: none;} - -.tox .tox-button--secondary:hover:not(:disabled){color: #222f3e;background-color: #e3e3e3;background-image: none;border-color: #e3e3e3;box-shadow: none;} - -.tox .tox-button--secondary:active:not(:disabled){color: #222f3e;background-color: #d6d6d6;background-image: none;border-color: #d6d6d6;box-shadow: none;} - -.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding: 4px;} - -.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display: block;fill: currentColor;} - -.tox .tox-button-link{display: inline-block;padding: 0;margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 16px;font-weight: 400;line-height: 1.3;white-space: nowrap;cursor: pointer;background: 0;border: none;box-sizing: border-box;} - -.tox .tox-button-link--sm{font-size: 14px;} - -.tox .tox-button--naked{color: #222f3e;background-color: transparent;border-color: transparent;box-shadow: unset;} - -.tox .tox-button--naked:hover:not(:disabled){color: #222f3e;background-color: #e3e3e3;border-color: #e3e3e3;box-shadow: none;} - -.tox .tox-button--naked:focus:not(:disabled){color: #222f3e;background-color: #e3e3e3;border-color: #e3e3e3;box-shadow: none;} - -.tox .tox-button--naked:active:not(:disabled){color: #222f3e;background-color: #d6d6d6;border-color: #d6d6d6;box-shadow: none;} - -.tox .tox-button--naked .tox-icon svg{fill: currentColor;} - -.tox .tox-button--naked.tox-button--icon{color: currentColor;} - -.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color: #222f3e;} - -.tox .tox-checkbox{display: flex;height: 36px;min-width: 36px;cursor: pointer;border-radius: 3px;align-items: center;} - -.tox .tox-checkbox__input{position: absolute;top: auto;left: -10000px;width: 1px;height: 1px;overflow: hidden;} - -.tox .tox-checkbox__icons{width: 24px;height: 24px;padding: calc(4px - 1px);border-radius: 3px;box-shadow: 0 0 0 2px transparent;box-sizing: content-box;} - -.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display: block;fill: rgba(34,47,62,.3);} - -.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display: none;fill: #207ab7;} - -.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display: none;fill: #207ab7;} - -.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display: none;} - -.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display: block;} - -.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display: none;} - -.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display: block;} - -.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{padding: calc(4px - 1px);border-radius: 3px;box-shadow: inset 0 0 0 1px #207ab7;} - -.tox:not([dir=rtl]) .tox-checkbox__label{margin-left: 4px;} - -.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left: 4px;} - -.tox[dir=rtl] .tox-checkbox__label{margin-right: 4px;} - -.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right: 4px;} - -.tox .tox-collection--toolbar .tox-collection__group{display: flex;padding: 0;} - -.tox .tox-collection--grid .tox-collection__group{display: flex;max-height: 208px;padding: 0;overflow-x: hidden;overflow-y: auto;flex-wrap: wrap;} - -.tox .tox-collection--list .tox-collection__group{padding: 4px 0;border-color: #ccc;border-style: solid;border-top-width: 1px;border-right-width: 0;border-bottom-width: 0;border-left-width: 0;} - -.tox .tox-collection--list .tox-collection__group:first-child{border-top-width: 0;} - -.tox .tox-collection__group-heading{padding: 4px 8px;margin-top: -4px;margin-bottom: 4px;font-size: 12px;font-style: normal;font-weight: 400;color: rgba(34,47,62,.7);text-transform: none;cursor: default;background-color: #e6e6e6;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;-webkit-touch-callout: none;} - -.tox .tox-collection__item{display: flex;color: #222f3e;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;align-items: center;-webkit-touch-callout: none;} - -.tox .tox-collection--list .tox-collection__item{padding: 4px 8px;} - -.tox .tox-collection--toolbar .tox-collection__item{padding: 4px;border-radius: 3px;} - -.tox .tox-collection--grid .tox-collection__item{padding: 4px;border-radius: 3px;} - -.tox .tox-collection--list .tox-collection__item--enabled{color: contrast(inherit,#222f3e,#fff);background-color: inherit;} - -.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color: #222f3e;background-color: #dee0e2;} - -.tox .tox-collection--toolbar .tox-collection__item--enabled{color: #222f3e;background-color: #c8cbcf;} - -.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color: #222f3e;background-color: #dee0e2;} - -.tox .tox-collection--grid .tox-collection__item--enabled{color: #222f3e;background-color: #c8cbcf;} - -.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){color: #222f3e;background-color: #dee0e2;} - -.tox .tox-collection__item--state-disabled{color: rgba(34,47,62,.5);cursor: default;background-color: transparent;} - -.tox .tox-collection__item-icon{display: flex;width: 24px;height: 24px;align-items: center;justify-content: center;} - -.tox .tox-collection__item-icon svg{fill: currentColor;} - -.tox .tox-collection--toolbar-lg .tox-collection__item-icon{width: 48px;height: 48px;} - -.tox .tox-collection__item[role=menuitemcheckbox]:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display: none;} - -.tox .tox-collection__item-label{display: inline-block;font-size: 14px;font-style: normal;font-weight: 400;line-height: 24px;color: currentColor;text-transform: none;word-break: break-all;flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-collection__item-accessory{display: inline-block;height: 24px;font-size: 14px;line-height: 24px;color: rgba(34,47,62,.7);text-transform: normal;} - -.tox .tox-collection__item-caret{align-items: center;display: flex;min-height: 24px;} - -.tox .tox-collection__item-caret::after{min-height: inherit;font-size: 0;content: '';} - -.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left: 8px;} - -.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item-label:first-child{margin-left: 4px;} - -.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left: 16px;text-align: right;} - -.tox:not([dir=rtl]) .tox-collection__item-caret{margin-left: 16px;} - -.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right: 8px;} - -.tox[dir=rtl] .tox-collection--list .tox-collection__item-label:first-child{margin-right: 4px;} - -.tox[dir=rtl] .tox-collection__item-icon-rtl .tox-collection__item-icon svg{transform: rotateY(180deg);} - -.tox[dir=rtl] .tox-collection__item-accessory{margin-right: 16px;text-align: left;} - -.tox[dir=rtl] .tox-collection__item-caret{margin-right: 16px;transform: rotateY(180deg);} - -.tox .tox-color-picker-container{display: flex;flex-direction: row;height: 225px;margin: 0;} - -.tox .tox-sv-palette{display: flex;height: 100%;box-sizing: border-box;} - -.tox .tox-sv-palette-spectrum{height: 100%;} - -.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width: 225px;} - -.tox .tox-sv-palette-thumb{position: absolute;width: 12px;height: 12px;background: 0 0;border: 1px solid #000;border-radius: 50%;box-sizing: content-box;} - -.tox .tox-sv-palette-inner-thumb{position: absolute;width: 10px;height: 10px;border: 1px solid #fff;border-radius: 50%;} - -.tox .tox-hue-slider{width: 25px;height: 100%;box-sizing: border-box;} - -.tox .tox-hue-slider-spectrum{width: 100%;height: 100%;background: linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);} - -.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width: 20px;} - -.tox .tox-hue-slider-thumb{width: 100%;height: 4px;background: #fff;border: 1px solid #000;box-sizing: content-box;} - -.tox .tox-rgb-form{display: flex;flex-direction: column;justify-content: space-between;} - -.tox .tox-rgb-form div{display: flex;width: inherit;margin-bottom: 5px;align-items: center;justify-content: space-between;} - -.tox .tox-rgb-form input{width: 6em;} - -.tox .tox-rgb-form input.tox-invalid{border: 1px solid red !important;} - -.tox .tox-rgb-form .tox-rgba-preview{margin-bottom: 0;border: 1px solid #000;flex-grow: 2;} - -.tox:not([dir=rtl]) .tox-sv-palette{margin-right: 15px;} - -.tox:not([dir=rtl]) .tox-hue-slider{margin-right: 15px;} - -.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left: -1px;} - -.tox:not([dir=rtl]) .tox-rgb-form label{margin-right: .5em;} - -.tox[dir=rtl] .tox-sv-palette{margin-left: 15px;} - -.tox[dir=rtl] .tox-hue-slider{margin-left: 15px;} - -.tox[dir=rtl] .tox-hue-slider-thumb{margin-right: -1px;} - -.tox[dir=rtl] .tox-rgb-form label{margin-left: .5em;} - -.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin: 2px 0 3px 4px;} - -.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{margin: -4px 0;border: 0;} - -.tox .tox-swatches__row{display: flex;} - -.tox .tox-swatch{width: 30px;height: 30px;transition: transform .15s,box-shadow .15s;} - -.tox .tox-swatch:focus,.tox .tox-swatch:hover{transform: scale(.8);box-shadow: 0 0 0 1px rgba(127,127,127,.3) inset;} - -.tox .tox-swatch--remove{align-items: center;display: flex;justify-content: center;} - -.tox .tox-swatch--remove svg path{stroke: #e74c3c;} - -.tox .tox-swatches__picker-btn{display: flex;width: 30px;height: 30px;padding: 0;cursor: pointer;background-color: transparent;border: 0;outline: 0;align-items: center;justify-content: center;} - -.tox .tox-swatches__picker-btn svg{width: 24px;height: 24px;} - -.tox .tox-swatches__picker-btn:hover{background: #dee0e2;} - -.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left: auto;} - -.tox[dir=rtl] .tox-swatches__picker-btn{margin-right: auto;} - -.tox .tox-comment-thread{position: relative;background: #fff;} - -.tox .tox-comment-thread>:not(:first-child){margin-top: 8px;} - -.tox .tox-comment{position: relative;padding: 8px 8px 16px 8px;background: #fff;border: 1px solid #ccc;border-radius: 3px;box-shadow: 0 4px 8px 0 rgba(34,47,62,.1);} - -.tox .tox-comment__header{display: flex;color: #222f3e;align-items: center;justify-content: space-between;} - -.tox .tox-comment__date{font-size: 12px;color: rgba(34,47,62,.7);} - -.tox .tox-comment__body{position: relative;margin-top: 8px;font-size: 14px;font-style: normal;font-weight: 400;line-height: 1.3;color: #222f3e;text-transform: initial;} - -.tox .tox-comment__body textarea{width: 100%;white-space: normal;resize: none;} - -.tox .tox-comment__expander{padding-top: 8px;} - -.tox .tox-comment__expander p{font-size: 14px;font-style: normal;color: rgba(34,47,62,.7);} - -.tox .tox-comment__body p{margin: 0;} - -.tox .tox-comment__buttonspacing{padding-top: 16px;text-align: center;} - -.tox .tox-comment-thread__overlay::after{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 5;display: flex;background: #fff;content: "";opacity: .9;} - -.tox .tox-comment__reply{display: flex;flex-shrink: 0;flex-wrap: wrap;justify-content: flex-end;margin-top: 8px;} - -.tox .tox-comment__reply>:first-child{width: 100%;margin-bottom: 8px;} - -.tox .tox-comment__edit{display: flex;flex-wrap: wrap;justify-content: flex-end;margin-top: 16px;} - -.tox .tox-comment__gradient::after{position: absolute;bottom: 0;display: block;width: 100%;height: 5em;margin-top: -40px;background: linear-gradient(rgba(255,255,255,0),#fff);content: "";} - -.tox .tox-comment__overlay{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 5;display: flex;text-align: center;background: #fff;opacity: .9;flex-direction: column;flex-grow: 1;} - -.tox .tox-comment__loading-text{position: relative;display: flex;color: #222f3e;align-items: center;flex-direction: column;} - -.tox .tox-comment__loading-text>div{padding-bottom: 16px;} - -.tox .tox-comment__overlaytext{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 10;padding: 1em;font-size: 14px;flex-direction: column;} - -.tox .tox-comment__overlaytext p{color: #222f3e;text-align: center;background-color: #fff;box-shadow: 0 0 8px 8px #fff;} - -.tox .tox-comment__overlaytext div:nth-of-type(2){font-size: .8em;} - -.tox .tox-comment__busy-spinner{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 1103;display: flex;background-color: #fff;align-items: center;justify-content: center;} - -.tox .tox-comment__scroll{display: flex;flex-direction: column;flex-shrink: 1;overflow: auto;} - -.tox .tox-conversations{margin: 8px;} - -.tox:not([dir=rtl]) .tox-comment__edit{margin-left: 8px;} - -.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left: 8px;} - -.tox[dir=rtl] .tox-comment__edit{margin-right: 8px;} - -.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right: 8px;} - -.tox .tox-user{align-items: center;display: flex;} - -.tox .tox-user__avatar svg{fill: rgba(34,47,62,.7);} - -.tox .tox-user__name{font-size: 12px;font-style: normal;font-weight: 700;color: rgba(34,47,62,.7);text-transform: uppercase;} - -.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right: 8px;} - -.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left: 8px;} - -.tox[dir=rtl] .tox-user__avatar svg{margin-left: 8px;} - -.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right: 8px;} - -.tox .tox-dialog-wrap{position: fixed;top: 0;right: 0;bottom: 0;left: 0;z-index: 1100;display: flex;align-items: center;justify-content: center;} - -.tox .tox-dialog-wrap__backdrop{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 1101;background-color: rgba(255,255,255,.75);} - -.tox .tox-dialog{position: relative;z-index: 1102;display: flex;width: 95vw;max-width: 480px;max-height: 100%;overflow: hidden;background-color: #fff;border-color: #ccc;border-style: solid;border-width: 1px;border-radius: 3px;box-shadow: 0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);flex-direction: column;} - -.tox .tox-dialog__header{position: relative;display: flex;padding: 8px 16px 0 16px;margin-bottom: 16px;font-size: 16px;color: #222f3e;background-color: #fff;border-bottom: none;align-items: center;justify-content: space-between;} - -.tox .tox-dialog__header .tox-button{z-index: 1;} - -.tox .tox-dialog__draghandle{position: absolute;top: 0;left: 0;width: 100%;height: 100%;cursor: grab;} - -.tox .tox-dialog__draghandle:active{cursor: grabbing;} - -.tox .tox-dialog__dismiss{margin-left: auto;} - -.tox .tox-dialog__title{margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 20px;font-style: normal;font-weight: 400;line-height: 1.3;text-transform: normal;} - -.tox .tox-dialog__body{display: flex;min-width: 0;padding: 0 16px;font-size: 16px;font-style: normal;font-weight: 400;line-height: 1.3;color: #222f3e;text-align: left;text-transform: normal;flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-dialog__body-nav{align-items: flex-start;display: flex;flex-direction: column;} - -.tox .tox-dialog__body-nav-item{display: inline-block;margin-bottom: 8px;font-size: 14px;line-height: 1.3;color: rgba(34,47,62,.7);text-decoration: none;border-bottom: 2px solid transparent;} - -.tox .tox-dialog__body-nav-item--active{color: #207ab7;border-bottom: 2px solid #207ab7;} - -.tox .tox-dialog__body-content{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;max-height: 650px;overflow: auto;} - -.tox .tox-dialog__body-content>*{margin-top: 16px;margin-bottom: 0;} - -.tox .tox-dialog__body-content>:first-child{margin-top: 0;} - -.tox .tox-dialog__body-content>:last-child{margin-bottom: 0;} - -.tox .tox-dialog__body-content>:only-child{margin-top: 0;margin-bottom: 0;} - -.tox .tox-dialog--width-lg{height: 650px;max-width: 1200px;} - -.tox .tox-dialog--width-md{max-width: 800px;} - -.tox .tox-dialog--width-md .tox-dialog__body-content{overflow: auto;} - -.tox .tox-dialog__body-content--centered{text-align: center;} - -.tox .tox-dialog__body-content--spacious{margin-bottom: 16px;} - -.tox .tox-dialog__footer{display: flex;padding: 8px 16px;margin-top: 16px;background-color: #fff;border-top: 1px solid #ccc;align-items: center;justify-content: space-between;} - -.tox .tox-dialog__busy-spinner{position: absolute;top: 0;right: 0;bottom: 0;left: 0;z-index: 1103;display: flex;background-color: rgba(255,255,255,.75);align-items: center;justify-content: center;} - -.tox .tox-dialog__table{width: 100%;border-collapse: collapse;} - -.tox .tox-dialog__table thead th{padding-bottom: 8px;font-weight: 700;} - -.tox .tox-dialog__table tbody tr{border-bottom: 1px solid #ccc;} - -.tox .tox-dialog__table tbody tr:last-child{border-bottom: none;} - -.tox .tox-dialog__table td{padding-top: 8px;padding-bottom: 8px;} - -.tox .tox-dialog__popups{position: absolute;z-index: 1100;width: 100%;} - -.tox .tox-dialog__body-iframe{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;} - -.tox .tox-dialog__body-iframe .tox-navobj{display: flex;flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex: 1;-ms-flex-preferred-size: auto;height: 100%;} - -body.tox-dialog__disable-scroll{overflow: hidden;} - -.tox.tox-platform-ie .tox-dialog-wrap{position: -ms-device-fixed;} - -.tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right: 32px;} - -.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left: 8px;} - -.tox[dir=rtl] .tox-dialog__body{text-align: right;} - -.tox[dir=rtl] .tox-dialog__body-nav{margin-left: 32px;} - -.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right: 8px;} - -.tox .tox-dropzone-container{display: flex;flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-dropzone{display: flex;min-height: 100px;padding: 10px;background: #fff;border: 2px dashed #ccc;box-sizing: border-box;align-items: center;flex-direction: column;flex-grow: 1;justify-content: center;} - -.tox .tox-dropzone p{margin: 0 0 16px 0;color: rgba(34,47,62,.7);} - -.tox .tox-edit-area{position: relative;display: flex;overflow: hidden;border-top: 1px solid #ccc;flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-edit-area__iframe{position: absolute;width: 100%;height: 100%;background-color: #fff;border: 0;box-sizing: border-box;flex: 1;-ms-flex-preferred-size: auto;} - -.tox.tox-inline-edit-area{border: 1px dotted #ccc;} - -.tox .tox-control-wrap{flex: 1;position: relative;} - -.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display: none;} - -.tox .tox-control-wrap svg{display: block;} - -.tox .tox-control-wrap__status-icon-wrap{position: absolute;top: 50%;transform: translateY(-50%);} - -.tox .tox-control-wrap__status-icon-invalid svg{fill: #c00;} - -.tox .tox-control-wrap__status-icon-unknown svg{fill: orange;} - -.tox .tox-control-wrap__status-icon-valid svg{fill: green;} - -.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right: 32px;} - -.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right: 4px;} - -.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left: 32px;} - -.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left: 4px;} - -.tox .tox-autocompleter{max-width: 25em;} - -.tox .tox-autocompleter .tox-menu{max-width: 25em;} - -.tox .tox-color-input{display: flex;} - -.tox .tox-color-input .tox-textfield{display: flex;border-radius: 3px 0 0 3px;} - -.tox .tox-color-input span{display: flex;width: 35px;cursor: pointer;border-color: rgba(34,47,62,.2);border-style: solid;border-width: 1px 1px 1px 0;border-radius: 0 3px 3px 0;box-shadow: none;box-sizing: border-box;} - -.tox .tox-color-input span:focus{border-color: #207ab7;} - -.tox[dir=rtl] .tox-color-input .tox-textfield{border-radius: 0 3px 3px 0;} - -.tox[dir=rtl] .tox-color-input span{border-width: 1px 0 1px 1px;border-radius: 3px 0 0 3px;} - -.tox .tox-label,.tox .tox-toolbar-label{display: block;padding: 0 8px 0 0;font-size: 14px;font-style: normal;font-weight: 400;line-height: 1.3;color: rgba(34,47,62,.7);text-transform: normal;white-space: nowrap;} - -.tox .tox-toolbar-label{padding: 0 8px;} - -.tox[dir=rtl] .tox-label{padding: 0 0 0 8px;} - -.tox .tox-form{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;} - -.tox .tox-form__group{margin-bottom: 4px;box-sizing: border-box;} - -.tox .tox-form__group--error{color: #c00;} - -.tox .tox-form__group--collection{display: flex;} - -.tox .tox-form__grid{display: flex;flex-direction: row;flex-wrap: wrap;justify-content: space-between;} - -.tox .tox-form__grid--2col>.tox-form__group{width: calc(50% - (8px / 2));} - -.tox .tox-form__grid--3col>.tox-form__group{width: calc(100% / 3 - (8px / 2));} - -.tox .tox-form__grid--4col>.tox-form__group{width: calc(25% - (8px / 2));} - -.tox .tox-form__controls-h-stack{align-items: center;display: flex;} - -.tox .tox-form__group--inline{align-items: center;display: flex;} - -.tox .tox-form__group--stretched{display: flex;flex: 1;flex-direction: column;-ms-flex-preferred-size: auto;} - -.tox .tox-form__group--stretched .tox-textarea{flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-form__group--stretched .tox-navobj{display: flex;flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex: 1;-ms-flex-preferred-size: auto;height: 100%;} - -.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left: 4px;} - -.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right: 4px;} - -.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display: none;} - -.tox .tox-textarea,.tox .tox-textfield,.tox .tox-toolbar-textfield,.tox:not([dir=rtl]) .tox-selectfield select,.tox[dir=rtl] .tox-selectfield select{width: 100%;padding: 5px 4.75px;margin: 0;font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size: 16px;line-height: 24px;color: #222f3e;background-color: #fff;border-color: #ccc;border-style: solid;border-width: 1px;border-radius: 3px;outline: 0;box-shadow: none;box-sizing: border-box;resize: none;-webkit-appearance: none;-moz-appearance: none;appearance: none;} - -.tox .tox-selectfield select:focus,.tox .tox-textarea:focus,.tox .tox-textfield:focus{border-color: #207ab7;outline: 0;box-shadow: none;} - -.tox .tox-toolbar-textfield{max-width: 250px;margin-top: 2px;margin-bottom: 3px;border-width: 0;} - -.tox .tox-naked-btn{display: block;padding: 0;margin: 0;color: #207ab7;cursor: pointer;background-color: transparent;border: 0;border-color: transparent;box-shadow: unset;} - -.tox .tox-naked-btn svg{display: block;fill: #222f3e;} - -.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left: 4px;} - -.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right: 4px;} - -.tox .tox-selectfield{position: relative;cursor: pointer;} - -.tox .tox-selectfield select::-ms-expand{display: none;} - -.tox .tox-selectfield svg{position: absolute;top: 50%;pointer-events: none;transform: translateY(-50%);} - -.tox:not([dir=rtl]) .tox-selectfield select{padding-right: 24px;} - -.tox:not([dir=rtl]) .tox-selectfield svg{right: 8px;} - -.tox[dir=rtl] .tox-selectfield select{padding-left: 24px;} - -.tox[dir=rtl] .tox-selectfield svg{left: 8px;} - -.tox .tox-textarea{white-space: pre-wrap;-webkit-appearance: textarea;-moz-appearance: textarea;appearance: textarea;} - -.tox-fullscreen{position: fixed;top: 0;left: 0;width: 100%;height: 100%;padding: 0;margin: 0;overflow: hidden;border: 0;} - -.tox-fullscreen .tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display: none;} - -.tox-fullscreen .tox.tox-tinymce.tox-fullscreen{z-index: 1200;} - -.tox-fullscreen .tox.tox-tinymce-aux{z-index: 1201;} - -.tox .tox-image-tools{width: 100%;} - -.tox .tox-image-tools__toolbar{align-items: center;display: flex;justify-content: center;} - -.tox .tox-image-tools__image{position: relative;width: 100%;height: 380px;overflow: auto;background-color: #666;} - -.tox .tox-image-tools__image,.tox .tox-image-tools__image+.tox-image-tools__toolbar{margin-top: 8px;} - -.tox .tox-image-tools__image-bg{background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==);} - -.tox .tox-image-tools__toolbar>.tox-spacer{flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-croprect-block{position: absolute;background: #000;opacity: .5;zoom: 1;} - -.tox .tox-croprect-handle{position: absolute;top: 0;left: 0;width: 20px;height: 20px;border: 2px solid #fff;} - -.tox .tox-croprect-handle-move{position: absolute;cursor: move;border: 0;} - -.tox .tox-croprect-handle-nw{top: 100px;left: 100px;margin: -2px 0 0 -2px;cursor: nw-resize;border-width: 2px 0 0 2px;} - -.tox .tox-croprect-handle-ne{top: 100px;left: 200px;margin: -2px 0 0 -20px;cursor: ne-resize;border-width: 2px 2px 0 0;} - -.tox .tox-croprect-handle-sw{top: 200px;left: 100px;margin: -20px 2px 0 -2px;cursor: sw-resize;border-width: 0 0 2px 2px;} - -.tox .tox-croprect-handle-se{top: 200px;left: 200px;margin: -20px 0 0 -20px;cursor: se-resize;border-width: 0 2px 2px 0;} - -.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-left: 8px;} - -.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-left: 32px;} - -.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-left: 32px;} - -.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-right: 8px;} - -.tox[dir=rtl] .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-right: 32px;} - -.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-right: 32px;} - -.tox .tox-insert-table-picker{display: flex;flex-wrap: wrap;width: 169px;} - -.tox .tox-insert-table-picker>div{width: 16px;height: 16px;border-color: #ccc;border-style: solid;border-width: 0 1px 1px 0;box-sizing: content-box;} - -.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin: -4px 0;} - -.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color: rgba(32,122,183,.5);border-color: rgba(32,122,183,.5);} - -.tox .tox-insert-table-picker__label{display: block;width: 100%;padding: 4px;font-size: 14px;color: rgba(34,47,62,.7);text-align: center;} - -.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right: 0;} - -.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right: 0;} - -.tox .tox-menu{z-index: 1;display: inline-block;overflow: hidden;vertical-align: top;background-color: #fff;border: 1px solid #ccc;border-radius: 3px;box-shadow: 0 4px 8px 0 rgba(34,47,62,.1);} - -.tox .tox-menu.tox-collection.tox-collection--list{padding: 0;} - -.tox .tox-menu.tox-collection.tox-collection--toolbar{padding: 4px;} - -.tox .tox-menu.tox-collection.tox-collection--grid{padding: 4px;} - -.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin: 0;} - -.tox .tox-menubar{display: flex;padding: 0 4px;margin-bottom: -1px;background: url("data:image/svg+xml;charset=utf8,%3Csvg height='43px' viewBox='0 0 40 43px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='42px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color: #fff;flex: 0 0 auto;flex-shrink: 0;flex-wrap: wrap;} - -.tox .tox-mbtn{display: flex;width: auto;height: 34px;padding: 0 4px;margin: 2px 0 3px 0;overflow: hidden;font-size: 14px;font-style: normal;font-weight: 400;color: #222f3e;text-transform: normal;background: 0 0;border: 0;border-radius: 3px;outline: 0;box-shadow: none;align-items: center;flex: 0 0 auto;justify-content: center;} - -.tox .tox-mbtn[disabled]{color: rgba(34,47,62,.5);cursor: not-allowed;background-color: none;border-color: none;box-shadow: none;} - -.tox .tox-mbtn:hover:not(:disabled){color: #222f3e;background: #dee0e2;box-shadow: none;} - -.tox .tox-mbtn:focus:not(:disabled){color: #222f3e;background: #dee0e2;box-shadow: none;} - -.tox .tox-mbtn--active{color: #222f3e;background: #c8cbcf;box-shadow: none;} - -.tox .tox-mbtn__select-label{margin: 0 4px;font-weight: 400;cursor: default;} - -.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor: not-allowed;} - -.tox .tox-mbtn__select-chevron{display: flex;display: none;width: 16px;align-items: center;justify-content: center;} - -.tox .tox-notification{display: grid;padding: 5px;margin-top: 5px;background-color: #fffaea;border-color: #ffe89d;border-style: solid;border-width: 1px;opacity: 0;box-sizing: border-box;transition: transform .1s ease-in,opacity 150ms ease-in;grid-template-columns: minmax(40px,1fr) auto minmax(40px,1fr);} - -.tox .tox-notification--in{opacity: 1;} - -.tox .tox-notification--success{background-color: #dff0d8;border-color: #d6e9c6;} - -.tox .tox-notification--error{background-color: #f2dede;border-color: #ebccd1;} - -.tox .tox-notification--warn{background-color: #fcf8e3;border-color: #faebcc;} - -.tox .tox-notification--info{background-color: #d9edf7;border-color: #779ecb;} - -.tox .tox-notification__body{font-size: 14px;color: #222f3e;text-align: center;word-break: break-all;word-break: break-word;white-space: normal;align-self: center;grid-column-end: 3;-ms-grid-column-span: 1;grid-column-start: 2;grid-row-end: 2;grid-row-start: 1;} - -.tox .tox-notification__body>*{margin: 0;} - -.tox .tox-notification__body>*+*{margin-top: 1rem;} - -.tox .tox-notification__icon{align-self: center;-ms-grid-column-align: end;grid-column-end: 2;-ms-grid-column-span: 1;grid-column-start: 1;grid-row-end: 2;grid-row-start: 1;justify-self: end;} - -.tox .tox-notification__icon svg{display: block;} - -.tox .tox-notification__dismiss{align-self: start;-ms-grid-column-align: end;grid-column-end: 4;-ms-grid-column-span: 1;grid-column-start: 3;grid-row-end: 2;grid-row-start: 1;justify-self: end;} - -.tox .tox-notification .tox-progress-bar{-ms-grid-column-align: center;grid-column-end: 4;-ms-grid-column-span: 3;grid-column-start: 1;grid-row-end: 3;-ms-grid-row-span: 1;grid-row-start: 2;justify-self: center;} - -.tox .tox-pop{position: relative;display: inline-block;} - -.tox .tox-pop--resizing{transition: width .1s ease;} - -.tox .tox-pop--resizing .tox-toolbar{flex-wrap: nowrap;} - -.tox .tox-pop__dialog{min-width: 0;overflow: hidden;background-color: #fff;border: 1px solid #ccc;border-radius: 3px;box-shadow: 0 1px 3px rgba(0,0,0,.15);} - -.tox .tox-pop__dialog>:not(.tox-toolbar){margin: 4px 4px 4px 8px;} - -.tox .tox-pop__dialog .tox-toolbar{background-color: transparent;} - -.tox .tox-pop::after,.tox .tox-pop::before{position: absolute;display: block;width: 0;height: 0;border-style: solid;content: '';} - -.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{top: 100%;left: 50%;} - -.tox .tox-pop.tox-pop--bottom::after{margin-top: -1px;margin-left: -8px;border-color: #fff transparent transparent transparent;border-width: 8px;} - -.tox .tox-pop.tox-pop--bottom::before{margin-left: -9px;border-color: #ccc transparent transparent transparent;border-width: 9px;} - -.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{top: 0;left: 50%;transform: translateY(-100%);} - -.tox .tox-pop.tox-pop--top::after{margin-top: 1px;margin-left: -8px;border-color: transparent transparent #fff transparent;border-width: 8px;} - -.tox .tox-pop.tox-pop--top::before{margin-left: -9px;border-color: transparent transparent #ccc transparent;border-width: 9px;} - -.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{top: calc(50% - 1px);left: 0;transform: translateY(-50%);} - -.tox .tox-pop.tox-pop--left::after{margin-left: -15px;border-color: transparent #fff transparent transparent;border-width: 8px;} - -.tox .tox-pop.tox-pop--left::before{margin-left: -19px;border-color: transparent #ccc transparent transparent;border-width: 10px;} - -.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{top: calc(50% + 1px);left: 100%;transform: translateY(-50%);} - -.tox .tox-pop.tox-pop--right::after{margin-left: -1px;border-color: transparent transparent transparent #fff;border-width: 8px;} - -.tox .tox-pop.tox-pop--right::before{margin-left: -1px;border-color: transparent transparent transparent #ccc;border-width: 10px;} - -.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left: 20px;} - -.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left: calc(100% - 20px);} - -.tox .tox-sidebar-wrap{display: flex;flex-direction: row;flex-grow: 1;min-height: 0;} - -.tox .tox-sidebar{display: flex;flex-direction: row;justify-content: flex-end;} - -.tox .tox-sidebar__slider{display: flex;overflow: hidden;} - -.tox .tox-sidebar__pane-container{display: flex;} - -.tox .tox-sidebar__pane{display: flex;} - -.tox .tox-sidebar--sliding-closed{opacity: 0;} - -.tox .tox-sidebar--sliding-open{opacity: 1;} - -.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition: width .5s ease,opacity .5s ease;} - -.tox .tox-slider{position: relative;display: flex;height: 24px;align-items: center;flex: 1;-ms-flex-preferred-size: auto;justify-content: center;} - -.tox .tox-slider__rail{width: 100%;height: 10px;min-width: 120px;background-color: transparent;border: 1px solid #ccc;border-radius: 3px;} - -.tox .tox-slider__handle{position: absolute;top: 50%;left: 50%;width: 14px;height: 24px;background-color: #207ab7;border: 2px solid #185d8c;border-radius: 3px;transform: translateX(-50%) translateY(-50%);box-shadow: none;} - -.tox .tox-source-code{overflow: auto;} - -.tox .tox-spinner{display: flex;} - -.tox .tox-spinner>div{width: 8px;height: 8px;background-color: rgba(34,47,62,.7);border-radius: 100%;animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both;} - -.tox .tox-spinner>div:nth-child(1){animation-delay: -.32s;} - -.tox .tox-spinner>div:nth-child(2){animation-delay: -.16s;}@keyframes tam-bouncing-dots{0%,100%,80%{transform: scale(0);} - -40%{transform: scale(1);}} - -.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left: 4px;} - -.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right: 4px;} - -.tox .tox-statusbar{position: relative;display: flex;height: 18px;padding: 0 8px;overflow: hidden;font-size: 12px;color: rgba(34,47,62,.7);text-transform: uppercase;background-color: #fff;border-top: 1px solid #ccc;align-items: center;flex: 0 0 auto;} - -.tox .tox-statusbar a{color: rgba(34,47,62,.7);text-decoration: none;} - -.tox .tox-statusbar a:hover{text-decoration: underline;} - -.tox .tox-statusbar__text-container{display: flex;flex: 1 1 auto;justify-content: flex-end;overflow: hidden;} - -.tox .tox-statusbar__path{display: flex;flex: 1 1 auto;margin-right: auto;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;} - -.tox .tox-statusbar__path>*{display: inline;white-space: nowrap;} - -.tox .tox-statusbar__wordcount{flex: 0 0 auto;margin-left: 1ch;} - -.tox .tox-statusbar__resize-handle{display: flex;padding-left: 1ch;margin-right: -8px;margin-left: auto;cursor: nwse-resize;align-items: flex-end;align-self: stretch;flex: 0 0 auto;justify-content: flex-end;} - -.tox .tox-statusbar__resize-handle svg{display: block;fill: rgba(34,47,62,.7);} - -.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right: 4px;} - -.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left: 1ch;} - -.tox[dir=rtl] .tox-statusbar{flex-direction: row-reverse;} - -.tox[dir=rtl] .tox-statusbar__path>*{margin-left: 4px;} - -.tox .tox-throbber{z-index: 1400;} - -.tox .tox-throbber__busy-spinner{position: absolute;top: 0;right: 0;bottom: 0;left: 0;display: flex;background-color: rgba(255,255,255,.6);align-items: center;justify-content: center;} - -.tox .tox-tbtn{display: flex;width: 34px;height: 34px;padding: 0;margin: 2px 0 3px 0;overflow: hidden;font-size: 14px;font-style: normal;font-weight: 400;color: #222f3e;text-transform: normal;background: 0 0;border: 0;border-radius: 3px;outline: 0;box-shadow: none;align-items: center;flex: 0 0 auto;justify-content: center;} - -.tox .tox-tbtn svg{display: block;fill: #222f3e;} - -.tox .tox-tbtn.tox-tbtn-more{width: inherit;padding-right: 5px;padding-left: 5px;} - -.tox .tox-tbtn--enabled{color: #222f3e;background: #c8cbcf;box-shadow: none;} - -.tox .tox-tbtn--enabled>*{transform: none;} - -.tox .tox-tbtn--enabled svg{fill: #222f3e;} - -.tox .tox-tbtn:hover{color: #222f3e;background: #dee0e2;box-shadow: none;} - -.tox .tox-tbtn:hover svg{fill: #222f3e;} - -.tox .tox-tbtn:focus{color: #222f3e;background: #dee0e2;box-shadow: none;} - -.tox .tox-tbtn:focus svg{fill: #222f3e;} - -.tox .tox-tbtn:active{color: #222f3e;background: #c8cbcf;box-shadow: none;} - -.tox .tox-tbtn:active svg{fill: #222f3e;} - -.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{color: rgba(34,47,62,.5);cursor: not-allowed;background: 0 0;box-shadow: none;} - -.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill: rgba(34,47,62,.5);} - -.tox .tox-tbtn:active>*{transform: none;} - -.tox .tox-tbtn--md{width: 51px;height: 51px;} - -.tox .tox-tbtn--lg{width: 68px;height: 68px;flex-direction: column;} - -.tox .tox-tbtn--return{width: 16px;height: unset;align-self: stretch;} - -.tox .tox-tbtn--labeled{width: unset;padding: 0 4px;} - -.tox .tox-tbtn__vlabel{display: block;margin-bottom: 4px;font-size: 10px;font-weight: 400;letter-spacing: -.025em;white-space: nowrap;} - -.tox .tox-tbtn--select{width: auto;padding: 0 4px;margin: 2px 0 3px 0;} - -.tox .tox-tbtn__select-label{margin: 0 4px;font-weight: 400;cursor: default;} - -.tox .tox-tbtn__select-chevron{align-items: center;display: flex;justify-content: center;width: 16px;} - -.tox .tox-tbtn__select-chevron svg{fill: rgba(34,47,62,.7);} - -.tox .tox-tbtn--bespoke .tox-tbtn__select-label{width: 7em;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;} - -.tox .tox-split-button{display: flex;margin: 2px 0 3px 0;overflow: hidden;border: 0;border-radius: 3px;box-sizing: border-box;} - -.tox .tox-split-button:hover{box-shadow: 0 0 0 1px #dee0e2 inset;} - -.tox .tox-split-button:focus{color: #222f3e;background: #dee0e2;box-shadow: none;} - -.tox .tox-split-button>*{border-radius: 0;} - -.tox .tox-split-button__chevron{width: 16px;} - -.tox .tox-split-button__chevron svg{fill: rgba(34,47,62,.7);} - -.tox .tox-pop .tox-split-button__chevron svg{transform: rotate(-90deg);} - -.tox .tox-split-button .tox-tbtn{margin: 0;} - -.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{color: rgba(34,47,62,.5);background: 0 0;box-shadow: none;} - -.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{display: flex;padding: 0 0;margin-bottom: -1px;background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color: #fff;border-top: 1px solid #ccc;flex: 0 0 auto;flex-shrink: 0;flex-wrap: wrap;} - -.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height: 0;opacity: 0;visibility: hidden;} - -.tox .tox-toolbar__overflow--growing{transition: height .3s ease,opacity .2s linear .1s;} - -.tox .tox-toolbar__overflow--shrinking{transition: opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s;} - -.tox .tox-pop .tox-toolbar{border-width: 0;} - -.tox .tox-toolbar--no-divider{background-image: none;} - -.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color: #fff;border: 1px solid #ccc;border-radius: 3px;box-shadow: 0 1px 3px rgba(0,0,0,.15);} - -.tox.tox-tinymce-aux:not([dir=rtl]) .tox-toolbar__overflow{margin-left: 4px;} - -.tox[dir=rtl] .tox-tbtn__icon-rtl svg{transform: rotateY(180deg);} - -.tox[dir=rtl].tox-tinymce-aux .tox-toolbar__overflow{margin-right: 4px;} - -.tox .tox-toolbar__group{display: flex;padding: 0 4px;margin: 0 0;align-items: center;flex-wrap: wrap;} - -.tox .tox-toolbar__group--pull-right{margin-left: auto;} - -.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right: 1px solid #ccc;} - -.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left: 1px solid #ccc;} - -.tox .tox-tooltip{position: relative;display: inline-block;padding: 8px;} - -.tox .tox-tooltip__body{padding: 4px 8px;font-size: 14px;font-style: normal;font-weight: 400;color: rgba(255,255,255,.75);text-transform: normal;background-color: #222f3e;border-radius: 3px;box-shadow: 0 2px 4px rgba(34,47,62,.3);} - -.tox .tox-tooltip__arrow{position: absolute;} - -.tox .tox-tooltip--down .tox-tooltip__arrow{position: absolute;bottom: 0;left: 50%;border-top: 8px solid #222f3e;border-right: 8px solid transparent;border-left: 8px solid transparent;transform: translateX(-50%);} - -.tox .tox-tooltip--up .tox-tooltip__arrow{position: absolute;top: 0;left: 50%;border-right: 8px solid transparent;border-bottom: 8px solid #222f3e;border-left: 8px solid transparent;transform: translateX(-50%);} - -.tox .tox-tooltip--right .tox-tooltip__arrow{position: absolute;top: 50%;right: 0;border-top: 8px solid transparent;border-bottom: 8px solid transparent;border-left: 8px solid #222f3e;transform: translateY(-50%);} - -.tox .tox-tooltip--left .tox-tooltip__arrow{position: absolute;top: 50%;left: 0;border-top: 8px solid transparent;border-right: 8px solid #222f3e;border-bottom: 8px solid transparent;transform: translateY(-50%);} - -.tox .tox-well{width: 100%;padding: 8px;border: 1px solid #ccc;border-radius: 3px;} - -.tox .tox-well>:first-child{margin-top: 0;} - -.tox .tox-well>:last-child{margin-bottom: 0;} - -.tox .tox-well>:only-child{margin: 0;} - -.tox .tox-custom-editor{display: flex;height: 525px;border: 1px solid #ccc;border-radius: 3px;} - -.tox .tox-dialog-loading::before{position: absolute;z-index: 1000;width: 100%;height: 100%;background-color: rgba(0,0,0,.5);content: "";} - -.tox .tox-tab{cursor: pointer;} - -.tox .tox-dialog__content-js{display: flex;flex: 1;-ms-flex-preferred-size: auto;} - -.tox .tox-dialog__body-content .tox-collection{display: flex;flex: 1;-ms-flex-preferred-size: auto;} - -.tox ul{display: block;list-style-type: disc;-webkit-margin-before: 1em;margin-block-start: 1em;-webkit-margin-after: 1em;margin-block-end: 1em;-webkit-margin-start: 0;margin-inline-start: 0;-webkit-margin-end: 0;margin-inline-end: 0;-webkit-padding-start: 40px;padding-inline-start: 40px;} - -.tox a{color: #2276d2;cursor: pointer;} - -.tox .tox-image-tools-edit-panel{height: 60px;} - -.tox .tox-image-tools__sidebar{height: 60px;} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/skin.mobile.min.css b/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/skin.mobile.min.css deleted file mode 100644 index 14847d0a2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/public/resource/tinymce/skins/ui/oxide/skin.mobile.min.css +++ /dev/null @@ -1,239 +0,0 @@ -/** - * Copyright (c) Tiny Technologies, Inc. All rights reserved. - * Licensed under the LGPL or a commercial license. - * For LGPL see License.txt in the project root for license information. - * For commercial licenses see https://www.tiny.cloud/ - */ -.tinymce-mobile-outer-container{all: initial;display: block;} - -.tinymce-mobile-outer-container *{float: none;padding: 0;margin: 0;line-height: 1;text-shadow: none;white-space: nowrap;cursor: inherit;border: 0;outline: 0;box-sizing: initial;-webkit-tap-highlight-color: transparent;} - -.tinymce-mobile-icon-arrow-back::before{content: "\e5cd";} - -.tinymce-mobile-icon-image::before{content: "\e412";} - -.tinymce-mobile-icon-cancel-circle::before{content: "\e5c9";} - -.tinymce-mobile-icon-full-dot::before{content: "\e061";} - -.tinymce-mobile-icon-align-center::before{content: "\e234";} - -.tinymce-mobile-icon-align-left::before{content: "\e236";} - -.tinymce-mobile-icon-align-right::before{content: "\e237";} - -.tinymce-mobile-icon-bold::before{content: "\e238";} - -.tinymce-mobile-icon-italic::before{content: "\e23f";} - -.tinymce-mobile-icon-unordered-list::before{content: "\e241";} - -.tinymce-mobile-icon-ordered-list::before{content: "\e242";} - -.tinymce-mobile-icon-font-size::before{content: "\e245";} - -.tinymce-mobile-icon-underline::before{content: "\e249";} - -.tinymce-mobile-icon-link::before{content: "\e157";} - -.tinymce-mobile-icon-unlink::before{content: "\eca2";} - -.tinymce-mobile-icon-color::before{content: "\e891";} - -.tinymce-mobile-icon-previous::before{content: "\e314";} - -.tinymce-mobile-icon-next::before{content: "\e315";} - -.tinymce-mobile-icon-large-font::before,.tinymce-mobile-icon-style-formats::before{content: "\e264";} - -.tinymce-mobile-icon-undo::before{content: "\e166";} - -.tinymce-mobile-icon-redo::before{content: "\e15a";} - -.tinymce-mobile-icon-removeformat::before{content: "\e239";} - -.tinymce-mobile-icon-small-font::before{content: "\e906";} - -.tinymce-mobile-format-matches::after,.tinymce-mobile-icon-readonly-back::before{content: "\e5ca";} - -.tinymce-mobile-icon-small-heading::before{content: "small";} - -.tinymce-mobile-icon-large-heading::before{content: "large";} - -.tinymce-mobile-icon-large-heading::before,.tinymce-mobile-icon-small-heading::before{font-family: sans-serif;font-size: 80%;} - -.tinymce-mobile-mask-edit-icon::before{content: "\e254";} - -.tinymce-mobile-icon-back::before{content: "\e5c4";} - -.tinymce-mobile-icon-heading::before{font-family: sans-serif;font-size: 80%;font-weight: 700;content: "Headings";} - -.tinymce-mobile-icon-h1::before{font-weight: 700;content: "H1";} - -.tinymce-mobile-icon-h2::before{font-weight: 700;content: "H2";} - -.tinymce-mobile-icon-h3::before{font-weight: 700;content: "H3";} - -.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask{position: absolute;top: 0;display: flex;width: 100%;height: 100%;background: rgba(51,51,51,.5);align-items: center;justify-content: center;} - -.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container{display: flex;font-family: sans-serif;font-size: 1em;border-radius: 50%;align-items: center;flex-direction: column;justify-content: space-between;} - -.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item{display: flex;width: 2.1em;height: 2.1em;border-radius: 50%;align-items: center;justify-content: center;} - -.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{align-items: center;display: flex;justify-content: center;flex-direction: column;font-size: 1em;}@media only screen and (min-device-width: 700px){.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{font-size: 1.2em;}} - -.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon{display: flex;width: 2.1em;height: 2.1em;color: #207ab7;background-color: #fff;border-radius: 50%;align-items: center;justify-content: center;} - -.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before{font-family: tinymce-mobile,sans-serif;content: "\e900";} - -.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon{z-index: 2;} - -.tinymce-mobile-android-container.tinymce-mobile-android-maximized{position: fixed;top: 0;right: 0;bottom: 0;left: 0;display: flex;background: #fff;border: none;flex-direction: column;} - -.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized){position: relative;} - -.tinymce-mobile-android-container .tinymce-mobile-editor-socket{display: flex;flex-grow: 1;} - -.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe{display: flex !important;flex-grow: 1;height: auto !important;} - -.tinymce-mobile-android-scroll-reload{overflow: hidden;} - -:not(.tinymce-mobile-readonly-mode)>.tinymce-mobile-android-selection-context-toolbar{margin-top: 23px;} - -.tinymce-mobile-toolstrip{z-index: 1;display: flex;background: #fff;flex: 0 0 auto;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar{display: flex;width: 100%;height: 2.5em;background-color: #fff;border-bottom: 1px solid #ccc;align-items: center;flex: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group{align-items: center;display: flex;height: 100%;flex-shrink: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group>div{align-items: center;display: flex;height: 100%;flex: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container{background: #f44336;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group{flex-grow: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{padding-right: .5em;padding-left: .5em;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button{display: flex;height: 80%;margin-right: 2px;margin-left: 2px;align-items: center;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected{color: #ccc;background: #c8cbcf;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type{color: #eceff1;background: #207ab7;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group{display: flex;height: 100%;padding-top: .4em;padding-bottom: .4em;align-items: center;flex: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog{position: relative;display: flex;width: 100%;min-height: 1.5em;padding-right: 0;padding-left: 0;overflow: hidden;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain{display: flex;width: 100%;height: 100%;transition: left cubic-bezier(.4,0,1,1) .15s;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen{display: flex;flex: 0 0 auto;justify-content: space-between;width: 100%;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input{font-family: sans-serif;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container{position: relative;display: flex;flex-grow: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x{position: absolute;right: 0;height: 100%;padding-right: 2px;font-size: .6em;font-weight: 700;color: #888;background: inherit;border: none;border-radius: 50%;align-self: center;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x{display: none;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous{align-items: center;display: flex;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before{display: flex;height: 100%;padding-right: .5em;padding-left: .5em;font-weight: 700;align-items: center;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before{visibility: hidden;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item{padding-top: 3px;margin: 0 2px;font-size: 10px;line-height: 10px;color: #ccc;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active{color: #c8cbcf;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before{margin-right: .9em;margin-left: .5em;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before{margin-right: .5em;margin-left: .9em;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider{position: relative;display: flex;padding: .28em 0;margin-right: 0;margin-left: 0;flex: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container{align-items: center;display: flex;flex-grow: 1;height: 100%;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line{display: flex;height: .2em;margin-top: .3em;margin-bottom: .3em;background: #ccc;flex: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container{padding-right: 2em;padding-left: 2em;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container{align-items: center;display: flex;flex-grow: 1;height: 100%;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient{display: flex;height: .2em;margin-top: .3em;margin-bottom: .3em;background: linear-gradient(to right,red 0,#feff00 17%,#0f0 33%,#00feff 50%,#00f 67%,#ff00fe 83%,red 100%);flex: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black{width: 1.2em;height: .2em;margin-top: .3em;margin-bottom: .3em;background: #000;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white{width: 1.2em;height: .2em;margin-top: .3em;margin-bottom: .3em;background: #fff;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb{position: absolute;top: 0;bottom: 0;left: -10px;display: flex;width: .5em;height: .5em;margin: auto;color: #fff;background-color: #455a64;border: .5em solid rgba(136,136,136,0);border-radius: 3em;transition: border 120ms cubic-bezier(.39,.58,.57,1);background-clip: padding-box;align-items: center;justify-content: center;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active{border: .5em solid rgba(136,136,136,.39);} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group>div{align-items: center;display: flex;height: 100%;flex: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper{flex-direction: column;justify-content: center;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{align-items: center;display: flex;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog){height: 100%;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container{display: flex;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input{padding-top: .1em;padding-bottom: .1em;padding-left: 5px;font-size: .85em;color: #455a64;background: #fff;border: none;border-radius: 0;flex-grow: 1;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder{color: #888;} - -.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder{color: #888;} - -.tinymce-mobile-dropup{display: flex;width: 100%;overflow: hidden;background: #fff;} - -.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking{transition: height .3s ease-out;} - -.tinymce-mobile-dropup.tinymce-mobile-dropup-growing{transition: height .3s ease-in;} - -.tinymce-mobile-dropup.tinymce-mobile-dropup-closed{flex-grow: 0;} - -.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing){flex-grow: 1;} - -.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height: 200px;}@media only screen and (orientation: landscape){.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height: 200px;}}@media only screen and (min-device-width: 320px) and (max-device-width: 568px) and (orientation: landscape){.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height: 150px;}} - -.tinymce-mobile-styles-menu{position: relative;width: 100%;overflow: hidden;font-family: sans-serif;outline: 4px solid #000;} - -.tinymce-mobile-styles-menu [role=menu]{position: absolute;display: flex;width: 100%;height: 100%;flex-direction: column;} - -.tinymce-mobile-styles-menu [role=menu].transitioning{transition: transform .5s ease-in-out;} - -.tinymce-mobile-styles-menu .tinymce-mobile-styles-item{position: relative;display: flex;padding: 1em 1em;color: #455a64;cursor: pointer;border-bottom: 1px solid #ddd;} - -.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before{font-family: tinymce-mobile,sans-serif;color: #455a64;content: "\e314";} - -.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after{position: absolute;right: 0;padding-right: 1em;padding-left: 1em;font-family: tinymce-mobile,sans-serif;color: #455a64;content: "\e315";} - -.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after{position: absolute;right: 0;padding-right: 1em;padding-left: 1em;font-family: tinymce-mobile,sans-serif;} - -.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser,.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator{display: flex;min-height: 2.5em;padding-right: 1em;padding-left: 1em;color: #455a64;background: #fff;border-top: #455a64;align-items: center;} - -.tinymce-mobile-styles-menu [data-transitioning-destination=before][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=before]{transform: translate(-100%);} - -.tinymce-mobile-styles-menu [data-transitioning-destination=current][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=current]{transform: translate(0);} - -.tinymce-mobile-styles-menu [data-transitioning-destination=after][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=after]{transform: translate(100%);}@font-face{font-family: tinymce-mobile;font-style: normal;font-weight: 400;src: url(fonts/tinymce-mobile.woff?8x92w3) format('woff');}@media (min-device-width: 700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size: 25px;}}@media (max-device-width: 700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size: 18px;}} - -.tinymce-mobile-icon{font-family: tinymce-mobile,sans-serif;} - -.mixin-flex-and-centre{align-items: center;display: flex;justify-content: center;} - -.mixin-flex-bar{align-items: center;display: flex;height: 100%;} - -.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe{width: 100%;background-color: #fff;} - -.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{position: fixed;right: 2em;bottom: 1em;display: flex;width: 2.1em;height: 2.1em;font-size: 1em;color: #fff;background-color: #207ab7;border-radius: 50%;align-items: center;justify-content: center;}@media only screen and (min-device-width: 700px){.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{font-size: 1.2em;}} - -.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket{height: 300px;overflow: hidden;} - -.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe{height: 100%;} - -.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip{display: none;} - -input[type=file]::-webkit-file-upload-button{display: none;}@media only screen and (min-device-width: 320px) and (max-device-width: 568px) and (orientation: landscape){.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{bottom: 50%;}} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/App.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/App.vue deleted file mode 100644 index f4fab182c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/App.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/account.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/account.ts deleted file mode 100644 index 2a368138c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/account.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { defHttp } from '/@/utils/http/axios'; -import { GetAccountInfoModel } from './model/accountModel'; - -enum Api { - ACCOUNT_INFO = '/account/getAccountInfo', - SESSION_TIMEOUT = '/user/sessionTimeout', - TOKEN_EXPIRED = '/user/tokenExpired', -} - -// Get personal center-basic settings - -export const accountInfoApi = () => defHttp.get({ url: Api.ACCOUNT_INFO }); - -export const sessionTimeoutApi = () => defHttp.post({ url: Api.SESSION_TIMEOUT }); - -export const tokenExpiredApi = () => defHttp.post({ url: Api.TOKEN_EXPIRED }); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/cascader.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/cascader.ts deleted file mode 100644 index 83dcab07c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/cascader.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { defHttp } from '/@/utils/http/axios'; -import { AreaModel, AreaParams } from '/@/api/demo/model/areaModel'; - -enum Api { - AREA_RECORD = '/cascader/getAreaRecord', -} - -export const areaRecord = (data: AreaParams) => - defHttp.post({ url: Api.AREA_RECORD, data }); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/error.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/error.ts deleted file mode 100644 index 3ce607217..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/error.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defHttp } from '/@/utils/http/axios'; - -enum Api { - // The address does not exist - Error = '/error', -} - -/** - * @description: Trigger ajax error - */ - -export const fireErrorApi = () => defHttp.get({ url: Api.Error }); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/accountModel.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/accountModel.ts deleted file mode 100644 index 4594393e4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/accountModel.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface GetAccountInfoModel { - email: string; - name: string; - introduction: string; - phone: string; - address: string; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/areaModel.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/areaModel.ts deleted file mode 100644 index dfaa481bf..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/areaModel.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface AreaModel { - id: string; - code: string; - parentCode: string; - name: string; - levelType: number; - [key: string]: string | number; -} - -export interface AreaParams { - parentCode: string; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/optionsModel.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/optionsModel.ts deleted file mode 100644 index c15ef8fd2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/optionsModel.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { BasicFetchResult } from '/@/api/model/baseModel'; - -export interface DemoOptionsItem { - label: string; - value: string; -} - -export interface selectParams { - id: number | string; -} - -/** - * @description: Request list return value - */ -export type DemoOptionsGetResultModel = BasicFetchResult; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/systemModel.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/systemModel.ts deleted file mode 100644 index f8936c293..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/systemModel.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { BasicPageParams, BasicFetchResult } from '/@/api/model/baseModel'; - -export type AccountParams = BasicPageParams & { - account?: string; - nickname?: string; -}; - -export type RoleParams = { - roleName?: string; - status?: string; -}; - -export type RolePageParams = BasicPageParams & RoleParams; - -export type DeptParams = { - deptName?: string; - status?: string; -}; - -export type MenuParams = { - menuName?: string; - status?: string; -}; - -export interface AccountListItem { - id: string; - account: string; - email: string; - nickname: string; - role: number; - createTime: string; - remark: string; - status: number; -} - -export interface DeptListItem { - id: string; - orderNo: string; - createTime: string; - remark: string; - status: number; -} - -export interface MenuListItem { - id: string; - orderNo: string; - createTime: string; - status: number; - icon: string; - component: string; - permission: string; -} - -export interface RoleListItem { - id: string; - roleName: string; - roleValue: string; - status: number; - orderNo: string; - createTime: string; -} - -/** - * @description: Request list return value - */ -export type AccountListGetResultModel = BasicFetchResult; - -export type DeptListGetResultModel = BasicFetchResult; - -export type MenuListGetResultModel = BasicFetchResult; - -export type RolePageListGetResultModel = BasicFetchResult; - -export type RoleListGetResultModel = RoleListItem[]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/tableModel.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/tableModel.ts deleted file mode 100644 index 322a8b481..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/model/tableModel.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { BasicPageParams, BasicFetchResult } from '/@/api/model/baseModel'; -/** - * @description: Request list interface parameters - */ -export type DemoParams = BasicPageParams; - -export interface DemoListItem { - id: string; - beginTime: string; - endTime: string; - address: string; - name: string; - no: number; - status: number; -} - -/** - * @description: Request list return value - */ -export type DemoListGetResultModel = BasicFetchResult; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/select.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/select.ts deleted file mode 100644 index 54c4ef5ec..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/select.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { defHttp } from '/@/utils/http/axios'; -import { DemoOptionsItem, selectParams } from './model/optionsModel'; -enum Api { - OPTIONS_LIST = '/select/getDemoOptions', -} - -/** - * @description: Get sample options value - */ -export const optionsListApi = (params?: selectParams) => - defHttp.get({ url: Api.OPTIONS_LIST, params }); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/system.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/system.ts deleted file mode 100644 index f5c296b5d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/system.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { - AccountParams, - DeptListItem, - MenuParams, - RoleParams, - RolePageParams, - MenuListGetResultModel, - DeptListGetResultModel, - AccountListGetResultModel, - RolePageListGetResultModel, - RoleListGetResultModel, -} from './model/systemModel'; -import { defHttp } from '/@/utils/http/axios'; - -enum Api { - AccountList = '/system/getAccountList', - IsAccountExist = '/system/accountExist', - DeptList = '/system/getDeptList', - setRoleStatus = '/system/setRoleStatus', - MenuList = '/system/getMenuList', - RolePageList = '/system/getRoleListByPage', - GetAllRoleList = '/system/getAllRoleList', -} - -export const getAccountList = (params: AccountParams) => - defHttp.get({ url: Api.AccountList, params }); - -export const getDeptList = (params?: DeptListItem) => - defHttp.get({ url: Api.DeptList, params }); - -export const getMenuList = (params?: MenuParams) => - defHttp.get({ url: Api.MenuList, params }); - -export const getRoleListByPage = (params?: RolePageParams) => - defHttp.get({ url: Api.RolePageList, params }); - -export const getAllRoleList = (params?: RoleParams) => - defHttp.get({ url: Api.GetAllRoleList, params }); - -export const setRoleStatus = (id: number, status: string) => - defHttp.post({ url: Api.setRoleStatus, params: { id, status } }); - -export const isAccountExist = (account: string) => - defHttp.post({ url: Api.IsAccountExist, params: { account } }, { errorMessageMode: 'none' }); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/table.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/table.ts deleted file mode 100644 index b9b60df64..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/table.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defHttp } from '/@/utils/http/axios'; -import { DemoParams, DemoListGetResultModel } from './model/tableModel'; - -enum Api { - DEMO_LIST = '/table/getDemoList', -} - -/** - * @description: Get sample list value - */ - -export const demoListApi = (params: DemoParams) => - defHttp.get({ - url: Api.DEMO_LIST, - params, - headers: { - // @ts-ignore - ignoreCancelToken: true, - }, - }); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/tree.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/tree.ts deleted file mode 100644 index 8b8a94f1a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/demo/tree.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { defHttp } from '/@/utils/http/axios'; - -enum Api { - TREE_OPTIONS_LIST = '/tree/getDemoOptions', -} - -/** - * @description: Get sample options value - */ -export const treeOptionsListApi = (params?: Recordable) => - defHttp.get({ url: Api.TREE_OPTIONS_LIST, params }); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/model/baseModel.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/model/baseModel.ts deleted file mode 100644 index 1a3651182..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/model/baseModel.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface BasicPageParams { - page: number; - pageSize: number; -} - -export interface BasicFetchResult { - items: T[]; - total: number; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/menu.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/menu.ts deleted file mode 100644 index de9fa5636..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/menu.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { defHttp } from '/@/utils/http/axios'; -import { getMenuListResultModel } from './model/menuModel'; - -enum Api { - GetMenuList = '/getMenuList', -} - -/** - * @description: Get user menu based on id - */ - -export const getMenuList = () => { - return defHttp.get({ url: Api.GetMenuList }); -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/model/menuModel.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/model/menuModel.ts deleted file mode 100644 index 8d19eeaba..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/model/menuModel.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { RouteMeta } from 'vue-router'; -export interface RouteItem { - path: string; - component: any; - meta: RouteMeta; - name?: string; - alias?: string | string[]; - redirect?: string; - caseSensitive?: boolean; - children?: RouteItem[]; -} - -/** - * @description: Get menu return value - */ -export type getMenuListResultModel = RouteItem[]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/model/uploadModel.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/model/uploadModel.ts deleted file mode 100644 index d770c642b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/model/uploadModel.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface UploadApiResult { - message: string; - code: number; - url: string; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/model/userModel.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/model/userModel.ts deleted file mode 100644 index 2415c9111..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/model/userModel.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @description: Login interface parameters - */ -export interface LoginParams { - username: string; - password: string; -} - -export interface RoleInfo { - roleName: string; - value: string; -} - -/** - * @description: Login interface return value - */ -export interface LoginResultModel { - userId: string | number; - token: string; - role: RoleInfo; -} - -/** - * @description: Get user information return value - */ -export interface GetUserInfoModel { - roles: RoleInfo[]; - // 用户id - userId: string | number; - // 用户名 - username: string; - // 真实名字 - realName: string; - // 头像 - avatar: string; - // 介绍 - desc?: string; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/upload.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/upload.ts deleted file mode 100644 index c47baf433..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/upload.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { UploadApiResult } from './model/uploadModel'; -import { defHttp } from '/@/utils/http/axios'; -import { UploadFileParams } from '/#/axios'; -import { useGlobSetting } from '/@/hooks/setting'; - -const { uploadUrl = '' } = useGlobSetting(); - -/** - * @description: Upload interface - */ -export function uploadApi( - params: UploadFileParams, - onUploadProgress: (progressEvent: ProgressEvent) => void, -) { - return defHttp.uploadFile( - { - url: uploadUrl, - onUploadProgress, - }, - params, - ); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/user.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/user.ts deleted file mode 100644 index 1f3eca45d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/api/sys/user.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { defHttp } from '/@/utils/http/axios'; -import { - LoginParams, - LoginResultModel, -} from './model/userModel'; - -import { ErrorMessageMode } from '/#/axios'; -import { - AccountServiceProxy, - LoginOutput, - LoginInput, - AbpApplicationConfigurationServiceProxy, -} from '/@/services/ServiceProxies'; -enum Api { - Login = '/login', - Logout = '/logout', - GetUserInfoById = '/getUserInfoById', - GetPermCodeByUserId = '/getPermCodeByUserId', - // GetUserInfo = '/getUserInfo', - // GetPermCode = '/getPermCode', -} -/** - * 登录 - * @param input - * @returns - */ -export function login(input: LoginInput): Promise { - const _loginServiceProxy = new AccountServiceProxy(); - return _loginServiceProxy.login(input); -} - -/** - * sts登录 - * @param token - * @returns - */ -// export function id4(token: string): Promise { -// const _accountServiceProxy = new AccountServiceProxy(); -// return _accountServiceProxy.id4(token); - -// } - -/** - * sts登录 - * @param token - * @returns - */ -// export function github(code: string): Promise { - -// const _accountServiceProxy = new AccountServiceProxy(); -// return _accountServiceProxy.github(code); - -// } - -/** - * 获取应用程序配置 - * @returns - */ -export function getAbpApplicationConfiguration() { - const _abpApplicationConfigurationServiceProxy = new AbpApplicationConfigurationServiceProxy(); - return _abpApplicationConfigurationServiceProxy.applicationConfiguration(); -} - - - -/** - * @description: user login api - */ -export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal') { - return defHttp.post( - { - url: Api.Login, - params, - }, - { - errorMessageMode: mode, - } - ); -} - -export function doLogout() { - return defHttp.get({ url: Api.Logout }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/download-count.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/download-count.svg deleted file mode 100644 index 1c951958a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/download-count.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 91 \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-1.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-1.svg deleted file mode 100644 index e1553e50e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-1.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 15 \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-2.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-2.svg deleted file mode 100644 index c4c172233..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-2.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 16 \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-3.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-3.svg deleted file mode 100644 index 81145f9b4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-3.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 17 \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-4.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-4.svg deleted file mode 100644 index e586ed4e6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-4.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 120 \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-5.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-5.svg deleted file mode 100644 index 746e4b888..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-5.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 110 \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-6.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-6.svg deleted file mode 100644 index b2432f225..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/dynamic-avatar-6.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 100 \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/moon.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/moon.svg deleted file mode 100644 index e6667f0d4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/moon.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/sun.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/sun.svg deleted file mode 100644 index a3997cbf7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/sun.svg +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/test.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/test.svg deleted file mode 100644 index 244252dde..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/test.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - Icon1@3x - Created with Sketch. - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/total-sales.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/total-sales.svg deleted file mode 100644 index eff79640a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/total-sales.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 500 \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/transaction.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/transaction.svg deleted file mode 100644 index 7ba9e2f0e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/transaction.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 480% \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/visit-count.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/visit-count.svg deleted file mode 100644 index ba2a30614..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/icons/visit-count.svg +++ /dev/null @@ -1 +0,0 @@ -Asset 510 \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/images/demo.png b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/images/demo.png deleted file mode 100644 index 1a45c9835b7b2c708c114b04fb445e6ef00d8827..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33342 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 K^riIu-2VXLS6svZ diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/images/logo.png b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/images/logo.png deleted file mode 100644 index 8319152fc4e84507dbf1116a91dc37147ac089a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124431 zcmZ6z2V9fM_CEe1c2SI=ARw%XiUDZ?V(6}+DAG}+2nZrgK#24bysjFlMk&%+1cD+U zy%SWLw9o|UNQ?B|1NqMz@czHQoBiC~yYEgpbIx;~IdkTWue3B&jvnSZ3_;M*8>(0x z2s#MenDBE9406{yy;Ue_5#Ns6&wF1qkx{2ZA=hC%@ki zdvN!Mjn_GK?_bI)F9B$j4DG>P2xk$f*4hQcO3$LF? zUNmGX(0h0M0b4p!)lc#DYs)cT1+v1P!>V7;MUD!G)L`OtA7+r|Bo@me*2`z8DL@j) zwU(Hp$z5P`o&NJ_$M$!$VYQ0E8C|shcgs2}9oBES3^T~Or~fza`Dqw(g*yCqJ%*EB-R;WhmtH`2V` zm5(^oU#smin7N@_>4RVQQp48~59G^VT2*0RRl<&hN+t7fqgulW&eum0xzID}L>#u4 z4MD{9zSU{MBrBZ69M!9L_R+qatlftiPEyGTJj&14V5l zc#`F>@JxQ%ZOgrHtM6RN)36uWB#mW{9&m~7nSPh$5PtJOu3J|MEJ9+gG1 zqU?3Cy=M?^Ds^ru!VZleN`;h)Wsox(n1Lw&Cr17gebE6OC9Cw&d-$nWaXMGP_{vd? z1zorOQeHOg7C1gorjsi#rc~r5&=yxj7$+_+5rz&SJVFTW=2%(zd|wkeiKs?&Yd6n2 zE5gQJW4(jj$xC23q^P!F>|)2A`fUYSU){-WODUn=OB`VM>s5?JTpNECHQ(~hA6>ej-Ug3~aN%;52w_XfxK7*3Xr zhSzW~kFp66SHEjdv4OuMHj@Z)sG;u&F%xvEkr8qzTy;IawkjPl3RKZSXJ;iP#_n=Z=S6U#1rtxdpU61|7q zNOaIZNU4lO2ZTEG>#$43uh#D?xVaaCwCF7GKogY=r_I8*$*(_kn{zDt&bL|FL6?<8 zR;TWrN>WES;chzNPOno)2e2apkGM>?mi+}odM+X$NO4*m9wGItN|Sv0a=Fl|!iVz$ zns9#IGu;XFRh)+T58`yf zG-3ur%XE`_Gga5eE$b+%7&#O&ju)XBOgI(fCoOiI=*z9$&xz@K9pHUkV7NNF+xZ)Y z?72CM)CmWKYBs_NkHhlzz(Awvjj+?08gbNueAe=rtyqMZ_Su9l_OA%h$kr&r!kDU) zePkOKX+PYY4>q;my`_|`;P^tDhM&v=ma^h1Mfl)cy#Lj|@_Bn^`)ClW)N!D|$|!ax zAB}bWA}(_GiFC4I*4XswchLRwB14V)$AQ!4Iq?3R3(US07pWVCz{rUsDFnh6DpBj8 zSwvqrssmfsnL@a&0k{7t2G0+L3>`fn)RU7JWkuzoG@vOLox$`Cfdp3drlyvM%mMJDnBAgk}amRg@(y~rw9q4^_`~RIfgkbC4aaI$nI)onbo_5) z%x~9usB4FI`mRq{WCp1ka6wQ)%W1grQ4(+nQ%X#!>1i8RqPc7E6D@3mKLI@fNhFt` zT7MwcBM>&XC0jpk-5GGXuDKN23OWToclp2~aaU2NU zA53O4GXbHQOGxi? z_ZhH^SY}ZL(*>R*8-stm=wuzi(bfa@RACTVqr+zwsjsDJ~(3n5gMN~Y~CW@sp%ur#c?zHqrFBtC0n z#&iX%i9P~BqI$GF#{kmK1Mjr&^@+YBCv$R~PiF*l!y(NRFGF+hW*RZ~B6Z4Tl{Q*Z z4lyejIgL7TTLPWChQo^ge4W=b2H!Ma%0ADEXvtuKrm~;1JGn$Ij4B25vF0A74ffui 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℘T7WurH3|@k8^I&g~j7C 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 My85}Sb4q9e05Asset 336 \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/login-bg-dark.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/login-bg-dark.svg deleted file mode 100644 index 888da7af8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/login-bg-dark.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/login-bg.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/login-bg.svg deleted file mode 100644 index 7b66bafcd..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/login-bg.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/login-box-bg.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/login-box-bg.svg deleted file mode 100644 index ee7dbdc28..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/login-box-bg.svg +++ /dev/null @@ -1 +0,0 @@ -responsive \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/net-error.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/net-error.svg deleted file mode 100644 index 81f20044a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/net-error.svg +++ /dev/null @@ -1 +0,0 @@ -personal settings \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/no-data.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/no-data.svg deleted file mode 100644 index 2b9f2570e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/no-data.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/p-rotate.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/p-rotate.svg deleted file mode 100644 index 5153a8169..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/p-rotate.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/resume.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/resume.svg deleted file mode 100644 index 0e86c5f6f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/resume.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/scale.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/scale.svg deleted file mode 100644 index 1f7adaee9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/scale.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/unrotate.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/unrotate.svg deleted file mode 100644 index e4708be13..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/unrotate.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/unscale.svg b/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/unscale.svg deleted file mode 100644 index 1359b34cd..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/assets/svg/preview/unscale.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/index.ts deleted file mode 100644 index d7c513306..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { withInstall } from '/@/utils'; - -import appLogo from './src/AppLogo.vue'; -import appProvider from './src/AppProvider.vue'; -import appSearch from './src/search/AppSearch.vue'; -import appLocalePicker from './src/AppLocalePicker.vue'; -import appDarkModeToggle from './src/AppDarkModeToggle.vue'; - -export { useAppProviderContext } from './src/useAppContext'; - -export const AppLogo = withInstall(appLogo); -export const AppProvider = withInstall(appProvider); -export const AppSearch = withInstall(appSearch); -export const AppLocalePicker = withInstall(appLocalePicker); -export const AppDarkModeToggle = withInstall(appDarkModeToggle); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppDarkModeToggle.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppDarkModeToggle.vue deleted file mode 100644 index 19ba3b151..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppDarkModeToggle.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppLocalePicker.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppLocalePicker.vue deleted file mode 100644 index f71b81280..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppLocalePicker.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppLogo.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppLogo.vue deleted file mode 100644 index c9d992875..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppLogo.vue +++ /dev/null @@ -1,93 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppProvider.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppProvider.vue deleted file mode 100644 index fe19a8000..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/AppProvider.vue +++ /dev/null @@ -1,82 +0,0 @@ - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearch.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearch.vue deleted file mode 100644 index 63d346ee3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearch.vue +++ /dev/null @@ -1,33 +0,0 @@ - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearchFooter.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearchFooter.vue deleted file mode 100644 index 97bd93a93..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearchFooter.vue +++ /dev/null @@ -1,56 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearchKeyItem.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearchKeyItem.vue deleted file mode 100644 index aba36a5af..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearchKeyItem.vue +++ /dev/null @@ -1,11 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearchModal.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearchModal.vue deleted file mode 100644 index 76b788240..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/AppSearchModal.vue +++ /dev/null @@ -1,267 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/useMenuSearch.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/useMenuSearch.ts deleted file mode 100644 index 9101b4ac9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/search/useMenuSearch.ts +++ /dev/null @@ -1,166 +0,0 @@ -import type { Menu } from '/@/router/types'; -import { ref, onBeforeMount, unref, Ref, nextTick } from 'vue'; -import { getMenus } from '/@/router/menus'; -import { cloneDeep } from 'lodash-es'; -import { filter, forEach } from '/@/utils/helper/treeHelper'; -import { useGo } from '/@/hooks/web/usePage'; -import { useScrollTo } from '/@/hooks/event/useScrollTo'; -import { onKeyStroke, useDebounceFn } from '@vueuse/core'; -import { useI18n } from '/@/hooks/web/useI18n'; - -export interface SearchResult { - name: string; - path: string; - icon?: string; -} - -// Translate special characters -function transform(c: string) { - const code: string[] = ['$', '(', ')', '*', '+', '.', '[', ']', '?', '\\', '^', '{', '}', '|']; - return code.includes(c) ? `\\${c}` : c; -} - -function createSearchReg(key: string) { - const keys = [...key].map((item) => transform(item)); - const str = ['', ...keys, ''].join('.*'); - return new RegExp(str); -} - -export function useMenuSearch(refs: Ref, scrollWrap: Ref, emit: EmitType) { - const searchResult = ref([]); - const keyword = ref(''); - const activeIndex = ref(-1); - - let menuList: Menu[] = []; - - const { t } = useI18n(); - const go = useGo(); - const handleSearch = useDebounceFn(search, 200); - - onBeforeMount(async () => { - const list = await getMenus(); - menuList = cloneDeep(list); - forEach(menuList, (item) => { - item.name = t(item.name); - }); - }); - - function search(e: ChangeEvent) { - e?.stopPropagation(); - const key = e.target.value; - keyword.value = key.trim(); - if (!key) { - searchResult.value = []; - return; - } - const reg = createSearchReg(unref(keyword)); - const filterMenu = filter(menuList, (item) => { - return reg.test(item.name) && !item.hideMenu; - }); - searchResult.value = handlerSearchResult(filterMenu, reg); - activeIndex.value = 0; - } - - function handlerSearchResult(filterMenu: Menu[], reg: RegExp, parent?: Menu) { - const ret: SearchResult[] = []; - filterMenu.forEach((item) => { - const { name, path, icon, children, hideMenu, meta } = item; - if (!hideMenu && reg.test(name) && (!children?.length || meta?.hideChildrenInMenu)) { - ret.push({ - name: parent?.name ? `${parent.name} > ${name}` : name, - path, - icon, - }); - } - if (!meta?.hideChildrenInMenu && Array.isArray(children) && children.length) { - ret.push(...handlerSearchResult(children, reg, item)); - } - }); - return ret; - } - - // Activate when the mouse moves to a certain line - function handleMouseenter(e: any) { - const index = e.target.dataset.index; - activeIndex.value = Number(index); - } - - // Arrow key up - function handleUp() { - if (!searchResult.value.length) return; - activeIndex.value--; - if (activeIndex.value < 0) { - activeIndex.value = searchResult.value.length - 1; - } - handleScroll(); - } - - // Arrow key down - function handleDown() { - if (!searchResult.value.length) return; - activeIndex.value++; - if (activeIndex.value > searchResult.value.length - 1) { - activeIndex.value = 0; - } - handleScroll(); - } - - // When the keyboard up and down keys move to an invisible place - // the scroll bar needs to scroll automatically - function handleScroll() { - const refList = unref(refs); - if (!refList || !Array.isArray(refList) || refList.length === 0 || !unref(scrollWrap)) { - return; - } - - const index = unref(activeIndex); - const currentRef = refList[index]; - if (!currentRef) { - return; - } - const wrapEl = unref(scrollWrap); - if (!wrapEl) { - return; - } - const scrollHeight = currentRef.offsetTop + currentRef.offsetHeight; - const wrapHeight = wrapEl.offsetHeight; - const { start } = useScrollTo({ - el: wrapEl, - duration: 100, - to: scrollHeight - wrapHeight, - }); - start(); - } - - // enter keyboard event - async function handleEnter() { - if (!searchResult.value.length) { - return; - } - const result = unref(searchResult); - const index = unref(activeIndex); - if (result.length === 0 || index < 0) { - return; - } - const to = result[index]; - handleClose(); - await nextTick(); - go(to.path); - } - - // close search modal - function handleClose() { - searchResult.value = []; - emit('close'); - } - - // enter search - onKeyStroke('Enter', handleEnter); - // Monitor keyboard arrow keys - onKeyStroke('ArrowUp', handleUp); - onKeyStroke('ArrowDown', handleDown); - // esc close - onKeyStroke('Escape', handleClose); - - return { handleSearch, searchResult, keyword, activeIndex, handleMouseenter, handleEnter }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/useAppContext.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/useAppContext.ts deleted file mode 100644 index 8bdfb4f88..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Application/src/useAppContext.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { InjectionKey, Ref } from 'vue'; -import { createContext, useContext } from '/@/hooks/core/useContext'; - -export interface AppProviderContextProps { - prefixCls: Ref; - isMobile: Ref; -} - -const key: InjectionKey = Symbol(); - -export function createAppProviderContext(context: AppProviderContextProps) { - return createContext(context, key); -} - -export function useAppProviderContext() { - return useContext(key); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Authority/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Authority/index.ts deleted file mode 100644 index 2f0eab7f2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Authority/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { withInstall } from '/@/utils'; -import authority from './src/Authority.vue'; - -export const Authority = withInstall(authority); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Authority/src/Authority.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Authority/src/Authority.vue deleted file mode 100644 index 0d3593827..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Authority/src/Authority.vue +++ /dev/null @@ -1,45 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/index.ts deleted file mode 100644 index 97a53a101..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { withInstall } from '/@/utils'; -import basicArrow from './src/BasicArrow.vue'; -import basicTitle from './src/BasicTitle.vue'; -import basicHelp from './src/BasicHelp.vue'; - -export const BasicArrow = withInstall(basicArrow); -export const BasicTitle = withInstall(basicTitle); -export const BasicHelp = withInstall(basicHelp); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/src/BasicArrow.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/src/BasicArrow.vue deleted file mode 100644 index 6a4cd01ad..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/src/BasicArrow.vue +++ /dev/null @@ -1,84 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/src/BasicHelp.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/src/BasicHelp.vue deleted file mode 100644 index 1a1debb25..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/src/BasicHelp.vue +++ /dev/null @@ -1,114 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/src/BasicTitle.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/src/BasicTitle.vue deleted file mode 100644 index 3b96328f8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Basic/src/BasicTitle.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/index.ts deleted file mode 100644 index 98add5c30..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { withInstall } from '/@/utils'; -import type { ExtractPropTypes } from 'vue'; -import button from './src/BasicButton.vue'; -import popConfirmButton from './src/PopConfirmButton.vue'; -import { buttonProps } from './src/props'; - -export const Button = withInstall(button); -export const PopConfirmButton = withInstall(popConfirmButton); -export declare type ButtonProps = Partial>; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/src/BasicButton.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/src/BasicButton.vue deleted file mode 100644 index 73f0c449f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/src/BasicButton.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/src/PopConfirmButton.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/src/PopConfirmButton.vue deleted file mode 100644 index b24225faa..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/src/PopConfirmButton.vue +++ /dev/null @@ -1,54 +0,0 @@ - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/src/props.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/src/props.ts deleted file mode 100644 index d79d378af..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Button/src/props.ts +++ /dev/null @@ -1,19 +0,0 @@ -export const buttonProps = { - color: { type: String, validator: (v) => ['error', 'warning', 'success', ''].includes(v) }, - loading: { type: Boolean }, - disabled: { type: Boolean }, - /** - * Text before icon. - */ - preIcon: { type: String }, - /** - * Text after icon. - */ - postIcon: { type: String }, - /** - * preIcon and postIcon icon size. - * @default: 14 - */ - iconSize: { type: Number, default: 14 }, - onClick: { type: Function as PropType<(...args) => any>, default: null }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CardList/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CardList/index.ts deleted file mode 100644 index b977c1b16..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CardList/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { withInstall } from '/@/utils'; -import cardList from './src/CardList.vue'; - -export const CardList = withInstall(cardList); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CardList/src/CardList.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CardList/src/CardList.vue deleted file mode 100644 index d14f7c6fa..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CardList/src/CardList.vue +++ /dev/null @@ -1,177 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CardList/src/data.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CardList/src/data.ts deleted file mode 100644 index b7c4be78c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CardList/src/data.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ref } from 'vue'; -// 每行个数 -export const grid = ref(12); -// slider属性 -export const useSlider = (min = 6, max = 12) => { - // 每行显示个数滑动条 - const getMarks = () => { - const l = {}; - for (let i = min; i < max + 1; i++) { - l[i] = { - style: { - color: '#fff', - }, - label: i, - }; - } - return l; - }; - return { - min, - max, - marks: getMarks(), - step: 1, - }; -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ClickOutSide/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ClickOutSide/index.ts deleted file mode 100644 index 5e7dd2d33..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ClickOutSide/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { withInstall } from '/@/utils'; -import clickOutSide from './src/ClickOutSide.vue'; - -export const ClickOutSide = withInstall(clickOutSide); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ClickOutSide/src/ClickOutSide.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ClickOutSide/src/ClickOutSide.vue deleted file mode 100644 index c043cc190..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ClickOutSide/src/ClickOutSide.vue +++ /dev/null @@ -1,19 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/index.ts deleted file mode 100644 index 872bfedf9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { withInstall } from '/@/utils'; -import codeEditor from './src/CodeEditor.vue'; -import jsonPreview from './src/json-preview/JsonPreview.vue'; - -export const CodeEditor = withInstall(codeEditor); -export const JsonPreview = withInstall(jsonPreview); - -export * from './src/typing'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/CodeEditor.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/CodeEditor.vue deleted file mode 100644 index db9042b50..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/CodeEditor.vue +++ /dev/null @@ -1,54 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/codemirror/CodeMirror.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/codemirror/CodeMirror.vue deleted file mode 100644 index 426ac36e5..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/codemirror/CodeMirror.vue +++ /dev/null @@ -1,113 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/codemirror/codeMirror.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/codemirror/codeMirror.ts deleted file mode 100644 index e04f51be2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/codemirror/codeMirror.ts +++ /dev/null @@ -1,21 +0,0 @@ -import CodeMirror from 'codemirror'; -import './codemirror.css'; -import 'codemirror/theme/idea.css'; -import 'codemirror/theme/material-palenight.css'; -// import 'codemirror/addon/lint/lint.css'; - -// modes -import 'codemirror/mode/javascript/javascript'; -import 'codemirror/mode/css/css'; -import 'codemirror/mode/htmlmixed/htmlmixed'; -// addons -// import 'codemirror/addon/edit/closebrackets'; -// import 'codemirror/addon/edit/closetag'; -// import 'codemirror/addon/comment/comment'; -// import 'codemirror/addon/fold/foldcode'; -// import 'codemirror/addon/fold/foldgutter'; -// import 'codemirror/addon/fold/brace-fold'; -// import 'codemirror/addon/fold/indent-fold'; -// import 'codemirror/addon/lint/json-lint'; -// import 'codemirror/addon/fold/comment-fold'; -export { CodeMirror }; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/codemirror/codemirror.css b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/codemirror/codemirror.css deleted file mode 100644 index c87ff666f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/codemirror/codemirror.css +++ /dev/null @@ -1,525 +0,0 @@ -/* BASICS */ - -.CodeMirror { - --base: #545281; - --comment: hsl(210deg 25% 60%); - --keyword: #af4ab1; - --variable: #0055d1; - --function: #c25205; - --string: #2ba46d; - --number: #c25205; - --tags: #d00; - --qualifier: #ff6032; - --important: var(--string); - - position: relative; - height: auto; - height: 100%; - overflow: hidden; - font-family: var(--font-code); - background: white; - direction: ltr; -} - -/* PADDING */ - -.CodeMirror-lines { - min-height: 1px; /* prevents collapsing before first draw */ - padding: 4px 0; /* Vertical padding around content */ - cursor: text; -} - -.CodeMirror-scrollbar-filler, -.CodeMirror-gutter-filler { - background-color: white; /* The little square between H and V scrollbars */ -} - -/* GUTTER */ - -.CodeMirror-gutters { - position: absolute; - top: 0; - left: 0; - z-index: 3; - min-height: 100%; - white-space: nowrap; - background-color: transparent; - border-right: 1px solid #ddd; -} - -.CodeMirror-linenumber { - min-width: 20px; - padding: 0 3px 0 5px; - color: var(--comment); - text-align: right; - white-space: nowrap; - opacity: 0.6; -} - -.CodeMirror-guttermarker { - color: black; -} - -.CodeMirror-guttermarker-subtle { - color: #999; -} - -/* FOLD GUTTER */ - -.CodeMirror-foldmarker { - font-family: arial; - line-height: 0.3; - color: #414141; - text-shadow: #f96 1px 1px 2px, #f96 -1px -1px 2px, #f96 1px -1px 2px, #f96 -1px 1px 2px; - cursor: pointer; -} - -.CodeMirror-foldgutter { - width: 0.7em; -} - -.CodeMirror-foldgutter-open, -.CodeMirror-foldgutter-folded { - cursor: pointer; -} - -.CodeMirror-foldgutter-open::after, -.CodeMirror-foldgutter-folded::after { - position: relative; - top: -0.1em; - display: inline-block; - font-size: 0.8em; - content: '>'; - opacity: 0.8; - transform: rotate(90deg); - transition: transform 0.2s; -} - -.CodeMirror-foldgutter-folded::after { - transform: none; -} - -/* CURSOR */ - -.CodeMirror-cursor { - position: absolute; - width: 0; - pointer-events: none; - border-right: none; - border-left: 1px solid black; -} - -/* Shown when moving in bi-directional text */ -.CodeMirror div.CodeMirror-secondarycursor { - border-left: 1px solid silver; -} - -.cm-fat-cursor .CodeMirror-cursor { - width: auto; - background: #7e7; - border: 0 !important; -} - -.cm-fat-cursor div.CodeMirror-cursors { - z-index: 1; -} - -.cm-fat-cursor-mark { - background-color: rgb(20 255 20 / 50%); - animation: blink 1.06s steps(1) infinite; -} - -.cm-animate-fat-cursor { - width: auto; - background-color: #7e7; - border: 0; - animation: blink 1.06s steps(1) infinite; -} -@keyframes blink { - 50% { - background-color: transparent; - } -} -@keyframes blink { - 50% { - background-color: transparent; - } -} -@keyframes blink { - 50% { - background-color: transparent; - } -} - -.cm-tab { - display: inline-block; - text-decoration: inherit; -} - -.CodeMirror-rulers { - position: absolute; - top: -50px; - right: 0; - bottom: -20px; - left: 0; - overflow: hidden; -} - -.CodeMirror-ruler { - position: absolute; - top: 0; - bottom: 0; - border-left: 1px solid #ccc; -} - -/* DEFAULT THEME */ -.cm-s-default.CodeMirror { - background-color: transparent; -} - -.cm-s-default .cm-header { - color: blue; -} - -.cm-s-default .cm-quote { - color: #090; -} - -.cm-negative { - color: #d44; -} - -.cm-positive { - color: #292; -} - -.cm-header, -.cm-strong { - font-weight: bold; -} - -.cm-em { - font-style: italic; -} - -.cm-link { - text-decoration: underline; -} - -.cm-strikethrough { - text-decoration: line-through; -} - -.cm-s-default .cm-atom, -.cm-s-default .cm-def, -.cm-s-default .cm-property, -.cm-s-default .cm-variable-2, -.cm-s-default .cm-variable-3, -.cm-s-default .cm-punctuation { - color: var(--base); -} - -.cm-s-default .cm-hr, -.cm-s-default .cm-comment { - color: var(--comment); -} - -.cm-s-default .cm-attribute, -.cm-s-default .cm-keyword { - color: var(--keyword); -} - -.cm-s-default .cm-variable { - color: var(--variable); -} - -.cm-s-default .cm-bracket, -.cm-s-default .cm-tag { - color: var(--tags); -} - -.cm-s-default .cm-number { - color: var(--number); -} - -.cm-s-default .cm-string, -.cm-s-default .cm-string-2 { - color: var(--string); -} - -.cm-s-default .cm-type { - color: #085; -} - -.cm-s-default .cm-meta { - color: #555; -} - -.cm-s-default .cm-qualifier { - color: var(--qualifier); -} - -.cm-s-default .cm-builtin { - color: #7539ff; -} - -.cm-s-default .cm-link { - color: var(--flash); -} - -.cm-s-default .cm-error { - color: #ff008c; -} - -.cm-invalidchar { - color: #ff008c; -} - -.CodeMirror-composing { - border-bottom: 2px solid; -} - -/* Default styles for common addons */ - -div.CodeMirror span.CodeMirror-matchingbracket { - color: #0b0; -} - -div.CodeMirror span.CodeMirror-nonmatchingbracket { - color: #a22; -} - -.CodeMirror-matchingtag { - background: rgb(255 150 0 / 30%); -} - -.CodeMirror-activeline-background { - background: #e8f2ff; -} - -/* STOP */ - -/* The rest of this file contains styles related to the mechanics of - the editor. You probably shouldn't touch them. */ - -.CodeMirror-scroll { - position: relative; - height: 100%; - padding-bottom: 30px; - margin-right: -30px; - - /* 30px is the magic margin used to hide the element's real scrollbars */ - - /* See overflow: hidden in .CodeMirror */ - margin-bottom: -30px; - overflow: scroll !important; /* Things will break if this is overridden */ - outline: none; /* Prevent dragging from highlighting the element */ -} - -.CodeMirror-sizer { - position: relative; - margin-bottom: 20px !important; - border-right: 30px solid transparent; -} - -/* The fake, visible scrollbars. Used to force redraw during scrolling - before actual scrolling happens, thus preventing shaking and - flickering artifacts. */ -.CodeMirror-vscrollbar, -.CodeMirror-hscrollbar, -.CodeMirror-scrollbar-filler, -.CodeMirror-gutter-filler { - position: absolute; - z-index: 6; - display: none; -} - -.CodeMirror-vscrollbar { - top: 0; - right: 0; - overflow-x: hidden; - overflow-y: scroll; -} - -.CodeMirror-hscrollbar { - bottom: 0; - left: 0; - overflow-x: scroll; - overflow-y: hidden; -} - -.CodeMirror-scrollbar-filler { - right: 0; - bottom: 0; -} - -.CodeMirror-gutter-filler { - bottom: 0; - left: 0; -} - -.CodeMirror-gutter { - display: inline-block; - height: 100%; - margin-bottom: -30px; - white-space: normal; - vertical-align: top; -} - -.CodeMirror-gutter-wrapper { - position: absolute; - z-index: 4; - background: none !important; - border: none !important; -} - -.CodeMirror-gutter-background { - position: absolute; - top: 0; - bottom: 0; - z-index: 4; -} - -.CodeMirror-gutter-elt { - position: absolute; - z-index: 4; - cursor: default; -} - -.CodeMirror-gutter-wrapper ::selection { - background-color: transparent; -} - -.CodeMirrorwrapper ::selection { - background-color: transparent; -} - -.CodeMirror pre { - position: relative; - z-index: 2; - padding: 0 4px; /* Horizontal padding of content */ - margin: 0; - overflow: visible; - font-family: inherit; - font-size: inherit; - line-height: inherit; - color: inherit; - word-wrap: normal; - white-space: pre; - background: transparent; - border-width: 0; - - /* Reset some styles that the rest of the page might have set */ - border-radius: 0; - -webkit-tap-highlight-color: transparent; - font-variant-ligatures: contextual; -} - -.CodeMirror-wrap pre { - word-break: normal; - word-wrap: break-word; - white-space: pre-wrap; -} - -.CodeMirror-linebackground { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 0; -} - -.CodeMirror-linewidget { - position: relative; - z-index: 2; - padding: 0.1px; /* Force widget margins to stay inside of the container */ -} - -.CodeMirror-rtl pre { - direction: rtl; -} - -.CodeMirror-code { - outline: none; -} - -/* Force content-box sizing for the elements where we expect it */ -.CodeMirror-scroll, -.CodeMirror-sizer, -.CodeMirror-gutter, -.CodeMirror-gutters, -.CodeMirror-linenumber { - box-sizing: content-box; -} - -.CodeMirror-measure { - position: absolute; - width: 100%; - height: 0; - overflow: hidden; - visibility: hidden; -} - -.CodeMirror-measure pre { - position: static; -} - -div.CodeMirror-cursors { - position: relative; - z-index: 3; - visibility: hidden; -} - -div.CodeMirror-dragcursors { - visibility: visible; -} - -.CodeMirror-focused div.CodeMirror-cursors { - visibility: visible; -} - -.CodeMirror-selected { - background: #d9d9d9; -} - -.CodeMirror-focused .CodeMirror-selected { - background: #d7d4f0; -} - -.CodeMirror-crosshair { - cursor: crosshair; -} - -.CodeMirror-line::selection, -.CodeMirror-line > span::selection, -.CodeMirror-line > span > span::selection { - background: #d7d4f0; -} - -.cm-searching { - background-color: #ffa; - background-color: rgb(255 255 0 / 40%); -} - -/* Used to force a border model for a node */ -.cm-force-border { - padding-right: 0.1px; -} - -@media print { - /* Hide the cursor when printing */ - .CodeMirror div.CodeMirror-cursors { - visibility: hidden; - } -} - -/* See issue #2901 */ -.cm-tab-wrap-hack::after { - content: ''; -} - -/* Help users use markselection to safely style text background */ -span.CodeMirror-selectedtext { - background: none; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/json-preview/JsonPreview.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/json-preview/JsonPreview.vue deleted file mode 100644 index 75890c336..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/json-preview/JsonPreview.vue +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/typing.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/typing.ts deleted file mode 100644 index 34b5ed1f4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CodeEditor/src/typing.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum MODE { - JSON = 'application/json', - HTML = 'htmlmixed', - JS = 'javascript', -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/index.ts deleted file mode 100644 index e1230a093..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { withInstall } from '/@/utils'; -import collapseContainer from './src/collapse/CollapseContainer.vue'; -import scrollContainer from './src/ScrollContainer.vue'; -import lazyContainer from './src/LazyContainer.vue'; - -export const CollapseContainer = withInstall(collapseContainer); -export const ScrollContainer = withInstall(scrollContainer); -export const LazyContainer = withInstall(lazyContainer); - -export * from './src/typing'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/LazyContainer.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/LazyContainer.vue deleted file mode 100644 index a7ad2b69f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/LazyContainer.vue +++ /dev/null @@ -1,145 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/ScrollContainer.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/ScrollContainer.vue deleted file mode 100644 index 65c71edce..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/ScrollContainer.vue +++ /dev/null @@ -1,93 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/collapse/CollapseContainer.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/collapse/CollapseContainer.vue deleted file mode 100644 index d60d5193d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/collapse/CollapseContainer.vue +++ /dev/null @@ -1,110 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/collapse/CollapseHeader.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/collapse/CollapseHeader.vue deleted file mode 100644 index 4196c0a6f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/collapse/CollapseHeader.vue +++ /dev/null @@ -1,38 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/typing.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/typing.ts deleted file mode 100644 index 86c03bea6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Container/src/typing.ts +++ /dev/null @@ -1,17 +0,0 @@ -export type ScrollType = 'default' | 'main'; - -export interface CollapseContainerOptions { - canExpand?: boolean; - title?: string; - helpMessage?: Array | string; -} -export interface ScrollContainerOptions { - enableScroll?: boolean; - type?: ScrollType; -} - -export type ScrollActionType = RefType<{ - scrollBottom: () => void; - getScrollWrap: () => Nullable; - scrollTo: (top: number) => void; -}>; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/index.ts deleted file mode 100644 index ed294d7bb..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { createContextMenu, destroyContextMenu } from './src/createContextMenu'; - -export * from './src/typing'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/src/ContextMenu.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/src/ContextMenu.vue deleted file mode 100644 index e08c25f36..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/src/ContextMenu.vue +++ /dev/null @@ -1,209 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/src/createContextMenu.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/src/createContextMenu.ts deleted file mode 100644 index 8f7a1c82b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/src/createContextMenu.ts +++ /dev/null @@ -1,75 +0,0 @@ -import contextMenuVue from './ContextMenu.vue'; -import { isClient } from '/@/utils/is'; -import { CreateContextOptions, ContextMenuProps } from './typing'; -import { createVNode, render } from 'vue'; - -const menuManager: { - domList: Element[]; - resolve: Fn; -} = { - domList: [], - resolve: () => {}, -}; - -export const createContextMenu = function (options: CreateContextOptions) { - const { event } = options || {}; - - event && event?.preventDefault(); - - if (!isClient) { - return; - } - return new Promise((resolve) => { - const body = document.body; - - const container = document.createElement('div'); - const propsData: Partial = {}; - if (options.styles) { - propsData.styles = options.styles; - } - - if (options.items) { - propsData.items = options.items; - } - - if (options.event) { - propsData.customEvent = event; - propsData.axis = { x: event.clientX, y: event.clientY }; - } - - const vm = createVNode(contextMenuVue, propsData); - render(vm, container); - - const handleClick = function () { - menuManager.resolve(''); - }; - - menuManager.domList.push(container); - - const remove = function () { - menuManager.domList.forEach((dom: Element) => { - try { - dom && body.removeChild(dom); - } catch (error) {} - }); - body.removeEventListener('click', handleClick); - body.removeEventListener('scroll', handleClick); - }; - - menuManager.resolve = function (arg) { - remove(); - resolve(arg); - }; - remove(); - body.appendChild(container); - body.addEventListener('click', handleClick); - body.addEventListener('scroll', handleClick); - }); -}; - -export const destroyContextMenu = function () { - if (menuManager) { - menuManager.resolve(''); - menuManager.domList = []; - } -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/src/typing.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/src/typing.ts deleted file mode 100644 index 63d3d37fe..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/ContextMenu/src/typing.ts +++ /dev/null @@ -1,36 +0,0 @@ -export interface Axis { - x: number; - y: number; -} - -export interface ContextMenuItem { - label: string; - icon?: string; - hidden?: boolean; - disabled?: boolean; - handler?: Fn; - divider?: boolean; - children?: ContextMenuItem[]; -} -export interface CreateContextOptions { - event: MouseEvent; - icon?: string; - styles?: any; - items?: ContextMenuItem[]; -} - -export interface ContextMenuProps { - event?: MouseEvent; - styles?: any; - items: ContextMenuItem[]; - customEvent?: MouseEvent; - axis?: Axis; - width?: number; - showIcon?: boolean; -} - -export interface ItemContentProps { - showIcon: boolean | undefined; - item: ContextMenuItem; - handler: Fn; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/index.ts deleted file mode 100644 index 980941694..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { withInstall } from '/@/utils'; -import countButton from './src/CountButton.vue'; -import countdownInput from './src/CountdownInput.vue'; - -export const CountdownInput = withInstall(countdownInput); -export const CountButton = withInstall(countButton); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/src/CountButton.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/src/CountButton.vue deleted file mode 100644 index 1ef520ede..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/src/CountButton.vue +++ /dev/null @@ -1,62 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/src/CountdownInput.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/src/CountdownInput.vue deleted file mode 100644 index 8da89cd6b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/src/CountdownInput.vue +++ /dev/null @@ -1,54 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/src/useCountdown.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/src/useCountdown.ts deleted file mode 100644 index 316d69a86..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountDown/src/useCountdown.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { ref, unref } from 'vue'; -import { tryOnUnmounted } from '@vueuse/core'; - -export function useCountdown(count: number) { - const currentCount = ref(count); - - const isStart = ref(false); - - let timerId: ReturnType | null; - - function clear() { - timerId && window.clearInterval(timerId); - } - - function stop() { - isStart.value = false; - clear(); - timerId = null; - } - - function start() { - if (unref(isStart) || !!timerId) { - return; - } - isStart.value = true; - timerId = setInterval(() => { - if (unref(currentCount) === 1) { - stop(); - currentCount.value = count; - } else { - currentCount.value -= 1; - } - }, 1000); - } - - function reset() { - currentCount.value = count; - stop(); - } - - function restart() { - reset(); - start(); - } - - tryOnUnmounted(() => { - reset(); - }); - - return { start, reset, restart, clear, stop, currentCount, isStart }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountTo/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountTo/index.ts deleted file mode 100644 index 36a4e65a3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountTo/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { withInstall } from '/@/utils'; -import countTo from './src/CountTo.vue'; - -export const CountTo = withInstall(countTo); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountTo/src/CountTo.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountTo/src/CountTo.vue deleted file mode 100644 index 7de336165..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/CountTo/src/CountTo.vue +++ /dev/null @@ -1,110 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/index.ts deleted file mode 100644 index 88d6d1d53..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { withInstall } from '/@/utils'; -import cropperImage from './src/Cropper.vue'; -import avatarCropper from './src/CropperAvatar.vue'; - -export * from './src/typing'; -export const CropperImage = withInstall(cropperImage); -export const CropperAvatar = withInstall(avatarCropper); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/CopperModal.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/CopperModal.vue deleted file mode 100644 index 2ec7f4fd0..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/CopperModal.vue +++ /dev/null @@ -1,283 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/Cropper.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/Cropper.vue deleted file mode 100644 index 4523ad434..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/Cropper.vue +++ /dev/null @@ -1,188 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/CropperAvatar.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/CropperAvatar.vue deleted file mode 100644 index 7ddce0025..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/CropperAvatar.vue +++ /dev/null @@ -1,161 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/typing.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/typing.ts deleted file mode 100644 index e76cc6f8e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Cropper/src/typing.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type Cropper from 'cropperjs'; - -export interface CropendResult { - imgBase64: string; - imgInfo: Cropper.Data; -} - -export type { Cropper }; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/index.ts deleted file mode 100644 index 58277d063..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { withInstall } from '/@/utils'; -import description from './src/Description.vue'; - -export * from './src/typing'; -export { useDescription } from './src/useDescription'; -export const Description = withInstall(description); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/src/Description.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/src/Description.vue deleted file mode 100644 index 1238acc2c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/src/Description.vue +++ /dev/null @@ -1,184 +0,0 @@ - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/src/typing.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/src/typing.ts deleted file mode 100644 index ee96084b3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/src/typing.ts +++ /dev/null @@ -1,50 +0,0 @@ -import type { VNode, CSSProperties } from 'vue'; -import type { CollapseContainerOptions } from '/@/components/Container/index'; -import type { DescriptionsProps } from 'ant-design-vue/es/descriptions/index'; - -export interface DescItem { - labelMinWidth?: number; - contentMinWidth?: number; - labelStyle?: CSSProperties; - field: string; - label: string | VNode | JSX.Element; - // Merge column - span?: number; - show?: (...arg: any) => boolean; - // render - render?: ( - val: any, - data: Recordable, - ) => VNode | undefined | JSX.Element | Element | string | number; -} - -export interface DescriptionProps extends DescriptionsProps { - // Whether to include the collapse component - useCollapse?: boolean; - /** - * item configuration - * @type DescItem - */ - schema: DescItem[]; - /** - * 数据 - * @type object - */ - data: Recordable; - /** - * Built-in CollapseContainer component configuration - * @type CollapseContainerOptions - */ - collapseOptions?: CollapseContainerOptions; -} - -export interface DescInstance { - setDescProps(descProps: Partial): void; -} - -export type Register = (descInstance: DescInstance) => void; - -/** - * @description: - */ -export type UseDescReturnType = [Register, DescInstance]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/src/useDescription.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/src/useDescription.ts deleted file mode 100644 index d1037d065..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Description/src/useDescription.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { DescriptionProps, DescInstance, UseDescReturnType } from './typing'; -import { ref, getCurrentInstance, unref } from 'vue'; -import { isProdMode } from '/@/utils/env'; - -export function useDescription(props?: Partial): UseDescReturnType { - if (!getCurrentInstance()) { - throw new Error('useDescription() can only be used inside setup() or functional components!'); - } - const desc = ref>(null); - const loaded = ref(false); - - function register(instance: DescInstance) { - if (unref(loaded) && isProdMode()) { - return; - } - desc.value = instance; - props && instance.setDescProps(props); - loaded.value = true; - } - - const methods: DescInstance = { - setDescProps: (descProps: Partial): void => { - unref(desc)?.setDescProps(descProps); - }, - }; - - return [register, methods]; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/index.ts deleted file mode 100644 index 820ade569..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { withInstall } from '/@/utils'; -import basicDrawer from './src/BasicDrawer.vue'; - -export const BasicDrawer = withInstall(basicDrawer); -export * from './src/typing'; -export { useDrawer, useDrawerInner } from './src/useDrawer'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/BasicDrawer.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/BasicDrawer.vue deleted file mode 100644 index 857b69bda..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/BasicDrawer.vue +++ /dev/null @@ -1,256 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/components/DrawerFooter.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/components/DrawerFooter.vue deleted file mode 100644 index 7a3992fa2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/components/DrawerFooter.vue +++ /dev/null @@ -1,82 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/components/DrawerHeader.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/components/DrawerHeader.vue deleted file mode 100644 index 823212873..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/components/DrawerHeader.vue +++ /dev/null @@ -1,74 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/props.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/props.ts deleted file mode 100644 index 0a7ca8cdf..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/props.ts +++ /dev/null @@ -1,44 +0,0 @@ -import type { PropType } from 'vue'; - -import { useI18n } from '/@/hooks/web/useI18n'; -const { t } = useI18n(); - -export const footerProps = { - confirmLoading: { type: Boolean }, - /** - * @description: Show close button - */ - showCancelBtn: { type: Boolean, default: true }, - cancelButtonProps: Object as PropType, - cancelText: { type: String, default: t('common.cancelText') }, - /** - * @description: Show confirmation button - */ - showOkBtn: { type: Boolean, default: true }, - okButtonProps: Object as PropType, - okText: { type: String, default: t('common.okText') }, - okType: { type: String, default: 'primary' }, - showFooter: { type: Boolean }, - footerHeight: { - type: [String, Number] as PropType, - default: 60, - }, -}; -export const basicProps = { - isDetail: { type: Boolean }, - title: { type: String, default: '' }, - loadingText: { type: String }, - showDetailBack: { type: Boolean, default: true }, - visible: { type: Boolean }, - loading: { type: Boolean }, - maskClosable: { type: Boolean, default: true }, - getContainer: { - type: [Object, String] as PropType, - }, - closeFunc: { - type: [Function, Object] as PropType, - default: null, - }, - destroyOnClose: { type: Boolean }, - ...footerProps, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/typing.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/typing.ts deleted file mode 100644 index 51724a126..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/typing.ts +++ /dev/null @@ -1,193 +0,0 @@ -import type { ButtonProps } from 'ant-design-vue/lib/button/buttonTypes'; -import type { CSSProperties, VNodeChild, ComputedRef } from 'vue'; -import type { ScrollContainerOptions } from '/@/components/Container/index'; - -export interface DrawerInstance { - setDrawerProps: (props: Partial | boolean) => void; - emitVisible?: (visible: boolean, uid: number) => void; -} - -export interface ReturnMethods extends DrawerInstance { - openDrawer: (visible?: boolean, data?: T, openOnSet?: boolean) => void; - closeDrawer: () => void; - getVisible?: ComputedRef; -} - -export type RegisterFn = (drawerInstance: DrawerInstance, uuid?: string) => void; - -export interface ReturnInnerMethods extends DrawerInstance { - closeDrawer: () => void; - changeLoading: (loading: boolean) => void; - changeOkLoading: (loading: boolean) => void; - getVisible?: ComputedRef; -} - -export type UseDrawerReturnType = [RegisterFn, ReturnMethods]; - -export type UseDrawerInnerReturnType = [RegisterFn, ReturnInnerMethods]; - -export interface DrawerFooterProps { - showOkBtn: boolean; - showCancelBtn: boolean; - /** - * Text of the Cancel button - * @default 'cancel' - * @type string - */ - cancelText: string; - /** - * Text of the OK button - * @default 'OK' - * @type string - */ - okText: string; - - /** - * Button type of the OK button - * @default 'primary' - * @type string - */ - okType: 'primary' | 'danger' | 'dashed' | 'ghost' | 'default'; - /** - * The ok button props, follow jsx rules - * @type object - */ - okButtonProps: { props: ButtonProps; on: {} }; - - /** - * The cancel button props, follow jsx rules - * @type object - */ - cancelButtonProps: { props: ButtonProps; on: {} }; - /** - * Whether to apply loading visual effect for OK button or not - * @default false - * @type boolean - */ - confirmLoading: boolean; - - showFooter: boolean; - footerHeight: string | number; -} -export interface DrawerProps extends DrawerFooterProps { - isDetail?: boolean; - loading?: boolean; - showDetailBack?: boolean; - visible?: boolean; - /** - * Built-in ScrollContainer component configuration - * @type ScrollContainerOptions - */ - scrollOptions?: ScrollContainerOptions; - closeFunc?: () => Promise; - triggerWindowResize?: boolean; - /** - * Whether a close (x) button is visible on top right of the Drawer dialog or not. - * @default true - * @type boolean - */ - closable?: boolean; - - /** - * Whether to unmount child components on closing drawer or not. - * @default false - * @type boolean - */ - destroyOnClose?: boolean; - - /** - * Return the mounted node for Drawer. - * @default 'body' - * @type any ( HTMLElement| () => HTMLElement | string) - */ - getContainer?: () => HTMLElement | string; - - /** - * Whether to show mask or not. - * @default true - * @type boolean - */ - mask?: boolean; - - /** - * Clicking on the mask (area outside the Drawer) to close the Drawer or not. - * @default true - * @type boolean - */ - maskClosable?: boolean; - - /** - * Style for Drawer's mask element. - * @default {} - * @type object - */ - maskStyle?: CSSProperties; - - /** - * The title for Drawer. - * @type any (string | slot) - */ - title?: VNodeChild | JSX.Element; - /** - * The class name of the container of the Drawer dialog. - * @type string - */ - wrapClassName?: string; - class?: string; - /** - * Style of wrapper element which **contains mask** compare to `drawerStyle` - * @type object - */ - wrapStyle?: CSSProperties; - - /** - * Style of the popup layer element - * @type object - */ - drawerStyle?: CSSProperties; - - /** - * Style of floating layer, typically used for adjusting its position. - * @type object - */ - bodyStyle?: CSSProperties; - headerStyle?: CSSProperties; - - /** - * Width of the Drawer dialog. - * @default 256 - * @type string | number - */ - width?: string | number; - - /** - * placement is top or bottom, height of the Drawer dialog. - * @type string | number - */ - height?: string | number; - - /** - * The z-index of the Drawer. - * @default 1000 - * @type number - */ - zIndex?: number; - - /** - * The placement of the Drawer. - * @default 'right' - * @type string - */ - placement?: 'top' | 'right' | 'bottom' | 'left'; - afterVisibleChange?: (visible?: boolean) => void; - keyboard?: boolean; - /** - * Specify a callback that will be called when a user clicks mask, close button or Cancel button. - */ - onClose?: (e?: Event) => void; -} -export interface DrawerActionType { - scrollBottom: () => void; - scrollTo: (to: number) => void; - getScrollWrap: () => Element | null; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/useDrawer.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/useDrawer.ts deleted file mode 100644 index bcb9e7664..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Drawer/src/useDrawer.ts +++ /dev/null @@ -1,161 +0,0 @@ -import type { - UseDrawerReturnType, - DrawerInstance, - ReturnMethods, - DrawerProps, - UseDrawerInnerReturnType, -} from './typing'; -import { - ref, - getCurrentInstance, - unref, - reactive, - watchEffect, - nextTick, - toRaw, - computed, -} from 'vue'; -import { isProdMode } from '/@/utils/env'; -import { isFunction } from '/@/utils/is'; -import { tryOnUnmounted } from '@vueuse/core'; -import { isEqual } from 'lodash-es'; -import { error } from '/@/utils/log'; - -const dataTransferRef = reactive({}); - -const visibleData = reactive<{ [key: number]: boolean }>({}); - -/** - * @description: Applicable to separate drawer and call outside - */ -export function useDrawer(): UseDrawerReturnType { - if (!getCurrentInstance()) { - throw new Error('useDrawer() can only be used inside setup() or functional components!'); - } - const drawer = ref(null); - const loaded = ref>(false); - const uid = ref(''); - - function register(drawerInstance: DrawerInstance, uuid: string) { - isProdMode() && - tryOnUnmounted(() => { - drawer.value = null; - loaded.value = null; - dataTransferRef[unref(uid)] = null; - }); - - if (unref(loaded) && isProdMode() && drawerInstance === unref(drawer)) { - return; - } - uid.value = uuid; - drawer.value = drawerInstance; - loaded.value = true; - - drawerInstance.emitVisible = (visible: boolean, uid: number) => { - visibleData[uid] = visible; - }; - } - - const getInstance = () => { - const instance = unref(drawer); - if (!instance) { - error('useDrawer instance is undefined!'); - } - return instance; - }; - - const methods: ReturnMethods = { - setDrawerProps: (props: Partial): void => { - getInstance()?.setDrawerProps(props); - }, - - getVisible: computed((): boolean => { - return visibleData[~~unref(uid)]; - }), - - openDrawer: (visible = true, data?: T, openOnSet = true): void => { - getInstance()?.setDrawerProps({ - visible: visible, - }); - if (!data) return; - - if (openOnSet) { - dataTransferRef[unref(uid)] = null; - dataTransferRef[unref(uid)] = toRaw(data); - return; - } - const equal = isEqual(toRaw(dataTransferRef[unref(uid)]), toRaw(data)); - if (!equal) { - dataTransferRef[unref(uid)] = toRaw(data); - } - }, - closeDrawer: () => { - getInstance()?.setDrawerProps({ visible: false }); - }, - }; - - return [register, methods]; -} - -export const useDrawerInner = (callbackFn?: Fn): UseDrawerInnerReturnType => { - const drawerInstanceRef = ref>(null); - const currentInstance = getCurrentInstance(); - const uidRef = ref(''); - - if (!getCurrentInstance()) { - throw new Error('useDrawerInner() can only be used inside setup() or functional components!'); - } - - const getInstance = () => { - const instance = unref(drawerInstanceRef); - if (!instance) { - error('useDrawerInner instance is undefined!'); - return; - } - return instance; - }; - - const register = (modalInstance: DrawerInstance, uuid: string) => { - isProdMode() && - tryOnUnmounted(() => { - drawerInstanceRef.value = null; - }); - - uidRef.value = uuid; - drawerInstanceRef.value = modalInstance; - currentInstance?.emit('register', modalInstance, uuid); - }; - - watchEffect(() => { - const data = dataTransferRef[unref(uidRef)]; - if (!data) return; - if (!callbackFn || !isFunction(callbackFn)) return; - nextTick(() => { - callbackFn(data); - }); - }); - - return [ - register, - { - changeLoading: (loading = true) => { - getInstance()?.setDrawerProps({ loading }); - }, - - changeOkLoading: (loading = true) => { - getInstance()?.setDrawerProps({ confirmLoading: loading }); - }, - getVisible: computed((): boolean => { - return visibleData[~~unref(uidRef)]; - }), - - closeDrawer: () => { - getInstance()?.setDrawerProps({ visible: false }); - }, - - setDrawerProps: (props: Partial) => { - getInstance()?.setDrawerProps(props); - }, - }, - ]; -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Dropdown/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Dropdown/index.ts deleted file mode 100644 index 80439e50e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Dropdown/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { withInstall } from '/@/utils'; -import dropdown from './src/Dropdown.vue'; - -export * from './src/typing'; -export const Dropdown = withInstall(dropdown); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Dropdown/src/Dropdown.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Dropdown/src/Dropdown.vue deleted file mode 100644 index c70a99ef3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Dropdown/src/Dropdown.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Dropdown/src/typing.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Dropdown/src/typing.ts deleted file mode 100644 index 29de8cba6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Dropdown/src/typing.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface DropMenu { - onClick?: Fn; - to?: string; - icon?: string; - event: string | number; - text: string; - disabled?: boolean; - divider?: boolean; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/index.ts deleted file mode 100644 index cece07c4d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { withInstall } from '/@/utils'; -import impExcel from './src/ImportExcel.vue'; -import expExcelModal from './src/ExportExcelModal.vue'; - -export const ImpExcel = withInstall(impExcel); -export const ExpExcelModal = withInstall(expExcelModal); -export * from './src/typing'; -export { jsonToSheetXlsx, aoaToSheetXlsx } from './src/Export2Excel'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/Export2Excel.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/Export2Excel.ts deleted file mode 100644 index 952ac45f1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/Export2Excel.ts +++ /dev/null @@ -1,59 +0,0 @@ -import * as xlsx from 'xlsx'; -import type { WorkBook } from 'xlsx'; -import type { JsonToSheet, AoAToSheet } from './typing'; - -const { utils, writeFile } = xlsx; - -const DEF_FILE_NAME = 'excel-list.xlsx'; - -export function jsonToSheetXlsx({ - data, - header, - filename = DEF_FILE_NAME, - json2sheetOpts = {}, - write2excelOpts = { bookType: 'xlsx' }, -}: JsonToSheet) { - const arrData = [...data]; - if (header) { - arrData.unshift(header); - json2sheetOpts.skipHeader = true; - } - - const worksheet = utils.json_to_sheet(arrData, json2sheetOpts); - - /* add worksheet to workbook */ - const workbook: WorkBook = { - SheetNames: [filename], - Sheets: { - [filename]: worksheet, - }, - }; - /* output format determined by filename */ - writeFile(workbook, filename, write2excelOpts); - /* at this point, out.xlsb will have been downloaded */ -} - -export function aoaToSheetXlsx({ - data, - header, - filename = DEF_FILE_NAME, - write2excelOpts = { bookType: 'xlsx' }, -}: AoAToSheet) { - const arrData = [...data]; - if (header) { - arrData.unshift(header); - } - - const worksheet = utils.aoa_to_sheet(arrData); - - /* add worksheet to workbook */ - const workbook: WorkBook = { - SheetNames: [filename], - Sheets: { - [filename]: worksheet, - }, - }; - /* output format determined by filename */ - writeFile(workbook, filename, write2excelOpts); - /* at this point, out.xlsb will have been downloaded */ -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/ExportExcelModal.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/ExportExcelModal.vue deleted file mode 100644 index efa32926d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/ExportExcelModal.vue +++ /dev/null @@ -1,91 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/ImportExcel.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/ImportExcel.vue deleted file mode 100644 index f6f742525..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/ImportExcel.vue +++ /dev/null @@ -1,157 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/typing.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/typing.ts deleted file mode 100644 index e55e549ea..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Excel/src/typing.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { JSON2SheetOpts, WritingOptions, BookType } from 'xlsx'; - -export interface ExcelData { - header: string[]; - results: T[]; - meta: { sheetName: string }; -} - -export interface JsonToSheet { - data: T[]; - header?: T; - filename?: string; - json2sheetOpts?: JSON2SheetOpts; - write2excelOpts?: WritingOptions; -} - -export interface AoAToSheet { - data: T[][]; - header?: T[]; - filename?: string; - write2excelOpts?: WritingOptions; -} - -export interface ExportModalResult { - filename: string; - bookType: BookType; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/index.ts deleted file mode 100644 index edbeb5591..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { withInstall } from '/@/utils'; -import flowChart from './src/FlowChart.vue'; - -export const FlowChart = withInstall(flowChart); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/FlowChart.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/FlowChart.vue deleted file mode 100644 index 419b0fea7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/FlowChart.vue +++ /dev/null @@ -1,158 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/FlowChartToolbar.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/FlowChartToolbar.vue deleted file mode 100644 index c88af5ca4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/FlowChartToolbar.vue +++ /dev/null @@ -1,162 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/adpterForTurbo.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/adpterForTurbo.ts deleted file mode 100644 index b68b276c3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/adpterForTurbo.ts +++ /dev/null @@ -1,75 +0,0 @@ -const TurboType = { - SEQUENCE_FLOW: 1, - START_EVENT: 2, - END_EVENT: 3, - USER_TASK: 4, - SERVICE_TASK: 5, - EXCLUSIVE_GATEWAY: 6, -}; - -function convertFlowElementToEdge(element) { - const { incoming, outgoing, properties, key } = element; - const { text, startPoint, endPoint, pointsList, logicFlowType } = properties; - const edge = { - id: key, - type: logicFlowType, - sourceNodeId: incoming[0], - targetNodeId: outgoing[0], - text, - startPoint, - endPoint, - pointsList, - properties: {}, - }; - const excludeProperties = ['startPoint', 'endPoint', 'pointsList', 'text', 'logicFlowType']; - Object.keys(element.properties).forEach((property) => { - if (excludeProperties.indexOf(property) === -1) { - edge.properties[property] = element.properties[property]; - } - }); - return edge; -} - -function convertFlowElementToNode(element) { - const { properties, key } = element; - const { x, y, text, logicFlowType } = properties; - const node = { - id: key, - type: logicFlowType, - x, - y, - text, - properties: {}, - }; - const excludeProperties = ['x', 'y', 'text', 'logicFlowType']; - Object.keys(element.properties).forEach((property) => { - if (excludeProperties.indexOf(property) === -1) { - node.properties[property] = element.properties[property]; - } - }); - return node; -} - -export function toLogicFlowData(data) { - const lfData: { - // TODO type - nodes: any[]; - edges: any[]; - } = { - nodes: [], - edges: [], - }; - const list = data.flowElementList; - list && - list.length > 0 && - list.forEach((element) => { - if (element.type === TurboType.SEQUENCE_FLOW) { - const edge = convertFlowElementToEdge(element); - lfData.edges.push(edge); - } else { - const node = convertFlowElementToNode(element); - lfData.nodes.push(node); - } - }); - return lfData; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/config.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/config.ts deleted file mode 100644 index 4f10d2ca8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/config.ts +++ /dev/null @@ -1,96 +0,0 @@ -export const nodeList = [ - { - text: '开始', - type: 'start', - class: 'node-start', - }, - { - text: '矩形', - type: 'rect', - class: 'node-rect', - }, - { - type: 'user', - text: '用户', - class: 'node-user', - }, - { - type: 'push', - text: '推送', - class: 'node-push', - }, - { - type: 'download', - text: '位置', - class: 'node-download', - }, - { - type: 'end', - text: '结束', - class: 'node-end', - }, -]; - -export const BpmnNode = [ - { - type: 'bpmn:startEvent', - text: '开始', - class: 'bpmn-start', - }, - { - type: 'bpmn:endEvent', - text: '结束', - class: 'bpmn-end', - }, - { - type: 'bpmn:exclusiveGateway', - text: '网关', - class: 'bpmn-exclusiveGateway', - }, - { - type: 'bpmn:userTask', - text: '用户', - class: 'bpmn-user', - }, -]; - -export function configDefaultDndPanel(lf) { - return [ - { - text: '选区', - icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAAOVJREFUOBGtVMENwzAIjKP++2026ETdpv10iy7WFbqFyyW6GBywLCv5gI+Dw2Bluj1znuSjhb99Gkn6QILDY2imo60p8nsnc9bEo3+QJ+AKHfMdZHnl78wyTnyHZD53Zzx73MRSgYvnqgCUHj6gwdck7Zsp1VOrz0Uz8NbKunzAW+Gu4fYW28bUYutYlzSa7B84Fh7d1kjLwhcSdYAYrdkMQVpsBr5XgDGuXwQfQr0y9zwLda+DUYXLaGKdd2ZTtvbolaO87pdo24hP7ov16N0zArH1ur3iwJpXxm+v7oAJNR4JEP8DoAuSFEkYH7cAAAAASUVORK5CYII=', - callback: () => { - lf.updateEditConfig({ - stopMoveGraph: true, - }); - }, - }, - { - type: 'circle', - text: '开始', - icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAAnBJREFUOBGdVL1rU1EcPfdGBddmaZLiEhdx1MHZQXApraCzQ7GKLgoRBxMfcRELuihWKcXFRcEWF8HBf0DdDCKYRZpnl7p0svLe9Zzbd29eQhTbC8nv+9zf130AT63jvooOGS8Vf9Nt5zxba7sXQwODfkWpkbjTQfCGUd9gIp3uuPP8bZ946g56dYQvnBg+b1HB8VIQmMFrazKcKSvFW2dQTxJnJdQ77urmXWOMBCmXM2Rke4S7UAW+/8ywwFoewmBps2tu7mbTdp8VMOkIRAkKfrVawalJTtIliclFbaOBqa0M2xImHeVIfd/nKAfVq/LGnPss5Kh00VEdSzfwnBXPUpmykNss4lUI9C1ga+8PNrBD5YeqRY2Zz8PhjooIbfJXjowvQJBqkmEkVnktWhwu2SM7SMx7Cj0N9IC0oQXRo8xwAGzQms+xrB/nNSUWVveI48ayrFGyC2+E2C+aWrZHXvOuz+CiV6iycWe1Rd1Q6+QUG07nb5SbPrL4426d+9E1axKjY3AoRrlEeSQo2Eu0T6BWAAr6COhTcWjRaYfKG5csnvytvUr/WY4rrPMB53Uo7jZRjXaG6/CFfNMaXEu75nG47X+oepU7PKJvvzGDY1YLSKHJrK7vFUwXKkaxwhCW3u+sDFMVrIju54RYYbFKpALZAo7sB6wcKyyrd+aBMryMT2gPyD6GsQoRFkGHr14TthZni9ck0z+Pnmee460mHXbRAypKNy3nuMdrWgVKj8YVV8E7PSzp1BZ9SJnJAsXdryw/h5ctboUVi4AFiCd+lQaYMw5z3LGTBKjLQOeUF35k89f58Vv/tGh+l+PE/wG0rgfIUbZK5AAAAABJRU5ErkJggg==', - }, - { - type: 'rect', - text: '用户任务', - icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAEFVwZaAAAABGdBTUEAALGPC/xhBQAAAqlJREFUOBF9VM9rE0EUfrMJNUKLihGbpLGtaCOIR8VjQMGDePCgCCIiCNqzCAp2MyYUCXhUtF5E0D+g1t48qAd7CCLqQUQKEWkStcEfVGlLdp/fm3aW2QQdyLzf33zz5m2IsAZ9XhDpyaaIZkTS4ASzK41TFao88GuJ3hsr2pAbipHxuSYyKRugagICGANkfFnNh3HeE2N0b3nN2cgnpcictw5veJIzxmDamSlxxQZicq/mflxhbaH8BLRbuRwNtZp0JAhoplVRUdzmCe/vO27wFuuA3S5qXruGdboy5/PRGFsbFGKo/haRtQHIrM83bVeTrOgNhZReWaYGnE4aUQgTJNvijJFF4jQ8BxJE5xfKatZWmZcTQ+BVgh7s8SgPlCkcec4mGTmieTP4xd7PcpIEg1TX6gdeLW8rTVMVLVvb7ctXoH0Cydl2QOPJBG21STE5OsnbweVYzAnD3A7PVILuY0yiiyDwSm2g441r6rMSgp6iK42yqroI2QoXeJVeA+YeZSa47gZdXaZWQKTrG93rukk/l2Al6Kzh5AZEl7dDQy+JjgFahQjRopSxPbrbvK7GRe9ePWBo1wcU7sYrFZtavXALwGw/7Dnc50urrHJuTPSoO2IMV3gUQGNg87IbSOIY9BpiT9HV7FCZ94nPXb3MSnwHn/FFFE1vG6DTby+r31KAkUktB3Qf6ikUPWxW1BkXSPQeMHHiW0+HAd2GelJsZz1OJegCxqzl+CLVHa/IibuHeJ1HAKzhuDR+ymNaRFM+4jU6UWKXorRmbyqkq/D76FffevwdCp+jN3UAN/C9JRVTDuOxC/oh+EdMnqIOrlYteKSfadVRGLJFJPSB/ti/6K8f0CNymg/iH2gO/f0DwE0yjAFO6l8JaR5j0VPwPwfaYHqOqrCI319WzwhwzNW/aQAAAABJRU5ErkJggg==', - cls: 'important-node', - }, - { - type: 'rect', - text: '系统任务', - icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAEFVwZaAAAABGdBTUEAALGPC/xhBQAAAqlJREFUOBF9VM9rE0EUfrMJNUKLihGbpLGtaCOIR8VjQMGDePCgCCIiCNqzCAp2MyYUCXhUtF5E0D+g1t48qAd7CCLqQUQKEWkStcEfVGlLdp/fm3aW2QQdyLzf33zz5m2IsAZ9XhDpyaaIZkTS4ASzK41TFao88GuJ3hsr2pAbipHxuSYyKRugagICGANkfFnNh3HeE2N0b3nN2cgnpcictw5veJIzxmDamSlxxQZicq/mflxhbaH8BLRbuRwNtZp0JAhoplVRUdzmCe/vO27wFuuA3S5qXruGdboy5/PRGFsbFGKo/haRtQHIrM83bVeTrOgNhZReWaYGnE4aUQgTJNvijJFF4jQ8BxJE5xfKatZWmZcTQ+BVgh7s8SgPlCkcec4mGTmieTP4xd7PcpIEg1TX6gdeLW8rTVMVLVvb7ctXoH0Cydl2QOPJBG21STE5OsnbweVYzAnD3A7PVILuY0yiiyDwSm2g441r6rMSgp6iK42yqroI2QoXeJVeA+YeZSa47gZdXaZWQKTrG93rukk/l2Al6Kzh5AZEl7dDQy+JjgFahQjRopSxPbrbvK7GRe9ePWBo1wcU7sYrFZtavXALwGw/7Dnc50urrHJuTPSoO2IMV3gUQGNg87IbSOIY9BpiT9HV7FCZ94nPXb3MSnwHn/FFFE1vG6DTby+r31KAkUktB3Qf6ikUPWxW1BkXSPQeMHHiW0+HAd2GelJsZz1OJegCxqzl+CLVHa/IibuHeJ1HAKzhuDR+ymNaRFM+4jU6UWKXorRmbyqkq/D76FffevwdCp+jN3UAN/C9JRVTDuOxC/oh+EdMnqIOrlYteKSfadVRGLJFJPSB/ti/6K8f0CNymg/iH2gO/f0DwE0yjAFO6l8JaR5j0VPwPwfaYHqOqrCI319WzwhwzNW/aQAAAABJRU5ErkJggg==', - cls: 'import_icon', - }, - { - type: 'diamond', - text: '条件判断', - icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAAHeEJUAAAAABGdBTUEAALGPC/xhBQAAAvVJREFUOBGNVEFrE0EU/mY3bQoiFlOkaUJrQUQoWMGePLX24EH0IIoHKQiCV0G8iE1covgLiqA/QTzVm1JPogc9tIJYFaQtlhQxqYjSpunu+L7JvmUTU3AgmTfvffPNN++9WSA1DO182f6xwILzD5btfAoQmwL5KJEwiQyVbSVZ0IgRyV6PTpIJ81E5ZvqfHQR0HUOBHW4L5Et2kQ6Zf7iAOhTFAA8s0pEP7AXO1uAA52SbqGk6h/6J45LaLhO64ByfcUzM39V7ZiAdS2yCePPEIQYvTUHqM/n7dgQNfBKWPjpF4ISk8q3J4nB11qw6X8l+FsF3EhlkEMfrjIer3wJTLwS2aCNcj4DbGxXTw00JmAuO+Ni6bBxVUCvS5d9aa04+so4pHW5jLTywuXAL7jJ+D06sl82Sgl2JuVBQn498zkc2bGKxULHjCnSMadBKYDYYHAtsby1EQ5lNGrQd4Y3v4Zo0XdGEmDno46yCM9Tk+RiJmUYHS/aXHPNTcjxcbTFna000PFJHIVZ5lFRqRpJWk9/+QtlOUYJj9HG5pVFEU7zqIYDVsw2s+AJaD8wTd2umgSCCyUxgGsS1Y6TBwXQQTFuZaHcd8gAGioE90hlsY+wMcs30RduYtxanjMGal8H5dMW67dmT1JFtYUEe8LiQLRsPZ6IIc7A4J5tqco3T0pnv/4u0kyzrYUq7gASuEyI8VXKvB9Odytv6jS/PNaZBln0nioJG/AVQRZvApOdhjj3Jt8QC8Im09SafwdBdvIpztpxWxpeKCC+EsFdS8DCyuCn2munFpL7ctHKp+Xc5cMybeIyMAN33SPL3ZR9QV1XVwLyzHm6Iv0/yeUuUb7PPlZC4D4HZkeu6dpF4v9j9MreGtMbxMMRLIcjJic9yHi7WQ3yVKzZVWUr5UrViJvn1FfUlwe/KYVfYyWRLSGNu16hR01U9IacajXPei0wx/5BqgInvJN+MMNtNme7ReU9SBbgntovn0kKHpFg7UogZvaZiOue/q1SBo9ktHzQAAAAASUVORK5CYII=', - }, - { - type: 'circle', - text: '结束', - icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAABGdBTUEAALGPC/xhBQAAA1BJREFUOBFtVE1IVUEYPXOf+tq40Y3vPcmFIdSjIorWoRG0ERWUgnb5FwVhYQSl72oUoZAboxKNFtWiwKRN0M+jpfSzqJAQclHo001tKkjl3emc8V69igP3znzfnO/M9zcDcKT67azmjYWTwl9Vn7Vumeqzj1DVb6cleQY4oAVnIOPb+mKAGxQmKI5CWNJ2aLPatxWa3aB9K7/fB+/Z0jUF6TmMlFLQqrkECWQzOZxYGjTlOl8eeKaIY5yHnFn486xBustDjWT6dG7pmjHOJd+33t0iitTPkK6tEvjxq4h2MozQ6WFSX/LkDUGfFwfhEZj1Auz/U4pyAi5Sznd7uKzznXeVHlI/Aywmk6j7fsUsEuCGADrWARXXwjxWQsUbIupDHJI7kF5dRktg0eN81IbiZXiTESic50iwS+t1oJgL83jAiBupLDCQqwziaWSoAFSeIR3P5Xv5az00wyIn35QRYTwdSYbz8pH8fxUUAtxnFvYmEmgI0wYXUXcCCSpeEVpXlsRhBnCEATxWylL9+EKCAYhe1NGstUa6356kS9NVvt3DU2fd+Wtbm/+lSbylJqsqkSm9CRhvoJVlvKPvF1RKY/FcPn5j4UfIMLn8D4UYb54BNsilTDXKnF4CfTobA0FpoW/LSp306wkXM+XaOJhZaFkcNM82ASNAWMrhrUbRfmyeI1FvRBTpN06WKxa9BK0o2E4Pd3zfBBEwPsv9sQBnmLVbLEIZ/Xe9LYwJu/Er17W6HYVBc7vmuk0xUQ+pqxdom5Fnp55SiytXLPYoMXNM4u4SNSCFWnrVIzKG3EGyMXo6n/BQOe+bX3FClY4PwydVhthOZ9NnS+ntiLh0fxtlUJHAuGaFoVmttpVMeum0p3WEXbcll94l1wM/gZ0Ccczop77VvN2I7TlsZCsuXf1WHvWEhjO8DPtyOVg2/mvK9QqboEth+7pD6NUQC1HN/TwvydGBARi9MZSzLE4b8Ru3XhX2PBxf8E1er2A6516o0w4sIA+lwURhAON82Kwe2iDAC1Watq4XHaGQ7skLcFOtI5lDxuM2gZe6WFIotPAhbaeYlU4to5cuarF1QrcZ/lwrLaCJl66JBocYZnrNlvm2+MBCTmUymPrYZVbjdlr/BxlMjmNmNI3SAAAAAElFTkSuQmCC', - }, - ]; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/enum.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/enum.ts deleted file mode 100644 index 8ea134ca5..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/enum.ts +++ /dev/null @@ -1,11 +0,0 @@ -export enum ToolbarTypeEnum { - ZOOM_IN = 'zoomIn', - ZOOM_OUT = 'zoomOut', - RESET_ZOOM = 'resetZoom', - - UNDO = 'undo', - REDO = 'redo', - - SNAPSHOT = 'snapshot', - VIEW_DATA = 'viewData', -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/types.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/types.ts deleted file mode 100644 index 94992ba1a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/types.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NodeConfig } from '@logicflow/core'; -import { ToolbarTypeEnum } from './enum'; - -export interface NodeItem extends NodeConfig { - icon: string; -} - -export interface ToolbarConfig { - type?: string | ToolbarTypeEnum; - tooltip?: string | boolean; - icon?: string; - disabled?: boolean; - separate?: boolean; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/useFlowContext.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/useFlowContext.ts deleted file mode 100644 index 7d15f3b34..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/FlowChart/src/useFlowContext.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type LogicFlow from '@logicflow/core'; - -import { provide, inject } from 'vue'; - -const key = Symbol('flow-chart'); - -type Instance = { - logicFlow: LogicFlow; -}; - -export function createFlowChartContext(instance: Instance) { - provide(key, instance); -} - -export function useFlowChartContext(): Instance { - return inject(key) as Instance; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/index.ts deleted file mode 100644 index 3144dae83..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import BasicForm from './src/BasicForm.vue'; - -export * from './src/types/form'; -export * from './src/types/formItem'; - -export { useComponentRegister } from './src/hooks/useComponentRegister'; -export { useForm } from './src/hooks/useForm'; - -export { default as ApiSelect } from './src/components/ApiSelect.vue'; -export { default as RadioButtonGroup } from './src/components/RadioButtonGroup.vue'; -export { default as ApiTreeSelect } from './src/components/ApiTreeSelect.vue'; -export { default as ApiTree } from './src/components/ApiTree.vue'; -export { default as ApiRadioGroup } from './src/components/ApiRadioGroup.vue'; -export { default as ApiCascader } from './src/components/ApiCascader.vue'; - -export { BasicForm }; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/BasicForm.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/BasicForm.vue deleted file mode 100644 index d6416ee68..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/BasicForm.vue +++ /dev/null @@ -1,353 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/componentMap.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/componentMap.ts deleted file mode 100644 index 52739a6fa..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/componentMap.ts +++ /dev/null @@ -1,81 +0,0 @@ -import type { Component } from 'vue'; -import type { ComponentType } from './types/index'; - -/** - * Component list, register here to setting it in the form - */ -import { - Input, - Select, - Radio, - Checkbox, - AutoComplete, - Cascader, - DatePicker, - InputNumber, - Switch, - TimePicker, - TreeSelect, - Slider, - Rate, - Divider, -} from 'ant-design-vue'; - -import ApiRadioGroup from './components/ApiRadioGroup.vue'; -import RadioButtonGroup from './components/RadioButtonGroup.vue'; -import ApiSelect from './components/ApiSelect.vue'; -import ApiTree from './components/ApiTree.vue'; -import ApiTreeSelect from './components/ApiTreeSelect.vue'; -import ApiCascader from './components/ApiCascader.vue'; -import { BasicUpload } from '/@/components/Upload'; -import { StrengthMeter } from '/@/components/StrengthMeter'; -import { IconPicker } from '/@/components/Icon'; -import { CountdownInput } from '/@/components/CountDown'; - -const componentMap = new Map(); - -componentMap.set('Input', Input); -componentMap.set('InputGroup', Input.Group); -componentMap.set('InputPassword', Input.Password); -componentMap.set('InputSearch', Input.Search); -componentMap.set('InputTextArea', Input.TextArea); -componentMap.set('InputNumber', InputNumber); -componentMap.set('AutoComplete', AutoComplete); - -componentMap.set('Select', Select); -componentMap.set('ApiSelect', ApiSelect); -componentMap.set('ApiTree', ApiTree); -componentMap.set('TreeSelect', TreeSelect); -componentMap.set('ApiTreeSelect', ApiTreeSelect); -componentMap.set('ApiRadioGroup', ApiRadioGroup); -componentMap.set('Switch', Switch); -componentMap.set('RadioButtonGroup', RadioButtonGroup); -componentMap.set('RadioGroup', Radio.Group); -componentMap.set('Checkbox', Checkbox); -componentMap.set('CheckboxGroup', Checkbox.Group); -componentMap.set('ApiCascader', ApiCascader); -componentMap.set('Cascader', Cascader); -componentMap.set('Slider', Slider); -componentMap.set('Rate', Rate); - -componentMap.set('DatePicker', DatePicker); -componentMap.set('MonthPicker', DatePicker.MonthPicker); -componentMap.set('RangePicker', DatePicker.RangePicker); -componentMap.set('WeekPicker', DatePicker.WeekPicker); -componentMap.set('TimePicker', TimePicker); -componentMap.set('StrengthMeter', StrengthMeter); -componentMap.set('IconPicker', IconPicker); -componentMap.set('InputCountDown', CountdownInput); - -componentMap.set('Upload', BasicUpload); -componentMap.set('Divider', Divider); - -export function add(compName: ComponentType, component: Component) { - componentMap.set(compName, component); -} - -export function del(compName: ComponentType) { - componentMap.delete(compName); -} - -export { componentMap }; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiCascader.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiCascader.vue deleted file mode 100644 index 0d8cf6354..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiCascader.vue +++ /dev/null @@ -1,198 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiRadioGroup.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiRadioGroup.vue deleted file mode 100644 index 712cfba81..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiRadioGroup.vue +++ /dev/null @@ -1,130 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiSelect.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiSelect.vue deleted file mode 100644 index 6155aab11..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiSelect.vue +++ /dev/null @@ -1,147 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiTree.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiTree.vue deleted file mode 100644 index 0ec6917dd..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiTree.vue +++ /dev/null @@ -1,90 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiTreeSelect.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiTreeSelect.vue deleted file mode 100644 index 3f073d34b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/ApiTreeSelect.vue +++ /dev/null @@ -1,86 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/FormAction.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/FormAction.vue deleted file mode 100644 index 8dec49fe5..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/FormAction.vue +++ /dev/null @@ -1,135 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/FormItem.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/FormItem.vue deleted file mode 100644 index 157e0db1d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/FormItem.vue +++ /dev/null @@ -1,392 +0,0 @@ - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/RadioButtonGroup.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/RadioButtonGroup.vue deleted file mode 100644 index c2c7b220b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/components/RadioButtonGroup.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/helper.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/helper.ts deleted file mode 100644 index d0727f38a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/helper.ts +++ /dev/null @@ -1,74 +0,0 @@ -import type { ValidationRule } from 'ant-design-vue/lib/form/Form'; -import type { ComponentType } from './types/index'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { dateUtil } from '/@/utils/dateUtil'; -import { isNumber, isObject } from '/@/utils/is'; - -const { t } = useI18n(); - -/** - * @description: 生成placeholder - */ -export function createPlaceholderMessage(component: ComponentType) { - if (component.includes('Input') || component.includes('Complete')) { - return t('common.inputText'); - } - if (component.includes('Picker')) { - return t('common.chooseText'); - } - if ( - component.includes('Select') || - component.includes('Cascader') || - component.includes('Checkbox') || - component.includes('Radio') || - component.includes('Switch') - ) { - // return `请选择${label}`; - return t('common.chooseText'); - } - return ''; -} - -const DATE_TYPE = ['DatePicker', 'MonthPicker', 'WeekPicker', 'TimePicker']; - -function genType() { - return [...DATE_TYPE, 'RangePicker']; -} - -export function setComponentRuleType( - rule: ValidationRule, - component: ComponentType, - valueFormat: string, -) { - if (['DatePicker', 'MonthPicker', 'WeekPicker', 'TimePicker'].includes(component)) { - rule.type = valueFormat ? 'string' : 'object'; - } else if (['RangePicker', 'Upload', 'CheckboxGroup', 'TimePicker'].includes(component)) { - rule.type = 'array'; - } else if (['InputNumber'].includes(component)) { - rule.type = 'number'; - } -} - -export function processDateValue(attr: Recordable, component: string) { - const { valueFormat, value } = attr; - if (valueFormat) { - attr.value = isObject(value) ? dateUtil(value).format(valueFormat) : value; - } else if (DATE_TYPE.includes(component) && value) { - attr.value = dateUtil(attr.value); - } -} - -export function handleInputNumberValue(component?: ComponentType, val?: any) { - if (!component) return val; - if (['Input', 'InputPassword', 'InputSearch', 'InputTextArea'].includes(component)) { - return val && isNumber(val) ? `${val}` : val; - } - return val; -} - -/** - * 时间字段 - */ -export const dateItemType = genType(); - -export const defaultValueComponents = ['Input', 'InputPassword', 'InputSearch', 'InputTextArea']; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useAdvanced.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useAdvanced.ts deleted file mode 100644 index 5c9603fb2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useAdvanced.ts +++ /dev/null @@ -1,165 +0,0 @@ -import type { ColEx } from '../types'; -import type { AdvanceState } from '../types/hooks'; -import type { ComputedRef, Ref } from 'vue'; -import type { FormProps, FormSchema } from '../types/form'; -import { computed, unref, watch } from 'vue'; -import { isBoolean, isFunction, isNumber, isObject } from '/@/utils/is'; -import { useBreakpoint } from '/@/hooks/event/useBreakpoint'; -import { useDebounceFn } from '@vueuse/core'; - -const BASIC_COL_LEN = 24; - -interface UseAdvancedContext { - advanceState: AdvanceState; - emit: EmitType; - getProps: ComputedRef; - getSchema: ComputedRef; - formModel: Recordable; - defaultValueRef: Ref; -} - -export default function ({ - advanceState, - emit, - getProps, - getSchema, - formModel, - defaultValueRef, -}: UseAdvancedContext) { - const { realWidthRef, screenEnum, screenRef } = useBreakpoint(); - - const getEmptySpan = computed((): number => { - if (!advanceState.isAdvanced) { - return 0; - } - // For some special cases, you need to manually specify additional blank lines - const emptySpan = unref(getProps).emptySpan || 0; - - if (isNumber(emptySpan)) { - return emptySpan; - } - if (isObject(emptySpan)) { - const { span = 0 } = emptySpan; - const screen = unref(screenRef) as string; - - const screenSpan = (emptySpan as any)[screen.toLowerCase()]; - return screenSpan || span || 0; - } - return 0; - }); - - const debounceUpdateAdvanced = useDebounceFn(updateAdvanced, 30); - - watch( - [() => unref(getSchema), () => advanceState.isAdvanced, () => unref(realWidthRef)], - () => { - const { showAdvancedButton } = unref(getProps); - if (showAdvancedButton) { - debounceUpdateAdvanced(); - } - }, - { immediate: true }, - ); - - function getAdvanced(itemCol: Partial, itemColSum = 0, isLastAction = false) { - const width = unref(realWidthRef); - - const mdWidth = - parseInt(itemCol.md as string) || - parseInt(itemCol.xs as string) || - parseInt(itemCol.sm as string) || - (itemCol.span as number) || - BASIC_COL_LEN; - - const lgWidth = parseInt(itemCol.lg as string) || mdWidth; - const xlWidth = parseInt(itemCol.xl as string) || lgWidth; - const xxlWidth = parseInt(itemCol.xxl as string) || xlWidth; - if (width <= screenEnum.LG) { - itemColSum += mdWidth; - } else if (width < screenEnum.XL) { - itemColSum += lgWidth; - } else if (width < screenEnum.XXL) { - itemColSum += xlWidth; - } else { - itemColSum += xxlWidth; - } - - if (isLastAction) { - advanceState.hideAdvanceBtn = false; - if (itemColSum <= BASIC_COL_LEN * 2) { - // When less than or equal to 2 lines, the collapse and expand buttons are not displayed - advanceState.hideAdvanceBtn = true; - advanceState.isAdvanced = true; - } else if ( - itemColSum > BASIC_COL_LEN * 2 && - itemColSum <= BASIC_COL_LEN * (unref(getProps).autoAdvancedLine || 3) - ) { - advanceState.hideAdvanceBtn = false; - - // More than 3 lines collapsed by default - } else if (!advanceState.isLoad) { - advanceState.isLoad = true; - advanceState.isAdvanced = !advanceState.isAdvanced; - } - return { isAdvanced: advanceState.isAdvanced, itemColSum }; - } - if (itemColSum > BASIC_COL_LEN * (unref(getProps).alwaysShowLines || 1)) { - return { isAdvanced: advanceState.isAdvanced, itemColSum }; - } else { - // The first line is always displayed - return { isAdvanced: true, itemColSum }; - } - } - - function updateAdvanced() { - let itemColSum = 0; - let realItemColSum = 0; - const { baseColProps = {} } = unref(getProps); - - for (const schema of unref(getSchema)) { - const { show, colProps } = schema; - let isShow = true; - - if (isBoolean(show)) { - isShow = show; - } - - if (isFunction(show)) { - isShow = show({ - schema: schema, - model: formModel, - field: schema.field, - values: { - ...unref(defaultValueRef), - ...formModel, - }, - }); - } - - if (isShow && (colProps || baseColProps)) { - const { itemColSum: sum, isAdvanced } = getAdvanced( - { ...baseColProps, ...colProps }, - itemColSum, - ); - - itemColSum = sum || 0; - if (isAdvanced) { - realItemColSum = itemColSum; - } - schema.isAdvanced = isAdvanced; - } - } - - advanceState.actionSpan = (realItemColSum % BASIC_COL_LEN) + unref(getEmptySpan); - - getAdvanced(unref(getProps).actionColOptions || { span: BASIC_COL_LEN }, itemColSum, true); - - emit('advanced-change'); - } - - function handleToggleAdvanced() { - advanceState.isAdvanced = !advanceState.isAdvanced; - } - - return { handleToggleAdvanced }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useAutoFocus.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useAutoFocus.ts deleted file mode 100644 index e24dd6bbd..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useAutoFocus.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { ComputedRef, Ref } from 'vue'; -import type { FormSchema, FormActionType, FormProps } from '../types/form'; - -import { unref, nextTick, watchEffect } from 'vue'; - -interface UseAutoFocusContext { - getSchema: ComputedRef; - getProps: ComputedRef; - isInitedDefault: Ref; - formElRef: Ref; -} -export async function useAutoFocus({ - getSchema, - getProps, - formElRef, - isInitedDefault, -}: UseAutoFocusContext) { - watchEffect(async () => { - if (unref(isInitedDefault) || !unref(getProps).autoFocusFirstItem) { - return; - } - await nextTick(); - const schemas = unref(getSchema); - const formEl = unref(formElRef); - const el = (formEl as any)?.$el as HTMLElement; - if (!formEl || !el || !schemas || schemas.length === 0) { - return; - } - - const firstItem = schemas[0]; - // Only open when the first form item is input type - if (!firstItem.component.includes('Input')) { - return; - } - - const inputEl = el.querySelector('.ant-row:first-child input') as Nullable; - if (!inputEl) return; - inputEl?.focus(); - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useComponentRegister.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useComponentRegister.ts deleted file mode 100644 index 218aaa9b2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useComponentRegister.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { ComponentType } from '../types/index'; -import { tryOnUnmounted } from '@vueuse/core'; -import { add, del } from '../componentMap'; -import type { Component } from 'vue'; - -export function useComponentRegister(compName: ComponentType, comp: Component) { - add(compName, comp); - tryOnUnmounted(() => { - del(compName); - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useForm.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useForm.ts deleted file mode 100644 index d026d690d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useForm.ts +++ /dev/null @@ -1,122 +0,0 @@ -import type { FormProps, FormActionType, UseFormReturnType, FormSchema } from '../types/form'; -import type { NamePath } from 'ant-design-vue/lib/form/interface'; -import type { DynamicProps } from '/#/utils'; -import { ref, onUnmounted, unref, nextTick, watch } from 'vue'; -import { isProdMode } from '/@/utils/env'; -import { error } from '/@/utils/log'; -import { getDynamicProps } from '/@/utils'; - -export declare type ValidateFields = (nameList?: NamePath[]) => Promise; - -type Props = Partial>; - -export function useForm(props?: Props): UseFormReturnType { - const formRef = ref>(null); - const loadedRef = ref>(false); - - async function getForm() { - const form = unref(formRef); - if (!form) { - error( - 'The form instance has not been obtained, please make sure that the form has been rendered when performing the form operation!', - ); - } - await nextTick(); - return form as FormActionType; - } - - function register(instance: FormActionType) { - isProdMode() && - onUnmounted(() => { - formRef.value = null; - loadedRef.value = null; - }); - if (unref(loadedRef) && isProdMode() && instance === unref(formRef)) return; - - formRef.value = instance; - loadedRef.value = true; - - watch( - () => props, - () => { - props && instance.setProps(getDynamicProps(props)); - }, - { - immediate: true, - deep: true, - }, - ); - } - - const methods: FormActionType = { - scrollToField: async (name: NamePath, options?: ScrollOptions | undefined) => { - const form = await getForm(); - form.scrollToField(name, options); - }, - setProps: async (formProps: Partial) => { - const form = await getForm(); - form.setProps(formProps); - }, - - updateSchema: async (data: Partial | Partial[]) => { - const form = await getForm(); - form.updateSchema(data); - }, - - resetSchema: async (data: Partial | Partial[]) => { - const form = await getForm(); - form.resetSchema(data); - }, - - clearValidate: async (name?: string | string[]) => { - const form = await getForm(); - form.clearValidate(name); - }, - - resetFields: async () => { - getForm().then(async (form) => { - await form.resetFields(); - }); - }, - - removeSchemaByFiled: async (field: string | string[]) => { - unref(formRef)?.removeSchemaByFiled(field); - }, - - // TODO promisify - getFieldsValue: () => { - return unref(formRef)?.getFieldsValue() as T; - }, - - setFieldsValue: async (values: T) => { - const form = await getForm(); - form.setFieldsValue(values); - }, - - appendSchemaByField: async ( - schema: FormSchema, - prefixField: string | undefined, - first: boolean, - ) => { - const form = await getForm(); - form.appendSchemaByField(schema, prefixField, first); - }, - - submit: async (): Promise => { - const form = await getForm(); - return form.submit(); - }, - - validate: async (nameList?: NamePath[]): Promise => { - const form = await getForm(); - return form.validate(nameList); - }, - - validateFields: async (nameList?: NamePath[]): Promise => { - const form = await getForm(); - return form.validateFields(nameList); - }, - }; - - return [register, methods]; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useFormContext.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useFormContext.ts deleted file mode 100644 index 01dfadd76..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useFormContext.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { InjectionKey } from 'vue'; -import { createContext, useContext } from '/@/hooks/core/useContext'; - -export interface FormContextProps { - resetAction: () => Promise; - submitAction: () => Promise; -} - -const key: InjectionKey = Symbol(); - -export function createFormContext(context: FormContextProps) { - return createContext(context, key); -} - -export function useFormContext() { - return useContext(key); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useFormEvents.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useFormEvents.ts deleted file mode 100644 index 4fa96bc47..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useFormEvents.ts +++ /dev/null @@ -1,314 +0,0 @@ -import type { ComputedRef, Ref } from 'vue'; -import type { FormProps, FormSchema, FormActionType } from '../types/form'; -import type { NamePath } from 'ant-design-vue/lib/form/interface'; -import { unref, toRaw, nextTick } from 'vue'; -import { isArray, isFunction, isObject, isString, isDef, isNullOrUnDef } from '/@/utils/is'; -import { deepMerge } from '/@/utils'; -import { dateItemType, handleInputNumberValue, defaultValueComponents } from '../helper'; -import { dateUtil } from '/@/utils/dateUtil'; -import { cloneDeep, uniqBy } from 'lodash-es'; -import { error } from '/@/utils/log'; - -interface UseFormActionContext { - emit: EmitType; - getProps: ComputedRef; - getSchema: ComputedRef; - formModel: Recordable; - defaultValueRef: Ref; - formElRef: Ref; - schemaRef: Ref; - handleFormValues: Fn; -} -export function useFormEvents({ - emit, - getProps, - formModel, - getSchema, - defaultValueRef, - formElRef, - schemaRef, - handleFormValues, -}: UseFormActionContext) { - async function resetFields(): Promise { - const { resetFunc, submitOnReset } = unref(getProps); - resetFunc && isFunction(resetFunc) && (await resetFunc()); - - const formEl = unref(formElRef); - if (!formEl) return; - - Object.keys(formModel).forEach((key) => { - const schema = unref(getSchema).find((item) => item.field === key); - const isInput = schema?.component && defaultValueComponents.includes(schema.component); - const defaultValue = cloneDeep(defaultValueRef.value[key]); - formModel[key] = isInput ? defaultValue || '' : defaultValue; - }); - nextTick(() => clearValidate()); - - emit('reset', toRaw(formModel)); - submitOnReset && handleSubmit(); - } - - /** - * @description: Set form value - */ - async function setFieldsValue(values: Recordable): Promise { - const fields = unref(getSchema) - .map((item) => item.field) - .filter(Boolean); - - // key 支持 a.b.c 的嵌套写法 - const delimiter = '.'; - const nestKeyArray = fields.filter((item) => item.indexOf(delimiter) >= 0); - - const validKeys: string[] = []; - Object.keys(values).forEach((key) => { - const schema = unref(getSchema).find((item) => item.field === key); - let value = values[key]; - - const hasKey = Reflect.has(values, key); - - value = handleInputNumberValue(schema?.component, value); - // 0| '' is allow - if (hasKey && fields.includes(key)) { - // time type - if (itemIsDateType(key)) { - if (Array.isArray(value)) { - const arr: any[] = []; - for (const ele of value) { - arr.push(ele ? dateUtil(ele) : null); - } - formModel[key] = arr; - } else { - const { componentProps } = schema || {}; - let _props = componentProps as any; - if (typeof componentProps === 'function') { - _props = _props({ formModel }); - } - formModel[key] = value ? (_props?.valueFormat ? value : dateUtil(value)) : null; - } - } else { - formModel[key] = value; - } - validKeys.push(key); - } else { - nestKeyArray.forEach((nestKey: string) => { - try { - const value = eval('values' + delimiter + nestKey); - if (isDef(value)) { - formModel[nestKey] = value; - validKeys.push(nestKey); - } - } catch (e) { - // key not exist - if (isDef(defaultValueRef.value[nestKey])) { - formModel[nestKey] = cloneDeep(defaultValueRef.value[nestKey]); - } - } - }); - } - }); - validateFields(validKeys).catch((_) => {}); - } - /** - * @description: Delete based on field name - */ - async function removeSchemaByFiled(fields: string | string[]): Promise { - const schemaList: FormSchema[] = cloneDeep(unref(getSchema)); - if (!fields) { - return; - } - - let fieldList: string[] = isString(fields) ? [fields] : fields; - if (isString(fields)) { - fieldList = [fields]; - } - for (const field of fieldList) { - _removeSchemaByFiled(field, schemaList); - } - schemaRef.value = schemaList; - } - - /** - * @description: Delete based on field name - */ - function _removeSchemaByFiled(field: string, schemaList: FormSchema[]): void { - if (isString(field)) { - const index = schemaList.findIndex((schema) => schema.field === field); - if (index !== -1) { - delete formModel[field]; - schemaList.splice(index, 1); - } - } - } - - /** - * @description: Insert after a certain field, if not insert the last - */ - async function appendSchemaByField(schema: FormSchema, prefixField?: string, first = false) { - const schemaList: FormSchema[] = cloneDeep(unref(getSchema)); - - const index = schemaList.findIndex((schema) => schema.field === prefixField); - - if (!prefixField || index === -1 || first) { - first ? schemaList.unshift(schema) : schemaList.push(schema); - schemaRef.value = schemaList; - _setDefaultValue(schema); - return; - } - if (index !== -1) { - schemaList.splice(index + 1, 0, schema); - } - _setDefaultValue(schema); - - schemaRef.value = schemaList; - } - - async function resetSchema(data: Partial | Partial[]) { - let updateData: Partial[] = []; - if (isObject(data)) { - updateData.push(data as FormSchema); - } - if (isArray(data)) { - updateData = [...data]; - } - - const hasField = updateData.every( - (item) => item.component === 'Divider' || (Reflect.has(item, 'field') && item.field), - ); - - if (!hasField) { - error( - 'All children of the form Schema array that need to be updated must contain the `field` field', - ); - return; - } - schemaRef.value = updateData as FormSchema[]; - } - - async function updateSchema(data: Partial | Partial[]) { - let updateData: Partial[] = []; - if (isObject(data)) { - updateData.push(data as FormSchema); - } - if (isArray(data)) { - updateData = [...data]; - } - - const hasField = updateData.every( - (item) => item.component === 'Divider' || (Reflect.has(item, 'field') && item.field), - ); - - if (!hasField) { - error( - 'All children of the form Schema array that need to be updated must contain the `field` field', - ); - return; - } - const schema: FormSchema[] = []; - updateData.forEach((item) => { - unref(getSchema).forEach((val) => { - if (val.field === item.field) { - const newSchema = deepMerge(val, item); - schema.push(newSchema as FormSchema); - } else { - schema.push(val); - } - }); - }); - _setDefaultValue(schema); - - schemaRef.value = uniqBy(schema, 'field'); - } - - function _setDefaultValue(data: FormSchema | FormSchema[]) { - let schemas: FormSchema[] = []; - if (isObject(data)) { - schemas.push(data as FormSchema); - } - if (isArray(data)) { - schemas = [...data]; - } - - const obj: Recordable = {}; - const currentFieldsValue = getFieldsValue(); - schemas.forEach((item) => { - if ( - item.component != 'Divider' && - Reflect.has(item, 'field') && - item.field && - !isNullOrUnDef(item.defaultValue) && - !(item.field in currentFieldsValue) - ) { - obj[item.field] = item.defaultValue; - } - }); - setFieldsValue(obj); - } - - function getFieldsValue(): Recordable { - const formEl = unref(formElRef); - if (!formEl) return {}; - return handleFormValues(toRaw(unref(formModel))); - } - - /** - * @description: Is it time - */ - function itemIsDateType(key: string) { - return unref(getSchema).some((item) => { - return item.field === key ? dateItemType.includes(item.component) : false; - }); - } - - async function validateFields(nameList?: NamePath[] | undefined) { - return unref(formElRef)?.validateFields(nameList); - } - - async function validate(nameList?: NamePath[] | undefined) { - return await unref(formElRef)?.validate(nameList); - } - - async function clearValidate(name?: string | string[]) { - await unref(formElRef)?.clearValidate(name); - } - - async function scrollToField(name: NamePath, options?: ScrollOptions | undefined) { - await unref(formElRef)?.scrollToField(name, options); - } - - /** - * @description: Form submission - */ - async function handleSubmit(e?: Event): Promise { - e && e.preventDefault(); - const { submitFunc } = unref(getProps); - if (submitFunc && isFunction(submitFunc)) { - await submitFunc(); - return; - } - const formEl = unref(formElRef); - if (!formEl) return; - try { - const values = await validate(); - const res = handleFormValues(values); - emit('submit', res); - } catch (error: any) { - throw new Error(error); - } - } - - return { - handleSubmit, - clearValidate, - validate, - validateFields, - getFieldsValue, - updateSchema, - resetSchema, - appendSchemaByField, - removeSchemaByFiled, - resetFields, - setFieldsValue, - scrollToField, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useFormValues.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useFormValues.ts deleted file mode 100644 index 34dd9ddf7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useFormValues.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { isArray, isFunction, isObject, isString, isNullOrUnDef } from '/@/utils/is'; -import { dateUtil } from '/@/utils/dateUtil'; -import { unref } from 'vue'; -import type { Ref, ComputedRef } from 'vue'; -import type { FormProps, FormSchema } from '../types/form'; -import { cloneDeep, set } from 'lodash-es'; - -interface UseFormValuesContext { - defaultValueRef: Ref; - getSchema: ComputedRef; - getProps: ComputedRef; - formModel: Recordable; -} - -/** - * @desription deconstruct array-link key. This method will mutate the target. - */ -function tryDeconstructArray(key: string, value: any, target: Recordable) { - const pattern = /^\[(.+)\]$/; - if (pattern.test(key)) { - const match = key.match(pattern); - if (match && match[1]) { - const keys = match[1].split(','); - value = Array.isArray(value) ? value : [value]; - keys.forEach((k, index) => { - set(target, k.trim(), value[index]); - }); - return true; - } - } -} - -/** - * @desription deconstruct object-link key. This method will mutate the target. - */ -function tryDeconstructObject(key: string, value: any, target: Recordable) { - const pattern = /^\{(.+)\}$/; - if (pattern.test(key)) { - const match = key.match(pattern); - if (match && match[1]) { - const keys = match[1].split(','); - value = isObject(value) ? value : {}; - keys.forEach((k) => { - set(target, k.trim(), value[k.trim()]); - }); - return true; - } - } -} - -export function useFormValues({ - defaultValueRef, - getSchema, - formModel, - getProps, -}: UseFormValuesContext) { - // Processing form values - function handleFormValues(values: Recordable) { - if (!isObject(values)) { - return {}; - } - const res: Recordable = {}; - for (const item of Object.entries(values)) { - let [, value] = item; - const [key] = item; - if (!key || (isArray(value) && value.length === 0) || isFunction(value)) { - continue; - } - const transformDateFunc = unref(getProps).transformDateFunc; - if (isObject(value)) { - value = transformDateFunc?.(value); - } - - if (isArray(value) && value[0]?.format && value[1]?.format) { - value = value.map((item) => transformDateFunc?.(item)); - } - // Remove spaces - if (isString(value)) { - value = value.trim(); - } - if (!tryDeconstructArray(key, value, res) && !tryDeconstructObject(key, value, res)) { - // 没有解构成功的,按原样赋值 - set(res, key, value); - } - } - return handleRangeTimeValue(res); - } - - /** - * @description: Processing time interval parameters - */ - function handleRangeTimeValue(values: Recordable) { - const fieldMapToTime = unref(getProps).fieldMapToTime; - - if (!fieldMapToTime || !Array.isArray(fieldMapToTime)) { - return values; - } - - for (const [field, [startTimeKey, endTimeKey], format = 'YYYY-MM-DD'] of fieldMapToTime) { - if (!field || !startTimeKey || !endTimeKey || !values[field]) { - continue; - } - - const [startTime, endTime]: string[] = values[field]; - - values[startTimeKey] = dateUtil(startTime).format(format); - values[endTimeKey] = dateUtil(endTime).format(format); - Reflect.deleteProperty(values, field); - } - - return values; - } - - function initDefault() { - const schemas = unref(getSchema); - const obj: Recordable = {}; - schemas.forEach((item) => { - const { defaultValue } = item; - if (!isNullOrUnDef(defaultValue)) { - obj[item.field] = defaultValue; - - if (formModel[item.field] === undefined) { - formModel[item.field] = defaultValue; - } - } - }); - defaultValueRef.value = cloneDeep(obj); - } - - return { handleFormValues, initDefault }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useLabelWidth.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useLabelWidth.ts deleted file mode 100644 index 3befa1c2a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/hooks/useLabelWidth.ts +++ /dev/null @@ -1,42 +0,0 @@ -import type { Ref } from 'vue'; -import { computed, unref } from 'vue'; -import type { FormProps, FormSchema } from '../types/form'; -import { isNumber } from '/@/utils/is'; - -export function useItemLabelWidth(schemaItemRef: Ref, propsRef: Ref) { - return computed(() => { - const schemaItem = unref(schemaItemRef); - const { labelCol = {}, wrapperCol = {} } = schemaItem.itemProps || {}; - const { labelWidth, disabledLabelWidth } = schemaItem; - - const { - labelWidth: globalLabelWidth, - labelCol: globalLabelCol, - wrapperCol: globWrapperCol, - layout, - } = unref(propsRef); - - // If labelWidth is set globally, all items setting - if ((!globalLabelWidth && !labelWidth && !globalLabelCol) || disabledLabelWidth) { - labelCol.style = { - textAlign: 'left', - }; - return { labelCol, wrapperCol }; - } - let width = labelWidth || globalLabelWidth; - const col = { ...globalLabelCol, ...labelCol }; - const wrapCol = { ...globWrapperCol, ...wrapperCol }; - - if (width) { - width = isNumber(width) ? `${width}px` : width; - } - - return { - labelCol: { style: { width }, ...col }, - wrapperCol: { - style: { width: layout === 'vertical' ? '100%' : `calc(100% - ${width})` }, - ...wrapCol, - }, - }; - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/props.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/props.ts deleted file mode 100644 index bfdaee7ef..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/props.ts +++ /dev/null @@ -1,103 +0,0 @@ -import type { FieldMapToTime, FormSchema } from './types/form'; -import type { CSSProperties, PropType } from 'vue'; -import type { ColEx } from './types'; -import type { TableActionType } from '/@/components/Table'; -import type { ButtonProps } from 'ant-design-vue/es/button/buttonTypes'; -import type { RowProps } from 'ant-design-vue/lib/grid/Row'; -import { propTypes } from '/@/utils/propTypes'; - -export const basicProps = { - model: { - type: Object as PropType, - default: {}, - }, - // 标签宽度 固定宽度 - labelWidth: { - type: [Number, String] as PropType, - default: 0, - }, - fieldMapToTime: { - type: Array as PropType, - default: () => [], - }, - compact: propTypes.bool, - // 表单配置规则 - schemas: { - type: [Array] as PropType, - default: () => [], - }, - mergeDynamicData: { - type: Object as PropType, - default: null, - }, - baseRowStyle: { - type: Object as PropType, - }, - baseColProps: { - type: Object as PropType>, - }, - autoSetPlaceHolder: propTypes.bool.def(true), - // 在INPUT组件上单击回车时,是否自动提交 - autoSubmitOnEnter: propTypes.bool.def(false), - submitOnReset: propTypes.bool, - submitOnChange: propTypes.bool, - size: propTypes.oneOf(['default', 'small', 'large']).def('default'), - // 禁用表单 - disabled: propTypes.bool, - emptySpan: { - type: [Number, Object] as PropType, - default: 0, - }, - // 是否显示收起展开按钮 - showAdvancedButton: propTypes.bool, - // 转化时间 - transformDateFunc: { - type: Function as PropType, - default: (date: any) => { - return date?.format?.('YYYY-MM-DD HH:mm:ss') ?? date; - }, - }, - rulesMessageJoinLabel: propTypes.bool.def(true), - // 超过3行自动折叠 - autoAdvancedLine: propTypes.number.def(3), - // 不受折叠影响的行数 - alwaysShowLines: propTypes.number.def(1), - - // 是否显示操作按钮 - showActionButtonGroup: propTypes.bool.def(true), - // 操作列Col配置 - actionColOptions: Object as PropType>, - // 显示重置按钮 - showResetButton: propTypes.bool.def(true), - // 是否聚焦第一个输入框,只在第一个表单项为input的时候作用 - autoFocusFirstItem: propTypes.bool, - // 重置按钮配置 - resetButtonOptions: Object as PropType>, - - // 显示确认按钮 - showSubmitButton: propTypes.bool.def(true), - // 确认按钮配置 - submitButtonOptions: Object as PropType>, - - // 自定义重置函数 - resetFunc: Function as PropType<() => Promise>, - submitFunc: Function as PropType<() => Promise>, - - // 以下为默认props - hideRequiredMark: propTypes.bool, - - labelCol: Object as PropType>, - - layout: propTypes.oneOf(['horizontal', 'vertical', 'inline']).def('horizontal'), - tableAction: { - type: Object as PropType, - }, - - wrapperCol: Object as PropType>, - - colon: propTypes.bool, - - labelAlign: propTypes.string, - - rowProps: Object as PropType, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/form.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/form.ts deleted file mode 100644 index 2c772286a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/form.ts +++ /dev/null @@ -1,223 +0,0 @@ -import type { NamePath, RuleObject } from 'ant-design-vue/lib/form/interface'; -import type { VNode } from 'vue'; -import type { ButtonProps as AntdButtonProps } from '/@/components/Button'; -import type { FormItem } from './formItem'; -import type { ColEx, ComponentType } from './index'; -import type { TableActionType } from '/@/components/Table/src/types/table'; -import type { CSSProperties } from 'vue'; -import type { RowProps } from 'ant-design-vue/lib/grid/Row'; - -export type FieldMapToTime = [string, [string, string], string?][]; - -export type Rule = RuleObject & { - trigger?: 'blur' | 'change' | ['change', 'blur']; -}; - -export interface RenderCallbackParams { - schema: FormSchema; - values: Recordable; - model: Recordable; - field: string; -} - -export interface ButtonProps extends AntdButtonProps { - text?: string; -} - -export interface FormActionType { - submit: () => Promise; - setFieldsValue: (values: T) => Promise; - resetFields: () => Promise; - getFieldsValue: () => Recordable; - clearValidate: (name?: string | string[]) => Promise; - updateSchema: (data: Partial | Partial[]) => Promise; - resetSchema: (data: Partial | Partial[]) => Promise; - setProps: (formProps: Partial) => Promise; - removeSchemaByFiled: (field: string | string[]) => Promise; - appendSchemaByField: ( - schema: FormSchema, - prefixField: string | undefined, - first?: boolean | undefined, - ) => Promise; - validateFields: (nameList?: NamePath[]) => Promise; - validate: (nameList?: NamePath[]) => Promise; - scrollToField: (name: NamePath, options?: ScrollOptions) => Promise; -} - -export type RegisterFn = (formInstance: FormActionType) => void; - -export type UseFormReturnType = [RegisterFn, FormActionType]; - -export interface FormProps { - name?: string; - layout?: 'vertical' | 'inline' | 'horizontal'; - // Form value - model?: Recordable; - // The width of all items in the entire form - labelWidth?: number | string; - // alignment - labelAlign?: 'left' | 'right'; - // Row configuration for the entire form - rowProps?: RowProps; - // Submit form on reset - submitOnReset?: boolean; - // Submit form on form changing - submitOnChange?: boolean; - // Col configuration for the entire form - labelCol?: Partial; - // Col configuration for the entire form - wrapperCol?: Partial; - - // General row style - baseRowStyle?: CSSProperties; - - // General col configuration - baseColProps?: Partial; - - // Form configuration rules - schemas?: FormSchema[]; - // Function values used to merge into dynamic control form items - mergeDynamicData?: Recordable; - // Compact mode for search forms - compact?: boolean; - // Blank line span - emptySpan?: number | Partial; - // Internal component size of the form - size?: 'default' | 'small' | 'large'; - // Whether to disable - disabled?: boolean; - // Time interval fields are mapped into multiple - fieldMapToTime?: FieldMapToTime; - // Placeholder is set automatically - autoSetPlaceHolder?: boolean; - // Auto submit on press enter on input - autoSubmitOnEnter?: boolean; - // Check whether the information is added to the label - rulesMessageJoinLabel?: boolean; - // Whether to show collapse and expand buttons - showAdvancedButton?: boolean; - // Whether to focus on the first input box, only works when the first form item is input - autoFocusFirstItem?: boolean; - // Automatically collapse over the specified number of rows - autoAdvancedLine?: number; - // Always show lines - alwaysShowLines?: number; - // Whether to show the operation button - showActionButtonGroup?: boolean; - - // Reset button configuration - resetButtonOptions?: Partial; - - // Confirm button configuration - submitButtonOptions?: Partial; - - // Operation column configuration - actionColOptions?: Partial; - - // Show reset button - showResetButton?: boolean; - // Show confirmation button - showSubmitButton?: boolean; - - resetFunc?: () => Promise; - submitFunc?: () => Promise; - transformDateFunc?: (date: any) => string; - colon?: boolean; -} -export interface FormSchema { - // Field name - field: string; - // Event name triggered by internal value change, default change - changeEvent?: string; - // Variable name bound to v-model Default value - valueField?: string; - // Label name - label: string | VNode; - // Auxiliary text - subLabel?: string; - // Help text on the right side of the text - helpMessage?: - | string - | string[] - | ((renderCallbackParams: RenderCallbackParams) => string | string[]); - // BaseHelp component props - helpComponentProps?: Partial; - // Label width, if it is passed, the labelCol and WrapperCol configured by itemProps will be invalid - labelWidth?: string | number; - // Disable the adjustment of labelWidth with global settings of formModel, and manually set labelCol and wrapperCol by yourself - disabledLabelWidth?: boolean; - // render component - component: ComponentType; - // Component parameters - componentProps?: - | ((opt: { - schema: FormSchema; - tableAction: TableActionType; - formActionType: FormActionType; - formModel: Recordable; - }) => Recordable) - | object; - // Required - required?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean); - - suffix?: string | number | ((values: RenderCallbackParams) => string | number); - - // Validation rules - rules?: Rule[]; - // Check whether the information is added to the label - rulesMessageJoinLabel?: boolean; - - // Reference formModelItem - itemProps?: Partial; - - // col configuration outside formModelItem - colProps?: Partial; - - // 默认值 - defaultValue?: any; - isAdvanced?: boolean; - - // Matching details components - span?: number; - - ifShow?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean); - - show?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean); - - // Render the content in the form-item tag - render?: (renderCallbackParams: RenderCallbackParams) => VNode | VNode[] | string; - - // Rendering col content requires outer wrapper form-item - renderColContent?: (renderCallbackParams: RenderCallbackParams) => VNode | VNode[] | string; - - renderComponentContent?: - | ((renderCallbackParams: RenderCallbackParams) => any) - | VNode - | VNode[] - | string; - - // Custom slot, in from-item - slot?: string; - - // Custom slot, similar to renderColContent - colSlot?: string; - - dynamicDisabled?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean); - - dynamicRules?: (renderCallbackParams: RenderCallbackParams) => Rule[]; -} -export interface HelpComponentProps { - maxWidth: string; - // Whether to display the serial number - showIndex: boolean; - // Text list - text: any; - // colour - color: string; - // font size - fontSize: string; - icon: string; - absolute: boolean; - // Positioning - position: any; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/formItem.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/formItem.ts deleted file mode 100644 index 77b238ac8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/formItem.ts +++ /dev/null @@ -1,91 +0,0 @@ -import type { NamePath } from 'ant-design-vue/lib/form/interface'; -import type { ColProps } from 'ant-design-vue/lib/grid/Col'; -import type { HTMLAttributes, VNodeChild } from 'vue'; - -export interface FormItem { - /** - * Used with label, whether to display : after label text. - * @default true - * @type boolean - */ - colon?: boolean; - - /** - * The extra prompt message. It is similar to help. Usage example: to display error message and prompt message at the same time. - * @type any (string | slot) - */ - extra?: string | VNodeChild | JSX.Element; - - /** - * Used with validateStatus, this option specifies the validation status icon. Recommended to be used only with Input. - * @default false - * @type boolean - */ - hasFeedback?: boolean; - - /** - * The prompt message. If not provided, the prompt message will be generated by the validation rule. - * @type any (string | slot) - */ - help?: string | VNodeChild | JSX.Element; - - /** - * Label test - * @type any (string | slot) - */ - label?: string | VNodeChild | JSX.Element; - - /** - * The layout of label. You can set span offset to something like {span: 3, offset: 12} or sm: {span: 3, offset: 12} same as with - * @type Col - */ - labelCol?: ColProps & HTMLAttributes; - - /** - * Whether provided or not, it will be generated by the validation rule. - * @default false - * @type boolean - */ - required?: boolean; - - /** - * The validation status. If not provided, it will be generated by validation rule. options: 'success' 'warning' 'error' 'validating' - * @type string - */ - validateStatus?: '' | 'success' | 'warning' | 'error' | 'validating'; - - /** - * The layout for input controls, same as labelCol - * @type Col - */ - wrapperCol?: ColProps; - /** - * Set sub label htmlFor. - */ - htmlFor?: string; - /** - * text align of label - */ - labelAlign?: 'left' | 'right'; - /** - * a key of model. In the setting of validate and resetFields method, the attribute is required - */ - name?: NamePath; - /** - * validation rules of form - */ - rules?: object | object[]; - /** - * Whether to automatically associate form fields. In most cases, you can setting automatic association. - * If the conditions for automatic association are not met, you can manually associate them. See the notes below. - */ - autoLink?: boolean; - /** - * Whether stop validate on first rule of error for this field. - */ - validateFirst?: boolean; - /** - * When to validate the value of children node - */ - validateTrigger?: string | string[] | false; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/hooks.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/hooks.ts deleted file mode 100644 index 0308e73b3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/hooks.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface AdvanceState { - isAdvanced: boolean; - hideAdvanceBtn: boolean; - isLoad: boolean; - actionSpan: number; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/index.ts deleted file mode 100644 index 3da7e4aed..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Form/src/types/index.ts +++ /dev/null @@ -1,116 +0,0 @@ -type ColSpanType = number | string; -export interface ColEx { - style?: any; - /** - * raster number of cells to occupy, 0 corresponds to display: none - * @default none (0) - * @type ColSpanType - */ - span?: ColSpanType; - - /** - * raster order, used in flex layout mode - * @default 0 - * @type ColSpanType - */ - order?: ColSpanType; - - /** - * the layout fill of flex - * @default none - * @type ColSpanType - */ - flex?: ColSpanType; - - /** - * the number of cells to offset Col from the left - * @default 0 - * @type ColSpanType - */ - offset?: ColSpanType; - - /** - * the number of cells that raster is moved to the right - * @default 0 - * @type ColSpanType - */ - push?: ColSpanType; - - /** - * the number of cells that raster is moved to the left - * @default 0 - * @type ColSpanType - */ - pull?: ColSpanType; - - /** - * <576px and also default setting, could be a span value or an object containing above props - * @type { span: ColSpanType, offset: ColSpanType } | ColSpanType - */ - xs?: { span: ColSpanType; offset: ColSpanType } | ColSpanType; - - /** - * ≥576px, could be a span value or an object containing above props - * @type { span: ColSpanType, offset: ColSpanType } | ColSpanType - */ - sm?: { span: ColSpanType; offset: ColSpanType } | ColSpanType; - - /** - * ≥768px, could be a span value or an object containing above props - * @type { span: ColSpanType, offset: ColSpanType } | ColSpanType - */ - md?: { span: ColSpanType; offset: ColSpanType } | ColSpanType; - - /** - * ≥992px, could be a span value or an object containing above props - * @type { span: ColSpanType, offset: ColSpanType } | ColSpanType - */ - lg?: { span: ColSpanType; offset: ColSpanType } | ColSpanType; - - /** - * ≥1200px, could be a span value or an object containing above props - * @type { span: ColSpanType, offset: ColSpanType } | ColSpanType - */ - xl?: { span: ColSpanType; offset: ColSpanType } | ColSpanType; - - /** - * ≥1600px, could be a span value or an object containing above props - * @type { span: ColSpanType, offset: ColSpanType } | ColSpanType - */ - xxl?: { span: ColSpanType; offset: ColSpanType } | ColSpanType; -} - -export type ComponentType = - | 'Input' - | 'InputGroup' - | 'InputPassword' - | 'InputSearch' - | 'InputTextArea' - | 'InputNumber' - | 'InputCountDown' - | 'Select' - | 'ApiSelect' - | 'TreeSelect' - | 'ApiTree' - | 'ApiTreeSelect' - | 'ApiRadioGroup' - | 'RadioButtonGroup' - | 'RadioGroup' - | 'Checkbox' - | 'CheckboxGroup' - | 'AutoComplete' - | 'ApiCascader' - | 'Cascader' - | 'DatePicker' - | 'MonthPicker' - | 'RangePicker' - | 'WeekPicker' - | 'TimePicker' - | 'Switch' - | 'StrengthMeter' - | 'Upload' - | 'IconPicker' - | 'Render' - | 'Slider' - | 'Rate' - | 'Divider'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/data/icons.data.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/data/icons.data.ts deleted file mode 100644 index e5fe3e266..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/data/icons.data.ts +++ /dev/null @@ -1,793 +0,0 @@ -export default { - prefix: 'ant-design', - icons: [ - 'account-book-filled', - 'account-book-outlined', - 'account-book-twotone', - 'aim-outlined', - 'alert-filled', - 'alert-outlined', - 'alert-twotone', - 'alibaba-outlined', - 'align-center-outlined', - 'align-left-outlined', - 'align-right-outlined', - 'alipay-circle-filled', - 'alipay-circle-outlined', - 'alipay-outlined', - 'alipay-square-filled', - 'aliwangwang-filled', - 'aliwangwang-outlined', - 'aliyun-outlined', - 'amazon-circle-filled', - 'amazon-outlined', - 'amazon-square-filled', - 'android-filled', - 'android-outlined', - 'ant-cloud-outlined', - 'ant-design-outlined', - 'apartment-outlined', - 'api-filled', - 'api-outlined', - 'api-twotone', - 'apple-filled', - 'apple-outlined', - 'appstore-add-outlined', - 'appstore-filled', - 'appstore-outlined', - 'appstore-twotone', - 'area-chart-outlined', - 'arrow-down-outlined', - 'arrow-left-outlined', - 'arrow-right-outlined', - 'arrow-up-outlined', - 'arrows-alt-outlined', - 'audio-filled', - 'audio-muted-outlined', - 'audio-outlined', - 'audio-twotone', - 'audit-outlined', - 'backward-filled', - 'backward-outlined', - 'bank-filled', - 'bank-outlined', - 'bank-twotone', - 'bar-chart-outlined', - 'barcode-outlined', - 'bars-outlined', - 'behance-circle-filled', - 'behance-outlined', - 'behance-square-filled', - 'behance-square-outlined', - 'bell-filled', - 'bell-outlined', - 'bell-twotone', - 'bg-colors-outlined', - 'block-outlined', - 'bold-outlined', - 'book-filled', - 'book-outlined', - 'book-twotone', - 'border-bottom-outlined', - 'border-horizontal-outlined', - 'border-inner-outlined', - 'border-left-outlined', - 'border-outer-outlined', - 'border-outlined', - 'border-right-outlined', - 'border-top-outlined', - 'border-verticle-outlined', - 'borderless-table-outlined', - 'box-plot-filled', - 'box-plot-outlined', - 'box-plot-twotone', - 'branches-outlined', - 'bug-filled', - 'bug-outlined', - 'bug-twotone', - 'build-filled', - 'build-outlined', - 'build-twotone', - 'bulb-filled', - 'bulb-outlined', - 'bulb-twotone', - 'calculator-filled', - 'calculator-outlined', - 'calculator-twotone', - 'calendar-filled', - 'calendar-outlined', - 'calendar-twotone', - 'camera-filled', - 'camera-outlined', - 'camera-twotone', - 'car-filled', - 'car-outlined', - 'car-twotone', - 'caret-down-filled', - 'caret-down-outlined', - 'caret-left-filled', - 'caret-left-outlined', - 'caret-right-filled', - 'caret-right-outlined', - 'caret-up-filled', - 'caret-up-outlined', - 'carry-out-filled', - 'carry-out-outlined', - 'carry-out-twotone', - 'check-circle-filled', - 'check-circle-outlined', - 'check-circle-twotone', - 'check-outlined', - 'check-square-filled', - 'check-square-outlined', - 'check-square-twotone', - 'chrome-filled', - 'chrome-outlined', - 'ci-circle-filled', - 'ci-circle-outlined', - 'ci-circle-twotone', - 'ci-outlined', - 'ci-twotone', - 'clear-outlined', - 'clock-circle-filled', - 'clock-circle-outlined', - 'clock-circle-twotone', - 'close-circle-filled', - 'close-circle-outlined', - 'close-circle-twotone', - 'close-outlined', - 'close-square-filled', - 'close-square-outlined', - 'close-square-twotone', - 'cloud-download-outlined', - 'cloud-filled', - 'cloud-outlined', - 'cloud-server-outlined', - 'cloud-sync-outlined', - 'cloud-twotone', - 'cloud-upload-outlined', - 'cluster-outlined', - 'code-filled', - 'code-outlined', - 'code-sandbox-circle-filled', - 'code-sandbox-outlined', - 'code-sandbox-square-filled', - 'code-twotone', - 'codepen-circle-filled', - 'codepen-circle-outlined', - 'codepen-outlined', - 'codepen-square-filled', - 'coffee-outlined', - 'column-height-outlined', - 'column-width-outlined', - 'comment-outlined', - 'compass-filled', - 'compass-outlined', - 'compass-twotone', - 'compress-outlined', - 'console-sql-outlined', - 'contacts-filled', - 'contacts-outlined', - 'contacts-twotone', - 'container-filled', - 'container-outlined', - 'container-twotone', - 'control-filled', - 'control-outlined', - 'control-twotone', - 'copy-filled', - 'copy-outlined', - 'copy-twotone', - 'copyright-circle-filled', - 'copyright-circle-outlined', - 'copyright-circle-twotone', - 'copyright-outlined', - 'copyright-twotone', - 'credit-card-filled', - 'credit-card-outlined', - 'credit-card-twotone', - 'crown-filled', - 'crown-outlined', - 'crown-twotone', - 'customer-service-filled', - 'customer-service-outlined', - 'customer-service-twotone', - 'dash-outlined', - 'dashboard-filled', - 'dashboard-outlined', - 'dashboard-twotone', - 'database-filled', - 'database-outlined', - 'database-twotone', - 'delete-column-outlined', - 'delete-filled', - 'delete-outlined', - 'delete-row-outlined', - 'delete-twotone', - 'delivered-procedure-outlined', - 'deployment-unit-outlined', - 'desktop-outlined', - 'diff-filled', - 'diff-outlined', - 'diff-twotone', - 'dingding-outlined', - 'dingtalk-circle-filled', - 'dingtalk-outlined', - 'dingtalk-square-filled', - 'disconnect-outlined', - 'dislike-filled', - 'dislike-outlined', - 'dislike-twotone', - 'dollar-circle-filled', - 'dollar-circle-outlined', - 'dollar-circle-twotone', - 'dollar-outlined', - 'dollar-twotone', - 'dot-chart-outlined', - 'double-left-outlined', - 'double-right-outlined', - 'down-circle-filled', - 'down-circle-outlined', - 'down-circle-twotone', - 'down-outlined', - 'down-square-filled', - 'down-square-outlined', - 'down-square-twotone', - 'download-outlined', - 'drag-outlined', - 'dribbble-circle-filled', - 'dribbble-outlined', - 'dribbble-square-filled', - 'dribbble-square-outlined', - 'dropbox-circle-filled', - 'dropbox-outlined', - 'dropbox-square-filled', - 'edit-filled', - 'edit-outlined', - 'edit-twotone', - 'ellipsis-outlined', - 'enter-outlined', - 'environment-filled', - 'environment-outlined', - 'environment-twotone', - 'euro-circle-filled', - 'euro-circle-outlined', - 'euro-circle-twotone', - 'euro-outlined', - 'euro-twotone', - 'exception-outlined', - 'exclamation-circle-filled', - 'exclamation-circle-outlined', - 'exclamation-circle-twotone', - 'exclamation-outlined', - 'expand-alt-outlined', - 'expand-outlined', - 'experiment-filled', - 'experiment-outlined', - 'experiment-twotone', - 'export-outlined', - 'eye-filled', - 'eye-invisible-filled', - 'eye-invisible-outlined', - 'eye-invisible-twotone', - 'eye-outlined', - 'eye-twotone', - 'facebook-filled', - 'facebook-outlined', - 'fall-outlined', - 'fast-backward-filled', - 'fast-backward-outlined', - 'fast-forward-filled', - 'fast-forward-outlined', - 'field-binary-outlined', - 'field-number-outlined', - 'field-string-outlined', - 'field-time-outlined', - 'file-add-filled', - 'file-add-outlined', - 'file-add-twotone', - 'file-done-outlined', - 'file-excel-filled', - 'file-excel-outlined', - 'file-excel-twotone', - 'file-exclamation-filled', - 'file-exclamation-outlined', - 'file-exclamation-twotone', - 'file-filled', - 'file-gif-outlined', - 'file-image-filled', - 'file-image-outlined', - 'file-image-twotone', - 'file-jpg-outlined', - 'file-markdown-filled', - 'file-markdown-outlined', - 'file-markdown-twotone', - 'file-outlined', - 'file-pdf-filled', - 'file-pdf-outlined', - 'file-pdf-twotone', - 'file-ppt-filled', - 'file-ppt-outlined', - 'file-ppt-twotone', - 'file-protect-outlined', - 'file-search-outlined', - 'file-sync-outlined', - 'file-text-filled', - 'file-text-outlined', - 'file-text-twotone', - 'file-twotone', - 'file-unknown-filled', - 'file-unknown-outlined', - 'file-unknown-twotone', - 'file-word-filled', - 'file-word-outlined', - 'file-word-twotone', - 'file-zip-filled', - 'file-zip-outlined', - 'file-zip-twotone', - 'filter-filled', - 'filter-outlined', - 'filter-twotone', - 'fire-filled', - 'fire-outlined', - 'fire-twotone', - 'flag-filled', - 'flag-outlined', - 'flag-twotone', - 'folder-add-filled', - 'folder-add-outlined', - 'folder-add-twotone', - 'folder-filled', - 'folder-open-filled', - 'folder-open-outlined', - 'folder-open-twotone', - 'folder-outlined', - 'folder-twotone', - 'folder-view-outlined', - 'font-colors-outlined', - 'font-size-outlined', - 'fork-outlined', - 'form-outlined', - 'format-painter-filled', - 'format-painter-outlined', - 'forward-filled', - 'forward-outlined', - 'frown-filled', - 'frown-outlined', - 'frown-twotone', - 'fullscreen-exit-outlined', - 'fullscreen-outlined', - 'function-outlined', - 'fund-filled', - 'fund-outlined', - 'fund-projection-screen-outlined', - 'fund-twotone', - 'fund-view-outlined', - 'funnel-plot-filled', - 'funnel-plot-outlined', - 'funnel-plot-twotone', - 'gateway-outlined', - 'gif-outlined', - 'gift-filled', - 'gift-outlined', - 'gift-twotone', - 'github-filled', - 'github-outlined', - 'gitlab-filled', - 'gitlab-outlined', - 'global-outlined', - 'gold-filled', - 'gold-outlined', - 'gold-twotone', - 'golden-filled', - 'google-circle-filled', - 'google-outlined', - 'google-plus-circle-filled', - 'google-plus-outlined', - 'google-plus-square-filled', - 'google-square-filled', - 'group-outlined', - 'hdd-filled', - 'hdd-outlined', - 'hdd-twotone', - 'heart-filled', - 'heart-outlined', - 'heart-twotone', - 'heat-map-outlined', - 'highlight-filled', - 'highlight-outlined', - 'highlight-twotone', - 'history-outlined', - 'home-filled', - 'home-outlined', - 'home-twotone', - 'hourglass-filled', - 'hourglass-outlined', - 'hourglass-twotone', - 'html5-filled', - 'html5-outlined', - 'html5-twotone', - 'idcard-filled', - 'idcard-outlined', - 'idcard-twotone', - 'ie-circle-filled', - 'ie-outlined', - 'ie-square-filled', - 'import-outlined', - 'inbox-outlined', - 'info-circle-filled', - 'info-circle-outlined', - 'info-circle-twotone', - 'info-outlined', - 'insert-row-above-outlined', - 'insert-row-below-outlined', - 'insert-row-left-outlined', - 'insert-row-right-outlined', - 'instagram-filled', - 'instagram-outlined', - 'insurance-filled', - 'insurance-outlined', - 'insurance-twotone', - 'interaction-filled', - 'interaction-outlined', - 'interaction-twotone', - 'issues-close-outlined', - 'italic-outlined', - 'key-outlined', - 'laptop-outlined', - 'layout-filled', - 'layout-outlined', - 'layout-twotone', - 'left-circle-filled', - 'left-circle-outlined', - 'left-circle-twotone', - 'left-outlined', - 'left-square-filled', - 'left-square-outlined', - 'left-square-twotone', - 'like-filled', - 'like-outlined', - 'like-twotone', - 'line-chart-outlined', - 'line-height-outlined', - 'line-outlined', - 'link-outlined', - 'linkedin-filled', - 'linkedin-outlined', - 'loading-3-quarters-outlined', - 'loading-outlined', - 'lock-filled', - 'lock-outlined', - 'lock-twotone', - 'login-outlined', - 'logout-outlined', - 'mac-command-filled', - 'mac-command-outlined', - 'mail-filled', - 'mail-outlined', - 'mail-twotone', - 'man-outlined', - 'medicine-box-filled', - 'medicine-box-outlined', - 'medicine-box-twotone', - 'medium-circle-filled', - 'medium-outlined', - 'medium-square-filled', - 'medium-workmark-outlined', - 'meh-filled', - 'meh-outlined', - 'meh-twotone', - 'menu-fold-outlined', - 'menu-outlined', - 'menu-unfold-outlined', - 'merge-cells-outlined', - 'message-filled', - 'message-outlined', - 'message-twotone', - 'minus-circle-filled', - 'minus-circle-outlined', - 'minus-circle-twotone', - 'minus-outlined', - 'minus-square-filled', - 'minus-square-outlined', - 'minus-square-twotone', - 'mobile-filled', - 'mobile-outlined', - 'mobile-twotone', - 'money-collect-filled', - 'money-collect-outlined', - 'money-collect-twotone', - 'monitor-outlined', - 'more-outlined', - 'node-collapse-outlined', - 'node-expand-outlined', - 'node-index-outlined', - 'notification-filled', - 'notification-outlined', - 'notification-twotone', - 'number-outlined', - 'one-to-one-outlined', - 'ordered-list-outlined', - 'paper-clip-outlined', - 'partition-outlined', - 'pause-circle-filled', - 'pause-circle-outlined', - 'pause-circle-twotone', - 'pause-outlined', - 'pay-circle-filled', - 'pay-circle-outlined', - 'percentage-outlined', - 'phone-filled', - 'phone-outlined', - 'phone-twotone', - 'pic-center-outlined', - 'pic-left-outlined', - 'pic-right-outlined', - 'picture-filled', - 'picture-outlined', - 'picture-twotone', - 'pie-chart-filled', - 'pie-chart-outlined', - 'pie-chart-twotone', - 'play-circle-filled', - 'play-circle-outlined', - 'play-circle-twotone', - 'play-square-filled', - 'play-square-outlined', - 'play-square-twotone', - 'plus-circle-filled', - 'plus-circle-outlined', - 'plus-circle-twotone', - 'plus-outlined', - 'plus-square-filled', - 'plus-square-outlined', - 'plus-square-twotone', - 'pound-circle-filled', - 'pound-circle-outlined', - 'pound-circle-twotone', - 'pound-outlined', - 'poweroff-outlined', - 'printer-filled', - 'printer-outlined', - 'printer-twotone', - 'profile-filled', - 'profile-outlined', - 'profile-twotone', - 'project-filled', - 'project-outlined', - 'project-twotone', - 'property-safety-filled', - 'property-safety-outlined', - 'property-safety-twotone', - 'pull-request-outlined', - 'pushpin-filled', - 'pushpin-outlined', - 'pushpin-twotone', - 'qq-circle-filled', - 'qq-outlined', - 'qq-square-filled', - 'qrcode-outlined', - 'question-circle-filled', - 'question-circle-outlined', - 'question-circle-twotone', - 'question-outlined', - 'radar-chart-outlined', - 'radius-bottomleft-outlined', - 'radius-bottomright-outlined', - 'radius-setting-outlined', - 'radius-upleft-outlined', - 'radius-upright-outlined', - 'read-filled', - 'read-outlined', - 'reconciliation-filled', - 'reconciliation-outlined', - 'reconciliation-twotone', - 'red-envelope-filled', - 'red-envelope-outlined', - 'red-envelope-twotone', - 'reddit-circle-filled', - 'reddit-outlined', - 'reddit-square-filled', - 'redo-outlined', - 'reload-outlined', - 'rest-filled', - 'rest-outlined', - 'rest-twotone', - 'retweet-outlined', - 'right-circle-filled', - 'right-circle-outlined', - 'right-circle-twotone', - 'right-outlined', - 'right-square-filled', - 'right-square-outlined', - 'right-square-twotone', - 'rise-outlined', - 'robot-filled', - 'robot-outlined', - 'rocket-filled', - 'rocket-outlined', - 'rocket-twotone', - 'rollback-outlined', - 'rotate-left-outlined', - 'rotate-right-outlined', - 'safety-certificate-filled', - 'safety-certificate-outlined', - 'safety-certificate-twotone', - 'safety-outlined', - 'save-filled', - 'save-outlined', - 'save-twotone', - 'scan-outlined', - 'schedule-filled', - 'schedule-outlined', - 'schedule-twotone', - 'scissor-outlined', - 'search-outlined', - 'security-scan-filled', - 'security-scan-outlined', - 'security-scan-twotone', - 'select-outlined', - 'send-outlined', - 'setting-filled', - 'setting-outlined', - 'setting-twotone', - 'shake-outlined', - 'share-alt-outlined', - 'shop-filled', - 'shop-outlined', - 'shop-twotone', - 'shopping-cart-outlined', - 'shopping-filled', - 'shopping-outlined', - 'shopping-twotone', - 'shrink-outlined', - 'signal-filled', - 'sisternode-outlined', - 'sketch-circle-filled', - 'sketch-outlined', - 'sketch-square-filled', - 'skin-filled', - 'skin-outlined', - 'skin-twotone', - 'skype-filled', - 'skype-outlined', - 'slack-circle-filled', - 'slack-outlined', - 'slack-square-filled', - 'slack-square-outlined', - 'sliders-filled', - 'sliders-outlined', - 'sliders-twotone', - 'small-dash-outlined', - 'smile-filled', - 'smile-outlined', - 'smile-twotone', - 'snippets-filled', - 'snippets-outlined', - 'snippets-twotone', - 'solution-outlined', - 'sort-ascending-outlined', - 'sort-descending-outlined', - 'sound-filled', - 'sound-outlined', - 'sound-twotone', - 'split-cells-outlined', - 'star-filled', - 'star-outlined', - 'star-twotone', - 'step-backward-filled', - 'step-backward-outlined', - 'step-forward-filled', - 'step-forward-outlined', - 'stock-outlined', - 'stop-filled', - 'stop-outlined', - 'stop-twotone', - 'strikethrough-outlined', - 'subnode-outlined', - 'swap-left-outlined', - 'swap-outlined', - 'swap-right-outlined', - 'switcher-filled', - 'switcher-outlined', - 'switcher-twotone', - 'sync-outlined', - 'table-outlined', - 'tablet-filled', - 'tablet-outlined', - 'tablet-twotone', - 'tag-filled', - 'tag-outlined', - 'tag-twotone', - 'tags-filled', - 'tags-outlined', - 'tags-twotone', - 'taobao-circle-filled', - 'taobao-circle-outlined', - 'taobao-outlined', - 'taobao-square-filled', - 'team-outlined', - 'thunderbolt-filled', - 'thunderbolt-outlined', - 'thunderbolt-twotone', - 'to-top-outlined', - 'tool-filled', - 'tool-outlined', - 'tool-twotone', - 'trademark-circle-filled', - 'trademark-circle-outlined', - 'trademark-circle-twotone', - 'trademark-outlined', - 'transaction-outlined', - 'translation-outlined', - 'trophy-filled', - 'trophy-outlined', - 'trophy-twotone', - 'twitter-circle-filled', - 'twitter-outlined', - 'twitter-square-filled', - 'underline-outlined', - 'undo-outlined', - 'ungroup-outlined', - 'unlock-filled', - 'unlock-outlined', - 'unlock-twotone', - 'unordered-list-outlined', - 'up-circle-filled', - 'up-circle-outlined', - 'up-circle-twotone', - 'up-outlined', - 'up-square-filled', - 'up-square-outlined', - 'up-square-twotone', - 'upload-outlined', - 'usb-filled', - 'usb-outlined', - 'usb-twotone', - 'user-add-outlined', - 'user-delete-outlined', - 'user-outlined', - 'user-switch-outlined', - 'usergroup-add-outlined', - 'usergroup-delete-outlined', - 'verified-outlined', - 'vertical-align-bottom-outlined', - 'vertical-align-middle-outlined', - 'vertical-align-top-outlined', - 'vertical-left-outlined', - 'vertical-right-outlined', - 'video-camera-add-outlined', - 'video-camera-filled', - 'video-camera-outlined', - 'video-camera-twotone', - 'wallet-filled', - 'wallet-outlined', - 'wallet-twotone', - 'warning-filled', - 'warning-outlined', - 'warning-twotone', - 'wechat-filled', - 'wechat-outlined', - 'weibo-circle-filled', - 'weibo-circle-outlined', - 'weibo-outlined', - 'weibo-square-filled', - 'weibo-square-outlined', - 'whats-app-outlined', - 'wifi-outlined', - 'windows-filled', - 'windows-outlined', - 'woman-outlined', - 'yahoo-filled', - 'yahoo-outlined', - 'youtube-filled', - 'youtube-outlined', - 'yuque-filled', - 'yuque-outlined', - 'zhihu-circle-filled', - 'zhihu-outlined', - 'zhihu-square-filled', - 'zoom-in-outlined', - 'zoom-out-outlined', - ], -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/index.ts deleted file mode 100644 index 01e7d2361..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import Icon from './src/Icon.vue'; -import SvgIcon from './src/SvgIcon.vue'; -import IconPicker from './src/IconPicker.vue'; - -export { Icon, IconPicker, SvgIcon }; - -export default Icon; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/src/Icon.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/src/Icon.vue deleted file mode 100644 index 4956cf073..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/src/Icon.vue +++ /dev/null @@ -1,121 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/src/IconPicker.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/src/IconPicker.vue deleted file mode 100644 index 40cfe7d17..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/src/IconPicker.vue +++ /dev/null @@ -1,191 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/src/SvgIcon.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/src/SvgIcon.vue deleted file mode 100644 index 2afa4de16..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Icon/src/SvgIcon.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/index.ts deleted file mode 100644 index 3673a44dc..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import Loading from './src/Loading.vue'; - -export { Loading }; -export { useLoading } from './src/useLoading'; -export { createLoading } from './src/createLoading'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/Loading.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/Loading.vue deleted file mode 100644 index 0f52b2893..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/Loading.vue +++ /dev/null @@ -1,79 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/createLoading.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/createLoading.ts deleted file mode 100644 index 966ca53bf..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/createLoading.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { VNode, defineComponent } from 'vue'; -import type { LoadingProps } from './typing'; - -import { createVNode, render, reactive, h } from 'vue'; -import Loading from './Loading.vue'; - -export function createLoading(props?: Partial, target?: HTMLElement, wait = false) { - let vm: Nullable = null; - const data = reactive({ - tip: '', - loading: true, - ...props, - }); - - const LoadingWrap = defineComponent({ - render() { - return h(Loading, { ...data }); - }, - }); - - vm = createVNode(LoadingWrap); - - if (wait) { - // TODO fix https://github.com/anncwb/vue-vben-admin/issues/438 - setTimeout(() => { - render(vm, document.createElement('div')); - }, 0); - } else { - render(vm, document.createElement('div')); - } - - function close() { - if (vm?.el && vm.el.parentNode) { - vm.el.parentNode.removeChild(vm.el); - } - } - - function open(target: HTMLElement = document.body) { - if (!vm || !vm.el) { - return; - } - target.appendChild(vm.el as HTMLElement); - } - - if (target) { - open(target); - } - return { - vm, - close, - open, - setTip: (tip: string) => { - data.tip = tip; - }, - setLoading: (loading: boolean) => { - data.loading = loading; - }, - get loading() { - return data.loading; - }, - get $el() { - return vm?.el as HTMLElement; - }, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/typing.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/typing.ts deleted file mode 100644 index 9af60e612..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/typing.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { SizeEnum } from '/@/enums/sizeEnum'; - -export interface LoadingProps { - tip: string; - size: SizeEnum; - absolute: boolean; - loading: boolean; - background: string; - theme: 'dark' | 'light'; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/useLoading.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/useLoading.ts deleted file mode 100644 index 356df7de8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Loading/src/useLoading.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { unref } from 'vue'; -import { createLoading } from './createLoading'; -import type { LoadingProps } from './typing'; -import type { Ref } from 'vue'; - -export interface UseLoadingOptions { - target?: any; - props?: Partial; -} - -interface Fn { - (): void; -} - -export function useLoading(props: Partial): [Fn, Fn, (string) => void]; -export function useLoading(opt: Partial): [Fn, Fn, (string) => void]; - -export function useLoading( - opt: Partial | Partial, -): [Fn, Fn, (string) => void] { - let props: Partial; - let target: HTMLElement | Ref = document.body; - - if (Reflect.has(opt, 'target') || Reflect.has(opt, 'props')) { - const options = opt as Partial; - props = options.props || {}; - target = options.target || document.body; - } else { - props = opt as Partial; - } - - const instance = createLoading(props, undefined, true); - - const open = (): void => { - const t = unref(target as Ref); - if (!t) return; - instance.open(t); - }; - - const close = (): void => { - instance.close(); - }; - - const setTip = (tip: string) => { - instance.setTip(tip); - }; - - return [open, close, setTip]; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/index.ts deleted file mode 100644 index d337681ff..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { withInstall } from '/@/utils'; -import markDown from './src/Markdown.vue'; -import markDownViewer from './src/MarkdownViewer.vue'; - -export const MarkDown = withInstall(markDown); -export const MarkdownViewer = withInstall(markDownViewer); -export * from './src/typing'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/src/Markdown.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/src/Markdown.vue deleted file mode 100644 index d8117631c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/src/Markdown.vue +++ /dev/null @@ -1,147 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/src/MarkdownViewer.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/src/MarkdownViewer.vue deleted file mode 100644 index 708aa86ec..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/src/MarkdownViewer.vue +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/src/typing.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/src/typing.ts deleted file mode 100644 index b4bb46582..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Markdown/src/typing.ts +++ /dev/null @@ -1,4 +0,0 @@ -import Vditor from 'vditor'; -export interface MarkDownActionType { - getVditor: () => Vditor; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/index.ts deleted file mode 100644 index 4a592259e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import BasicMenu from './src/BasicMenu.vue'; - -export { BasicMenu }; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/BasicMenu.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/BasicMenu.vue deleted file mode 100644 index aa86bc9b0..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/BasicMenu.vue +++ /dev/null @@ -1,164 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/components/BasicMenuItem.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/components/BasicMenuItem.vue deleted file mode 100644 index 2a5656278..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/components/BasicMenuItem.vue +++ /dev/null @@ -1,20 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/components/BasicSubMenuItem.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/components/BasicSubMenuItem.vue deleted file mode 100644 index d5139fce3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/components/BasicSubMenuItem.vue +++ /dev/null @@ -1,55 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/components/MenuItemContent.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/components/MenuItemContent.vue deleted file mode 100644 index 3044fbc07..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/components/MenuItemContent.vue +++ /dev/null @@ -1,34 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/index.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/index.less deleted file mode 100644 index 8bfbb0dfa..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/index.less +++ /dev/null @@ -1,74 +0,0 @@ -@basic-menu-prefix-cls: ~'@{namespace}-basic-menu'; - -.app-top-menu-popup { - min-width: 150px; -} - -.@{basic-menu-prefix-cls} { - width: 100%; - - .ant-menu-item { - transition: unset; - } - - &__sidebar-hor { - &.ant-menu-horizontal { - display: flex; - align-items: center; - - &.ant-menu-dark { - background-color: transparent; - - .ant-menu-submenu:hover, - .ant-menu-item-open, - .ant-menu-submenu-open, - .ant-menu-item-selected, - .ant-menu-submenu-selected, - .ant-menu-item:hover, - .ant-menu-item-active, - .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open, - .ant-menu-submenu-active, - .ant-menu-submenu-title:hover { - color: #fff; - background-color: @top-menu-active-bg-color !important; - } - - .ant-menu-item:hover, - .ant-menu-item-active, - .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open, - .ant-menu-submenu-active, - .ant-menu-submenu-title:hover { - background-color: @top-menu-active-bg-color; - } - - .@{basic-menu-prefix-cls}-item__level1 { - background-color: transparent; - - &.ant-menu-item-selected, - &.ant-menu-submenu-selected { - background-color: @top-menu-active-bg-color !important; - } - } - - .ant-menu-item, - .ant-menu-submenu { - &.@{basic-menu-prefix-cls}-item__level1, - .ant-menu-submenu-title { - height: @header-height; - line-height: @header-height; - } - } - } - } - } - - .ant-menu-submenu, - .ant-menu-submenu-inline { - transition: unset; - } - - .ant-menu-inline.ant-menu-sub { - box-shadow: unset !important; - transition: unset; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/props.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/props.ts deleted file mode 100644 index ed3f010d5..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/props.ts +++ /dev/null @@ -1,60 +0,0 @@ -import type { Menu } from '/@/router/types'; -import type { PropType } from 'vue'; - -import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum'; -import { ThemeEnum } from '/@/enums/appEnum'; -import { propTypes } from '/@/utils/propTypes'; -import type { MenuTheme } from 'ant-design-vue'; -import type { MenuMode } from 'ant-design-vue/lib/menu/src/interface'; -export const basicProps = { - items: { - type: Array as PropType, - default: () => [], - }, - collapsedShowTitle: propTypes.bool, - // 最好是4 倍数 - inlineIndent: propTypes.number.def(20), - // 菜单组件的mode属性 - mode: { - type: String as PropType, - default: MenuModeEnum.INLINE, - }, - - type: { - type: String as PropType, - default: MenuTypeEnum.MIX, - }, - theme: { - type: String as PropType, - default: ThemeEnum.DARK, - }, - inlineCollapsed: propTypes.bool, - mixSider: propTypes.bool, - - isHorizontal: propTypes.bool, - accordion: propTypes.bool.def(true), - beforeClickFn: { - type: Function as PropType<(key: string) => Promise>, - }, -}; - -export const itemProps = { - item: { - type: Object as PropType, - default: {}, - }, - level: propTypes.number, - theme: propTypes.oneOf(['dark', 'light']), - showTitle: propTypes.bool, - isHorizontal: propTypes.bool, -}; - -export const contentProps = { - item: { - type: Object as PropType, - default: null, - }, - showTitle: propTypes.bool.def(true), - level: propTypes.number.def(0), - isHorizontal: propTypes.bool.def(true), -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/types.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/types.ts deleted file mode 100644 index ad711c27b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/types.ts +++ /dev/null @@ -1,25 +0,0 @@ -// import { ComputedRef } from 'vue'; -// import { ThemeEnum } from '/@/enums/appEnum'; -// import { MenuModeEnum } from '/@/enums/menuEnum'; -export interface MenuState { - // 默认选中的列表 - defaultSelectedKeys: string[]; - - // 模式 - // mode: MenuModeEnum; - - // // 主题 - // theme: ComputedRef | ThemeEnum; - - // 缩进 - inlineIndent?: number; - - // 展开数组 - openKeys: string[]; - - // 当前选中的菜单项 key 数组 - selectedKeys: string[]; - - // 收缩状态下展开的数组 - collapsedOpenKeys: string[]; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/useOpenKeys.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/useOpenKeys.ts deleted file mode 100644 index 841dab51b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Menu/src/useOpenKeys.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { MenuModeEnum } from '/@/enums/menuEnum'; -import type { Menu as MenuType } from '/@/router/types'; -import type { MenuState } from './types'; - -import { computed, Ref, toRaw } from 'vue'; - -import { unref } from 'vue'; -import { uniq } from 'lodash-es'; -import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; -import { getAllParentPath } from '/@/router/helper/menuHelper'; -import { useTimeoutFn } from '/@/hooks/core/useTimeout'; - -export function useOpenKeys( - menuState: MenuState, - menus: Ref, - mode: Ref, - accordion: Ref, -) { - const { getCollapsed, getIsMixSidebar } = useMenuSetting(); - - async function setOpenKeys(path: string) { - if (mode.value === MenuModeEnum.HORIZONTAL) { - return; - } - const native = unref(getIsMixSidebar); - useTimeoutFn( - () => { - const menuList = toRaw(menus.value); - if (menuList?.length === 0) { - menuState.openKeys = []; - return; - } - if (!unref(accordion)) { - menuState.openKeys = uniq([...menuState.openKeys, ...getAllParentPath(menuList, path)]); - } else { - menuState.openKeys = getAllParentPath(menuList, path); - } - }, - 16, - !native, - ); - } - - const getOpenKeys = computed(() => { - const collapse = unref(getIsMixSidebar) ? false : unref(getCollapsed); - - return collapse ? menuState.collapsedOpenKeys : menuState.openKeys; - }); - - /** - * @description: 重置值 - */ - function resetKeys() { - menuState.selectedKeys = []; - menuState.openKeys = []; - } - - function handleOpenChange(openKeys: string[]) { - if (unref(mode) === MenuModeEnum.HORIZONTAL || !unref(accordion) || unref(getIsMixSidebar)) { - menuState.openKeys = openKeys; - } else { - // const menuList = toRaw(menus.value); - // getAllParentPath(menuList, path); - const rootSubMenuKeys: string[] = []; - for (const { children, path } of unref(menus)) { - if (children && children.length > 0) { - rootSubMenuKeys.push(path); - } - } - if (!unref(getCollapsed)) { - const latestOpenKey = openKeys.find((key) => menuState.openKeys.indexOf(key) === -1); - if (rootSubMenuKeys.indexOf(latestOpenKey as string) === -1) { - menuState.openKeys = openKeys; - } else { - menuState.openKeys = latestOpenKey ? [latestOpenKey] : []; - } - } else { - menuState.collapsedOpenKeys = openKeys; - } - } - } - return { setOpenKeys, resetKeys, getOpenKeys, handleOpenChange }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/index.ts deleted file mode 100644 index 6188c5cb5..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { withInstall } from '/@/utils'; -import './src/index.less'; -import basicModal from './src/BasicModal.vue'; - -export const BasicModal = withInstall(basicModal); -export { useModalContext } from './src/hooks/useModalContext'; -export { useModal, useModalInner } from './src/hooks/useModal'; -export * from './src/typing'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/BasicModal.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/BasicModal.vue deleted file mode 100644 index 89bc8798c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/BasicModal.vue +++ /dev/null @@ -1,242 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/Modal.tsx b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/Modal.tsx deleted file mode 100644 index 8600d6147..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/Modal.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { Modal } from 'ant-design-vue'; -import { defineComponent, toRefs, unref } from 'vue'; -import { basicProps } from '../props'; -import { useModalDragMove } from '../hooks/useModalDrag'; -import { useAttrs } from '/@/hooks/core/useAttrs'; -import { extendSlots } from '/@/utils/helper/tsxHelper'; - -export default defineComponent({ - name: 'Modal', - inheritAttrs: false, - props: basicProps, - emits: ['cancel'], - setup(props, { slots, emit }) { - const { visible, draggable, destroyOnClose } = toRefs(props); - const attrs = useAttrs(); - useModalDragMove({ - visible, - destroyOnClose, - draggable, - }); - - const onCancel = (e: Event) => { - emit('cancel', e); - }; - - return () => { - const propsData = { ...unref(attrs), ...props, onCancel } as Recordable; - return {extendSlots(slots)}; - }; - }, -}); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalClose.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalClose.vue deleted file mode 100644 index a0d9612e4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalClose.vue +++ /dev/null @@ -1,106 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalFooter.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalFooter.vue deleted file mode 100644 index d8cefdb1a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalFooter.vue +++ /dev/null @@ -1,40 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalHeader.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalHeader.vue deleted file mode 100644 index 2f4577832..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalHeader.vue +++ /dev/null @@ -1,22 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalWrapper.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalWrapper.vue deleted file mode 100644 index 699bf9cbc..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/components/ModalWrapper.vue +++ /dev/null @@ -1,169 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModal.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModal.ts deleted file mode 100644 index fac82b77c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModal.ts +++ /dev/null @@ -1,163 +0,0 @@ -import type { - UseModalReturnType, - ModalMethods, - ModalProps, - ReturnMethods, - UseModalInnerReturnType, -} from '../typing'; -import { - ref, - onUnmounted, - unref, - getCurrentInstance, - reactive, - watchEffect, - nextTick, - toRaw, -} from 'vue'; -import { isProdMode } from '/@/utils/env'; -import { isFunction } from '/@/utils/is'; -import { isEqual } from 'lodash-es'; -import { tryOnUnmounted } from '@vueuse/core'; -import { error } from '/@/utils/log'; -import { computed } from 'vue'; - -const dataTransfer = reactive({}); - -const visibleData = reactive<{ [key: number]: boolean }>({}); - -/** - * @description: Applicable to independent modal and call outside - */ -export function useModal(): UseModalReturnType { - const modal = ref>(null); - const loaded = ref>(false); - const uid = ref(''); - - function register(modalMethod: ModalMethods, uuid: string) { - if (!getCurrentInstance()) { - throw new Error('useModal() can only be used inside setup() or functional components!'); - } - uid.value = uuid; - isProdMode() && - onUnmounted(() => { - modal.value = null; - loaded.value = false; - dataTransfer[unref(uid)] = null; - }); - if (unref(loaded) && isProdMode() && modalMethod === unref(modal)) return; - - modal.value = modalMethod; - loaded.value = true; - modalMethod.emitVisible = (visible: boolean, uid: number) => { - visibleData[uid] = visible; - }; - } - - const getInstance = () => { - const instance = unref(modal); - if (!instance) { - error('useModal instance is undefined!'); - } - return instance; - }; - - const methods: ReturnMethods = { - setModalProps: (props: Partial): void => { - getInstance()?.setModalProps(props); - }, - - getVisible: computed((): boolean => { - return visibleData[~~unref(uid)]; - }), - - redoModalHeight: () => { - getInstance()?.redoModalHeight?.(); - }, - - openModal: (visible = true, data?: T, openOnSet = true): void => { - getInstance()?.setModalProps({ - visible: visible, - }); - - if (!data) return; - const id = unref(uid); - if (openOnSet) { - dataTransfer[id] = null; - dataTransfer[id] = toRaw(data); - return; - } - const equal = isEqual(toRaw(dataTransfer[id]), toRaw(data)); - if (!equal) { - dataTransfer[id] = toRaw(data); - } - }, - - closeModal: () => { - getInstance()?.setModalProps({ visible: false }); - }, - }; - return [register, methods]; -} - -export const useModalInner = (callbackFn?: Fn): UseModalInnerReturnType => { - const modalInstanceRef = ref>(null); - const currentInstance = getCurrentInstance(); - const uidRef = ref(''); - - const getInstance = () => { - const instance = unref(modalInstanceRef); - if (!instance) { - error('useModalInner instance is undefined!'); - } - return instance; - }; - - const register = (modalInstance: ModalMethods, uuid: string) => { - isProdMode() && - tryOnUnmounted(() => { - modalInstanceRef.value = null; - }); - uidRef.value = uuid; - modalInstanceRef.value = modalInstance; - currentInstance?.emit('register', modalInstance, uuid); - }; - - watchEffect(() => { - const data = dataTransfer[unref(uidRef)]; - if (!data) return; - if (!callbackFn || !isFunction(callbackFn)) return; - nextTick(() => { - callbackFn(data); - }); - }); - - return [ - register, - { - changeLoading: (loading = true) => { - getInstance()?.setModalProps({ loading }); - }, - getVisible: computed((): boolean => { - return visibleData[~~unref(uidRef)]; - }), - - changeOkLoading: (loading = true) => { - getInstance()?.setModalProps({ confirmLoading: loading }); - }, - - closeModal: () => { - getInstance()?.setModalProps({ visible: false }); - }, - - setModalProps: (props: Partial) => { - getInstance()?.setModalProps(props); - }, - - redoModalHeight: () => { - const callRedo = getInstance()?.redoModalHeight; - callRedo && callRedo(); - }, - }, - ]; -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModalContext.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModalContext.ts deleted file mode 100644 index 94d4c4ee8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModalContext.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { InjectionKey } from 'vue'; -import { createContext, useContext } from '/@/hooks/core/useContext'; - -export interface ModalContextProps { - redoModalHeight: () => void; -} - -const key: InjectionKey = Symbol(); - -export function createModalContext(context: ModalContextProps) { - return createContext(context, key); -} - -export function useModalContext() { - return useContext(key); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModalDrag.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModalDrag.ts deleted file mode 100644 index ff05b7b13..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModalDrag.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { Ref, unref, watchEffect } from 'vue'; -import { useTimeoutFn } from '/@/hooks/core/useTimeout'; - -export interface UseModalDragMoveContext { - draggable: Ref; - destroyOnClose: Ref | undefined; - visible: Ref; -} - -export function useModalDragMove(context: UseModalDragMoveContext) { - const getStyle = (dom: any, attr: any) => { - return getComputedStyle(dom)[attr]; - }; - const drag = (wrap: any) => { - if (!wrap) return; - wrap.setAttribute('data-drag', unref(context.draggable)); - const dialogHeaderEl = wrap.querySelector('.ant-modal-header'); - const dragDom = wrap.querySelector('.ant-modal'); - - if (!dialogHeaderEl || !dragDom || !unref(context.draggable)) return; - - dialogHeaderEl.style.cursor = 'move'; - - dialogHeaderEl.onmousedown = (e: any) => { - if (!e) return; - // 鼠标按下,计算当前元素距离可视区的距离 - const disX = e.clientX; - const disY = e.clientY; - const screenWidth = document.body.clientWidth; // body当前宽度 - const screenHeight = document.documentElement.clientHeight; // 可见区域高度(应为body高度,可某些环境下无法获取) - - 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 正则匹配替换 - const domLeft = getStyle(dragDom, 'left'); - const domTop = getStyle(dragDom, 'top'); - let styL = +domLeft; - let styT = +domTop; - - // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px - if (domLeft.includes('%')) { - styL = +document.body.clientWidth * (+domLeft.replace(/%/g, '') / 100); - styT = +document.body.clientHeight * (+domTop.replace(/%/g, '') / 100); - } else { - styL = +domLeft.replace(/px/g, ''); - styT = +domTop.replace(/px/g, ''); - } - - document.onmousemove = function (e) { - // 通过事件委托,计算移动的距离 - let left = e.clientX - disX; - let top = e.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;`; - }; - - document.onmouseup = () => { - document.onmousemove = null; - document.onmouseup = null; - }; - }; - }; - - const handleDrag = () => { - const dragWraps = document.querySelectorAll('.ant-modal-wrap'); - for (const wrap of Array.from(dragWraps)) { - if (!wrap) continue; - const display = getStyle(wrap, 'display'); - const draggable = wrap.getAttribute('data-drag'); - if (display !== 'none') { - // 拖拽位置 - if (draggable === null || unref(context.destroyOnClose)) { - drag(wrap); - } - } - } - }; - - watchEffect(() => { - if (!unref(context.visible) || !unref(context.draggable)) { - return; - } - useTimeoutFn(() => { - handleDrag(); - }, 30); - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModalFullScreen.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModalFullScreen.ts deleted file mode 100644 index b53563a31..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/hooks/useModalFullScreen.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { computed, Ref, ref, unref } from 'vue'; - -export interface UseFullScreenContext { - wrapClassName: Ref; - modalWrapperRef: Ref; - extHeightRef: Ref; -} - -export function useFullScreen(context: UseFullScreenContext) { - // const formerHeightRef = ref(0); - const fullScreenRef = ref(false); - - const getWrapClassName = computed(() => { - const clsName = unref(context.wrapClassName) || ''; - return unref(fullScreenRef) ? `fullscreen-modal ${clsName} ` : unref(clsName); - }); - - function handleFullScreen(e: Event) { - e && e.stopPropagation(); - fullScreenRef.value = !unref(fullScreenRef); - - // const modalWrapper = unref(context.modalWrapperRef); - - // if (!modalWrapper) return; - - // const wrapperEl = modalWrapper.$el as HTMLElement; - // if (!wrapperEl) return; - // const modalWrapSpinEl = wrapperEl.querySelector('.ant-spin-nested-loading') as HTMLElement; - - // if (!modalWrapSpinEl) return; - - // if (!unref(formerHeightRef) && unref(fullScreenRef)) { - // formerHeightRef.value = modalWrapSpinEl.offsetHeight; - // } - - // if (unref(fullScreenRef)) { - // modalWrapSpinEl.style.height = `${window.innerHeight - unref(context.extHeightRef)}px`; - // } else { - // modalWrapSpinEl.style.height = `${unref(formerHeightRef)}px`; - // } - } - return { getWrapClassName, handleFullScreen, fullScreenRef }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/index.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/index.less deleted file mode 100644 index a23be2920..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/index.less +++ /dev/null @@ -1,127 +0,0 @@ -.fullscreen-modal { - overflow: hidden; - - .ant-modal { - top: 0 !important; - right: 0 !important; - bottom: 0 !important; - left: 0 !important; - width: 100% !important; - height: 100%; - - &-content { - height: 100%; - } - } -} - -.ant-modal { - width: 520px; - padding-bottom: 0; - - .ant-modal-body > .scrollbar { - padding: 14px; - } - - &-title { - font-size: 16px; - font-weight: bold; - - .base-title { - cursor: move !important; - } - } - - .ant-modal-body { - padding: 0; - - > .scrollbar > .scrollbar__bar.is-horizontal { - display: none; - } - } - - &-large { - top: 60px; - - &--mini { - top: 16px; - } - } - - &-header { - padding: 16px; - } - - &-content { - box-shadow: 0 4px 8px 0 rgb(0 0 0 / 20%), 0 6px 20px 0 rgb(0 0 0 / 19%); - } - - &-footer { - button + button { - margin-left: 10px; - } - } - - &-close { - font-weight: normal; - outline: none; - } - - &-close-x { - display: inline-block; - width: 96px; - height: 56px; - line-height: 56px; - } - - &-confirm-body { - .ant-modal-confirm-content { - // color: #fff; - - > * { - color: @text-color-help-dark; - } - } - } - - &-confirm-confirm.error .ant-modal-confirm-body > .anticon { - color: @error-color; - } - - &-confirm-btns { - .ant-btn:last-child { - margin-right: 0; - } - } - - &-confirm-info { - .ant-modal-confirm-body > .anticon { - color: @warning-color; - } - } - - &-confirm-confirm.success { - .ant-modal-confirm-body > .anticon { - color: @success-color; - } - } -} - -.ant-modal-confirm .ant-modal-body { - padding: 24px !important; -} -@media screen and (max-height: 600px) { - .ant-modal { - top: 60px; - } -} -@media screen and (max-height: 540px) { - .ant-modal { - top: 30px; - } -} -@media screen and (max-height: 480px) { - .ant-modal { - top: 10px; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/props.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/props.ts deleted file mode 100644 index c3c70c6c1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/props.ts +++ /dev/null @@ -1,83 +0,0 @@ -import type { PropType, CSSProperties } from 'vue'; -import type { ModalWrapperProps } from './typing'; -import { ButtonProps } from 'ant-design-vue/es/button/buttonTypes'; -import { useI18n } from '/@/hooks/web/useI18n'; - -const { t } = useI18n(); - -export const modalProps = { - visible: { type: Boolean }, - scrollTop: { type: Boolean, default: true }, - height: { type: Number }, - minHeight: { type: Number }, - // open drag - draggable: { type: Boolean, default: true }, - centered: { type: Boolean }, - cancelText: { type: String, default: t('common.cancelText') }, - okText: { type: String, default: t('common.okText') }, - - closeFunc: Function as PropType<() => Promise>, -}; - -export const basicProps = Object.assign({}, modalProps, { - defaultFullscreen: { type: Boolean }, - // Can it be full screen - canFullscreen: { type: Boolean, default: true }, - // After enabling the wrapper, the bottom can be increased in height - wrapperFooterOffset: { type: Number, default: 0 }, - // Warm reminder message - helpMessage: [String, Array] as PropType, - // Whether to setting wrapper - useWrapper: { type: Boolean, default: true }, - loading: { type: Boolean }, - loadingTip: { type: String }, - /** - * @description: Show close button - */ - showCancelBtn: { type: Boolean, default: true }, - /** - * @description: Show confirmation button - */ - showOkBtn: { type: Boolean, default: true }, - - wrapperProps: Object as PropType>, - - afterClose: Function as PropType<() => Promise>, - - bodyStyle: Object as PropType, - - closable: { type: Boolean, default: true }, - - closeIcon: Object as PropType, - - confirmLoading: { type: Boolean }, - - destroyOnClose: { type: Boolean }, - - footer: Object as PropType, - - getContainer: Function as PropType<() => any>, - - mask: { type: Boolean, default: true }, - - maskClosable: { type: Boolean, default: true }, - keyboard: { type: Boolean, default: true }, - - maskStyle: Object as PropType, - - okType: { type: String, default: 'primary' }, - - okButtonProps: Object as PropType, - - cancelButtonProps: Object as PropType, - - title: { type: String }, - - visible: { type: Boolean }, - - width: [String, Number] as PropType, - - wrapClassName: { type: String }, - - zIndex: { type: Number }, -}); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/typing.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/typing.ts deleted file mode 100644 index 36a7e7cdc..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Modal/src/typing.ts +++ /dev/null @@ -1,209 +0,0 @@ -import type { ButtonProps } from 'ant-design-vue/lib/button/buttonTypes'; -import type { CSSProperties, VNodeChild, ComputedRef } from 'vue'; -/** - * @description: 弹窗对外暴露的方法 - */ -export interface ModalMethods { - setModalProps: (props: Partial) => void; - emitVisible?: (visible: boolean, uid: number) => void; - redoModalHeight?: () => void; -} - -export type RegisterFn = (modalMethods: ModalMethods, uuid?: string) => void; - -export interface ReturnMethods extends ModalMethods { - openModal: (props?: boolean, data?: T, openOnSet?: boolean) => void; - closeModal: () => void; - getVisible?: ComputedRef; -} - -export type UseModalReturnType = [RegisterFn, ReturnMethods]; - -export interface ReturnInnerMethods extends ModalMethods { - closeModal: () => void; - changeLoading: (loading: boolean) => void; - changeOkLoading: (loading: boolean) => void; - getVisible?: ComputedRef; - redoModalHeight: () => void; -} - -export type UseModalInnerReturnType = [RegisterFn, ReturnInnerMethods]; - -export interface ModalProps { - minHeight?: number; - height?: number; - // 启用wrapper后 底部可以适当增加高度 - wrapperFooterOffset?: number; - draggable?: boolean; - scrollTop?: boolean; - - // 是否可以进行全屏 - canFullscreen?: boolean; - defaultFullscreen?: boolean; - visible?: boolean; - // 温馨提醒信息 - helpMessage: string | string[]; - - // 是否使用modalWrapper - useWrapper: boolean; - - loading: boolean; - loadingTip?: string; - - wrapperProps: Omit; - - showOkBtn: boolean; - showCancelBtn: boolean; - closeFunc: () => Promise; - - /** - * Specify a function that will be called when modal is closed completely. - * @type Function - */ - afterClose?: () => any; - - /** - * Body style for modal body element. Such as height, padding etc. - * @default {} - * @type object - */ - bodyStyle?: CSSProperties; - - /** - * Text of the Cancel button - * @default 'cancel' - * @type string - */ - cancelText?: string; - - /** - * Centered Modal - * @default false - * @type boolean - */ - centered?: boolean; - - /** - * Whether a close (x) button is visible on top right of the modal dialog or not - * @default true - * @type boolean - */ - closable?: boolean; - /** - * Whether a close (x) button is visible on top right of the modal dialog or not - */ - closeIcon?: VNodeChild | JSX.Element; - - /** - * Whether to apply loading visual effect for OK button or not - * @default false - * @type boolean - */ - confirmLoading?: boolean; - - /** - * Whether to unmount child components on onClose - * @default false - * @type boolean - */ - destroyOnClose?: boolean; - - /** - * Footer content, set as :footer="null" when you don't need default buttons - * @default OK and Cancel buttons - * @type any (string | slot) - */ - footer?: VNodeChild | JSX.Element; - - /** - * Return the mount node for Modal - * @default () => document.body - * @type Function - */ - getContainer?: (instance: any) => HTMLElement; - - /** - * Whether show mask or not. - * @default true - * @type boolean - */ - mask?: boolean; - - /** - * Whether to close the modal dialog when the mask (area outside the modal) is clicked - * @default true - * @type boolean - */ - maskClosable?: boolean; - - /** - * Style for modal's mask element. - * @default {} - * @type object - */ - maskStyle?: CSSProperties; - - /** - * Text of the OK button - * @default 'OK' - * @type string - */ - okText?: string; - - /** - * Button type of the OK button - * @default 'primary' - * @type string - */ - okType?: 'primary' | 'danger' | 'dashed' | 'ghost' | 'default'; - - /** - * The ok button props, follow jsx rules - * @type object - */ - okButtonProps?: ButtonProps; - - /** - * The cancel button props, follow jsx rules - * @type object - */ - cancelButtonProps?: ButtonProps; - - /** - * The modal dialog's title - * @type any (string | slot) - */ - title?: VNodeChild | JSX.Element; - - /** - * Width of the modal dialog - * @default 520 - * @type string | number - */ - width?: string | number; - - /** - * The class name of the container of the modal dialog - * @type string - */ - wrapClassName?: string; - - /** - * The z-index of the Modal - * @default 1000 - * @type number - */ - zIndex?: number; -} - -export interface ModalWrapperProps { - footerOffset?: number; - loading: boolean; - modalHeaderHeight: number; - modalFooterHeight: number; - minHeight: number; - height: number; - visible: boolean; - fullScreen: boolean; - useWrapper: boolean; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Page/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Page/index.ts deleted file mode 100644 index d09626405..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Page/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { withInstall } from '/@/utils'; - -import pageFooter from './src/PageFooter.vue'; -import pageWrapper from './src/PageWrapper.vue'; - -export const PageFooter = withInstall(pageFooter); -export const PageWrapper = withInstall(pageWrapper); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Page/src/PageFooter.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Page/src/PageFooter.vue deleted file mode 100644 index e89a6ce97..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Page/src/PageFooter.vue +++ /dev/null @@ -1,50 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Page/src/PageWrapper.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Page/src/PageWrapper.vue deleted file mode 100644 index 8f014b34c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Page/src/PageWrapper.vue +++ /dev/null @@ -1,191 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/index.ts deleted file mode 100644 index c0b4685ea..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as ImagePreview } from './src/Preview.vue'; -export { createImgPreview } from './src/functional'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/Functional.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/Functional.vue deleted file mode 100644 index 1c9192978..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/Functional.vue +++ /dev/null @@ -1,546 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/Preview.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/Preview.vue deleted file mode 100644 index 9996d0b7b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/Preview.vue +++ /dev/null @@ -1,94 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/functional.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/functional.ts deleted file mode 100644 index 74073a20e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/functional.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { Options, Props } from './typing'; -import ImgPreview from './Functional.vue'; -import { isClient } from '/@/utils/is'; -import { createVNode, render } from 'vue'; - -let instance: ReturnType | null = null; -export function createImgPreview(options: Options) { - if (!isClient) return; - const propsData: Partial = {}; - const container = document.createElement('div'); - Object.assign(propsData, { show: true, index: 0, scaleStep: 100 }, options); - - instance = createVNode(ImgPreview, propsData); - render(instance, container); - document.body.appendChild(container); - return instance.component?.exposed; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/typing.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/typing.ts deleted file mode 100644 index bbb8a83e4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Preview/src/typing.ts +++ /dev/null @@ -1,49 +0,0 @@ -export interface Options { - show?: boolean; - imageList: string[]; - index?: number; - scaleStep?: number; - defaultWidth?: number; - maskClosable?: boolean; - rememberState?: boolean; - onImgLoad?: ({ index: number, url: string, dom: HTMLImageElement }) => void; - onImgError?: ({ index: number, url: string, dom: HTMLImageElement }) => void; -} - -export interface Props { - show: boolean; - instance: Props; - imageList: string[]; - index: number; - scaleStep: number; - defaultWidth: number; - maskClosable: boolean; - rememberState: boolean; -} - -export interface PreviewActions { - resume: () => void; - close: () => void; - prev: () => void; - next: () => void; - setScale: (scale: number) => void; - setRotate: (rotate: number) => void; -} - -export interface ImageProps { - alt?: string; - fallback?: string; - src: string; - width: string | number; - height?: string | number; - placeholder?: string | boolean; - preview?: - | boolean - | { - visible?: boolean; - onVisibleChange?: (visible: boolean, prevVisible: boolean) => void; - getContainer: string | HTMLElement | (() => HTMLElement); - }; -} - -export type ImageItem = string | ImageProps; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/index.ts deleted file mode 100644 index 16a2f4087..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { withInstall } from '/@/utils'; -import qrCode from './src/Qrcode.vue'; - -export const QrCode = withInstall(qrCode); -export * from './src/typing'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/Qrcode.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/Qrcode.vue deleted file mode 100644 index 81194e141..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/Qrcode.vue +++ /dev/null @@ -1,112 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/drawCanvas.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/drawCanvas.ts deleted file mode 100644 index 53198e887..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/drawCanvas.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { toCanvas } from 'qrcode'; -import type { QRCodeRenderersOptions } from 'qrcode'; -import { RenderQrCodeParams, ContentType } from './typing'; -import { cloneDeep } from 'lodash-es'; - -export const renderQrCode = ({ - canvas, - content, - width = 0, - options: params = {}, -}: RenderQrCodeParams) => { - const options = cloneDeep(params); - // 容错率,默认对内容少的二维码采用高容错率,内容多的二维码采用低容错率 - options.errorCorrectionLevel = options.errorCorrectionLevel || getErrorCorrectionLevel(content); - - return getOriginWidth(content, options).then((_width: number) => { - options.scale = width === 0 ? undefined : (width / _width) * 4; - return toCanvas(canvas, content, options); - }); -}; - -// 得到原QrCode的大小,以便缩放得到正确的QrCode大小 -function getOriginWidth(content: ContentType, options: QRCodeRenderersOptions) { - const _canvas = document.createElement('canvas'); - return toCanvas(_canvas, content, options).then(() => _canvas.width); -} - -// 对于内容少的QrCode,增大容错率 -function getErrorCorrectionLevel(content: ContentType) { - if (content.length > 36) { - return 'M'; - } else if (content.length > 16) { - return 'Q'; - } else { - return 'H'; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/drawLogo.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/drawLogo.ts deleted file mode 100644 index 85a160f20..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/drawLogo.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { isString } from '/@/utils/is'; -import { RenderQrCodeParams, LogoType } from './typing'; -export const drawLogo = ({ canvas, logo }: RenderQrCodeParams) => { - if (!logo) { - return new Promise((resolve) => { - resolve((canvas as HTMLCanvasElement).toDataURL()); - }); - } - const canvasWidth = (canvas as HTMLCanvasElement).width; - const { - logoSize = 0.15, - bgColor = '#ffffff', - borderSize = 0.05, - crossOrigin, - borderRadius = 8, - logoRadius = 0, - } = logo as LogoType; - - const logoSrc: string = isString(logo) ? logo : logo.src; - const logoWidth = canvasWidth * logoSize; - const logoXY = (canvasWidth * (1 - logoSize)) / 2; - const logoBgWidth = canvasWidth * (logoSize + borderSize); - const logoBgXY = (canvasWidth * (1 - logoSize - borderSize)) / 2; - - const ctx = canvas.getContext('2d'); - if (!ctx) return; - - // logo 底色 - canvasRoundRect(ctx)(logoBgXY, logoBgXY, logoBgWidth, logoBgWidth, borderRadius); - ctx.fillStyle = bgColor; - ctx.fill(); - - // logo - const image = new Image(); - if (crossOrigin || logoRadius) { - image.setAttribute('crossOrigin', crossOrigin || 'anonymous'); - } - image.src = logoSrc; - - // 使用image绘制可以避免某些跨域情况 - const drawLogoWithImage = (image: CanvasImageSource) => { - ctx.drawImage(image, logoXY, logoXY, logoWidth, logoWidth); - }; - - // 使用canvas绘制以获得更多的功能 - const drawLogoWithCanvas = (image: HTMLImageElement) => { - const canvasImage = document.createElement('canvas'); - canvasImage.width = logoXY + logoWidth; - canvasImage.height = logoXY + logoWidth; - const imageCanvas = canvasImage.getContext('2d'); - if (!imageCanvas || !ctx) return; - imageCanvas.drawImage(image, logoXY, logoXY, logoWidth, logoWidth); - - canvasRoundRect(ctx)(logoXY, logoXY, logoWidth, logoWidth, logoRadius); - if (!ctx) return; - const fillStyle = ctx.createPattern(canvasImage, 'no-repeat'); - if (fillStyle) { - ctx.fillStyle = fillStyle; - ctx.fill(); - } - }; - - // 将 logo绘制到 canvas上 - return new Promise((resolve) => { - image.onload = () => { - logoRadius ? drawLogoWithCanvas(image) : drawLogoWithImage(image); - resolve((canvas as HTMLCanvasElement).toDataURL()); - }; - }); -}; - -// copy来的方法,用于绘制圆角 -function canvasRoundRect(ctx: CanvasRenderingContext2D) { - return (x: number, y: number, w: number, h: number, r: number) => { - const minSize = Math.min(w, h); - if (r > minSize / 2) { - r = minSize / 2; - } - ctx.beginPath(); - ctx.moveTo(x + r, y); - ctx.arcTo(x + w, y, x + w, y + h, r); - ctx.arcTo(x + w, y + h, x, y + h, r); - ctx.arcTo(x, y + h, x, y, r); - ctx.arcTo(x, y, x + w, y, r); - ctx.closePath(); - return ctx; - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/qrcodePlus.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/qrcodePlus.ts deleted file mode 100644 index 643986179..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/qrcodePlus.ts +++ /dev/null @@ -1,4 +0,0 @@ -// 参考 qr-code-with-logo 进行ts版本修改 -import { toCanvas } from './toCanvas'; -export * from './typing'; -export { toCanvas }; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/toCanvas.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/toCanvas.ts deleted file mode 100644 index f74d59682..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/toCanvas.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { renderQrCode } from './drawCanvas'; -import { drawLogo } from './drawLogo'; -import { RenderQrCodeParams } from './typing'; -export const toCanvas = (options: RenderQrCodeParams) => { - return renderQrCode(options) - .then(() => { - return options; - }) - .then(drawLogo) as Promise; -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/typing.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/typing.ts deleted file mode 100644 index 3a037e9db..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Qrcode/src/typing.ts +++ /dev/null @@ -1,38 +0,0 @@ -import type { QRCodeSegment, QRCodeRenderersOptions } from 'qrcode'; - -export type ContentType = string | QRCodeSegment[]; - -export type { QRCodeRenderersOptions }; - -export type LogoType = { - src: string; - logoSize: number; - borderColor: string; - bgColor: string; - borderSize: number; - crossOrigin: string; - borderRadius: number; - logoRadius: number; -}; - -export interface RenderQrCodeParams { - canvas: any; - content: ContentType; - width?: number; - options?: QRCodeRenderersOptions; - logo?: LogoType | string; - image?: HTMLImageElement; - downloadName?: string; - download?: boolean | Fn; -} - -export type ToCanvasFn = (options: RenderQrCodeParams) => Promise; - -export interface QrCodeActionType { - download: (fileName?: string) => void; -} - -export interface QrcodeDoneEventParams { - url: string; - ctx?: CanvasRenderingContext2D | null; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/index.ts deleted file mode 100644 index e5b2cb245..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * copy from element-ui - */ - -import Scrollbar from './src/Scrollbar.vue'; - -export { Scrollbar }; -export type { ScrollbarType } from './src/types'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/Scrollbar.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/Scrollbar.vue deleted file mode 100644 index ed08026a2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/Scrollbar.vue +++ /dev/null @@ -1,206 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/bar.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/bar.ts deleted file mode 100644 index 64bd28962..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/bar.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { - defineComponent, - h, - computed, - ref, - getCurrentInstance, - onUnmounted, - inject, - Ref, -} from 'vue'; -import { on, off } from '/@/utils/domUtils'; - -import { renderThumbStyle, BAR_MAP } from './util'; - -export default defineComponent({ - name: 'Bar', - - props: { - vertical: Boolean, - size: String, - move: Number, - }, - - setup(props) { - const instance = getCurrentInstance(); - const thumb = ref(); - const wrap = inject('scroll-bar-wrap', {} as Ref>) as any; - const bar = computed(() => { - return BAR_MAP[props.vertical ? 'vertical' : 'horizontal']; - }); - const barStore = ref({}); - const cursorDown = ref(); - const clickThumbHandler = (e: any) => { - // prevent click event of right button - if (e.ctrlKey || e.button === 2) { - return; - } - window.getSelection()?.removeAllRanges(); - startDrag(e); - barStore.value[bar.value.axis] = - e.currentTarget[bar.value.offset] - - (e[bar.value.client] - e.currentTarget.getBoundingClientRect()[bar.value.direction]); - }; - - const clickTrackHandler = (e: any) => { - const offset = Math.abs( - e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client], - ); - const thumbHalf = thumb.value[bar.value.offset] / 2; - const thumbPositionPercentage = - ((offset - thumbHalf) * 100) / instance?.vnode.el?.[bar.value.offset]; - - wrap.value[bar.value.scroll] = - (thumbPositionPercentage * wrap.value[bar.value.scrollSize]) / 100; - }; - const startDrag = (e: any) => { - e.stopImmediatePropagation(); - cursorDown.value = true; - on(document, 'mousemove', mouseMoveDocumentHandler); - on(document, 'mouseup', mouseUpDocumentHandler); - document.onselectstart = () => false; - }; - - const mouseMoveDocumentHandler = (e: any) => { - if (cursorDown.value === false) return; - const prevPage = barStore.value[bar.value.axis]; - - if (!prevPage) return; - - const offset = - (instance?.vnode.el?.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * - -1; - const thumbClickPosition = thumb.value[bar.value.offset] - prevPage; - const thumbPositionPercentage = - ((offset - thumbClickPosition) * 100) / instance?.vnode.el?.[bar.value.offset]; - wrap.value[bar.value.scroll] = - (thumbPositionPercentage * wrap.value[bar.value.scrollSize]) / 100; - }; - - function mouseUpDocumentHandler() { - cursorDown.value = false; - barStore.value[bar.value.axis] = 0; - off(document, 'mousemove', mouseMoveDocumentHandler); - document.onselectstart = null; - } - - onUnmounted(() => { - off(document, 'mouseup', mouseUpDocumentHandler); - }); - - return () => - h( - 'div', - { - class: ['scrollbar__bar', 'is-' + bar.value.key], - onMousedown: clickTrackHandler, - }, - h('div', { - ref: thumb, - class: 'scrollbar__thumb', - onMousedown: clickThumbHandler, - style: renderThumbStyle({ - size: props.size, - move: props.move, - bar: bar.value, - }), - }), - ); - }, -}); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/types.d.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/types.d.ts deleted file mode 100644 index 4c7eeea84..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/types.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -export interface BarMapItem { - offset: string; - scroll: string; - scrollSize: string; - size: string; - key: string; - axis: string; - client: string; - direction: string; -} -export interface BarMap { - vertical: BarMapItem; - horizontal: BarMapItem; -} - -export interface ScrollbarType { - wrap: ElRef; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/util.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/util.ts deleted file mode 100644 index b7c4845c3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Scrollbar/src/util.ts +++ /dev/null @@ -1,50 +0,0 @@ -import type { BarMap } from './types'; -export const BAR_MAP: BarMap = { - vertical: { - offset: 'offsetHeight', - scroll: 'scrollTop', - scrollSize: 'scrollHeight', - size: 'height', - key: 'vertical', - axis: 'Y', - client: 'clientY', - direction: 'top', - }, - horizontal: { - offset: 'offsetWidth', - scroll: 'scrollLeft', - scrollSize: 'scrollWidth', - size: 'width', - key: 'horizontal', - axis: 'X', - client: 'clientX', - direction: 'left', - }, -}; - -// @ts-ignore -export function renderThumbStyle({ move, size, bar }) { - const style = {} as any; - const translate = `translate${bar.axis}(${move}%)`; - - style[bar.size] = size; - style.transform = translate; - style.msTransform = translate; - style.webkitTransform = translate; - - return style; -} - -function extend(to: T, _from: K): T & K { - return Object.assign(to, _from); -} - -export function toObject(arr: Array): Recordable { - const res = {}; - for (let i = 0; i < arr.length; i++) { - if (arr[i]) { - extend(res, arr[i]); - } - } - return res; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/index.ts deleted file mode 100644 index 0dfd24855..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as SimpleMenu } from './src/SimpleMenu.vue'; -export { default as SimpleMenuTag } from './src/SimpleMenuTag.vue'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/SimpleMenu.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/SimpleMenu.vue deleted file mode 100644 index 45015be6c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/SimpleMenu.vue +++ /dev/null @@ -1,160 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/SimpleMenuTag.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/SimpleMenuTag.vue deleted file mode 100644 index b7d3cb366..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/SimpleMenuTag.vue +++ /dev/null @@ -1,68 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/SimpleSubMenu.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/SimpleSubMenu.vue deleted file mode 100644 index bb4e77851..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/SimpleSubMenu.vue +++ /dev/null @@ -1,113 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/Menu.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/Menu.vue deleted file mode 100644 index 28f78fbe0..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/Menu.vue +++ /dev/null @@ -1,158 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/MenuCollapseTransition.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/MenuCollapseTransition.vue deleted file mode 100644 index 5295439a7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/MenuCollapseTransition.vue +++ /dev/null @@ -1,78 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/MenuItem.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/MenuItem.vue deleted file mode 100644 index c4976dec9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/MenuItem.vue +++ /dev/null @@ -1,107 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/SubMenuItem.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/SubMenuItem.vue deleted file mode 100644 index 7d1b5a62b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/SubMenuItem.vue +++ /dev/null @@ -1,334 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/menu.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/menu.less deleted file mode 100644 index 0c4c5ca54..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/menu.less +++ /dev/null @@ -1,309 +0,0 @@ -@menu-prefix-cls: ~'@{namespace}-menu'; -@menu-popup-prefix-cls: ~'@{namespace}-menu-popup'; -@submenu-popup-prefix-cls: ~'@{namespace}-menu-submenu-popup'; - -@transition-time: 0.2s; -@menu-dark-subsidiary-color: rgba(255, 255, 255, 0.7); - -.light-border { - &::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - display: block; - width: 2px; - content: ''; - background-color: @primary-color; - } -} - -.@{menu-prefix-cls}-menu-popover { - .ant-popover-arrow { - display: none; - } - - .ant-popover-inner-content { - padding: 0; - } - - .@{menu-prefix-cls} { - &-opened > * > &-submenu-title-icon { - transform: translateY(-50%) rotate(90deg) !important; - } - - &-item, - &-submenu-title { - position: relative; - z-index: 1; - padding: 12px 20px; - color: @menu-dark-subsidiary-color; - cursor: pointer; - transition: all @transition-time @ease-in-out; - - &-icon { - position: absolute; - top: 50%; - right: 18px; - transition: transform @transition-time @ease-in-out; - transform: translateY(-50%) rotate(-90deg); - } - } - - &-dark { - .@{menu-prefix-cls}-item, - .@{menu-prefix-cls}-submenu-title { - color: @menu-dark-subsidiary-color; - // background: @menu-dark-active-bg; - - &:hover { - color: #fff; - } - - &-selected { - color: #fff; - background-color: @primary-color !important; - } - } - } - - &-light { - .@{menu-prefix-cls}-item, - .@{menu-prefix-cls}-submenu-title { - color: @text-color-base; - - &:hover { - color: @primary-color; - } - - &-selected { - z-index: 2; - color: @primary-color; - background-color: fade(@primary-color, 10); - - .light-border(); - } - } - } - } -} - -.content(); -.content() { - .@{menu-prefix-cls} { - position: relative; - display: block; - width: 100%; - padding: 0; - margin: 0; - font-size: @font-size-base; - color: @text-color-base; - list-style: none; - outline: none; - - // .collapse-transition { - // transition: @transition-time height ease-in-out, @transition-time padding-top ease-in-out, - // @transition-time padding-bottom ease-in-out; - // } - - &-light { - background-color: #fff; - - .@{menu-prefix-cls}-submenu-active { - color: @primary-color !important; - - &-border { - .light-border(); - } - } - } - - &-dark { - .@{menu-prefix-cls}-submenu-active { - color: #fff !important; - } - } - - &-item { - position: relative; - z-index: 1; - display: flex; - align-items: center; - font-size: @font-size-base; - color: inherit; - list-style: none; - cursor: pointer; - outline: none; - - &:hover, - &:active { - color: inherit; - } - } - - &-item > i { - margin-right: 6px; - } - - &-submenu-title > i, - &-submenu-title span > i { - margin-right: 8px; - } - - // vertical - &-vertical &-item, - &-vertical &-submenu-title { - position: relative; - z-index: 1; - padding: 14px 24px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - cursor: pointer; - - &:hover { - color: @primary-color; - } - - .@{menu-prefix-cls}-tooltip { - width: calc(100% - 0px); - padding: 12px 0; - text-align: center; - } - .@{menu-prefix-cls}-submenu-popup { - padding: 12px 0; - } - } - - &-vertical &-submenu-collapse { - .@{submenu-popup-prefix-cls} { - display: flex; - align-items: center; - justify-content: center; - } - .@{menu-prefix-cls}-submenu-collapsed-show-tit { - flex-direction: column; - } - } - - &-vertical&-collapse &-item, - &-vertical&-collapse &-submenu-title { - padding: 0; - } - - &-vertical &-submenu-title-icon { - position: absolute; - top: 50%; - right: 18px; - transform: translateY(-50%); - } - - &-submenu-title-icon { - transition: transform @transition-time @ease-in-out; - } - - &-vertical &-opened > * > &-submenu-title-icon { - transform: translateY(-50%) rotate(180deg); - } - - &-vertical &-submenu { - &-nested { - padding-left: 20px; - } - .@{menu-prefix-cls}-item { - padding-left: 43px; - } - } - - &-light&-vertical &-item { - &-active:not(.@{menu-prefix-cls}-submenu) { - z-index: 2; - color: @primary-color; - background-color: fade(@primary-color, 10); - - .light-border(); - } - &-active.@{menu-prefix-cls}-submenu { - color: @primary-color; - } - } - - &-light&-vertical&-collapse { - > li.@{menu-prefix-cls}-item-active, - .@{menu-prefix-cls}-submenu-active { - position: relative; - background-color: fade(@primary-color, 5); - - &::after { - display: none; - } - - &::before { - position: absolute; - top: 0; - left: 0; - width: 3px; - height: 100%; - content: ''; - background-color: @primary-color; - } - } - } - - &-dark&-vertical &-item, - &-dark&-vertical &-submenu-title { - color: @menu-dark-subsidiary-color; - &-active:not(.@{menu-prefix-cls}-submenu) { - color: #fff !important; - background-color: @primary-color !important; - } - - &:hover { - color: #fff; - } - } - - &-dark&-vertical&-collapse { - > li.@{menu-prefix-cls}-item-active, - .@{menu-prefix-cls}-submenu-active { - position: relative; - color: #fff !important; - background-color: @sider-dark-darken-bg-color !important; - - &::before { - position: absolute; - top: 0; - left: 0; - width: 3px; - height: 100%; - content: ''; - background-color: @primary-color; - } - - .@{menu-prefix-cls}-submenu-collapse { - background-color: transparent; - } - } - } - - &-dark&-vertical &-submenu &-item { - &-active, - &-active:hover { - color: #fff; - border-right: none; - } - } - - &-dark&-vertical &-child-item-active > &-submenu-title { - color: #fff; - } - - &-dark&-vertical &-opened { - .@{menu-prefix-cls}-submenu-has-parent-submenu { - .@{menu-prefix-cls}-submenu-title { - background-color: transparent; - } - } - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/types.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/types.ts deleted file mode 100644 index d828e89a6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/types.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Ref } from 'vue'; - -export interface Props { - theme: string; - activeName?: string | number | undefined; - openNames: string[]; - accordion: boolean; - width: string; - collapsedWidth: string; - indentSize: number; - collapse: boolean; - activeSubMenuNames: (string | number)[]; -} - -export interface SubMenuProvider { - addSubMenu: (name: string | number, update?: boolean) => void; - removeSubMenu: (name: string | number, update?: boolean) => void; - removeAll: () => void; - sliceIndex: (index: number) => void; - isRemoveAllPopup: Ref; - getOpenNames: () => (string | number)[]; - handleMouseleave?: Fn; - level: number; - props: Props; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/useMenu.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/useMenu.ts deleted file mode 100644 index 8830559d3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/useMenu.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { computed, ComponentInternalInstance, unref } from 'vue'; -import type { CSSProperties } from 'vue'; - -export function useMenuItem(instance: ComponentInternalInstance | null) { - const getParentMenu = computed(() => { - return findParentMenu(['Menu', 'SubMenu']); - }); - - const getParentRootMenu = computed(() => { - return findParentMenu(['Menu']); - }); - - const getParentSubMenu = computed(() => { - return findParentMenu(['SubMenu']); - }); - - const getItemStyle = computed((): CSSProperties => { - let parent = instance?.parent; - if (!parent) return {}; - const indentSize = (unref(getParentRootMenu)?.props.indentSize as number) ?? 20; - let padding = indentSize; - - if (unref(getParentRootMenu)?.props.collapse) { - padding = indentSize; - } else { - while (parent && parent.type.name !== 'Menu') { - if (parent.type.name === 'SubMenu') { - padding += indentSize; - } - parent = parent.parent; - } - } - return { paddingLeft: padding + 'px' }; - }); - - function findParentMenu(name: string[]) { - let parent = instance?.parent; - if (!parent) return null; - while (parent && name.indexOf(parent.type.name!) === -1) { - parent = parent.parent; - } - return parent; - } - - function getParentList() { - let parent = instance; - if (!parent) - return { - uidList: [], - list: [], - }; - const ret: any[] = []; - while (parent && parent.type.name !== 'Menu') { - if (parent.type.name === 'SubMenu') { - ret.push(parent); - } - parent = parent.parent; - } - return { - uidList: ret.map((item) => item.uid), - list: ret, - }; - } - - function getParentInstance(instance: ComponentInternalInstance, name = 'SubMenu') { - let parent = instance.parent; - while (parent) { - if (parent.type.name !== name) { - return parent; - } - parent = parent.parent; - } - return parent; - } - - return { - getParentMenu, - getParentInstance, - getParentRootMenu, - getParentList, - getParentSubMenu, - getItemStyle, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/useSimpleMenuContext.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/useSimpleMenuContext.ts deleted file mode 100644 index f3d810032..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/components/useSimpleMenuContext.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { InjectionKey, Ref } from 'vue'; -import type { Emitter } from '/@/utils/mitt'; -import { createContext, useContext } from '/@/hooks/core/useContext'; - -export interface SimpleRootMenuContextProps { - rootMenuEmitter: Emitter; - activeName: Ref; -} - -const key: InjectionKey = Symbol(); - -export function createSimpleRootMenuContext(context: SimpleRootMenuContextProps) { - return createContext(context, key, { readonly: false, native: true }); -} - -export function useSimpleRootMenuContext() { - return useContext(key); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/index.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/index.less deleted file mode 100644 index 4f9c9ce17..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/index.less +++ /dev/null @@ -1,77 +0,0 @@ -@simple-prefix-cls: ~'@{namespace}-simple-menu'; -@prefix-cls: ~'@{namespace}-menu'; - -.@{prefix-cls} { - &-dark&-vertical .@{simple-prefix-cls}__parent { - background-color: @sider-dark-bg-color; - > .@{prefix-cls}-submenu-title { - background-color: @sider-dark-bg-color; - } - } - - &-dark&-vertical .@{simple-prefix-cls}__children, - &-dark&-popup .@{simple-prefix-cls}__children { - background-color: @sider-dark-lighten-bg-color; - > .@{prefix-cls}-submenu-title { - background-color: @sider-dark-lighten-bg-color; - } - } - - .collapse-title { - overflow: hidden; - font-size: 12px; - text-overflow: ellipsis; - white-space: nowrap; - } -} - -.@{simple-prefix-cls} { - &-sub-title { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - transition: all 0.3s; - } - - &-tag { - position: absolute; - top: calc(50% - 8px); - right: 30px; - display: inline-block; - padding: 2px 3px; - margin-right: 4px; - font-size: 10px; - line-height: 14px; - color: #fff; - border-radius: 2px; - - &--collapse { - top: 6px !important; - right: 2px; - } - - &--dot { - top: calc(50% - 2px); - width: 6px; - height: 6px; - padding: 0; - border-radius: 50%; - } - - &--primary { - background-color: @primary-color; - } - - &--error { - background-color: @error-color; - } - - &--success { - background-color: @success-color; - } - - &--warn { - background-color: @warning-color; - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/types.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/types.ts deleted file mode 100644 index 2e292d420..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface MenuState { - activeName: string; - openNames: string[]; - activeSubMenuNames: string[]; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/useOpenKeys.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/useOpenKeys.ts deleted file mode 100644 index 1b3cf7b17..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/SimpleMenu/src/useOpenKeys.ts +++ /dev/null @@ -1,50 +0,0 @@ -import type { Menu as MenuType } from '/@/router/types'; -import type { MenuState } from './types'; - -import { computed, Ref, toRaw } from 'vue'; - -import { unref } from 'vue'; -import { uniq } from 'lodash-es'; -import { getAllParentPath } from '/@/router/helper/menuHelper'; - -import { useTimeoutFn } from '/@/hooks/core/useTimeout'; -import { useDebounceFn } from '@vueuse/core'; - -export function useOpenKeys( - menuState: MenuState, - menus: Ref, - accordion: Ref, - mixSider: Ref, - collapse: Ref, -) { - const debounceSetOpenKeys = useDebounceFn(setOpenKeys, 50); - async function setOpenKeys(path: string) { - const native = !mixSider.value; - const menuList = toRaw(menus.value); - useTimeoutFn( - () => { - if (menuList?.length === 0) { - menuState.activeSubMenuNames = []; - menuState.openNames = []; - return; - } - const keys = getAllParentPath(menuList, path); - - if (!unref(accordion)) { - menuState.openNames = uniq([...menuState.openNames, ...keys]); - } else { - menuState.openNames = keys; - } - menuState.activeSubMenuNames = menuState.openNames; - }, - 30, - native, - ); - } - - const getOpenKeys = computed(() => { - return unref(collapse) ? [] : menuState.openNames; - }); - - return { setOpenKeys: debounceSetOpenKeys, getOpenKeys }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/StrengthMeter/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/StrengthMeter/index.ts deleted file mode 100644 index 9763afab2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/StrengthMeter/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { withInstall } from '/@/utils'; -import strengthMeter from './src/StrengthMeter.vue'; - -export const StrengthMeter = withInstall(strengthMeter); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/StrengthMeter/src/StrengthMeter.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/StrengthMeter/src/StrengthMeter.vue deleted file mode 100644 index e0fc33174..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/StrengthMeter/src/StrengthMeter.vue +++ /dev/null @@ -1,142 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/index.ts deleted file mode 100644 index 1ec9568bf..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -export { default as BasicTable } from './src/BasicTable.vue'; -export { default as TableAction } from './src/components/TableAction.vue'; -export { default as EditTableHeaderIcon } from './src/components/EditTableHeaderIcon.vue'; -export { default as TableImg } from './src/components/TableImg.vue'; - -export * from './src/types/table'; -export * from './src/types/pagination'; -export * from './src/types/tableAction'; -export { useTable } from './src/hooks/useTable'; -export type { FormSchema, FormProps } from '/@/components/Form/src/types/form'; -export type { EditRecordRow } from './src/components/editable'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/BasicTable.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/BasicTable.vue deleted file mode 100644 index ccda8a945..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/BasicTable.vue +++ /dev/null @@ -1,456 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/componentMap.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/componentMap.ts deleted file mode 100644 index 3f7247190..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/componentMap.ts +++ /dev/null @@ -1,36 +0,0 @@ -import type { Component } from 'vue'; -import { - Input, - Select, - Checkbox, - InputNumber, - Switch, - DatePicker, - TimePicker, - AutoComplete, -} from 'ant-design-vue'; -import type { ComponentType } from './types/componentType'; -import { ApiSelect, ApiTreeSelect } from '/@/components/Form'; - -const componentMap = new Map(); - -componentMap.set('Input', Input); -componentMap.set('InputNumber', InputNumber); -componentMap.set('Select', Select); -componentMap.set('ApiSelect', ApiSelect); -componentMap.set('AutoComplete', AutoComplete); -componentMap.set('ApiTreeSelect', ApiTreeSelect); -componentMap.set('Switch', Switch); -componentMap.set('Checkbox', Checkbox); -componentMap.set('DatePicker', DatePicker); -componentMap.set('TimePicker', TimePicker); - -export function add(compName: ComponentType, component: Component) { - componentMap.set(compName, component); -} - -export function del(compName: ComponentType) { - componentMap.delete(compName); -} - -export { componentMap }; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/EditTableHeaderIcon.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/EditTableHeaderIcon.vue deleted file mode 100644 index 369820e7a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/EditTableHeaderIcon.vue +++ /dev/null @@ -1,16 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/HeaderCell.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/HeaderCell.vue deleted file mode 100644 index c21bfd040..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/HeaderCell.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableAction.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableAction.vue deleted file mode 100644 index 4c5c1ed9a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableAction.vue +++ /dev/null @@ -1,202 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableFooter.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableFooter.vue deleted file mode 100644 index 68e556b3c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableFooter.vue +++ /dev/null @@ -1,94 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableHeader.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableHeader.vue deleted file mode 100644 index 189e913d9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableHeader.vue +++ /dev/null @@ -1,81 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableImg.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableImg.vue deleted file mode 100644 index 6b533aa03..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableImg.vue +++ /dev/null @@ -1,85 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableTitle.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableTitle.vue deleted file mode 100644 index 0b797e13c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/TableTitle.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/CellComponent.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/CellComponent.ts deleted file mode 100644 index 3a1669382..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/CellComponent.ts +++ /dev/null @@ -1,44 +0,0 @@ -import type { FunctionalComponent, defineComponent } from 'vue'; -import type { ComponentType } from '../../types/componentType'; -import { componentMap } from '/@/components/Table/src/componentMap'; - -import { Popover } from 'ant-design-vue'; -import { h } from 'vue'; - -export interface ComponentProps { - component: ComponentType; - rule: boolean; - popoverVisible: boolean; - ruleMessage: string; - getPopupContainer?: Fn; -} - -export const CellComponent: FunctionalComponent = ( - { - component = 'Input', - rule = true, - ruleMessage, - popoverVisible, - getPopupContainer, - }: ComponentProps, - { attrs }, -) => { - const Comp = componentMap.get(component) as typeof defineComponent; - - const DefaultComp = h(Comp, attrs); - if (!rule) { - return DefaultComp; - } - return h( - Popover, - { - overlayClassName: 'edit-cell-rule-popover', - visible: !!popoverVisible, - ...(getPopupContainer ? { getPopupContainer } : {}), - }, - { - default: () => DefaultComp, - content: () => ruleMessage, - }, - ); -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/EditableCell.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/EditableCell.vue deleted file mode 100644 index 5a4be7ea3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/EditableCell.vue +++ /dev/null @@ -1,512 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/helper.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/helper.ts deleted file mode 100644 index 9c600c9f1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/helper.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ComponentType } from '../../types/componentType'; -import { useI18n } from '/@/hooks/web/useI18n'; - -const { t } = useI18n(); - -/** - * @description: 生成placeholder - */ -export function createPlaceholderMessage(component: ComponentType) { - if (component.includes('Input') || component.includes('AutoComplete')) { - return t('common.inputText'); - } - if (component.includes('Picker')) { - return t('common.chooseText'); - } - - if ( - component.includes('Select') || - component.includes('Checkbox') || - component.includes('Radio') || - component.includes('Switch') || - component.includes('DatePicker') || - component.includes('TimePicker') - ) { - return t('common.chooseText'); - } - return ''; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/index.ts deleted file mode 100644 index 4f7d4dac2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/editable/index.ts +++ /dev/null @@ -1,68 +0,0 @@ -import type { BasicColumn } from '/@/components/Table/src/types/table'; - -import { h, Ref } from 'vue'; - -import EditableCell from './EditableCell.vue'; -import { isArray } from '/@/utils/is'; - -interface Params { - text: string; - record: Recordable; - index: number; -} - -export function renderEditCell(column: BasicColumn) { - return ({ text: value, record, index }: Params) => { - record.onValid = async () => { - if (isArray(record?.validCbs)) { - const validFns = (record?.validCbs || []).map((fn) => fn()); - const res = await Promise.all(validFns); - return res.every((item) => !!item); - } else { - return false; - } - }; - - record.onEdit = async (edit: boolean, submit = false) => { - if (!submit) { - record.editable = edit; - } - - if (!edit && submit) { - if (!(await record.onValid())) return false; - const res = await record.onSubmitEdit?.(); - if (res) { - record.editable = false; - return true; - } - return false; - } - // cancel - if (!edit && !submit) { - record.onCancelEdit?.(); - } - return true; - }; - - return h(EditableCell, { - value, - record, - column, - index, - }); - }; -} - -export type EditRecordRow = Partial< - { - onEdit: (editable: boolean, submit?: boolean) => Promise; - onValid: () => Promise; - editable: boolean; - onCancel: Fn; - onSubmit: Fn; - submitCbs: Fn[]; - cancelCbs: Fn[]; - validCbs: Fn[]; - editValueRefs: Recordable; - } & T ->; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/ColumnSetting.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/ColumnSetting.vue deleted file mode 100644 index dc72a3533..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/ColumnSetting.vue +++ /dev/null @@ -1,482 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/FullScreenSetting.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/FullScreenSetting.vue deleted file mode 100644 index af07f84cb..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/FullScreenSetting.vue +++ /dev/null @@ -1,38 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/RedoSetting.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/RedoSetting.vue deleted file mode 100644 index 81829a17d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/RedoSetting.vue +++ /dev/null @@ -1,33 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/SizeSetting.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/SizeSetting.vue deleted file mode 100644 index 79c4a2284..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/SizeSetting.vue +++ /dev/null @@ -1,64 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/index.vue deleted file mode 100644 index ab03cb22b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/components/settings/index.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/const.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/const.ts deleted file mode 100644 index 2a45fac7a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/const.ts +++ /dev/null @@ -1,38 +0,0 @@ -import componentSetting from '/@/settings/componentSetting'; - -const { table } = componentSetting; - -const { - pageSizeOptions, - defaultPageSize, - fetchSetting, - defaultSize, - defaultSortFn, - defaultFilterFn, -} = table; - -export const ROW_KEY = 'key'; - -// Optional display number per page; -export const PAGE_SIZE_OPTIONS = pageSizeOptions; - -// Number of items displayed per page -export const PAGE_SIZE = defaultPageSize; - -// Common interface field settings -export const FETCH_SETTING = fetchSetting; - -// Default Size -export const DEFAULT_SIZE = defaultSize; - -// Configure general sort function -export const DEFAULT_SORT_FN = defaultSortFn; - -export const DEFAULT_FILTER_FN = defaultFilterFn; - -// Default layout of table cells -export const DEFAULT_ALIGN = 'center'; - -export const INDEX_COLUMN_FLAG = 'INDEX'; - -export const ACTION_COLUMN_FLAG = 'ACTION'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useColumns.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useColumns.ts deleted file mode 100644 index 5357a26f7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useColumns.ts +++ /dev/null @@ -1,317 +0,0 @@ -import type { BasicColumn, BasicTableProps, CellFormat, GetColumnsParams } from '../types/table'; -import type { PaginationProps } from '../types/pagination'; -import type { ComputedRef } from 'vue'; -import { computed, Ref, ref, toRaw, unref, watch } from 'vue'; -import { renderEditCell } from '../components/editable'; -import { usePermission } from '/@/hooks/web/usePermission'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { isArray, isBoolean, isFunction, isMap, isString } from '/@/utils/is'; -import { cloneDeep, isEqual } from 'lodash-es'; -import { formatToDate } from '/@/utils/dateUtil'; -import { ACTION_COLUMN_FLAG, DEFAULT_ALIGN, INDEX_COLUMN_FLAG, PAGE_SIZE } from '../const'; - -function handleItem(item: BasicColumn, ellipsis: boolean) { - const { key, dataIndex, children } = item; - item.align = item.align || DEFAULT_ALIGN; - if (ellipsis) { - if (!key) { - item.key = dataIndex; - } - if (!isBoolean(item.ellipsis)) { - Object.assign(item, { - ellipsis, - }); - } - } - if (children && children.length) { - handleChildren(children, !!ellipsis); - } -} - -function handleChildren(children: BasicColumn[] | undefined, ellipsis: boolean) { - if (!children) return; - children.forEach((item) => { - const { children } = item; - handleItem(item, ellipsis); - handleChildren(children, ellipsis); - }); -} - -function handleIndexColumn( - propsRef: ComputedRef, - getPaginationRef: ComputedRef, - columns: BasicColumn[], -) { - const { t } = useI18n(); - - const { showIndexColumn, indexColumnProps, isTreeTable } = unref(propsRef); - - let pushIndexColumns = false; - if (unref(isTreeTable)) { - return; - } - columns.forEach(() => { - const indIndex = columns.findIndex((column) => column.flag === INDEX_COLUMN_FLAG); - if (showIndexColumn) { - pushIndexColumns = indIndex === -1; - } else if (!showIndexColumn && indIndex !== -1) { - columns.splice(indIndex, 1); - } - }); - - if (!pushIndexColumns) return; - - const isFixedLeft = columns.some((item) => item.fixed === 'left'); - - columns.unshift({ - flag: INDEX_COLUMN_FLAG, - width: 75, - title: t('component.table.index'), - align: 'center', - customRender: ({ index }) => { - const getPagination = unref(getPaginationRef); - if (isBoolean(getPagination)) { - return `${index + 1}`; - } - const { current = 1, pageSize = PAGE_SIZE } = getPagination; - return ((current < 1 ? 1 : current) - 1) * pageSize + index + 1; - }, - ...(isFixedLeft - ? { - fixed: 'left', - } - : {}), - ...indexColumnProps, - }); -} - -function handleActionColumn(propsRef: ComputedRef, columns: BasicColumn[]) { - const { actionColumn } = unref(propsRef); - if (!actionColumn) return; - - const hasIndex = columns.findIndex((column) => column.flag === ACTION_COLUMN_FLAG); - if (hasIndex === -1) { - columns.push({ - ...columns[hasIndex], - fixed: 'right', - ...actionColumn, - flag: ACTION_COLUMN_FLAG, - }); - } -} - -export function useColumns( - propsRef: ComputedRef, - getPaginationRef: ComputedRef, -) { - const columnsRef = ref(unref(propsRef).columns) as unknown as Ref; - let cacheColumns = unref(propsRef).columns; - - const getColumnsRef = computed(() => { - const columns = cloneDeep(unref(columnsRef)); - - handleIndexColumn(propsRef, getPaginationRef, columns); - handleActionColumn(propsRef, columns); - if (!columns) { - return []; - } - const { ellipsis } = unref(propsRef); - - columns.forEach((item) => { - const { customRender, slots } = item; - - handleItem( - item, - Reflect.has(item, 'ellipsis') ? !!item.ellipsis : !!ellipsis && !customRender && !slots, - ); - }); - return columns; - }); - - function isIfShow(column: BasicColumn): boolean { - const ifShow = column.ifShow; - - let isIfShow = true; - - if (isBoolean(ifShow)) { - isIfShow = ifShow; - } - if (isFunction(ifShow)) { - isIfShow = ifShow(column); - } - return isIfShow; - } - const { hasPermission } = usePermission(); - - const getViewColumns = computed(() => { - const viewColumns = sortFixedColumn(unref(getColumnsRef)); - - const columns = cloneDeep(viewColumns); - return columns - .filter((column) => { - return hasPermission(column.auth) && isIfShow(column); - }) - .map((column) => { - const { slots, customRender, format, edit, editRow, flag } = column; - - if (!slots || !slots?.title) { - // column.slots = { title: `header-${dataIndex}`, ...(slots || {}) }; - column.customTitle = column.title; - Reflect.deleteProperty(column, 'title'); - } - const isDefaultAction = [INDEX_COLUMN_FLAG, ACTION_COLUMN_FLAG].includes(flag!); - if (!customRender && format && !edit && !isDefaultAction) { - column.customRender = ({ text, record, index }) => { - return formatCell(text, format, record, index); - }; - } - - // edit table - if ((edit || editRow) && !isDefaultAction) { - column.customRender = renderEditCell(column); - } - return column; - }); - }); - - watch( - () => unref(propsRef).columns, - (columns) => { - columnsRef.value = columns; - cacheColumns = columns?.filter((item) => !item.flag) ?? []; - }, - ); - - function setCacheColumnsByField(dataIndex: string | undefined, value: Partial) { - if (!dataIndex || !value) { - return; - } - cacheColumns.forEach((item) => { - if (item.dataIndex === dataIndex) { - Object.assign(item, value); - return; - } - }); - } - /** - * set columns - * @param columnList key|column - */ - function setColumns(columnList: Partial[] | (string | string[])[]) { - const columns = cloneDeep(columnList); - if (!isArray(columns)) return; - - if (columns.length <= 0) { - columnsRef.value = []; - return; - } - - const firstColumn = columns[0]; - - const cacheKeys = cacheColumns.map((item) => item.dataIndex); - - if (!isString(firstColumn) && !isArray(firstColumn)) { - columnsRef.value = columns as BasicColumn[]; - } else { - const columnKeys = (columns as (string | string[])[]).map(m => m.toString()); - const newColumns: BasicColumn[] = []; - cacheColumns.forEach((item) => { - newColumns.push({ - ...item, - defaultHidden: !columnKeys.includes(item.dataIndex?.toString() || (item.key as string)) - }); - }); - // Sort according to another array - if (!isEqual(cacheKeys, columns)) { - newColumns.sort((prev, next) => { - return ( - columnKeys.indexOf(prev.dataIndex?.toString() as string) - - columnKeys.indexOf(next.dataIndex?.toString() as string) - ); - }); - } - columnsRef.value = newColumns; - } - } - - function getColumns(opt?: GetColumnsParams) { - const { ignoreIndex, ignoreAction, sort } = opt || {}; - let columns = toRaw(unref(getColumnsRef)); - if (ignoreIndex) { - columns = columns.filter((item) => item.flag !== INDEX_COLUMN_FLAG); - } - if (ignoreAction) { - columns = columns.filter((item) => item.flag !== ACTION_COLUMN_FLAG); - } - - if (sort) { - columns = sortFixedColumn(columns); - } - - return columns; - } - function getCacheColumns() { - return cacheColumns; - } - - return { - getColumnsRef, - getCacheColumns, - getColumns, - setColumns, - getViewColumns, - setCacheColumnsByField, - }; -} - -function sortFixedColumn(columns: BasicColumn[]) { - const fixedLeftColumns: BasicColumn[] = []; - const fixedRightColumns: BasicColumn[] = []; - const defColumns: BasicColumn[] = []; - for (const column of columns) { - if (column.fixed === 'left') { - fixedLeftColumns.push(column); - continue; - } - if (column.fixed === 'right') { - fixedRightColumns.push(column); - continue; - } - defColumns.push(column); - } - return [...fixedLeftColumns, ...defColumns, ...fixedRightColumns].filter( - (item) => !item.defaultHidden, - ); -} - -// format cell -export function formatCell(text: string, format: CellFormat, record: Recordable, index: number) { - if (!format) { - return text; - } - - // custom function - if (isFunction(format)) { - return format(text, record, index); - } - - try { - // date type - const DATE_FORMAT_PREFIX = 'date|'; - if (isString(format) && format.startsWith(DATE_FORMAT_PREFIX) && text) { - const dateFormat = format.replace(DATE_FORMAT_PREFIX, ''); - - if (!dateFormat) { - return text; - } - return formatToDate(text, dateFormat); - } - - // Map - if (isMap(format)) { - return format.get(text); - } - } catch (error) { - return text; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useCustomRow.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useCustomRow.ts deleted file mode 100644 index 56187208e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useCustomRow.ts +++ /dev/null @@ -1,100 +0,0 @@ -import type { ComputedRef } from 'vue'; -import type { BasicTableProps } from '../types/table'; -import { unref } from 'vue'; -import { ROW_KEY } from '../const'; -import { isString, isFunction } from '/@/utils/is'; - -interface Options { - setSelectedRowKeys: (keys: string[]) => void; - getSelectRowKeys: () => string[]; - clearSelectedRowKeys: () => void; - emit: EmitType; - getAutoCreateKey: ComputedRef; -} - -function getKey( - record: Recordable, - rowKey: string | ((record: Record) => string) | undefined, - autoCreateKey?: boolean, -) { - if (!rowKey || autoCreateKey) { - return record[ROW_KEY]; - } - if (isString(rowKey)) { - return record[rowKey]; - } - if (isFunction(rowKey)) { - return record[rowKey(record)]; - } - return null; -} - -export function useCustomRow( - propsRef: ComputedRef, - { setSelectedRowKeys, getSelectRowKeys, getAutoCreateKey, clearSelectedRowKeys, emit }: Options, -) { - const customRow = (record: Recordable, index: number) => { - return { - onClick: (e: Event) => { - e?.stopPropagation(); - function handleClick() { - const { rowSelection, rowKey, clickToRowSelect } = unref(propsRef); - if (!rowSelection || !clickToRowSelect) return; - const keys = getSelectRowKeys(); - const key = getKey(record, rowKey, unref(getAutoCreateKey)); - if (!key) return; - - const isCheckbox = rowSelection.type === 'checkbox'; - if (isCheckbox) { - // 找到tr - const tr: HTMLElement = (e as MouseEvent) - .composedPath?.() - .find((dom: HTMLElement) => dom.tagName === 'TR') as HTMLElement; - if (!tr) return; - // 找到Checkbox,检查是否为disabled - const checkBox = tr.querySelector('input[type=checkbox]'); - if (!checkBox || checkBox.hasAttribute('disabled')) return; - if (!keys.includes(key)) { - setSelectedRowKeys([...keys, key]); - return; - } - const keyIndex = keys.findIndex((item) => item === key); - keys.splice(keyIndex, 1); - setSelectedRowKeys(keys); - return; - } - - const isRadio = rowSelection.type === 'radio'; - if (isRadio) { - if (!keys.includes(key)) { - if (keys.length) { - clearSelectedRowKeys(); - } - setSelectedRowKeys([key]); - return; - } - clearSelectedRowKeys(); - } - } - handleClick(); - emit('row-click', record, index, e); - }, - onDblclick: (event: Event) => { - emit('row-dbClick', record, index, event); - }, - onContextmenu: (event: Event) => { - emit('row-contextmenu', record, index, event); - }, - onMouseenter: (event: Event) => { - emit('row-mouseenter', record, index, event); - }, - onMouseleave: (event: Event) => { - emit('row-mouseleave', record, index, event); - }, - }; - }; - - return { - customRow, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useDataSource.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useDataSource.ts deleted file mode 100644 index 7d6c00afc..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useDataSource.ts +++ /dev/null @@ -1,374 +0,0 @@ -import type { BasicTableProps, FetchParams, SorterResult } from '../types/table'; -import type { PaginationProps } from '../types/pagination'; -import { - ref, - unref, - ComputedRef, - computed, - onMounted, - watch, - reactive, - Ref, - watchEffect, -} from 'vue'; -import { useTimeoutFn } from '/@/hooks/core/useTimeout'; -import { buildUUID } from '/@/utils/uuid'; -import { isFunction, isBoolean } from '/@/utils/is'; -import { get, cloneDeep, merge } from 'lodash-es'; -import { FETCH_SETTING, ROW_KEY, PAGE_SIZE } from '../const'; - -interface ActionType { - getPaginationInfo: ComputedRef; - setPagination: (info: Partial) => void; - setLoading: (loading: boolean) => void; - getFieldsValue: () => Recordable; - clearSelectedRowKeys: () => void; - tableData: Ref; -} - -interface SearchState { - sortInfo: Recordable; - filterInfo: Record; -} -export function useDataSource( - propsRef: ComputedRef, - { - getPaginationInfo, - setPagination, - setLoading, - getFieldsValue, - clearSelectedRowKeys, - tableData, - }: ActionType, - emit: EmitType, -) { - const searchState = reactive({ - sortInfo: {}, - filterInfo: {}, - }); - const dataSourceRef = ref([]); - const rawDataSourceRef = ref({}); - - watchEffect(() => { - tableData.value = unref(dataSourceRef); - }); - - watch( - () => unref(propsRef).dataSource, - () => { - const { dataSource, api } = unref(propsRef); - !api && dataSource && (dataSourceRef.value = dataSource); - }, - { - immediate: true, - }, - ); - - function handleTableChange( - pagination: PaginationProps, - filters: Partial>, - sorter: SorterResult, - ) { - const { clearSelectOnPageChange, sortFn, filterFn } = unref(propsRef); - if (clearSelectOnPageChange) { - clearSelectedRowKeys(); - } - setPagination(pagination); - - const params: Recordable = {}; - if (sorter && isFunction(sortFn)) { - const sortInfo = sortFn(sorter); - searchState.sortInfo = sortInfo; - params.sortInfo = sortInfo; - } - - if (filters && isFunction(filterFn)) { - const filterInfo = filterFn(filters); - searchState.filterInfo = filterInfo; - params.filterInfo = filterInfo; - } - fetch(params); - } - - function setTableKey(items: any[]) { - if (!items || !Array.isArray(items)) return; - items.forEach((item) => { - if (!item[ROW_KEY]) { - item[ROW_KEY] = buildUUID(); - } - if (item.children && item.children.length) { - setTableKey(item.children); - } - }); - } - - const getAutoCreateKey = computed(() => { - return unref(propsRef).autoCreateKey && !unref(propsRef).rowKey; - }); - - const getRowKey = computed(() => { - const { rowKey } = unref(propsRef); - return unref(getAutoCreateKey) ? ROW_KEY : rowKey; - }); - - const getDataSourceRef = computed(() => { - const dataSource = unref(dataSourceRef); - if (!dataSource || dataSource.length === 0) { - return unref(dataSourceRef); - } - if (unref(getAutoCreateKey)) { - const firstItem = dataSource[0]; - const lastItem = dataSource[dataSource.length - 1]; - - if (firstItem && lastItem) { - if (!firstItem[ROW_KEY] || !lastItem[ROW_KEY]) { - const data = cloneDeep(unref(dataSourceRef)); - data.forEach((item) => { - if (!item[ROW_KEY]) { - item[ROW_KEY] = buildUUID(); - } - if (item.children && item.children.length) { - setTableKey(item.children); - } - }); - dataSourceRef.value = data; - } - } - } - return unref(dataSourceRef); - }); - - async function updateTableData(index: number, key: string, value: any) { - const record = dataSourceRef.value[index]; - if (record) { - dataSourceRef.value[index][key] = value; - } - return dataSourceRef.value[index]; - } - - function updateTableDataRecord( - rowKey: string | number, - record: Recordable, - ): Recordable | undefined { - const row = findTableDataRecord(rowKey); - - if (row) { - for (const field in row) { - if (Reflect.has(record, field)) row[field] = record[field]; - } - return row; - } - } - - function deleteTableDataRecord(rowKey: string | number | string[] | number[]) { - if (!dataSourceRef.value || dataSourceRef.value.length == 0) return; - const rowKeyName = unref(getRowKey); - if (!rowKeyName) return; - const rowKeys = !Array.isArray(rowKey) ? [rowKey] : rowKey; - for (const key of rowKeys) { - let index: number | undefined = dataSourceRef.value.findIndex((row) => { - let targetKeyName: string; - if (typeof rowKeyName === 'function') { - targetKeyName = rowKeyName(row); - } else { - targetKeyName = rowKeyName as string; - } - return row[targetKeyName] === key; - }); - if (index >= 0) { - dataSourceRef.value.splice(index, 1); - } - index = unref(propsRef).dataSource?.findIndex((row) => { - let targetKeyName: string; - if (typeof rowKeyName === 'function') { - targetKeyName = rowKeyName(row); - } else { - targetKeyName = rowKeyName as string; - } - return row[targetKeyName] === key; - }); - if (typeof index !== 'undefined' && index !== -1) - unref(propsRef).dataSource?.splice(index, 1); - } - setPagination({ - total: unref(propsRef).dataSource?.length, - }); - } - - function insertTableDataRecord(record: Recordable, index: number): Recordable | undefined { - // if (!dataSourceRef.value || dataSourceRef.value.length == 0) return; - index = index ?? dataSourceRef.value?.length; - unref(dataSourceRef).splice(index, 0, record); - return unref(dataSourceRef); - } - - function findTableDataRecord(rowKey: string | number) { - if (!dataSourceRef.value || dataSourceRef.value.length == 0) return; - - const rowKeyName = unref(getRowKey); - if (!rowKeyName) return; - - const { childrenColumnName = 'children' } = unref(propsRef); - - const findRow = (array: any[]) => { - let ret; - array.some(function iter(r) { - if (typeof rowKeyName === 'function') { - if ((rowKeyName(r) as string) === rowKey) { - ret = r; - return true; - } - } else { - if (Reflect.has(r, rowKeyName) && r[rowKeyName] === rowKey) { - ret = r; - return true; - } - } - return r[childrenColumnName] && r[childrenColumnName].some(iter); - }); - return ret; - }; - - // const row = dataSourceRef.value.find(r => { - // if (typeof rowKeyName === 'function') { - // return (rowKeyName(r) as string) === rowKey - // } else { - // return Reflect.has(r, rowKeyName) && r[rowKeyName] === rowKey - // } - // }) - return findRow(dataSourceRef.value); - } - - async function fetch(opt?: FetchParams) { - const { - api, - searchInfo, - defSort, - fetchSetting, - beforeFetch, - afterFetch, - useSearchForm, - pagination, - } = unref(propsRef); - if (!api || !isFunction(api)) return; - try { - setLoading(true); - const { pageField, sizeField, listField, totalField } = Object.assign( - {}, - FETCH_SETTING, - fetchSetting, - ); - let pageParams: Recordable = {}; - - const { current = 1, pageSize = PAGE_SIZE } = unref(getPaginationInfo) as PaginationProps; - - if ((isBoolean(pagination) && !pagination) || isBoolean(getPaginationInfo)) { - pageParams = {}; - } else { - pageParams[pageField] = (opt && opt.page) || current; - pageParams[sizeField] = pageSize; - } - - const { sortInfo = {}, filterInfo } = searchState; - - let params: Recordable = merge( - pageParams, - useSearchForm ? getFieldsValue() : {}, - searchInfo, - opt?.searchInfo ?? {}, - defSort, - sortInfo, - filterInfo, - opt?.sortInfo ?? {}, - opt?.filterInfo ?? {}, - ); - if (beforeFetch && isFunction(beforeFetch)) { - params = (await beforeFetch(params)) || params; - } - - const res = await api(params); - rawDataSourceRef.value = res; - - const isArrayResult = Array.isArray(res); - - let resultItems: Recordable[] = isArrayResult ? res : get(res, listField); - const resultTotal: number = isArrayResult ? res.length : get(res, totalField); - - // 假如数据变少,导致总页数变少并小于当前选中页码,通过getPaginationRef获取到的页码是不正确的,需获取正确的页码再次执行 - if (resultTotal) { - const currentTotalPage = Math.ceil(resultTotal / pageSize); - if (current > currentTotalPage) { - setPagination({ - current: currentTotalPage, - }); - return await fetch(opt); - } - } - - if (afterFetch && isFunction(afterFetch)) { - resultItems = (await afterFetch(resultItems)) || resultItems; - } - dataSourceRef.value = resultItems; - setPagination({ - total: resultTotal || 0, - }); - if (opt && opt.page) { - setPagination({ - current: opt.page || 1, - }); - } - emit('fetch-success', { - items: unref(resultItems), - total: resultTotal, - }); - return resultItems; - } catch (error) { - emit('fetch-error', error); - dataSourceRef.value = []; - setPagination({ - total: 0, - }); - } finally { - setLoading(false); - } - } - - function setTableData(values: T[]) { - dataSourceRef.value = values; - } - - function getDataSource() { - return getDataSourceRef.value as T[]; - } - - function getRawDataSource() { - return rawDataSourceRef.value as T; - } - - async function reload(opt?: FetchParams) { - return await fetch(opt); - } - - onMounted(() => { - useTimeoutFn(() => { - unref(propsRef).immediate && fetch(); - }, 16); - }); - - return { - getDataSourceRef, - getDataSource, - getRawDataSource, - getRowKey, - setTableData, - getAutoCreateKey, - fetch, - reload, - updateTableData, - updateTableDataRecord, - deleteTableDataRecord, - insertTableDataRecord, - findTableDataRecord, - handleTableChange, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useLoading.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useLoading.ts deleted file mode 100644 index fe8a0f164..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useLoading.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ref, ComputedRef, unref, computed, watch } from 'vue'; -import type { BasicTableProps } from '../types/table'; - -export function useLoading(props: ComputedRef) { - const loadingRef = ref(unref(props).loading); - - watch( - () => unref(props).loading, - (loading) => { - loadingRef.value = loading; - }, - ); - - const getLoading = computed(() => unref(loadingRef)); - - function setLoading(loading: boolean) { - loadingRef.value = loading; - } - - return { getLoading, setLoading }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/usePagination.tsx b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/usePagination.tsx deleted file mode 100644 index ba310bd14..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/usePagination.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import type { PaginationProps } from '../types/pagination'; -import type { BasicTableProps } from '../types/table'; -import { computed, unref, ref, ComputedRef, watch } from 'vue'; -import { LeftOutlined, RightOutlined } from '@ant-design/icons-vue'; -import { isBoolean } from '/@/utils/is'; -import { PAGE_SIZE, PAGE_SIZE_OPTIONS } from '../const'; -import { useI18n } from '/@/hooks/web/useI18n'; - -interface ItemRender { - page: number; - type: 'page' | 'prev' | 'next'; - originalElement: any; -} - -function itemRender({ page, type, originalElement }: ItemRender) { - if (type === 'prev') { - return page === 0 ? null : ; - } else if (type === 'next') { - return page === 1 ? null : ; - } - return originalElement; -} - -export function usePagination(refProps: ComputedRef) { - const { t } = useI18n(); - - const configRef = ref({}); - const show = ref(true); - - watch( - () => unref(refProps).pagination, - (pagination) => { - if (!isBoolean(pagination) && pagination) { - configRef.value = { - ...unref(configRef), - ...(pagination ?? {}), - }; - } - }, - ); - - const getPaginationInfo = computed((): PaginationProps | boolean => { - const { pagination } = unref(refProps); - - if (!unref(show) || (isBoolean(pagination) && !pagination)) { - return false; - } - - return { - current: 1, - pageSize: PAGE_SIZE, - size: 'small', - defaultPageSize: PAGE_SIZE, - showTotal: (total) => t('component.table.total', { total }), - showSizeChanger: true, - pageSizeOptions: PAGE_SIZE_OPTIONS, - itemRender: itemRender, - showQuickJumper: true, - ...(isBoolean(pagination) ? {} : pagination), - ...unref(configRef), - }; - }); - - function setPagination(info: Partial) { - const paginationInfo = unref(getPaginationInfo); - configRef.value = { - ...(!isBoolean(paginationInfo) ? paginationInfo : {}), - ...info, - }; - } - - function getPagination() { - return unref(getPaginationInfo); - } - - function getShowPagination() { - return unref(show); - } - - async function setShowPagination(flag: boolean) { - show.value = flag; - } - - return { getPagination, getPaginationInfo, setShowPagination, getShowPagination, setPagination }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useRowSelection.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useRowSelection.ts deleted file mode 100644 index 3439a223b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useRowSelection.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { isFunction } from '/@/utils/is'; -import type { BasicTableProps, TableRowSelection } from '../types/table'; -import { computed, ComputedRef, nextTick, Ref, ref, toRaw, unref, watch } from 'vue'; -import { ROW_KEY } from '../const'; -import { omit } from 'lodash-es'; -import { findNodeAll } from '/@/utils/helper/treeHelper'; - -export function useRowSelection( - propsRef: ComputedRef, - tableData: Ref, - emit: EmitType, -) { - const selectedRowKeysRef = ref([]); - const selectedRowRef = ref([]); - - const getRowSelectionRef = computed((): TableRowSelection | null => { - const { rowSelection } = unref(propsRef); - if (!rowSelection) { - return null; - } - - return { - selectedRowKeys: unref(selectedRowKeysRef), - onChange: (selectedRowKeys: string[]) => { - setSelectedRowKeys(selectedRowKeys); - }, - ...omit(rowSelection, ['onChange']), - }; - }); - - watch( - () => unref(propsRef).rowSelection?.selectedRowKeys, - (v: string[]) => { - setSelectedRowKeys(v); - }, - ); - - watch( - () => unref(selectedRowKeysRef), - () => { - nextTick(() => { - const { rowSelection } = unref(propsRef); - if (rowSelection) { - const { onChange } = rowSelection; - if (onChange && isFunction(onChange)) onChange(getSelectRowKeys(), getSelectRows()); - } - emit('selection-change', { - keys: getSelectRowKeys(), - rows: getSelectRows(), - }); - }); - }, - { deep: true }, - ); - - const getAutoCreateKey = computed(() => { - return unref(propsRef).autoCreateKey && !unref(propsRef).rowKey; - }); - - const getRowKey = computed(() => { - const { rowKey } = unref(propsRef); - return unref(getAutoCreateKey) ? ROW_KEY : rowKey; - }); - - function setSelectedRowKeys(rowKeys: string[]) { - selectedRowKeysRef.value = rowKeys; - const allSelectedRows = findNodeAll( - toRaw(unref(tableData)).concat(toRaw(unref(selectedRowRef))), - (item) => rowKeys.includes(item[unref(getRowKey) as string]), - { - children: propsRef.value.childrenColumnName ?? 'children', - }, - ); - const trueSelectedRows: any[] = []; - rowKeys.forEach((key: string) => { - const found = allSelectedRows.find((item) => item[unref(getRowKey) as string] === key); - found && trueSelectedRows.push(found); - }); - selectedRowRef.value = trueSelectedRows; - } - - function setSelectedRows(rows: Recordable[]) { - selectedRowRef.value = rows; - } - - function clearSelectedRowKeys() { - selectedRowRef.value = []; - selectedRowKeysRef.value = []; - } - - function deleteSelectRowByKey(key: string) { - const selectedRowKeys = unref(selectedRowKeysRef); - const index = selectedRowKeys.findIndex((item) => item === key); - if (index !== -1) { - unref(selectedRowKeysRef).splice(index, 1); - } - } - - function getSelectRowKeys() { - return unref(selectedRowKeysRef); - } - - function getSelectRows() { - // const ret = toRaw(unref(selectedRowRef)).map((item) => toRaw(item)); - return unref(selectedRowRef) as T[]; - } - - function getRowSelection() { - return unref(getRowSelectionRef)!; - } - - return { - getRowSelection, - getRowSelectionRef, - getSelectRows, - getSelectRowKeys, - setSelectedRowKeys, - clearSelectedRowKeys, - deleteSelectRowByKey, - setSelectedRows, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useScrollTo.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useScrollTo.ts deleted file mode 100644 index b368f81b0..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useScrollTo.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { ComputedRef, Ref } from 'vue'; -import { nextTick, unref } from 'vue'; -import { warn } from '/@/utils/log'; - -export function useTableScrollTo( - tableElRef: Ref, - getDataSourceRef: ComputedRef, -) { - let bodyEl: HTMLElement | null; - - async function findTargetRowToScroll(targetRowData: Recordable) { - const { id } = targetRowData; - const targetRowEl: HTMLElement | null | undefined = bodyEl?.querySelector( - `[data-row-key="${id}"]`, - ); - //Add a delay to get new dataSource - await nextTick(); - bodyEl?.scrollTo({ - top: targetRowEl?.offsetTop ?? 0, - behavior: 'smooth', - }); - } - - function scrollTo(pos: string): void { - const table = unref(tableElRef); - if (!table) return; - - const tableEl: Element = table.$el; - if (!tableEl) return; - - if (!bodyEl) { - bodyEl = tableEl.querySelector('.ant-table-body'); - if (!bodyEl) return; - } - - const dataSource = unref(getDataSourceRef); - if (!dataSource) return; - - // judge pos type - if (pos === 'top') { - findTargetRowToScroll(dataSource[0]); - } else if (pos === 'bottom') { - findTargetRowToScroll(dataSource[dataSource.length - 1]); - } else { - const targetRowData = dataSource.find((data) => data.id === pos); - if (targetRowData) { - findTargetRowToScroll(targetRowData); - } else { - warn(`id: ${pos} doesn't exist`); - } - } - } - - return { scrollTo }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTable.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTable.ts deleted file mode 100644 index 824249e09..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTable.ts +++ /dev/null @@ -1,167 +0,0 @@ -import type { BasicTableProps, TableActionType, FetchParams, BasicColumn } from '../types/table'; -import type { PaginationProps } from '../types/pagination'; -import type { DynamicProps } from '/#/utils'; -import type { FormActionType } from '/@/components/Form'; -import type { WatchStopHandle } from 'vue'; -import { getDynamicProps } from '/@/utils'; -import { ref, onUnmounted, unref, watch, toRaw } from 'vue'; -import { isProdMode } from '/@/utils/env'; -import { error } from '/@/utils/log'; - -type Props = Partial>; - -type UseTableMethod = TableActionType & { - getForm: () => FormActionType; -}; - -export function useTable(tableProps?: Props): [ - (instance: TableActionType, formInstance: UseTableMethod) => void, - TableActionType & { - getForm: () => FormActionType; - }, -] { - const tableRef = ref>(null); - const loadedRef = ref>(false); - const formRef = ref>(null); - - let stopWatch: WatchStopHandle; - - function register(instance: TableActionType, formInstance: UseTableMethod) { - isProdMode() && - onUnmounted(() => { - tableRef.value = null; - loadedRef.value = null; - }); - - if (unref(loadedRef) && isProdMode() && instance === unref(tableRef)) return; - - tableRef.value = instance; - formRef.value = formInstance; - tableProps && instance.setProps(getDynamicProps(tableProps)); - loadedRef.value = true; - - stopWatch?.(); - - stopWatch = watch( - () => tableProps, - () => { - tableProps && instance.setProps(getDynamicProps(tableProps)); - }, - { - immediate: true, - deep: true, - }, - ); - } - - function getTableInstance(): TableActionType { - const table = unref(tableRef); - if (!table) { - error( - 'The table instance has not been obtained yet, please make sure the table is presented when performing the table operation!', - ); - } - return table as TableActionType; - } - - const methods: TableActionType & { - getForm: () => FormActionType; - } = { - reload: async (opt?: FetchParams) => { - return await getTableInstance().reload(opt); - }, - setProps: (props: Partial) => { - getTableInstance().setProps(props); - }, - redoHeight: () => { - getTableInstance().redoHeight(); - }, - setLoading: (loading: boolean) => { - getTableInstance().setLoading(loading); - }, - getDataSource: () => { - return getTableInstance().getDataSource(); - }, - getRawDataSource: () => { - return getTableInstance().getRawDataSource(); - }, - getColumns: ({ ignoreIndex = false }: { ignoreIndex?: boolean } = {}) => { - const columns = getTableInstance().getColumns({ ignoreIndex }) || []; - return toRaw(columns); - }, - setColumns: (columns: BasicColumn[]) => { - getTableInstance().setColumns(columns); - }, - setTableData: (values: any[]) => { - return getTableInstance().setTableData(values); - }, - setPagination: (info: Partial) => { - return getTableInstance().setPagination(info); - }, - deleteSelectRowByKey: (key: string) => { - getTableInstance().deleteSelectRowByKey(key); - }, - getSelectRowKeys: () => { - return toRaw(getTableInstance().getSelectRowKeys()); - }, - getSelectRows: () => { - return toRaw(getTableInstance().getSelectRows()); - }, - clearSelectedRowKeys: () => { - getTableInstance().clearSelectedRowKeys(); - }, - setSelectedRowKeys: (keys: string[] | number[]) => { - getTableInstance().setSelectedRowKeys(keys); - }, - getPaginationRef: () => { - return getTableInstance().getPaginationRef(); - }, - getSize: () => { - return toRaw(getTableInstance().getSize()); - }, - updateTableData: (index: number, key: string, value: any) => { - return getTableInstance().updateTableData(index, key, value); - }, - deleteTableDataRecord: (rowKey: string | number | string[] | number[]) => { - return getTableInstance().deleteTableDataRecord(rowKey); - }, - insertTableDataRecord: (record: Recordable | Recordable[], index?: number) => { - return getTableInstance().insertTableDataRecord(record, index); - }, - updateTableDataRecord: (rowKey: string | number, record: Recordable) => { - return getTableInstance().updateTableDataRecord(rowKey, record); - }, - findTableDataRecord: (rowKey: string | number) => { - return getTableInstance().findTableDataRecord(rowKey); - }, - getRowSelection: () => { - return toRaw(getTableInstance().getRowSelection()); - }, - getCacheColumns: () => { - return toRaw(getTableInstance().getCacheColumns()); - }, - getForm: () => { - return unref(formRef) as unknown as FormActionType; - }, - setShowPagination: async (show: boolean) => { - getTableInstance().setShowPagination(show); - }, - getShowPagination: () => { - return toRaw(getTableInstance().getShowPagination()); - }, - expandAll: () => { - getTableInstance().expandAll(); - }, - expandRows: (keys: string[]) => { - getTableInstance().expandRows(keys); - }, - collapseAll: () => { - getTableInstance().collapseAll(); - }, - scrollTo: (pos: string) => { - getTableInstance().scrollTo(pos); - }, - }; - - return [register, methods]; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableContext.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableContext.ts deleted file mode 100644 index b657bb27e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableContext.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { Ref } from 'vue'; -import type { BasicTableProps, TableActionType } from '../types/table'; -import { provide, inject, ComputedRef } from 'vue'; - -const key = Symbol('basic-table'); - -type Instance = TableActionType & { - wrapRef: Ref>; - getBindValues: ComputedRef; -}; - -type RetInstance = Omit & { - getBindValues: ComputedRef; -}; - -export function createTableContext(instance: Instance) { - provide(key, instance); -} - -export function useTableContext(): RetInstance { - return inject(key) as RetInstance; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableExpand.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableExpand.ts deleted file mode 100644 index 262836596..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableExpand.ts +++ /dev/null @@ -1,65 +0,0 @@ -import type { ComputedRef, Ref } from 'vue'; -import type { BasicTableProps } from '../types/table'; -import { computed, unref, ref, toRaw } from 'vue'; -import { ROW_KEY } from '../const'; - -export function useTableExpand( - propsRef: ComputedRef, - tableData: Ref, - emit: EmitType, -) { - const expandedRowKeys = ref([]); - - const getAutoCreateKey = computed(() => { - return unref(propsRef).autoCreateKey && !unref(propsRef).rowKey; - }); - - const getRowKey = computed(() => { - const { rowKey } = unref(propsRef); - return unref(getAutoCreateKey) ? ROW_KEY : rowKey; - }); - - const getExpandOption = computed(() => { - const { isTreeTable } = unref(propsRef); - if (!isTreeTable) return {}; - - return { - expandedRowKeys: unref(expandedRowKeys), - onExpandedRowsChange: (keys: string[]) => { - expandedRowKeys.value = keys; - emit('expanded-rows-change', keys); - }, - }; - }); - - function expandAll() { - const keys = getAllKeys(); - expandedRowKeys.value = keys; - } - - function expandRows(keys: string[]) { - // use row ID expands the specified table row - const { isTreeTable } = unref(propsRef); - if (!isTreeTable) return; - expandedRowKeys.value = [...expandedRowKeys.value, ...keys]; - } - - function getAllKeys(data?: Recordable[]) { - const keys: string[] = []; - const { childrenColumnName } = unref(propsRef); - toRaw(data || unref(tableData)).forEach((item) => { - keys.push(item[unref(getRowKey) as string]); - const children = item[childrenColumnName || 'children']; - if (children?.length) { - keys.push(...getAllKeys(children)); - } - }); - return keys; - } - - function collapseAll() { - expandedRowKeys.value = []; - } - - return { getExpandOption, expandAll, expandRows, collapseAll }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableFooter.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableFooter.ts deleted file mode 100644 index 12285eb03..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableFooter.ts +++ /dev/null @@ -1,57 +0,0 @@ -import type { ComputedRef, Ref } from 'vue'; -import type { BasicTableProps } from '../types/table'; -import { unref, computed, h, nextTick, watchEffect } from 'vue'; -import TableFooter from '../components/TableFooter.vue'; -import { useEventListener } from '/@/hooks/event/useEventListener'; - -export function useTableFooter( - propsRef: ComputedRef, - scrollRef: ComputedRef<{ - x: string | number | true; - y: string | number | null; - scrollToFirstRowOnChange: boolean; - }>, - tableElRef: Ref, - getDataSourceRef: ComputedRef, -) { - const getIsEmptyData = computed(() => { - return (unref(getDataSourceRef) || []).length === 0; - }); - - const getFooterProps = computed((): Recordable | undefined => { - const { summaryFunc, showSummary, summaryData } = unref(propsRef); - return showSummary && !unref(getIsEmptyData) - ? () => h(TableFooter, { summaryFunc, summaryData, scroll: unref(scrollRef) }) - : undefined; - }); - - watchEffect(() => { - handleSummary(); - }); - - function handleSummary() { - const { showSummary } = unref(propsRef); - if (!showSummary || unref(getIsEmptyData)) return; - - nextTick(() => { - const tableEl = unref(tableElRef); - if (!tableEl) return; - const bodyDomList = tableEl.$el.querySelectorAll('.ant-table-body'); - const bodyDom = bodyDomList[0]; - useEventListener({ - el: bodyDom, - name: 'scroll', - listener: () => { - const footerBodyDom = tableEl.$el.querySelector( - '.ant-table-footer .ant-table-body', - ) as HTMLDivElement; - if (!footerBodyDom || !bodyDom) return; - footerBodyDom.scrollLeft = bodyDom.scrollLeft; - }, - wait: 0, - options: true, - }); - }); - } - return { getFooterProps }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableForm.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableForm.ts deleted file mode 100644 index bc09c7f6d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableForm.ts +++ /dev/null @@ -1,50 +0,0 @@ -import type { ComputedRef, Slots } from 'vue'; -import type { BasicTableProps, FetchParams } from '../types/table'; -import { unref, computed } from 'vue'; -import type { FormProps } from '/@/components/Form'; -import { isFunction } from '/@/utils/is'; - -export function useTableForm( - propsRef: ComputedRef, - slots: Slots, - fetch: (opt?: FetchParams | undefined) => Promise, - getLoading: ComputedRef, -) { - const getFormProps = computed((): Partial => { - const { formConfig } = unref(propsRef); - const { submitButtonOptions } = formConfig || {}; - return { - showAdvancedButton: true, - ...formConfig, - submitButtonOptions: { loading: unref(getLoading), ...submitButtonOptions }, - compact: true, - }; - }); - - const getFormSlotKeys: ComputedRef = computed(() => { - const keys = Object.keys(slots); - return keys - .map((item) => (item.startsWith('form-') ? item : null)) - .filter((item) => !!item) as string[]; - }); - - function replaceFormSlotKey(key: string) { - if (!key) return ''; - return key?.replace?.(/form\-/, '') ?? ''; - } - - function handleSearchInfoChange(info: Recordable) { - const { handleSearchInfoFn } = unref(propsRef); - if (handleSearchInfoFn && isFunction(handleSearchInfoFn)) { - info = handleSearchInfoFn(info) || info; - } - fetch({ searchInfo: info, page: 1 }); - } - - return { - getFormProps, - replaceFormSlotKey, - getFormSlotKeys, - handleSearchInfoChange, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableHeader.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableHeader.ts deleted file mode 100644 index e72820755..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableHeader.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { ComputedRef, Slots } from 'vue'; -import type { BasicTableProps, InnerHandlers } from '../types/table'; -import { unref, computed, h } from 'vue'; -import TableHeader from '../components/TableHeader.vue'; -import { isString } from '/@/utils/is'; -import { getSlot } from '/@/utils/helper/tsxHelper'; - -export function useTableHeader( - propsRef: ComputedRef, - slots: Slots, - handlers: InnerHandlers, -) { - const getHeaderProps = computed((): Recordable => { - const { title, showTableSetting, titleHelpMessage, tableSetting } = unref(propsRef); - const hideTitle = !slots.tableTitle && !title && !slots.toolbar && !showTableSetting; - if (hideTitle && !isString(title)) { - return {}; - } - - return { - title: hideTitle - ? null - : () => - h( - TableHeader, - { - title, - titleHelpMessage, - showTableSetting, - tableSetting, - onColumnsChange: handlers.onColumnsChange, - } as Recordable, - { - ...(slots.toolbar - ? { - toolbar: () => getSlot(slots, 'toolbar'), - } - : {}), - ...(slots.tableTitle - ? { - tableTitle: () => getSlot(slots, 'tableTitle'), - } - : {}), - ...(slots.headerTop - ? { - headerTop: () => getSlot(slots, 'headerTop'), - } - : {}), - }, - ), - }; - }); - return { getHeaderProps }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableScroll.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableScroll.ts deleted file mode 100644 index 89981e421..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableScroll.ts +++ /dev/null @@ -1,220 +0,0 @@ -import type { BasicTableProps, TableRowSelection, BasicColumn } from '../types/table'; -import { Ref, ComputedRef, ref } from 'vue'; -import { computed, unref, nextTick, watch } from 'vue'; -import { getViewportOffset } from '/@/utils/domUtils'; -import { isBoolean } from '/@/utils/is'; -import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn'; -import { useModalContext } from '/@/components/Modal'; -import { onMountedOrActivated } from '/@/hooks/core/onMountedOrActivated'; -import { useDebounceFn } from '@vueuse/core'; - -export function useTableScroll( - propsRef: ComputedRef, - tableElRef: Ref, - columnsRef: ComputedRef, - rowSelectionRef: ComputedRef, - getDataSourceRef: ComputedRef, - wrapRef: Ref, - formRef: Ref, -) { - const tableHeightRef: Ref> = ref(167); - const modalFn = useModalContext(); - - // Greater than animation time 280 - const debounceRedoHeight = useDebounceFn(redoHeight, 100); - - const getCanResize = computed(() => { - const { canResize, scroll } = unref(propsRef); - return canResize && !(scroll || {}).y; - }); - - watch( - () => [unref(getCanResize), unref(getDataSourceRef)?.length], - () => { - debounceRedoHeight(); - }, - { - flush: 'post', - }, - ); - - function redoHeight() { - nextTick(() => { - calcTableHeight(); - }); - } - - function setHeight(height: number) { - tableHeightRef.value = height; - // Solve the problem of modal adaptive height calculation when the form is placed in the modal - modalFn?.redoModalHeight?.(); - } - - // No need to repeat queries - let paginationEl: HTMLElement | null; - let footerEl: HTMLElement | null; - let bodyEl: HTMLElement | null; - - async function calcTableHeight() { - const { resizeHeightOffset, pagination, maxHeight, isCanResizeParent, useSearchForm } = - unref(propsRef); - const tableData = unref(getDataSourceRef); - - const table = unref(tableElRef); - if (!table) return; - - const tableEl: Element = table.$el; - if (!tableEl) return; - - if (!bodyEl) { - bodyEl = tableEl.querySelector('.ant-table-body'); - if (!bodyEl) return; - } - - const hasScrollBarY = bodyEl.scrollHeight > bodyEl.clientHeight; - const hasScrollBarX = bodyEl.scrollWidth > bodyEl.clientWidth; - - if (hasScrollBarY) { - tableEl.classList.contains('hide-scrollbar-y') && - tableEl.classList.remove('hide-scrollbar-y'); - } else { - !tableEl.classList.contains('hide-scrollbar-y') && tableEl.classList.add('hide-scrollbar-y'); - } - - if (hasScrollBarX) { - tableEl.classList.contains('hide-scrollbar-x') && - tableEl.classList.remove('hide-scrollbar-x'); - } else { - !tableEl.classList.contains('hide-scrollbar-x') && tableEl.classList.add('hide-scrollbar-x'); - } - - bodyEl!.style.height = 'unset'; - - if (!unref(getCanResize) || tableData===undefined || tableData.length === 0) return; - - await nextTick(); - // Add a delay to get the correct bottomIncludeBody paginationHeight footerHeight headerHeight - - const headEl = tableEl.querySelector('.ant-table-thead '); - - if (!headEl) return; - - // Table height from bottom height-custom offset - let paddingHeight = 32; - // Pager height - let paginationHeight = 2; - if (!isBoolean(pagination)) { - paginationEl = tableEl.querySelector('.ant-pagination') as HTMLElement; - if (paginationEl) { - const offsetHeight = paginationEl.offsetHeight; - paginationHeight += offsetHeight || 0; - } else { - // TODO First fix 24 - paginationHeight += 24; - } - } else { - paginationHeight = -8; - } - - let footerHeight = 0; - if (!isBoolean(pagination)) { - if (!footerEl) { - footerEl = tableEl.querySelector('.ant-table-footer') as HTMLElement; - } else { - const offsetHeight = footerEl.offsetHeight; - footerHeight += offsetHeight || 0; - } - } - - let headerHeight = 0; - if (headEl) { - headerHeight = (headEl as HTMLElement).offsetHeight; - } - - let bottomIncludeBody = 0; - if (unref(wrapRef) && isCanResizeParent) { - const tablePadding = 12; - const formMargin = 16; - let paginationMargin = 10; - const wrapHeight = unref(wrapRef)?.offsetHeight ?? 0; - - let formHeight = unref(formRef)?.$el.offsetHeight ?? 0; - if (formHeight) { - formHeight += formMargin; - } - if (isBoolean(pagination) && !pagination) { - paginationMargin = 0; - } - if (isBoolean(useSearchForm) && !useSearchForm) { - paddingHeight = 0; - } - - const headerCellHeight = - (tableEl.querySelector('.ant-table-title') as HTMLElement)?.offsetHeight ?? 0; - - console.log(wrapHeight - formHeight - headerCellHeight - tablePadding - paginationMargin); - bottomIncludeBody = - wrapHeight - formHeight - headerCellHeight - tablePadding - paginationMargin; - } else { - // Table height from bottom - bottomIncludeBody = getViewportOffset(headEl).bottomIncludeBody; - } - - let height = - bottomIncludeBody - - (resizeHeightOffset || 0) - - paddingHeight - - paginationHeight - - footerHeight - - headerHeight; - height = (height > maxHeight! ? (maxHeight as number) : height) ?? height; - setHeight(height); - - bodyEl!.style.height = `${height}px`; - } - useWindowSizeFn(calcTableHeight, 280); - onMountedOrActivated(() => { - calcTableHeight(); - nextTick(() => { - debounceRedoHeight(); - }); - }); - - const getScrollX = computed(() => { - let width = 0; - if (unref(rowSelectionRef)) { - width += 60; - } - - // TODO props ?? 0; - const NORMAL_WIDTH = 150; - - const columns = unref(columnsRef).filter((item) => !item.defaultHidden); - columns.forEach((item) => { - width += Number.parseInt(item.width as string) || 0; - }); - const unsetWidthColumns = columns.filter((item) => !Reflect.has(item, 'width')); - - const len = unsetWidthColumns.length; - if (len !== 0) { - width += len * NORMAL_WIDTH; - } - - const table = unref(tableElRef); - const tableWidth = table?.$el?.offsetWidth ?? 0; - return tableWidth > width ? '100%' : width; - }); - - const getScrollRef = computed(() => { - const tableHeight = unref(tableHeightRef); - const { canResize, scroll } = unref(propsRef); - return { - x: unref(getScrollX), - y: canResize ? tableHeight : null, - scrollToFirstRowOnChange: false, - ...scroll, - }; - }); - - return { getScrollRef, redoHeight }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableStyle.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableStyle.ts deleted file mode 100644 index 292187d88..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/hooks/useTableStyle.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { ComputedRef } from 'vue'; -import type { BasicTableProps, TableCustomRecord } from '../types/table'; -import { unref } from 'vue'; -import { isFunction } from '/@/utils/is'; - -export function useTableStyle(propsRef: ComputedRef, prefixCls: string) { - function getRowClassName(record: TableCustomRecord, index: number) { - const { striped, rowClassName } = unref(propsRef); - const classNames: string[] = []; - if (striped) { - classNames.push((index || 0) % 2 === 1 ? `${prefixCls}-row__striped` : ''); - } - if (rowClassName && isFunction(rowClassName)) { - classNames.push(rowClassName(record, index)); - } - return classNames.filter((cls) => !!cls).join(' '); - } - - return { getRowClassName }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/props.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/props.ts deleted file mode 100644 index 20e020983..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/props.ts +++ /dev/null @@ -1,151 +0,0 @@ -import type { PropType } from 'vue'; -import type { PaginationProps } from './types/pagination'; -import type { - BasicColumn, - FetchSetting, - TableSetting, - SorterResult, - TableCustomRecord, - TableRowSelection, - SizeType, -} from './types/table'; -import type { FormProps } from '/@/components/Form'; - -import { DEFAULT_FILTER_FN, DEFAULT_SORT_FN, FETCH_SETTING, DEFAULT_SIZE } from './const'; -import { propTypes } from '/@/utils/propTypes'; - -export const basicProps = { - clickToRowSelect: { type: Boolean, default: true }, - isTreeTable: Boolean, - tableSetting: propTypes.shape({}), - inset: Boolean, - sortFn: { - type: Function as PropType<(sortInfo: SorterResult) => any>, - default: DEFAULT_SORT_FN, - }, - filterFn: { - type: Function as PropType<(data: Partial>) => any>, - default: DEFAULT_FILTER_FN, - }, - showTableSetting: Boolean, - autoCreateKey: { type: Boolean, default: true }, - striped: { type: Boolean, default: true }, - showSummary: Boolean, - summaryFunc: { - type: [Function, Array] as PropType<(...arg: any[]) => any[]>, - default: null, - }, - summaryData: { - type: Array as PropType, - default: null, - }, - indentSize: propTypes.number.def(24), - canColDrag: { type: Boolean, default: true }, - api: { - type: Function as PropType<(...arg: any[]) => Promise>, - default: null, - }, - beforeFetch: { - type: Function as PropType, - default: null, - }, - afterFetch: { - type: Function as PropType, - default: null, - }, - handleSearchInfoFn: { - type: Function as PropType, - default: null, - }, - fetchSetting: { - type: Object as PropType, - default: () => { - return FETCH_SETTING; - }, - }, - // 立即请求接口 - immediate: { type: Boolean, default: true }, - emptyDataIsShowTable: { type: Boolean, default: true }, - // 额外的请求参数 - searchInfo: { - type: Object as PropType, - default: null, - }, - // 默认的排序参数 - defSort: { - type: Object as PropType, - default: null, - }, - // 使用搜索表单 - useSearchForm: propTypes.bool, - // 表单配置 - formConfig: { - type: Object as PropType>, - default: null, - }, - columns: { - type: [Array] as PropType, - default: () => [], - }, - showIndexColumn: { type: Boolean, default: true }, - indexColumnProps: { - type: Object as PropType, - default: null, - }, - actionColumn: { - type: Object as PropType, - default: null, - }, - ellipsis: { type: Boolean, default: true }, - isCanResizeParent: { type: Boolean, default: false }, - canResize: { type: Boolean, default: true }, - clearSelectOnPageChange: propTypes.bool, - resizeHeightOffset: propTypes.number.def(0), - rowSelection: { - type: Object as PropType, - default: null, - }, - title: { - type: [String, Function] as PropType string)>, - default: null, - }, - titleHelpMessage: { - type: [String, Array] as PropType, - }, - maxHeight: propTypes.number, - dataSource: { - type: Array as PropType, - default: null, - }, - rowKey: { - type: [String, Function] as PropType string)>, - default: '', - }, - bordered: propTypes.bool, - pagination: { - type: [Object, Boolean] as PropType, - default: null, - }, - loading: propTypes.bool, - rowClassName: { - type: Function as PropType<(record: TableCustomRecord, index: number) => string>, - }, - scroll: { - type: Object as PropType<{ x: number | true; y: number }>, - default: null, - }, - beforeEditSubmit: { - type: Function as PropType< - (data: { - record: Recordable; - index: number; - key: string | number; - value: any; - }) => Promise - >, - }, - size: { - type: String as PropType, - default: DEFAULT_SIZE, - }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/column.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/column.ts deleted file mode 100644 index 785e6dfbb..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/column.ts +++ /dev/null @@ -1,198 +0,0 @@ -import { VNodeChild } from 'vue'; - -export interface ColumnFilterItem { - text?: string; - value?: string; - children?: any; -} - -export declare type SortOrder = 'ascend' | 'descend'; - -export interface RecordProps { - text: any; - record: T; - index: number; -} - -export interface FilterDropdownProps { - prefixCls?: string; - setSelectedKeys?: (selectedKeys: string[]) => void; - selectedKeys?: string[]; - confirm?: () => void; - clearFilters?: () => void; - filters?: ColumnFilterItem[]; - getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement; - visible?: boolean; -} - -export declare type CustomRenderFunction = (record: RecordProps) => VNodeChild | JSX.Element; - -export interface ColumnProps { - /** - * specify how content is aligned - * @default 'left' - * @type string - */ - align?: 'left' | 'right' | 'center'; - - /** - * ellipsize cell content, not working with sorter and filters for now. - * tableLayout would be fixed when ellipsis is true. - * @default false - * @type boolean - */ - ellipsis?: boolean; - - /** - * Span of this column's title - * @type number - */ - colSpan?: number; - - /** - * Display field of the data record, could be set like a.b.c - * @type string - */ - dataIndex?: string; - - /** - * Default filtered values - * @type string[] - */ - defaultFilteredValue?: string[]; - - /** - * Default order of sorted values: 'ascend' 'descend' null - * @type string - */ - defaultSortOrder?: SortOrder; - - /** - * Customized filter overlay - * @type any (slot) - */ - filterDropdown?: - | VNodeChild - | JSX.Element - | ((props: FilterDropdownProps) => VNodeChild | JSX.Element); - - /** - * Whether filterDropdown is visible - * @type boolean - */ - filterDropdownVisible?: boolean; - - /** - * Whether the dataSource is filtered - * @default false - * @type boolean - */ - filtered?: boolean; - - /** - * Controlled filtered value, filter icon will highlight - * @type string[] - */ - filteredValue?: string[]; - - /** - * Customized filter icon - * @default false - * @type any - */ - filterIcon?: boolean | VNodeChild | JSX.Element; - - /** - * Whether multiple filters can be selected - * @default true - * @type boolean - */ - filterMultiple?: boolean; - - /** - * Filter menu config - * @type object[] - */ - filters?: ColumnFilterItem[]; - - /** - * Set column to be fixed: true(same as left) 'left' 'right' - * @default false - * @type boolean | string - */ - fixed?: boolean | 'left' | 'right'; - - /** - * Unique key of this column, you can ignore this prop if you've set a unique dataIndex - * @type string - */ - key?: string; - - /** - * Renderer of the table cell. The return value should be a VNode, or an object for colSpan/rowSpan config - * @type Function | ScopedSlot - */ - customRender?: CustomRenderFunction | VNodeChild | JSX.Element; - - /** - * Sort function for local sort, see Array.sort's compareFunction. If you need sort buttons only, set to true - * @type boolean | Function - */ - sorter?: boolean | Function; - - /** - * Order of sorted values: 'ascend' 'descend' false - * @type boolean | string - */ - sortOrder?: boolean | SortOrder; - - /** - * supported sort way, could be 'ascend', 'descend' - * @default ['ascend', 'descend'] - * @type string[] - */ - sortDirections?: SortOrder[]; - - /** - * Title of this column - * @type any (string | slot) - */ - title?: VNodeChild | JSX.Element; - - /** - * Width of this column - * @type string | number - */ - width?: string | number; - - /** - * Set props on per cell - * @type Function - */ - customCell?: (record: T, rowIndex: number) => object; - - /** - * Set props on per header cell - * @type object - */ - customHeaderCell?: (column: ColumnProps) => object; - - /** - * Callback executed when the confirm filter button is clicked, Use as a filter event when using template or jsx - * @type Function - */ - onFilter?: (value: any, record: T) => boolean; - - /** - * Callback executed when filterDropdownVisible is changed, Use as a filterDropdownVisible event when using template or jsx - * @type Function - */ - onFilterDropdownVisibleChange?: (visible: boolean) => void; - - /** - * When using columns, you can setting this property to configure the properties that support the slot, - * such as slots: { filterIcon: 'XXX'} - * @type object - */ - slots?: Recordable; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/componentType.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/componentType.ts deleted file mode 100644 index a683f1dfd..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/componentType.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type ComponentType = - | 'Input' - | 'InputNumber' - | 'Select' - | 'ApiSelect' - | 'AutoComplete' - | 'ApiTreeSelect' - | 'Checkbox' - | 'Switch' - | 'DatePicker' - | 'TimePicker'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/pagination.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/pagination.ts deleted file mode 100644 index c705f33f9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/pagination.ts +++ /dev/null @@ -1,115 +0,0 @@ -import Pagination from 'ant-design-vue/lib/pagination'; -import { VNodeChild } from 'vue'; - -interface PaginationRenderProps { - page: number; - type: 'page' | 'prev' | 'next'; - originalElement: any; -} - -type PaginationPositon = - | 'topLeft' - | 'topCenter' - | 'topRight' - | 'bottomLeft' - | 'bottomCenter' - | 'bottomRight'; - -export declare class PaginationConfig extends Pagination { - position?: PaginationPositon[]; -} - -export interface PaginationProps { - /** - * total number of data items - * @default 0 - * @type number - */ - total?: number; - - /** - * default initial page number - * @default 1 - * @type number - */ - defaultCurrent?: number; - - /** - * current page number - * @type number - */ - current?: number; - - /** - * default number of data items per page - * @default 10 - * @type number - */ - defaultPageSize?: number; - - /** - * number of data items per page - * @type number - */ - pageSize?: number; - - /** - * Whether to hide pager on single page - * @default false - * @type boolean - */ - hideOnSinglePage?: boolean; - - /** - * determine whether pageSize can be changed - * @default false - * @type boolean - */ - showSizeChanger?: boolean; - - /** - * specify the sizeChanger options - * @default ['10', '20', '30', '40'] - * @type string[] - */ - pageSizeOptions?: string[]; - - /** - * determine whether you can jump to pages directly - * @default false - * @type boolean - */ - showQuickJumper?: boolean | object; - - /** - * to display the total number and range - * @type Function - */ - showTotal?: (total: number, range: [number, number]) => any; - - /** - * specify the size of Pagination, can be set to small - * @default '' - * @type string - */ - size?: string; - - /** - * whether to setting simple mode - * @type boolean - */ - simple?: boolean; - - /** - * to customize item innerHTML - * @type Function - */ - itemRender?: (props: PaginationRenderProps) => VNodeChild | JSX.Element; - - /** - * specify the position of Pagination - * @default ['bottomRight'] - * @type string[] - */ - position?: PaginationPositon[]; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/table.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/table.ts deleted file mode 100644 index 240b80d4f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/table.ts +++ /dev/null @@ -1,476 +0,0 @@ -import type { VNodeChild } from 'vue'; -import type { PaginationProps } from './pagination'; -import type { FormProps } from '/@/components/Form'; -import type { TableRowSelection as ITableRowSelection } from 'ant-design-vue/lib/table/interface'; -import type { ColumnProps } from 'ant-design-vue/lib/table'; - -import { ComponentType } from './componentType'; -import { VueNode } from '/@/utils/propTypes'; -import { RoleEnum } from '/@/enums/roleEnum'; - -export declare type SortOrder = 'ascend' | 'descend'; - -export interface TableCurrentDataSource { - currentDataSource: T[]; -} - -export interface TableRowSelection extends ITableRowSelection { - /** - * Callback executed when selected rows change - * @type Function - */ - onChange?: (selectedRowKeys: string[] | number[], selectedRows: T[]) => any; - - /** - * Callback executed when select/deselect one row - * @type Function - */ - onSelect?: (record: T, selected: boolean, selectedRows: Object[], nativeEvent: Event) => any; - - /** - * Callback executed when select/deselect all rows - * @type Function - */ - onSelectAll?: (selected: boolean, selectedRows: T[], changeRows: T[]) => any; - - /** - * Callback executed when row selection is inverted - * @type Function - */ - onSelectInvert?: (selectedRows: string[] | number[]) => any; -} - -export interface TableCustomRecord { - record?: T; - index?: number; -} - -export interface ExpandedRowRenderRecord extends TableCustomRecord { - indent?: number; - expanded?: boolean; -} -export interface ColumnFilterItem { - text?: string; - value?: string; - children?: any; -} - -export interface TableCustomRecord { - record?: T; - index?: number; -} - -export interface SorterResult { - column: ColumnProps; - order: SortOrder; - field: string; - columnKey: string; -} - -export interface FetchParams { - searchInfo?: Recordable; - page?: number; - sortInfo?: Recordable; - filterInfo?: Recordable; -} - -export interface GetColumnsParams { - ignoreIndex?: boolean; - ignoreAction?: boolean; - sort?: boolean; -} - -export type SizeType = 'default' | 'middle' | 'small' | 'large'; - -export interface TableActionType { - reload: (opt?: FetchParams) => Promise; - getSelectRows: () => T[]; - clearSelectedRowKeys: () => void; - expandAll: () => void; - expandRows: (keys: string[]) => void; - collapseAll: () => void; - scrollTo: (pos: string) => void; // pos: id | "top" | "bottom" - getSelectRowKeys: () => string[]; - deleteSelectRowByKey: (key: string) => void; - setPagination: (info: Partial) => void; - setTableData: (values: T[]) => void; - updateTableDataRecord: (rowKey: string | number, record: Recordable) => Recordable | void; - deleteTableDataRecord: (rowKey: string | number | string[] | number[]) => void; - insertTableDataRecord: (record: Recordable, index?: number) => Recordable | void; - findTableDataRecord: (rowKey: string | number) => Recordable | void; - getColumns: (opt?: GetColumnsParams) => BasicColumn[]; - setColumns: (columns: BasicColumn[] | string[]) => void; - getDataSource: () => T[]; - getRawDataSource: () => T; - setLoading: (loading: boolean) => void; - setProps: (props: Partial) => void; - redoHeight: () => void; - setSelectedRowKeys: (rowKeys: string[] | number[]) => void; - getPaginationRef: () => PaginationProps | boolean; - getSize: () => SizeType; - getRowSelection: () => TableRowSelection; - getCacheColumns: () => BasicColumn[]; - emit?: EmitType; - updateTableData: (index: number, key: string, value: any) => Recordable; - setShowPagination: (show: boolean) => Promise; - getShowPagination: () => boolean; - setCacheColumnsByField?: (dataIndex: string | undefined, value: BasicColumn) => void; -} - -export interface FetchSetting { - // 请求接口当前页数 - pageField: string; - // 每页显示多少条 - sizeField: string; - // 请求结果列表字段 支持 a.b.c - listField: string; - // 请求结果总数字段 支持 a.b.c - totalField: string; -} - -export interface TableSetting { - redo?: boolean; - size?: boolean; - setting?: boolean; - fullScreen?: boolean; -} - -export interface BasicTableProps { - // 点击行选中 - clickToRowSelect?: boolean; - isTreeTable?: boolean; - // 自定义排序方法 - sortFn?: (sortInfo: SorterResult) => any; - // 排序方法 - filterFn?: (data: Partial>) => any; - // 取消表格的默认padding - inset?: boolean; - // 显示表格设置 - showTableSetting?: boolean; - tableSetting?: TableSetting; - // 斑马纹 - striped?: boolean; - // 是否自动生成key - autoCreateKey?: boolean; - // 计算合计行的方法 - summaryFunc?: (...arg: any) => Recordable[]; - // 自定义合计表格内容 - summaryData?: Recordable[]; - // 是否显示合计行 - showSummary?: boolean; - // 是否可拖拽列 - canColDrag?: boolean; - // 接口请求对象 - api?: (...arg: any) => Promise; - // 请求之前处理参数 - beforeFetch?: Fn; - // 自定义处理接口返回参数 - afterFetch?: Fn; - // 查询条件请求之前处理 - handleSearchInfoFn?: Fn; - // 请求接口配置 - fetchSetting?: Partial; - // 立即请求接口 - immediate?: boolean; - // 在开起搜索表单的时候,如果没有数据是否显示表格 - emptyDataIsShowTable?: boolean; - // 额外的请求参数 - searchInfo?: Recordable; - // 默认的排序参数 - defSort?: Recordable; - // 使用搜索表单 - useSearchForm?: boolean; - // 表单配置 - formConfig?: Partial; - // 列配置 - columns: BasicColumn[]; - // 是否显示序号列 - showIndexColumn?: boolean; - // 序号列配置 - indexColumnProps?: BasicColumn; - actionColumn?: BasicColumn; - // 文本超过宽度是否显示。。。 - ellipsis?: boolean; - // 是否继承父级高度(父级高度-表单高度-padding高度) - isCanResizeParent?: boolean; - // 是否可以自适应高度 - canResize?: boolean; - // 自适应高度偏移, 计算结果-偏移量 - resizeHeightOffset?: number; - - // 在分页改变的时候清空选项 - clearSelectOnPageChange?: boolean; - // - rowKey?: string | ((record: Recordable) => string); - // 数据 - dataSource?: Recordable[]; - // 标题右侧提示 - titleHelpMessage?: string | string[]; - // 表格滚动最大高度 - maxHeight?: number; - // 是否显示边框 - bordered?: boolean; - // 分页配置 - pagination?: PaginationProps | boolean; - // loading加载 - loading?: boolean; - - /** - * The column contains children to display - * @default 'children' - * @type string | string[] - */ - childrenColumnName?: string; - - /** - * Override default table elements - * @type object - */ - components?: object; - - /** - * Expand all rows initially - * @default false - * @type boolean - */ - defaultExpandAllRows?: boolean; - - /** - * Initial expanded row keys - * @type string[] - */ - defaultExpandedRowKeys?: string[]; - - /** - * Current expanded row keys - * @type string[] - */ - expandedRowKeys?: string[]; - - /** - * Expanded container render for each row - * @type Function - */ - expandedRowRender?: (record?: ExpandedRowRenderRecord) => VNodeChild | JSX.Element; - - /** - * Customize row expand Icon. - * @type Function | VNodeChild - */ - expandIcon?: Function | VNodeChild | JSX.Element; - - /** - * Whether to expand row by clicking anywhere in the whole row - * @default false - * @type boolean - */ - expandRowByClick?: boolean; - - /** - * The index of `expandIcon` which column will be inserted when `expandIconAsCell` is false. default 0 - */ - expandIconColumnIndex?: number; - - /** - * Table footer renderer - * @type Function | VNodeChild - */ - footer?: Function | VNodeChild | JSX.Element; - - /** - * Indent size in pixels of tree data - * @default 15 - * @type number - */ - indentSize?: number; - - /** - * i18n text including filter, sort, empty text, etc - * @default { filterConfirm: 'Ok', filterReset: 'Reset', emptyText: 'No Data' } - * @type object - */ - locale?: object; - - /** - * Row's className - * @type Function - */ - rowClassName?: (record: TableCustomRecord, index: number) => string; - - /** - * Row selection config - * @type object - */ - rowSelection?: TableRowSelection; - - /** - * Set horizontal or vertical scrolling, can also be used to specify the width and height of the scroll area. - * It is recommended to set a number for x, if you want to set it to true, - * you need to add style .ant-table td { white-space: nowrap; }. - * @type object - */ - scroll?: { x?: number | true; y?: number }; - - /** - * Whether to show table header - * @default true - * @type boolean - */ - showHeader?: boolean; - - /** - * Size of table - * @default 'default' - * @type string - */ - size?: SizeType; - - /** - * Table title renderer - * @type Function | ScopedSlot - */ - title?: VNodeChild | JSX.Element | string | ((data: Recordable) => string); - - /** - * Set props on per header row - * @type Function - */ - customHeaderRow?: (column: ColumnProps, index: number) => object; - - /** - * Set props on per row - * @type Function - */ - customRow?: (record: T, index: number) => object; - - /** - * `table-layout` attribute of table element - * `fixed` when header/columns are fixed, or using `column.ellipsis` - * - * @see https://developer.mozilla.org/en-US/docs/Web/CSS/table-layout - * @version 1.5.0 - */ - tableLayout?: 'auto' | 'fixed' | string; - - /** - * the render container of dropdowns in table - * @param triggerNode - * @version 1.5.0 - */ - getPopupContainer?: (triggerNode?: HTMLElement) => HTMLElement; - - /** - * Data can be changed again before rendering. - * The default configuration of general user empty data. - * You can configured globally through [ConfigProvider](https://antdv.com/components/config-provider-cn/) - * - * @version 1.5.4 - */ - transformCellText?: Function; - - /** - * Callback executed before editable cell submit value, not for row-editor - * - * The cell will not submit data while callback return false - */ - beforeEditSubmit?: (data: { - record: Recordable; - index: number; - key: string | number; - value: any; - }) => Promise; - - /** - * Callback executed when pagination, filters or sorter is changed - * @param pagination - * @param filters - * @param sorter - * @param currentDataSource - */ - onChange?: (pagination: any, filters: any, sorter: any, extra: any) => void; - - /** - * Callback executed when the row expand icon is clicked - * - * @param expanded - * @param record - */ - onExpand?: (expande: boolean, record: T) => void; - - /** - * Callback executed when the expanded rows change - * @param expandedRows - */ - onExpandedRowsChange?: (expandedRows: string[] | number[]) => void; - - onColumnsChange?: (data: ColumnChangeParam[]) => void; -} - -export type CellFormat = - | string - | ((text: string, record: Recordable, index: number) => string | number) - | Map; - -// @ts-ignore -export interface BasicColumn extends ColumnProps { - children?: BasicColumn[]; - filters?: { - text: string; - value: string; - children?: - | unknown[] - | (((props: Record) => unknown[]) & (() => unknown[]) & (() => unknown[])); - }[]; - - // - flag?: 'INDEX' | 'DEFAULT' | 'CHECKBOX' | 'RADIO' | 'ACTION'; - customTitle?: VueNode; - - slots?: Recordable; - - // Whether to hide the column by default, it can be displayed in the column configuration - defaultHidden?: boolean; - - // Help text for table column header - helpMessage?: string | string[]; - - format?: CellFormat; - - // Editable - edit?: boolean; - editRow?: boolean; - editable?: boolean; - editComponent?: ComponentType; - editComponentProps?: - | ((opt: { - text: string | number | boolean | Recordable; - record: Recordable; - column: BasicColumn; - index: number; - }) => Recordable) - | Recordable; - editRule?: boolean | ((text: string, record: Recordable) => Promise); - editValueMap?: (value: any) => string; - onEditRow?: () => void; - // 权限编码控制是否显示 - auth?: RoleEnum | RoleEnum[] | string | string[]; - // 业务控制是否显示 - ifShow?: boolean | ((column: BasicColumn) => boolean); - // 自定义修改后显示的内容 - editRender?: (opt: { - text: string | number | boolean | Recordable; - record: Recordable; - column: BasicColumn; - index: number; - }) => VNodeChild | JSX.Element; -} - -export type ColumnChangeParam = { - dataIndex: string; - fixed: boolean | 'left' | 'right' | undefined; - visible: boolean; -}; - -export interface InnerHandlers { - onColumnsChange: (data: ColumnChangeParam[]) => void; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/tableAction.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/tableAction.ts deleted file mode 100644 index 028cf80cb..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Table/src/types/tableAction.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { ButtonProps } from 'ant-design-vue/es/button/buttonTypes'; -import { TooltipProps } from 'ant-design-vue/es/tooltip/Tooltip'; -import { RoleEnum } from '/@/enums/roleEnum'; -export interface ActionItem extends ButtonProps { - onClick?: Fn; - label?: string; - color?: 'success' | 'error' | 'warning'; - icon?: string; - popConfirm?: PopConfirm; - disabled?: boolean; - divider?: boolean; - // 权限编码控制是否显示 - auth?: RoleEnum | RoleEnum[] | string | string[]; - // 业务控制是否显示 - ifShow?: boolean | ((action: ActionItem) => boolean); - tooltip?: string | TooltipProps; -} - -export interface PopConfirm { - title: string; - okText?: string; - cancelText?: string; - confirm: Fn; - cancel?: Fn; - icon?: string; - placement?: - | 'top' - | 'left' - | 'right' - | 'bottom' - | 'topLeft' - | 'topRight' - | 'leftTop' - | 'leftBottom' - | 'rightTop' - | 'rightBottom' - | 'bottomLeft' - | 'bottomRight'; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Time/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Time/index.ts deleted file mode 100644 index 7e2f4c02d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Time/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { withInstall } from '/@/utils/index'; -import time from './src/Time.vue'; - -export const Time = withInstall(time); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Time/src/Time.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Time/src/Time.vue deleted file mode 100644 index 278936881..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Time/src/Time.vue +++ /dev/null @@ -1,108 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/index.ts deleted file mode 100644 index ce07f95e3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { withInstall } from '/@/utils/index'; -import tinymce from './src/Editor.vue'; - -export const Tinymce = withInstall(tinymce); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/Editor.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/Editor.vue deleted file mode 100644 index b84c5fbb6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/Editor.vue +++ /dev/null @@ -1,346 +0,0 @@ - - - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/ImgUpload.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/ImgUpload.vue deleted file mode 100644 index f878709db..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/ImgUpload.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/helper.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/helper.ts deleted file mode 100644 index 2526ae78a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/helper.ts +++ /dev/null @@ -1,81 +0,0 @@ -const validEvents = [ - 'onActivate', - 'onAddUndo', - 'onBeforeAddUndo', - 'onBeforeExecCommand', - 'onBeforeGetContent', - 'onBeforeRenderUI', - 'onBeforeSetContent', - 'onBeforePaste', - 'onBlur', - 'onChange', - 'onClearUndos', - 'onClick', - 'onContextMenu', - 'onCopy', - 'onCut', - 'onDblclick', - 'onDeactivate', - 'onDirty', - 'onDrag', - 'onDragDrop', - 'onDragEnd', - 'onDragGesture', - 'onDragOver', - 'onDrop', - 'onExecCommand', - 'onFocus', - 'onFocusIn', - 'onFocusOut', - 'onGetContent', - 'onHide', - 'onInit', - 'onKeyDown', - 'onKeyPress', - 'onKeyUp', - 'onLoadContent', - 'onMouseDown', - 'onMouseEnter', - 'onMouseLeave', - 'onMouseMove', - 'onMouseOut', - 'onMouseOver', - 'onMouseUp', - 'onNodeChange', - 'onObjectResizeStart', - 'onObjectResized', - 'onObjectSelected', - 'onPaste', - 'onPostProcess', - 'onPostRender', - 'onPreProcess', - 'onProgressState', - 'onRedo', - 'onRemove', - 'onReset', - 'onSaveContent', - 'onSelectionChange', - 'onSetAttrib', - 'onSetContent', - 'onShow', - 'onSubmit', - 'onUndo', - 'onVisualAid', -]; - -const isValidKey = (key: string) => validEvents.indexOf(key) !== -1; - -export const bindHandlers = (initEvent: Event, listeners: any, editor: any): void => { - Object.keys(listeners) - .filter(isValidKey) - .forEach((key: string) => { - const handler = listeners[key]; - if (typeof handler === 'function') { - if (key === 'onInit') { - handler(initEvent, editor); - } else { - editor.on(key.substring(2), (e: any) => handler(e, editor)); - } - } - }); -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/tinymce.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/tinymce.ts deleted file mode 100644 index 1374b4dab..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tinymce/src/tinymce.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Any plugins you want to setting has to be imported -// Detail plugins list see https://www.tinymce.com/docs/plugins/ -// Custom builds see https://www.tinymce.com/download/custom-builds/ -// colorpicker/contextmenu/textcolor plugin is now built in to the core editor, please remove it from your editor configuration - -export const plugins = [ - 'advlist anchor autolink autosave code codesample directionality fullscreen hr insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus template textpattern visualblocks visualchars wordcount', -]; - -export const toolbar = [ - 'fontsizeselect lineheight searchreplace bold italic underline strikethrough alignleft aligncenter alignright outdent indent blockquote undo redo removeformat subscript superscript code codesample', - 'hr bullist numlist link preview anchor pagebreak insertdatetime media forecolor backcolor fullscreen', -]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/index.ts deleted file mode 100644 index 7eb79b53b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { createSimpleTransition, createJavascriptTransition } from './src/CreateTransition'; - -import ExpandTransitionGenerator from './src/ExpandTransition'; - -export { default as CollapseTransition } from './src/CollapseTransition.vue'; - -export const FadeTransition = createSimpleTransition('fade-transition'); -export const ScaleTransition = createSimpleTransition('scale-transition'); -export const SlideYTransition = createSimpleTransition('slide-y-transition'); -export const ScrollYTransition = createSimpleTransition('scroll-y-transition'); -export const SlideYReverseTransition = createSimpleTransition('slide-y-reverse-transition'); -export const ScrollYReverseTransition = createSimpleTransition('scroll-y-reverse-transition'); -export const SlideXTransition = createSimpleTransition('slide-x-transition'); -export const ScrollXTransition = createSimpleTransition('scroll-x-transition'); -export const SlideXReverseTransition = createSimpleTransition('slide-x-reverse-transition'); -export const ScrollXReverseTransition = createSimpleTransition('scroll-x-reverse-transition'); -export const ScaleRotateTransition = createSimpleTransition('scale-rotate-transition'); - -export const ExpandXTransition = createJavascriptTransition( - 'expand-x-transition', - ExpandTransitionGenerator('', true), -); - -export const ExpandTransition = createJavascriptTransition( - 'expand-transition', - ExpandTransitionGenerator(''), -); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/src/CollapseTransition.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/src/CollapseTransition.vue deleted file mode 100644 index 6b50fa198..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/src/CollapseTransition.vue +++ /dev/null @@ -1,78 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/src/CreateTransition.tsx b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/src/CreateTransition.tsx deleted file mode 100644 index d12518de8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/src/CreateTransition.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import type { PropType } from 'vue'; - -import { defineComponent, Transition, TransitionGroup } from 'vue'; -import { getSlot } from '/@/utils/helper/tsxHelper'; - -type Mode = 'in-out' | 'out-in' | 'default' | undefined; - -export function createSimpleTransition(name: string, origin = 'top center 0', mode?: Mode) { - return defineComponent({ - name, - props: { - group: { - type: Boolean as PropType, - default: false, - }, - mode: { - type: String as PropType, - default: mode, - }, - origin: { - type: String as PropType, - default: origin, - }, - }, - setup(props, { slots, attrs }) { - const onBeforeEnter = (el: HTMLElement) => { - el.style.transformOrigin = props.origin; - }; - - return () => { - const Tag = !props.group ? Transition : TransitionGroup; - return ( - - {() => getSlot(slots)} - - ); - }; - }, - }); -} -export function createJavascriptTransition( - name: string, - functions: Recordable, - mode: Mode = 'in-out', -) { - return defineComponent({ - name, - props: { - mode: { - type: String as PropType, - default: mode, - }, - }, - setup(props, { attrs, slots }) { - return () => { - return ( - - {() => getSlot(slots)} - - ); - }; - }, - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/src/ExpandTransition.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/src/ExpandTransition.ts deleted file mode 100644 index 2aaef9a72..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Transition/src/ExpandTransition.ts +++ /dev/null @@ -1,89 +0,0 @@ -/** - * Makes the first character of a string uppercase - */ -export function upperFirst(str: string): string { - return str.charAt(0).toUpperCase() + str.slice(1); -} - -interface HTMLExpandElement extends HTMLElement { - _parent?: (Node & ParentNode & HTMLElement) | null; - _initialStyle: { - transition: string; - overflow: string | null; - height?: string | null; - width?: string | null; - }; -} - -export default function (expandedParentClass = '', x = false) { - const sizeProperty = x ? 'width' : ('height' as 'width' | 'height'); - const offsetProperty = `offset${upperFirst(sizeProperty)}` as 'offsetHeight' | 'offsetWidth'; - - return { - beforeEnter(el: HTMLExpandElement) { - el._parent = el.parentNode as (Node & ParentNode & HTMLElement) | null; - el._initialStyle = { - transition: el.style.transition, - overflow: el.style.overflow, - [sizeProperty]: el.style[sizeProperty], - }; - }, - - enter(el: HTMLExpandElement) { - const initialStyle = el._initialStyle; - - el.style.setProperty('transition', 'none', 'important'); - el.style.overflow = 'hidden'; - // const offset = `${el[offsetProperty]}px`; - - // el.style[sizeProperty] = '0'; - - void el.offsetHeight; // force reflow - - el.style.transition = initialStyle.transition; - - if (expandedParentClass && el._parent) { - el._parent.classList.add(expandedParentClass); - } - - requestAnimationFrame(() => { - // el.style[sizeProperty] = offset; - }); - }, - - afterEnter: resetStyles, - enterCancelled: resetStyles, - - leave(el: HTMLExpandElement) { - el._initialStyle = { - transition: '', - overflow: el.style.overflow, - [sizeProperty]: el.style[sizeProperty], - }; - - el.style.overflow = 'hidden'; - el.style[sizeProperty] = `${el[offsetProperty]}px`; - /* eslint-disable-next-line */ - void el.offsetHeight; // force reflow - - requestAnimationFrame(() => (el.style[sizeProperty] = '0')); - }, - - afterLeave, - leaveCancelled: afterLeave, - }; - - function afterLeave(el: HTMLExpandElement) { - if (expandedParentClass && el._parent) { - el._parent.classList.remove(expandedParentClass); - } - resetStyles(el); - } - - function resetStyles(el: HTMLExpandElement) { - const size = el._initialStyle[sizeProperty]; - el.style.overflow = el._initialStyle.overflow!; - if (size != null) el.style[sizeProperty] = size; - Reflect.deleteProperty(el, '_initialStyle'); - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/index.ts deleted file mode 100644 index 169035aac..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import BasicTree from './src/BasicTree.vue'; -import './style'; - -export { BasicTree }; -export type { ContextMenuItem } from '/@/hooks/web/useContextMenu'; -export * from './src/types/tree'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/BasicTree.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/BasicTree.vue deleted file mode 100644 index 30130a25f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/BasicTree.vue +++ /dev/null @@ -1,457 +0,0 @@ - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/TreeIcon.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/TreeIcon.ts deleted file mode 100644 index 900d6bfcf..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/TreeIcon.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { VNode, FunctionalComponent } from 'vue'; - -import { h } from 'vue'; -import { isString } from '@vue/shared'; -import { Icon } from '/@/components/Icon'; - -export const TreeIcon: FunctionalComponent = ({ icon }: { icon: VNode | string }) => { - if (!icon) return null; - if (isString(icon)) { - return h(Icon, { icon, class: 'mr-1' }); - } - return Icon; -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/components/TreeHeader.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/components/TreeHeader.vue deleted file mode 100644 index 74aac0973..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/components/TreeHeader.vue +++ /dev/null @@ -1,170 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/hooks/useTree.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/hooks/useTree.ts deleted file mode 100644 index 17345a260..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/hooks/useTree.ts +++ /dev/null @@ -1,207 +0,0 @@ -import type { InsertNodeParams, KeyType, FieldNames, TreeItem } from '../types/tree'; -import type { Ref, ComputedRef } from 'vue'; -import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree'; - -import { cloneDeep } from 'lodash-es'; -import { unref } from 'vue'; -import { forEach } from '/@/utils/helper/treeHelper'; - -export function useTree(treeDataRef: Ref, getFieldNames: ComputedRef) { - function getAllKeys(list?: TreeDataItem[]) { - const keys: string[] = []; - const treeData = list || unref(treeDataRef); - const { key: keyField, children: childrenField } = unref(getFieldNames); - if (!childrenField || !keyField) return keys; - - for (let index = 0; index < treeData.length; index++) { - const node = treeData[index]; - keys.push(node[keyField]!); - const children = node[childrenField]; - if (children && children.length) { - keys.push(...(getAllKeys(children) as string[])); - } - } - return keys as KeyType[]; - } - - // get keys that can be checked and selected - function getEnabledKeys(list?: TreeDataItem[]) { - const keys: string[] = []; - const treeData = list || unref(treeDataRef); - const { key: keyField, children: childrenField } = unref(getFieldNames); - if (!childrenField || !keyField) return keys; - - for (let index = 0; index < treeData.length; index++) { - const node = treeData[index]; - node.disabled !== true && node.selectable !== false && keys.push(node[keyField]!); - const children = node[childrenField]; - if (children && children.length) { - keys.push(...(getEnabledKeys(children) as string[])); - } - } - return keys as KeyType[]; - } - - function getChildrenKeys(nodeKey: string | number, list?: TreeDataItem[]) { - const keys: KeyType[] = []; - const treeData = list || unref(treeDataRef); - const { key: keyField, children: childrenField } = unref(getFieldNames); - if (!childrenField || !keyField) return keys; - for (let index = 0; index < treeData.length; index++) { - const node = treeData[index]; - const children = node[childrenField]; - if (nodeKey === node[keyField]) { - keys.push(node[keyField]!); - if (children && children.length) { - keys.push(...(getAllKeys(children) as string[])); - } - } else { - if (children && children.length) { - keys.push(...getChildrenKeys(nodeKey, children)); - } - } - } - return keys as KeyType[]; - } - - // Update node - function updateNodeByKey(key: string, node: TreeDataItem, list?: TreeDataItem[]) { - if (!key) return; - const treeData = list || unref(treeDataRef); - const { key: keyField, children: childrenField } = unref(getFieldNames); - - if (!childrenField || !keyField) return; - - for (let index = 0; index < treeData.length; index++) { - const element: any = treeData[index]; - const children = element[childrenField]; - - if (element[keyField] === key) { - treeData[index] = { ...treeData[index], ...node }; - break; - } else if (children && children.length) { - updateNodeByKey(key, node, element[childrenField]); - } - } - } - - // Expand the specified level - function filterByLevel(level = 1, list?: TreeDataItem[], currentLevel = 1) { - if (!level) { - return []; - } - const res: (string | number)[] = []; - const data = list || unref(treeDataRef) || []; - for (let index = 0; index < data.length; index++) { - const item = data[index]; - - const { key: keyField, children: childrenField } = unref(getFieldNames); - const key = keyField ? item[keyField] : ''; - const children = childrenField ? item[childrenField] : []; - res.push(key); - if (children && children.length && currentLevel < level) { - currentLevel += 1; - res.push(...filterByLevel(level, children, currentLevel)); - } - } - return res as string[] | number[]; - } - - /** - * 添加节点 - */ - function insertNodeByKey({ parentKey = null, node, push = 'push' }: InsertNodeParams) { - const treeData: any = cloneDeep(unref(treeDataRef)); - if (!parentKey) { - treeData[push](node); - treeDataRef.value = treeData; - return; - } - const { key: keyField, children: childrenField } = unref(getFieldNames); - if (!childrenField || !keyField) return; - - forEach(treeData, (treeItem) => { - if (treeItem[keyField] === parentKey) { - treeItem[childrenField] = treeItem[childrenField] || []; - treeItem[childrenField][push](node); - return true; - } - }); - treeDataRef.value = treeData; - } - /** - * 批量添加节点 - */ - function insertNodesByKey({ parentKey = null, list, push = 'push' }: InsertNodeParams) { - const treeData: any = cloneDeep(unref(treeDataRef)); - if (!list || list.length < 1) { - return; - } - if (!parentKey) { - for (let i = 0; i < list.length; i++) { - treeData[push](list[i]); - } - } else { - const { key: keyField, children: childrenField } = unref(getFieldNames); - if (!childrenField || !keyField) return; - - forEach(treeData, (treeItem) => { - if (treeItem[keyField] === parentKey) { - treeItem[childrenField] = treeItem[childrenField] || []; - for (let i = 0; i < list.length; i++) { - treeItem[childrenField][push](list[i]); - } - treeDataRef.value = treeData; - return true; - } - }); - } - } - // Delete node - function deleteNodeByKey(key: string, list?: TreeDataItem[]) { - if (!key) return; - const treeData = list || unref(treeDataRef); - const { key: keyField, children: childrenField } = unref(getFieldNames); - if (!childrenField || !keyField) return; - - for (let index = 0; index < treeData.length; index++) { - const element: any = treeData[index]; - const children = element[childrenField]; - - if (element[keyField] === key) { - treeData.splice(index, 1); - break; - } else if (children && children.length) { - deleteNodeByKey(key, element[childrenField]); - } - } - } - - // Get selected node - function getSelectedNode(key: KeyType, list?: TreeItem[], selectedNode?: TreeItem | null) { - if (!key && key !== 0) return null; - const treeData = list || unref(treeDataRef); - treeData.forEach((item) => { - if (selectedNode?.key || selectedNode?.key === 0) return selectedNode; - if (item.key === key) { - selectedNode = item; - return; - } - if (item.children && item.children.length) { - selectedNode = getSelectedNode(key, item.children, selectedNode); - } - }); - return selectedNode || null; - } - return { - deleteNodeByKey, - insertNodeByKey, - insertNodesByKey, - filterByLevel, - updateNodeByKey, - getAllKeys, - getChildrenKeys, - getEnabledKeys, - getSelectedNode, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/types/tree.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/types/tree.ts deleted file mode 100644 index 03fe57fe3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/src/types/tree.ts +++ /dev/null @@ -1,194 +0,0 @@ -import type { ExtractPropTypes } from 'vue'; -import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree'; - -import { buildProps } from '/@/utils/props'; - -export enum ToolbarEnum { - SELECT_ALL, - UN_SELECT_ALL, - EXPAND_ALL, - UN_EXPAND_ALL, - CHECK_STRICTLY, - CHECK_UN_STRICTLY, -} - -export const treeEmits = [ - 'update:expandedKeys', - 'update:selectedKeys', - 'update:value', - 'change', - 'check', - 'update:searchValue', -]; - -export interface TreeState { - expandedKeys: KeyType[]; - selectedKeys: KeyType[]; - checkedKeys: CheckKeys; - checkStrictly: boolean; -} - -export interface FieldNames { - children?: string; - title?: string; - key?: string; -} - -export type KeyType = string | number; - -export type CheckKeys = - | KeyType[] - | { checked: string[] | number[]; halfChecked: string[] | number[] }; - -export const treeProps = buildProps({ - value: { - type: [Object, Array] as PropType, - }, - - renderIcon: { - type: Function as PropType<(params: Recordable) => string>, - }, - - helpMessage: { - type: [String, Array] as PropType, - default: '', - }, - - title: { - type: String, - default: '', - }, - toolbar: Boolean, - search: Boolean, - searchValue: { - type: String, - default: '', - }, - checkStrictly: Boolean, - clickRowToExpand: { - type: Boolean, - default: false, - }, - checkable: Boolean, - defaultExpandLevel: { - type: [String, Number] as PropType, - default: '', - }, - defaultExpandAll: Boolean, - - fieldNames: { - type: Object as PropType, - }, - - treeData: { - type: Array as PropType, - }, - - actionList: { - type: Array as PropType, - default: () => [], - }, - - expandedKeys: { - type: Array as PropType, - default: () => [], - }, - - selectedKeys: { - type: Array as PropType, - default: () => [], - }, - - checkedKeys: { - type: Array as PropType, - default: () => [], - }, - - beforeRightClick: { - type: Function as PropType<(...arg: any) => ContextMenuItem[] | ContextMenuOptions>, - default: undefined, - }, - - rightMenuList: { - type: Array as PropType, - }, - // 自定义数据过滤判断方法(注: 不是整个过滤方法,而是内置过滤的判断方法,用于增强原本仅能通过title进行过滤的方式) - filterFn: { - type: Function as PropType< - (searchValue: any, node: TreeItem, fieldNames: FieldNames) => boolean - >, - default: undefined, - }, - // 高亮搜索值,仅高亮具体匹配值(通过title)值为true时使用默认色值,值为#xxx时使用此值替代且高亮开启 - highlight: { - type: [Boolean, String] as PropType, - default: false, - }, - // 搜索完成时自动展开结果 - expandOnSearch: Boolean, - // 搜索完成自动选中所有结果,当且仅当 checkable===true 时生效 - checkOnSearch: Boolean, - // 搜索完成自动select所有结果 - selectedOnSearch: Boolean, - loading: { - type: Boolean, - default: false, - }, -}); - -export type TreeProps = ExtractPropTypes; - -export interface ContextMenuItem { - label: string; - icon?: string; - hidden?: boolean; - disabled?: boolean; - handler?: Fn; - divider?: boolean; - children?: ContextMenuItem[]; -} - -export interface ContextMenuOptions { - icon?: string; - styles?: any; - items?: ContextMenuItem[]; -} - -export interface TreeItem extends TreeDataItem { - icon?: any; -} - -export interface TreeActionItem { - render: (record: Recordable) => any; - show?: boolean | ((record: Recordable) => boolean); -} - -export interface InsertNodeParams { - parentKey: string | null; - node: TreeDataItem; - list?: TreeDataItem[]; - push?: 'push' | 'unshift'; -} - -export interface TreeActionType { - checkAll: (checkAll: boolean) => void; - expandAll: (expandAll: boolean) => void; - setExpandedKeys: (keys: KeyType[]) => void; - getExpandedKeys: () => KeyType[]; - setSelectedKeys: (keys: KeyType[]) => void; - getSelectedKeys: () => KeyType[]; - setCheckedKeys: (keys: CheckKeys) => void; - getCheckedKeys: () => CheckKeys; - filterByLevel: (level: number) => void; - insertNodeByKey: (opt: InsertNodeParams) => void; - insertNodesByKey: (opt: InsertNodeParams) => void; - deleteNodeByKey: (key: string) => void; - updateNodeByKey: (key: string, node: Omit) => void; - setSearchValue: (value: string) => void; - getSearchValue: () => string; - getSelectedNode: ( - key: KeyType, - treeList?: TreeItem[], - selectNode?: TreeItem | null, - ) => TreeItem | null; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/style/index.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/style/index.less deleted file mode 100644 index 472d4caa5..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/style/index.less +++ /dev/null @@ -1,52 +0,0 @@ -@tree-prefix-cls: ~'@{namespace}-tree'; - -.@{tree-prefix-cls} { - background-color: @component-background; - - .ant-tree-node-content-wrapper { - position: relative; - - .ant-tree-title { - position: absolute; - left: 0; - width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - } - - &__title { - position: relative; - display: flex; - align-items: center; - width: 100%; - padding-right: 10px; - - &:hover { - .@{tree-prefix-cls}__action { - visibility: visible; - } - } - } - - &__content { - overflow: hidden; - } - - &__actions { - position: absolute; - //top: 2px; - right: 3px; - display: flex; - } - - &__action { - margin-left: 4px; - visibility: hidden; - } - - &-header { - border-bottom: 1px solid @border-color-base; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/style/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/style/index.ts deleted file mode 100644 index d74e52ee9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Tree/style/index.ts +++ /dev/null @@ -1 +0,0 @@ -import './index.less'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/index.ts deleted file mode 100644 index 568a7d980..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { withInstall } from '/@/utils'; -import basicUpload from './src/BasicUpload.vue'; - -export const BasicUpload = withInstall(basicUpload); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/BasicUpload.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/BasicUpload.vue deleted file mode 100644 index 1d3b9c047..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/BasicUpload.vue +++ /dev/null @@ -1,123 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/FileList.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/FileList.vue deleted file mode 100644 index ddb087e5b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/FileList.vue +++ /dev/null @@ -1,104 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/ThumbUrl.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/ThumbUrl.vue deleted file mode 100644 index 80fb203dc..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/ThumbUrl.vue +++ /dev/null @@ -1,29 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/UploadModal.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/UploadModal.vue deleted file mode 100644 index e39cd18ed..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/UploadModal.vue +++ /dev/null @@ -1,322 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/UploadPreviewModal.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/UploadPreviewModal.vue deleted file mode 100644 index bc4091b1b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/UploadPreviewModal.vue +++ /dev/null @@ -1,99 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/data.tsx b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/data.tsx deleted file mode 100644 index 8e088332a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/data.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import type { BasicColumn, ActionItem } from '/@/components/Table'; -import { FileItem, PreviewFileItem, UploadResultStatus } from './typing'; -import { - // checkImgType, - isImgTypeByName, -} from './helper'; -import { Progress, Tag } from 'ant-design-vue'; -import TableAction from '/@/components/Table/src/components/TableAction.vue'; -import ThumbUrl from './ThumbUrl.vue'; -import { useI18n } from '/@/hooks/web/useI18n'; - -const { t } = useI18n(); - -// 文件上传列表 -export function createTableColumns(): BasicColumn[] { - return [ - { - dataIndex: 'thumbUrl', - title: t('component.upload.legend'), - width: 100, - customRender: ({ record }) => { - const { thumbUrl } = (record as FileItem) || {}; - return thumbUrl && ; - }, - }, - { - dataIndex: 'name', - title: t('component.upload.fileName'), - align: 'left', - customRender: ({ text, record }) => { - const { percent, status: uploadStatus } = (record as FileItem) || {}; - let status: 'normal' | 'exception' | 'active' | 'success' = 'normal'; - if (uploadStatus === UploadResultStatus.ERROR) { - status = 'exception'; - } else if (uploadStatus === UploadResultStatus.UPLOADING) { - status = 'active'; - } else if (uploadStatus === UploadResultStatus.SUCCESS) { - status = 'success'; - } - return ( - -

- {text} -

- -
- ); - }, - }, - { - dataIndex: 'size', - title: t('component.upload.fileSize'), - width: 100, - customRender: ({ text = 0 }) => { - return text && (text / 1024).toFixed(2) + 'KB'; - }, - }, - // { - // dataIndex: 'type', - // title: '文件类型', - // width: 100, - // }, - { - dataIndex: 'status', - title: t('component.upload.fileStatue'), - width: 100, - customRender: ({ text }) => { - if (text === UploadResultStatus.SUCCESS) { - return {() => t('component.upload.uploadSuccess')}; - } else if (text === UploadResultStatus.ERROR) { - return {() => t('component.upload.uploadError')}; - } else if (text === UploadResultStatus.UPLOADING) { - return {() => t('component.upload.uploading')}; - } - - return text; - }, - }, - ]; -} -export function createActionColumn(handleRemove: Function): BasicColumn { - return { - width: 120, - title: t('component.upload.operating'), - dataIndex: 'action', - fixed: false, - customRender: ({ record }) => { - const actions: ActionItem[] = [ - { - label: t('component.upload.del'), - color: 'error', - onClick: handleRemove.bind(null, record), - }, - ]; - // if (checkImgType(record)) { - // actions.unshift({ - // label: t('component.upload.preview'), - // onClick: handlePreview.bind(null, record), - // }); - // } - return ; - }, - }; -} -// 文件预览列表 -export function createPreviewColumns(): BasicColumn[] { - return [ - { - dataIndex: 'url', - title: t('component.upload.legend'), - width: 100, - customRender: ({ record }) => { - const { url } = (record as PreviewFileItem) || {}; - return isImgTypeByName(url) && ; - }, - }, - { - dataIndex: 'name', - title: t('component.upload.fileName'), - align: 'left', - }, - ]; -} - -export function createPreviewActionColumn({ - handleRemove, - handleDownload, -}: { - handleRemove: Fn; - handleDownload: Fn; -}): BasicColumn { - return { - width: 160, - title: t('component.upload.operating'), - dataIndex: 'action', - fixed: false, - customRender: ({ record }) => { - const actions: ActionItem[] = [ - { - label: t('component.upload.del'), - color: 'error', - onClick: handleRemove.bind(null, record), - }, - { - label: t('component.upload.download'), - onClick: handleDownload.bind(null, record), - }, - ]; - - return ; - }, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/helper.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/helper.ts deleted file mode 100644 index a0c574b7a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/helper.ts +++ /dev/null @@ -1,27 +0,0 @@ -export function checkFileType(file: File, accepts: string[]) { - const newTypes = accepts.join('|'); - // const reg = /\.(jpg|jpeg|png|gif|txt|doc|docx|xls|xlsx|xml)$/i; - const reg = new RegExp('\\.(' + newTypes + ')$', 'i'); - - return reg.test(file.name); -} - -export function checkImgType(file: File) { - return isImgTypeByName(file.name); -} - -export function isImgTypeByName(name: string) { - return /\.(jpg|jpeg|png|gif)$/i.test(name); -} - -export function getBase64WithFile(file: File) { - return new Promise<{ - result: string; - file: File; - }>((resolve, reject) => { - const reader = new FileReader(); - reader.readAsDataURL(file); - reader.onload = () => resolve({ result: reader.result as string, file }); - reader.onerror = (error) => reject(error); - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/props.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/props.ts deleted file mode 100644 index 413b95d79..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/props.ts +++ /dev/null @@ -1,83 +0,0 @@ -import type { PropType } from 'vue'; -import { FileBasicColumn } from './typing'; - -export const basicProps = { - helpText: { - type: String as PropType, - default: '', - }, - // 文件最大多少MB - maxSize: { - type: Number as PropType, - default: 2, - }, - // 最大数量的文件,Infinity不限制 - maxNumber: { - type: Number as PropType, - default: Infinity, - }, - // 根据后缀,或者其他 - accept: { - type: Array as PropType, - default: () => [], - }, - multiple: { - type: Boolean as PropType, - default: true, - }, - uploadParams: { - type: Object as PropType, - default: {}, - }, - api: { - type: Function as PropType, - default: null, - required: true, - }, - name: { - type: String as PropType, - default: 'file', - }, - filename: { - type: String as PropType, - default: null, - }, -}; - -export const uploadContainerProps = { - value: { - type: Array as PropType, - default: () => [], - }, - ...basicProps, - showPreviewNumber: { - type: Boolean as PropType, - default: true, - }, - emptyHidePreview: { - type: Boolean as PropType, - default: false, - }, -}; - -export const previewProps = { - value: { - type: Array as PropType, - default: () => [], - }, -}; - -export const fileListProps = { - columns: { - type: [Array] as PropType, - default: null, - }, - actionColumn: { - type: Object as PropType, - default: null, - }, - dataSource: { - type: Array as PropType, - default: null, - }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/typing.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/typing.ts deleted file mode 100644 index c6301100a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/typing.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { UploadApiResult } from '/@/api/sys/model/uploadModel'; - -export enum UploadResultStatus { - SUCCESS = 'success', - ERROR = 'error', - UPLOADING = 'uploading', -} - -export interface FileItem { - thumbUrl?: string; - name: string; - size: string | number; - type?: string; - percent: number; - file: File; - status?: UploadResultStatus; - responseData?: UploadApiResult; - uuid: string; -} - -export interface PreviewFileItem { - url: string; - name: string; - type: string; -} - -export interface FileBasicColumn { - /** - * Renderer of the table cell. The return value should be a VNode, or an object for colSpan/rowSpan config - * @type Function | ScopedSlot - */ - customRender?: Function; - /** - * Title of this column - * @type any (string | slot) - */ - title: string; - - /** - * Width of this column - * @type string | number - */ - width?: number; - /** - * Display field of the data record, could be set like a.b.c - * @type string - */ - dataIndex: string; - /** - * specify how content is aligned - * @default 'left' - * @type string - */ - align?: 'left' | 'right' | 'center'; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/useUpload.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/useUpload.ts deleted file mode 100644 index 694cc2757..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Upload/src/useUpload.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Ref, unref, computed } from 'vue'; -import { useI18n } from '/@/hooks/web/useI18n'; -const { t } = useI18n(); -export function useUploadType({ - acceptRef, - helpTextRef, - maxNumberRef, - maxSizeRef, -}: { - acceptRef: Ref; - helpTextRef: Ref; - maxNumberRef: Ref; - maxSizeRef: Ref; -}) { - // 文件类型限制 - const getAccept = computed(() => { - const accept = unref(acceptRef); - if (accept && accept.length > 0) { - return accept; - } - return []; - }); - const getStringAccept = computed(() => { - return unref(getAccept) - .map((item) => { - if (item.indexOf('/') > 0 || item.startsWith('.')) { - return item; - } else { - return `.${item}`; - } - }) - .join(','); - }); - - // 支持jpg、jpeg、png格式,不超过2M,最多可选择10张图片,。 - const getHelpText = computed(() => { - const helpText = unref(helpTextRef); - if (helpText) { - return helpText; - } - const helpTexts: string[] = []; - - const accept = unref(acceptRef); - if (accept.length > 0) { - helpTexts.push(t('component.upload.accept', [accept.join(',')])); - } - - const maxSize = unref(maxSizeRef); - if (maxSize) { - helpTexts.push(t('component.upload.maxSize', [maxSize])); - } - - const maxNumber = unref(maxNumberRef); - if (maxNumber && maxNumber !== Infinity) { - helpTexts.push(t('component.upload.maxNumber', [maxNumber])); - } - return helpTexts.join(','); - }); - return { getAccept, getStringAccept, getHelpText }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/index.ts deleted file mode 100644 index 7c67101b6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { withInstall } from '/@/utils/index'; -import basicDragVerify from './src/DragVerify.vue'; -import rotateDragVerify from './src/ImgRotate.vue'; - -export const BasicDragVerify = withInstall(basicDragVerify); -export const RotateDragVerify = withInstall(rotateDragVerify); -export * from './src/typing'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/DragVerify.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/DragVerify.vue deleted file mode 100644 index c457bc03c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/DragVerify.vue +++ /dev/null @@ -1,371 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/ImgRotate.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/ImgRotate.vue deleted file mode 100644 index 53788ed61..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/ImgRotate.vue +++ /dev/null @@ -1,220 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/props.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/props.ts deleted file mode 100644 index 1e149703b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/props.ts +++ /dev/null @@ -1,87 +0,0 @@ -import type { PropType } from 'vue'; -import { useI18n } from '/@/hooks/web/useI18n'; - -const { t } = useI18n(); -export const basicProps = { - value: { - type: Boolean as PropType, - default: false, - }, - - isSlot: { - type: Boolean as PropType, - default: false, - }, - - text: { - type: [String] as PropType, - default: t('component.verify.dragText'), - }, - successText: { - type: [String] as PropType, - default: t('component.verify.successText'), - }, - height: { - type: [Number, String] as PropType, - default: 40, - }, - - width: { - type: [Number, String] as PropType, - default: 220, - }, - - circle: { - type: Boolean as PropType, - default: false, - }, - - wrapStyle: { - type: Object as PropType, - default: {}, - }, - contentStyle: { - type: Object as PropType, - default: {}, - }, - barStyle: { - type: Object as PropType, - default: {}, - }, - actionStyle: { - type: Object as PropType, - default: {}, - }, -}; - -export const rotateProps = { - ...basicProps, - src: { - type: String as PropType, - }, - - imgWidth: { - type: Number as PropType, - default: 260, - }, - - imgWrapStyle: { - type: Object as PropType, - default: {}, - }, - - minDegree: { - type: Number as PropType, - default: 90, - }, - - maxDegree: { - type: Number as PropType, - default: 270, - }, - - diffDegree: { - type: Number as PropType, - default: 20, - }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/typing.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/typing.ts deleted file mode 100644 index 48f7d4c76..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/Verify/src/typing.ts +++ /dev/null @@ -1,14 +0,0 @@ -export interface DragVerifyActionType { - resume: () => void; -} - -export interface PassingData { - isPassing: boolean; - time: number; -} - -export interface MoveData { - event: MouseEvent | TouchEvent; - moveDistance: number; - moveX: number; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/VirtualScroll/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/VirtualScroll/index.ts deleted file mode 100644 index a4c608975..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/VirtualScroll/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { withInstall } from '/@/utils/index'; -import vScroll from './src/VirtualScroll.vue'; - -export const VScroll = withInstall(vScroll); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/VirtualScroll/src/VirtualScroll.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/VirtualScroll/src/VirtualScroll.vue deleted file mode 100644 index b37a0587d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/VirtualScroll/src/VirtualScroll.vue +++ /dev/null @@ -1,190 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/registerGlobComp.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/registerGlobComp.ts deleted file mode 100644 index a3ee31037..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/components/registerGlobComp.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { App } from 'vue'; -import { Button } from './Button'; -import { Input, Layout } from 'ant-design-vue'; - -export function registerGlobComp(app: App) { - app.use(Input).use(Button).use(Layout); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/btn.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/btn.less deleted file mode 100644 index c997d0168..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/btn.less +++ /dev/null @@ -1,285 +0,0 @@ -// button reset -.ant-btn { - &-link:hover, - &-link:focus, - &-link:active { - border-color: transparent !important; - } - - &-primary { - color: @white; - background-color: @button-primary-color; - - &:hover, - &:focus { - color: @white; - background-color: @button-primary-hover-color; - } - } - - &-primary:not(&-background-ghost):not([disabled]) { - color: @white; - } - - &-default { - color: @button-cancel-color; - background-color: @button-cancel-bg-color; - border-color: @button-cancel-border-color; - - &:hover, - &:focus { - color: @button-cancel-hover-color; - background-color: @button-cancel-hover-bg-color; - border-color: @button-cancel-hover-border-color; - } - // - //&[disabled], - //&[disabled]:hover { - // color: fade(@button-cancel-color, 40%) !important; - // background: fade(@button-cancel-bg-color, 40%) !important; - // border-color: fade(@button-cancel-border-color, 40%) !important; - //} - } - - [data-theme='light'] &.ant-btn-link.is-disabled { - color: rgb(0 0 0 / 25%); - text-shadow: none; - cursor: not-allowed !important; - background-color: transparent !important; - border-color: transparent !important; - box-shadow: none; - } - - [data-theme='dark'] &.ant-btn-link.is-disabled { - color: rgb(255 255 255 / 25%) !important; - text-shadow: none; - cursor: not-allowed !important; - background-color: transparent !important; - border-color: transparent !important; - box-shadow: none; - } - - // color: @white; - - &-success.ant-btn-link:not([disabled='disabled']) { - color: @button-success-color; - - &:hover, - &:focus { - color: @button-success-hover-color; - border-color: transparent; - } - - &:active { - color: @button-success-active-color; - } - } - - &-success.ant-btn-link.ant-btn-loading, - &-warning.ant-btn-link.ant-btn-loading, - &-error.ant-btn-link.ant-btn-loading, - &-background-ghost.ant-btn-link.ant-btn-loading, - &.ant-btn-link.ant-btn-loading { - &::before { - background: transparent; - } - } - - &-success:not(.ant-btn-link, .is-disabled) { - color: @white; - background-color: @button-success-color; - border-color: @button-success-color; - //border-width: 0; - - &:hover, - &:focus { - color: @white; - background-color: @button-success-hover-color; - border-color: @button-success-hover-color; - } - - &:active { - background-color: @button-success-active-color; - border-color: @button-success-active-color; - } - } - - &-warning.ant-btn-link:not([disabled='disabled']) { - color: @button-warn-color; - - &:hover, - &:focus { - color: @button-warn-hover-color; - border-color: transparent; - } - - &:active { - color: @button-warn-active-color; - } - } - - &-warning:not(.ant-btn-link, .is-disabled) { - color: @white; - background-color: @button-warn-color; - border-color: @button-warn-color; - //border-width: 0; - - &:hover, - &:focus { - color: @white; - background-color: @button-warn-hover-color; - border-color: @button-warn-hover-color; - } - - &:active { - background-color: @button-warn-active-color; - border-color: @button-warn-active-color; - } - - //&[disabled], - //&[disabled]:hover { - // color: @white; - // background-color: fade(@button-warn-color, 40%); - // border-color: fade(@button-warn-color, 40%); - //} - } - - &-error.ant-btn-link:not([disabled='disabled']) { - color: @button-error-color; - - &:hover, - &:focus { - color: @button-error-hover-color; - border-color: transparent; - } - - &:active { - color: @button-error-active-color; - } - } - - &-error:not(.ant-btn-link, .is-disabled) { - color: @white; - background-color: @button-error-color; - border-color: @button-error-color; - //border-width: 0; - - &:hover, - &:focus { - color: @white; - background-color: @button-error-hover-color; - border-color: @button-error-hover-color; - } - - &:active { - background-color: @button-error-active-color; - border-color: @button-error-active-color; - } - - //&[disabled], - //&[disabled]:hover { - // color: @white; - // background-color: fade(@button-error-color, 40%); - // border-color: fade(@button-error-color, 40%); - //} - } - - &-background-ghost { - border-width: 1px; - background-color: transparent !important; - - &[disabled], - &[disabled]:hover { - color: fade(@white, 40%) !important; - background-color: transparent !important; - border-color: fade(@white, 40%) !important; - } - } - - &-dashed&-background-ghost, - &-default&-background-ghost { - color: @button-ghost-color; - border-color: @button-ghost-color; - - &:hover, - &:focus { - color: @button-ghost-hover-color; - border-color: @button-ghost-hover-color; - } - - &:active { - color: @button-ghost-active-color; - border-color: @button-ghost-active-color; - } - - &[disabled], - &[disabled]:hover { - color: fade(@white, 40%) !important; - border-color: fade(@white, 40%) !important; - } - } - - &-background-ghost&-success:not(.ant-btn-link) { - color: @button-success-color; - background-color: transparent; - border-color: @button-success-color; - border-width: 1px; - - &:hover, - &:focus { - color: @button-success-hover-color !important; - border-color: @button-success-hover-color; - } - - &:active { - color: @button-success-active-color; - border-color: @button-success-active-color; - } - } - - &-background-ghost&-warning:not(.ant-btn-link) { - color: @button-warn-color; - background-color: transparent; - border-color: @button-warn-color; - border-width: 1px; - - &:hover, - &:focus { - color: @button-warn-hover-color !important; - border-color: @button-warn-hover-color; - } - - &:active { - color: @button-warn-active-color; - border-color: @button-warn-active-color; - } - } - - &-background-ghost&-error:not(.ant-btn-link) { - color: @button-error-color; - background-color: transparent; - border-color: @button-error-color; - border-width: 1px; - - &:hover, - &:focus { - color: @button-error-hover-color !important; - border-color: @button-error-hover-color; - } - - &:active { - color: @button-error-active-color; - border-color: @button-error-active-color; - } - } - - &-ghost.ant-btn-link:not([disabled='disabled']) { - color: @button-ghost-color; - - &:hover, - &:focus { - color: @button-ghost-hover-color; - border-color: transparent; - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/index.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/index.less deleted file mode 100644 index f9334bb63..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/index.less +++ /dev/null @@ -1,59 +0,0 @@ -@import './pagination.less'; -@import './input.less'; -@import './btn.less'; - -.ant-image-preview-root { - img { - display: unset; - } -} - -span.anticon:not(.app-iconify) { - vertical-align: 0.125em !important; -} - -.ant-back-top { - right: 20px; - bottom: 20px; -} - -.collapse-container__body { - > .ant-descriptions { - margin-left: 6px; - } -} - -.ant-image-preview-operations { - background-color: rgb(0 0 0 / 30%); -} - -.ant-popover { - &-content { - box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%); - } -} - -// ================================= -// ==============modal message====== -// ================================= -.modal-icon-warning { - color: @warning-color !important; -} - -.modal-icon-success { - color: @success-color !important; -} - -.modal-icon-error { - color: @error-color !important; -} - -.modal-icon-info { - color: @primary-color !important; -} - -.ant-checkbox-checked .ant-checkbox-inner::after, -.ant-tree-checkbox-checked .ant-tree-checkbox-inner::after { - border-top: 0 !important; - border-left: 0 !important; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/input.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/input.less deleted file mode 100644 index 57f85e57c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/input.less +++ /dev/null @@ -1,24 +0,0 @@ -@import (reference) '../color.less'; - -// input -.ant-input { - &-number { - min-width: 110px; - } -} - -.ant-input-affix-wrapper .ant-input-suffix { - right: 9px; -} - -.ant-input-clear-icon { - margin-right: 5px; -} - -.ant-input-affix-wrapper-textarea-with-clear-btn { - padding: 0 !important; - - textarea.ant-input { - padding: 4px; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/pagination.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/pagination.less deleted file mode 100644 index b3580f958..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/pagination.less +++ /dev/null @@ -1,96 +0,0 @@ -html[data-theme='dark'] { - .ant-pagination { - &.mini { - .ant-pagination-prev, - .ant-pagination-next, - .ant-pagination-item { - background-color: rgb(255 255 255 / 4%) !important; - - a { - color: #8b949e !important; - } - } - - .ant-select-arrow { - color: @text-color-secondary !important; - } - - .ant-pagination-item-active { - background-color: @primary-color !important; - border: none; - border-radius: none !important; - - a { - color: @white !important; - } - } - } - } -} - -.ant-pagination { - &.mini { - .ant-pagination-prev, - .ant-pagination-next { - font-size: 12px; - color: @text-color-base; - border: 1px solid; - } - - .ant-pagination-prev:hover, - .ant-pagination-next:hover, - .ant-pagination-item:focus, - .ant-pagination-item:hover { - a { - color: @primary-color; - } - } - - .ant-pagination-prev, - .ant-pagination-next, - .ant-pagination-item { - margin: 0 4px !important; - background-color: #f4f4f5 !important; - border: none; - border-radius: none !important; - - a { - margin-top: 1px; - color: #606266; - } - - &:last-child { - margin-right: 0 !important; - } - } - - .ant-pagination-item-active { - background-color: @primary-color !important; - border: none; - border-radius: none !important; - - a { - color: @white !important; - } - } - - .ant-pagination-options { - margin-left: 12px; - } - - .ant-pagination-options-quick-jumper input { - height: 22px; - margin: 0 6px; - line-height: 22px; - text-align: center; - } - - .ant-select-arrow { - color: @border-color-shallow-dark; - } - } - - &-disabled { - display: none !important; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/table.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/table.less deleted file mode 100644 index ee62b998d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/ant/table.less +++ /dev/null @@ -1,76 +0,0 @@ -@prefix-cls: ~'@{namespace}-basic-table'; - -// fix table unnecessary scrollbar -.@{prefix-cls} { - .hide-scrollbar-y { - .ant-spin-nested-loading { - .ant-spin-container { - .ant-table { - .ant-table-content { - .ant-table-scroll { - .ant-table-hide-scrollbar { - overflow-y: auto !important; - } - - .ant-table-body { - overflow-y: auto !important; - } - } - - .ant-table-fixed-right { - .ant-table-body-outer { - .ant-table-body-inner { - overflow-y: auto !important; - } - } - } - - .ant-table-fixed-left { - .ant-table-body-outer { - .ant-table-body-inner { - overflow-y: auto !important; - } - } - } - } - } - } - } - } - - .hide-scrollbar-x { - .ant-spin-nested-loading { - .ant-spin-container { - .ant-table { - .ant-table-content { - .ant-table-scroll { - .ant-table-hide-scrollbar { - //overflow-x: auto !important; - } - - .ant-table-body { - overflow: auto !important; - } - } - - .ant-table-fixed-right { - .ant-table-body-outer { - .ant-table-body-inner { - overflow-x: auto !important; - } - } - } - - .ant-table-fixed-left { - .ant-table-body-outer { - .ant-table-body-inner { - overflow-x: auto !important; - } - } - } - } - } - } - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/color.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/color.less deleted file mode 100644 index 9d2138c47..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/color.less +++ /dev/null @@ -1,138 +0,0 @@ -html { - // header - --header-bg-color: #394664; - --header-bg-hover-color: #273352; - --header-active-menu-bg-color: #273352; - - // sider - --sider-dark-bg-color: #273352; - --sider-dark-darken-bg-color: #273352; - --sider-dark-lighten-bg-color: #273352; -} - -@white: #fff; - -@content-bg: #f4f7f9; - -// :export { -// name: "less"; -// mainColor: @mainColor; -// fontSize: @fontSize; -// } -@iconify-bg-color: #5551; - -// ================================= -// ==============border-color======= -// ================================= - -// Dark-dark -@border-color-dark: #b6b7b9; - -// Dark-light -@border-color-shallow-dark: #cececd; - -// Light-dark -@border-color-light: @border-color-base; - -// ================================= -// ==============message============== -// ================================= - -// success-bg-color -@success-background-color: #f1f9ec; -// info-bg-color -@info-background-color: #e8eff8; -// warn-bg-color -@warning-background-color: #fdf6ed; -// danger-bg-color -@danger-background-color: #fef0f0; - -// ================================= -// ==============Header============= -// ================================= - -@header-dark-bg-color: var(--header-bg-color); -@header-dark-bg-hover-color: var(--header-bg-hover-color); -@header-light-bg-hover-color: #f6f6f6; -@header-light-desc-color: #7c8087; -@header-light-bottom-border-color: #eee; -// top-menu -@top-menu-active-bg-color: var(--header-active-menu-bg-color); - -// ================================= -// ==============Menu============ -// ================================= - -// let -menu -@sider-dark-bg-color: var(--sider-dark-bg-color); -@sider-dark-darken-bg-color: var(--sider-dark-darken-bg-color); -@sider-dark-lighten-bg-color: var(--sider-dark-lighten-bg-color); - -// trigger -@trigger-dark-hover-bg-color: rgba(255, 255, 255, 0.2); -@trigger-dark-bg-color: rgba(255, 255, 255, 0.1); - -// ================================= -// ==============tree============ -// ================================= -// tree item hover background -@tree-hover-background-color: #f5f7fa; -// tree item hover font color -@tree-hover-font-color: #f5f7fa; - -// ================================= -// ==============link============ -// ================================= -@link-hover-color: @primary-color; -@link-active-color: darken(@primary-color, 10%); - -// ================================= -// ==============Text color-============= -// ================================= - -// Main text color -@text-color-base: @text-color; - -// Label color -@text-color-call-out: #606266; - -// Auxiliary information color-dark -@text-color-help-dark: #909399; - -// ================================= -// ==============breadcrumb========= -// ================================= -@breadcrumb-item-normal-color: #999; -// ================================= -// ==============button============= -// ================================= - -@button-primary-color: @primary-color; -@button-primary-hover-color: lighten(@primary-color, 5%); -@button-primary-active-color: darken(@primary-color, 5%); - -@button-ghost-color: @white; -@button-ghost-hover-color: lighten(@white, 10%); -@button-ghost-hover-bg-color: #e1ebf6; -@button-ghost-active-color: darken(@white, 10%); - -@button-success-color: @success-color; -@button-success-hover-color: lighten(@success-color, 10%); -@button-success-active-color: darken(@success-color, 10%); - -@button-warn-color: @warning-color; -@button-warn-hover-color: lighten(@warning-color, 10%); -@button-warn-active-color: darken(@warning-color, 10%); - -@button-error-color: @error-color; -@button-error-hover-color: lighten(@error-color, 10%); -@button-error-active-color: darken(@error-color, 10%); - -@button-cancel-color: @text-color-call-out; -@button-cancel-bg-color: @white; -@button-cancel-border-color: @border-color-shallow-dark; - -// Mouse over -@button-cancel-hover-color: @primary-color; -@button-cancel-hover-bg-color: @white; -@button-cancel-hover-border-color: @primary-color; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/config.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/config.less deleted file mode 100644 index 64c33f6f1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/config.less +++ /dev/null @@ -1,2 +0,0 @@ -@import (reference) 'color.less'; -@import (reference) 'var/index.less'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/index.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/index.less deleted file mode 100644 index 772758691..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/index.less +++ /dev/null @@ -1,44 +0,0 @@ -@import 'transition/index.less'; -@import 'var/index.less'; -@import 'public.less'; -@import 'ant/index.less'; -@import './theme.less'; - -input:-webkit-autofill { - box-shadow: 0 0 0 1000px white inset !important; -} - -:-webkit-autofill { - transition: background-color 5000s ease-in-out 0s !important; -} - -html { - overflow: hidden; - text-size-adjust: 100%; -} - -html, -body { - width: 100%; - height: 100%; - overflow: visible; - overflow-x: hidden; - - &.color-weak { - filter: invert(80%); - } - - &.gray-mode { - filter: grayscale(100%); - filter: progid:dximagetransform.microsoft.basicimage(grayscale=1); - } -} - -a:focus, -a:active, -button, -div, -svg, -span { - outline: none; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/public.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/public.less deleted file mode 100644 index 644bfab21..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/public.less +++ /dev/null @@ -1,51 +0,0 @@ -#app { - width: 100%; - height: 100%; -} - -// ================================= -// ==============scrollbar========== -// ================================= - -::-webkit-scrollbar { - width: 7px; - height: 8px; -} - -// ::-webkit-scrollbar-track { -// background: transparent; -// } - -::-webkit-scrollbar-track { - background-color: rgb(0 0 0 / 5%); -} - -::-webkit-scrollbar-thumb { - // background: rgba(0, 0, 0, 0.6); - background-color: rgb(144 147 153 / 30%); - // background-color: rgba(144, 147, 153, 0.3); - border-radius: 2px; - box-shadow: inset 0 0 6px rgb(0 0 0 / 20%); -} - -::-webkit-scrollbar-thumb:hover { - background-color: @border-color-dark; -} - -// ================================= -// ==============nprogress========== -// ================================= -#nprogress { - pointer-events: none; - - .bar { - position: fixed; - top: 0; - left: 0; - z-index: 99999; - width: 100%; - height: 2px; - background-color: @primary-color; - opacity: 0.75; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/theme.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/theme.less deleted file mode 100644 index aa05033dd..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/theme.less +++ /dev/null @@ -1,52 +0,0 @@ -.bg-white { - background-color: @component-background !important; -} - -html[data-theme='light'] { - .text-secondary { - color: rgb(0 0 0 / 45%); - } - - .ant-alert-success { - background-color: #f6ffed; - border: 1px solid #b7eb8f; - } - - .ant-alert-error { - background-color: #fff2f0; - border: 1px solid #ffccc7; - } - - .ant-alert-warning { - background-color: #fffbe6; - border: 1px solid #ffe58f; - } - - :not(:root):fullscreen::backdrop { - background-color: @layout-body-background !important; - } -} - -[data-theme='dark'] { - .text-secondary { - color: #8b949e; - } - - .ant-card-grid-hoverable:hover { - box-shadow: 0 3px 6px -4px rgb(0 0 0 / 48%), 0 6px 16px 0 rgb(0 0 0 / 32%), - 0 9px 28px 8px rgb(0 0 0 / 20%); - } - - .ant-card-grid { - box-shadow: 1px 0 0 0 #434343, 0 1px 0 0 #434343, 1px 1px 0 0 #434343, 1px 0 0 0 #434343 inset, - 0 1px 0 0 #434343 inset; - } - - .ant-calendar-selected-day .ant-calendar-date { - color: rgb(0 0 0 / 80%); - } - - .ant-select-tree li .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected { - color: rgb(0 0 0 / 90%); - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/base.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/base.less deleted file mode 100644 index 7944c8bbc..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/base.less +++ /dev/null @@ -1,18 +0,0 @@ -.transition-default() { - &-enter-active, - &-leave-active { - transition: 0.3s cubic-bezier(0.25, 0.8, 0.5, 1) !important; - } - - &-move { - transition: transform 0.4s; - } -} - -.expand-transition { - .transition-default(); -} - -.expand-x-transition { - .transition-default(); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/fade.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/fade.less deleted file mode 100644 index 6ed177135..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/fade.less +++ /dev/null @@ -1,93 +0,0 @@ -.fade-transition { - &-enter-active, - &-leave-active { - transition: opacity 0.2s ease-in-out; - } - - &-enter-from, - &-leave-to { - opacity: 0; - } -} - -.fade-enter-active, -.fade-leave-active { - transition: opacity 0.2s ease-in-out; -} - -.fade-enter-from, -.fade-leave-to { - opacity: 0; -} - -/* fade-slide */ -.fade-slide-leave-active, -.fade-slide-enter-active { - transition: all 0.3s; -} - -.fade-slide-enter-from { - opacity: 0; - transform: translateX(-30px); -} - -.fade-slide-leave-to { - opacity: 0; - transform: translateX(30px); -} - -// /////////////////////////////////////////////// -// Fade Bottom -// /////////////////////////////////////////////// - -// Speed: 1x -.fade-bottom-enter-active, -.fade-bottom-leave-active { - transition: opacity 0.25s, transform 0.3s; -} - -.fade-bottom-enter-from { - opacity: 0; - transform: translateY(-10%); -} - -.fade-bottom-leave-to { - opacity: 0; - transform: translateY(10%); -} - -// fade-scale -.fade-scale-leave-active, -.fade-scale-enter-active { - transition: all 0.28s; -} - -.fade-scale-enter-from { - opacity: 0; - transform: scale(1.2); -} - -.fade-scale-leave-to { - opacity: 0; - transform: scale(0.8); -} - -// /////////////////////////////////////////////// -// Fade Top -// /////////////////////////////////////////////// - -// Speed: 1x -.fade-top-enter-active, -.fade-top-leave-active { - transition: opacity 0.2s, transform 0.25s; -} - -.fade-top-enter-from { - opacity: 0; - transform: translateY(8%); -} - -.fade-top-leave-to { - opacity: 0; - transform: translateY(-8%); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/index.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/index.less deleted file mode 100644 index e372b259e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/index.less +++ /dev/null @@ -1,10 +0,0 @@ -@import './base.less'; -@import './fade.less'; -@import './scale.less'; -@import './slide.less'; -@import './scroll.less'; -@import './zoom.less'; - -.collapse-transition { - transition: 0.2s height ease-in-out, 0.2s padding-top ease-in-out, 0.2s padding-bottom ease-in-out; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/scale.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/scale.less deleted file mode 100644 index c96549357..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/scale.less +++ /dev/null @@ -1,21 +0,0 @@ -.scale-transition { - .transition-default(); - - &-enter-from, - &-leave, - &-leave-to { - opacity: 0; - transform: scale(0); - } -} - -.scale-rotate-transition { - .transition-default(); - - &-enter-from, - &-leave, - &-leave-to { - opacity: 0; - transform: scale(0) rotate(-45deg); - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/scroll.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/scroll.less deleted file mode 100644 index a5f45e4cb..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/scroll.less +++ /dev/null @@ -1,67 +0,0 @@ -.scroll-y-transition { - .transition-default(); - - &-enter-from, - &-leave-to { - opacity: 0; - } - - &-enter-from { - transform: translateY(-15px); - } - - &-leave-to { - transform: translateY(15px); - } -} - -.scroll-y-reverse-transition { - .transition-default(); - - &-enter-from, - &-leave-to { - opacity: 0; - } - - &-enter-from { - transform: translateY(15px); - } - - &-leave-to { - transform: translateY(-15px); - } -} - -.scroll-x-transition { - .transition-default(); - - &-enter-from, - &-leave-to { - opacity: 0; - } - - &-enter-from { - transform: translateX(-15px); - } - - &-leave-to { - transform: translateX(15px); - } -} - -.scroll-x-reverse-transition { - .transition-default(); - - &-enter-from, - &-leave-to { - opacity: 0; - } - - &-enter-from { - transform: translateX(15px); - } - - &-leave-to { - transform: translateX(-15px); - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/slide.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/slide.less deleted file mode 100644 index 79b00df87..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/slide.less +++ /dev/null @@ -1,39 +0,0 @@ -.slide-y-transition { - .transition-default(); - - &-enter-from, - &-leave-to { - opacity: 0; - transform: translateY(-15px); - } -} - -.slide-y-reverse-transition { - .transition-default(); - - &-enter-from, - &-leave-to { - opacity: 0; - transform: translateY(15px); - } -} - -.slide-x-transition { - .transition-default(); - - &-enter-from, - &-leave-to { - opacity: 0; - transform: translateX(-15px); - } -} - -.slide-x-reverse-transition { - .transition-default(); - - &-enter-from, - &-leave-to { - opacity: 0; - transform: translateX(15px); - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/zoom.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/zoom.less deleted file mode 100644 index 2ea378ca7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/transition/zoom.less +++ /dev/null @@ -1,27 +0,0 @@ -// zoom-out -.zoom-out-enter-active, -.zoom-out-leave-active { - transition: opacity 0.1 ease-in-out, transform 0.15s ease-out; -} - -.zoom-out-enter-from, -.zoom-out-leave-to { - opacity: 0; - transform: scale(0); -} - -// zoom-fade -.zoom-fade-enter-active, -.zoom-fade-leave-active { - transition: transform 0.2s, opacity 0.3s ease-out; -} - -.zoom-fade-enter-from { - opacity: 0; - transform: scale(0.92); -} - -.zoom-fade-leave-to { - opacity: 0; - transform: scale(1.06); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/var/breakpoint.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/var/breakpoint.less deleted file mode 100644 index 793e826a8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/var/breakpoint.less +++ /dev/null @@ -1,33 +0,0 @@ -// ================================= -// ==============屏幕断点============ -// ================================= - -// Extra small screen / phone -@screen-xs: 480px; -@screen-xs-min: @screen-xs; - -// Small screen / tablet -@screen-sm: 576px; -@screen-sm-min: @screen-sm; - -// Medium screen / desktop -@screen-md: 768px; -@screen-md-min: @screen-md; - -// Large screen / wide desktop -@screen-lg: 992px; -@screen-lg-min: @screen-lg; - -// Extra large screen / full hd -@screen-xl: 1200px; -@screen-xl-min: @screen-xl; - -// Extra extra large screen / large desktop -@screen-2xl: 1600px; -@screen-2xl-min: @screen-2xl; - -@screen-xs-max: (@screen-sm-min - 1px); -@screen-sm-max: (@screen-md-min - 1px); -@screen-md-max: (@screen-lg-min - 1px); -@screen-lg-max: (@screen-xl-min - 1px); -@screen-xl-max: (@screen-2xl-min - 1px); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/var/easing.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/var/easing.less deleted file mode 100644 index e19735f69..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/var/easing.less +++ /dev/null @@ -1,18 +0,0 @@ -// ================================= -// ==============动画函数-=========== -// ================================= - -@ease-base-out: cubic-bezier(0.7, 0.3, 0.1, 1); -@ease-base-in: cubic-bezier(0.9, 0, 0.3, 0.7); -@ease-out: cubic-bezier(0.215, 0.61, 0.355, 1); -@ease-in: cubic-bezier(0.55, 0.055, 0.675, 0.19); -@ease-in-out: cubic-bezier(0.645, 0.045, 0.355, 1); -@ease-out-back: cubic-bezier(0.12, 0.4, 0.29, 1.46); -@ease-in-back: cubic-bezier(0.71, -0.46, 0.88, 0.6); -@ease-in-out-back: cubic-bezier(0.71, -0.46, 0.29, 1.46); -@ease-out-circ: cubic-bezier(0.08, 0.82, 0.17, 1); -@ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.34); -@ease-in-out-circ: cubic-bezier(0.78, 0.14, 0.15, 0.86); -@ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1); -@ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06); -@ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/var/index.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/var/index.less deleted file mode 100644 index 1689f76d2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/design/var/index.less +++ /dev/null @@ -1,39 +0,0 @@ -@import (reference) '../color.less'; -@import 'easing'; -@import 'breakpoint'; - -@namespace: vben; - -// tabs -@multiple-height: 30px; - -// headers -@header-height: 48px; - -// logo width -@logo-width: 32px; - -// -@side-drag-z-index: 200; - -@page-loading-z-index: 10000; - -@lock-page-z-index: 3000; - -@layout-header-fixed-z-index: 500; - -@multiple-tab-fixed-z-index: 505; - -@layout-sider-fixed-z-index: 510; - -@layout-mix-sider-fixed-z-index: 550; - -@preview-comp-z-index: 1000; - -@page-footer-z-index: 99; - -.bem(@n; @content) { - @{namespace}-@{n} { - @content(); - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/clickOutside.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/clickOutside.ts deleted file mode 100644 index f6f3051a3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/clickOutside.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { on } from '/@/utils/domUtils'; -import { isServer } from '/@/utils/is'; -import type { ComponentPublicInstance, DirectiveBinding, ObjectDirective } from 'vue'; - -type DocumentHandler = (mouseup: T, mousedown: T) => void; - -type FlushList = Map< - HTMLElement, - { - documentHandler: DocumentHandler; - bindingFn: (...args: unknown[]) => unknown; - } ->; - -const nodeList: FlushList = new Map(); - -let startClick: MouseEvent; - -if (!isServer) { - on(document, 'mousedown', (e: MouseEvent) => (startClick = e)); - on(document, 'mouseup', (e: MouseEvent) => { - for (const { documentHandler } of nodeList.values()) { - documentHandler(e, startClick); - } - }); -} - -function createDocumentHandler(el: HTMLElement, binding: DirectiveBinding): DocumentHandler { - let excludes: HTMLElement[] = []; - if (Array.isArray(binding.arg)) { - excludes = binding.arg; - } else { - // due to current implementation on binding type is wrong the type casting is necessary here - excludes.push(binding.arg as unknown as HTMLElement); - } - return function (mouseup, mousedown) { - const popperRef = ( - binding.instance as ComponentPublicInstance<{ - popperRef: Nullable; - }> - ).popperRef; - const mouseUpTarget = mouseup.target as Node; - const mouseDownTarget = mousedown.target as Node; - const isBound = !binding || !binding.instance; - const isTargetExists = !mouseUpTarget || !mouseDownTarget; - const isContainedByEl = el.contains(mouseUpTarget) || el.contains(mouseDownTarget); - const isSelf = el === mouseUpTarget; - - const isTargetExcluded = - (excludes.length && excludes.some((item) => item?.contains(mouseUpTarget))) || - (excludes.length && excludes.includes(mouseDownTarget as HTMLElement)); - const isContainedByPopper = - popperRef && (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget)); - if ( - isBound || - isTargetExists || - isContainedByEl || - isSelf || - isTargetExcluded || - isContainedByPopper - ) { - return; - } - binding.value(); - }; -} - -const ClickOutside: ObjectDirective = { - beforeMount(el, binding) { - nodeList.set(el, { - documentHandler: createDocumentHandler(el, binding), - bindingFn: binding.value, - }); - }, - updated(el, binding) { - nodeList.set(el, { - documentHandler: createDocumentHandler(el, binding), - bindingFn: binding.value, - }); - }, - unmounted(el) { - nodeList.delete(el); - }, -}; - -export default ClickOutside; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/index.ts deleted file mode 100644 index 0329eb651..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Configure and register global directives - */ -import type { App } from 'vue'; -import { setupPermissionDirective } from './permission'; -import { setupLoadingDirective } from './loading'; - -export function setupGlobDirectives(app: App) { - setupPermissionDirective(app); - setupLoadingDirective(app); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/loading.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/loading.ts deleted file mode 100644 index 712b71ce7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/loading.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { createLoading } from '/@/components/Loading'; -import type { Directive, App } from 'vue'; - -const loadingDirective: Directive = { - mounted(el, binding) { - const tip = el.getAttribute('loading-tip'); - const background = el.getAttribute('loading-background'); - const size = el.getAttribute('loading-size'); - const fullscreen = !!binding.modifiers.fullscreen; - const instance = createLoading( - { - tip, - background, - size: size || 'large', - loading: !!binding.value, - absolute: !fullscreen, - }, - fullscreen ? document.body : el, - ); - el.instance = instance; - }, - updated(el, binding) { - const instance = el.instance; - if (!instance) return; - instance.setTip(el.getAttribute('loading-tip')); - if (binding.oldValue !== binding.value) { - instance.setLoading?.(binding.value && !instance.loading); - } - }, - unmounted(el) { - el?.instance?.close(); - }, -}; - -export function setupLoadingDirective(app: App) { - app.directive('loading', loadingDirective); -} - -export default loadingDirective; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/permission.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/permission.ts deleted file mode 100644 index ca5d0fca1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/permission.ts +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Global authority directive - * Used for fine-grained control of component permissions - * @Example v-auth="RoleEnum.TEST" - */ -import type { App, Directive, DirectiveBinding } from 'vue'; - -import { usePermission } from '/@/hooks/web/usePermission'; - -function isAuth(el: Element, binding: any) { - const { hasPermission } = usePermission(); - - const value = binding.value; - if (!value) return; - if (!hasPermission(value)) { - el.parentNode?.removeChild(el); - } -} - -const mounted = (el: Element, binding: DirectiveBinding) => { - isAuth(el, binding); -}; - -const authDirective: Directive = { - mounted, -}; - -export function setupPermissionDirective(app: App) { - app.directive('auth', authDirective); -} - -export default authDirective; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/repeatClick.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/repeatClick.ts deleted file mode 100644 index d4ef150d8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/repeatClick.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Prevent repeated clicks - * @Example v-repeat-click="()=>{}" - */ -import { on, once } from '/@/utils/domUtils'; -import type { Directive, DirectiveBinding } from 'vue'; - -const repeatDirective: Directive = { - beforeMount(el: Element, binding: DirectiveBinding) { - let interval: Nullable = null; - let startTime = 0; - const handler = (): void => binding?.value(); - const clear = (): void => { - if (Date.now() - startTime < 100) { - handler(); - } - interval && clearInterval(interval); - interval = null; - }; - - on(el, 'mousedown', (e: MouseEvent): void => { - if ((e as any).button !== 0) return; - startTime = Date.now(); - once(document as any, 'mouseup', clear); - interval && clearInterval(interval); - interval = setInterval(handler, 100); - }); - }, -}; - -export default repeatDirective; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/ripple/index.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/ripple/index.less deleted file mode 100644 index 9c0718edc..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/ripple/index.less +++ /dev/null @@ -1,21 +0,0 @@ -.ripple-container { - position: absolute; - top: 0; - left: 0; - width: 0; - height: 0; - overflow: hidden; - pointer-events: none; -} - -.ripple-effect { - position: relative; - z-index: 9999; - width: 1px; - height: 1px; - margin-top: 0; - margin-left: 0; - pointer-events: none; - border-radius: 50%; - transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/ripple/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/ripple/index.ts deleted file mode 100644 index 85a80e8f3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/directives/ripple/index.ts +++ /dev/null @@ -1,191 +0,0 @@ -import type { Directive } from 'vue'; -import './index.less'; -export interface RippleOptions { - event: string; - transition: number; -} - -export interface RippleProto { - background?: string; - zIndex?: string; -} - -export type EventType = Event & MouseEvent & TouchEvent; - -const options: RippleOptions = { - event: 'mousedown', - transition: 400, -}; - -const RippleDirective: Directive & RippleProto = { - beforeMount: (el: HTMLElement, binding) => { - if (binding.value === false) return; - - const bg = el.getAttribute('ripple-background'); - setProps(Object.keys(binding.modifiers), options); - - const background = bg || RippleDirective.background; - const zIndex = RippleDirective.zIndex; - - el.addEventListener(options.event, (event: EventType) => { - rippler({ - event, - el, - background, - zIndex, - }); - }); - }, - updated(el, binding) { - if (!binding.value) { - el?.clearRipple?.(); - return; - } - const bg = el.getAttribute('ripple-background'); - el?.setBackground?.(bg); - }, -}; - -function rippler({ - event, - el, - zIndex, - background, -}: { event: EventType; el: HTMLElement } & RippleProto) { - const targetBorder = parseInt(getComputedStyle(el).borderWidth.replace('px', '')); - const clientX = event.clientX || event.touches[0].clientX; - const clientY = event.clientY || event.touches[0].clientY; - - const rect = el.getBoundingClientRect(); - const { left, top } = rect; - const { offsetWidth: width, offsetHeight: height } = el; - const { transition } = options; - const dx = clientX - left; - const dy = clientY - top; - const maxX = Math.max(dx, width - dx); - const maxY = Math.max(dy, height - dy); - const style = window.getComputedStyle(el); - const radius = Math.sqrt(maxX * maxX + maxY * maxY); - const border = targetBorder > 0 ? targetBorder : 0; - - const ripple = document.createElement('div'); - const rippleContainer = document.createElement('div'); - - // Styles for ripple - ripple.className = 'ripple'; - - Object.assign(ripple.style ?? {}, { - marginTop: '0px', - marginLeft: '0px', - width: '1px', - height: '1px', - transition: `all ${transition}ms cubic-bezier(0.4, 0, 0.2, 1)`, - borderRadius: '50%', - pointerEvents: 'none', - position: 'relative', - zIndex: zIndex ?? '9999', - backgroundColor: background ?? 'rgba(0, 0, 0, 0.12)', - }); - - // Styles for rippleContainer - rippleContainer.className = 'ripple-container'; - Object.assign(rippleContainer.style ?? {}, { - position: 'absolute', - left: `${0 - border}px`, - top: `${0 - border}px`, - height: '0', - width: '0', - pointerEvents: 'none', - overflow: 'hidden', - }); - - const storedTargetPosition = - el.style.position.length > 0 ? el.style.position : getComputedStyle(el).position; - - if (storedTargetPosition !== 'relative') { - el.style.position = 'relative'; - } - - rippleContainer.appendChild(ripple); - el.appendChild(rippleContainer); - - Object.assign(ripple.style, { - marginTop: `${dy}px`, - marginLeft: `${dx}px`, - }); - - const { - borderTopLeftRadius, - borderTopRightRadius, - borderBottomLeftRadius, - borderBottomRightRadius, - } = style; - Object.assign(rippleContainer.style, { - width: `${width}px`, - height: `${height}px`, - direction: 'ltr', - borderTopLeftRadius, - borderTopRightRadius, - borderBottomLeftRadius, - borderBottomRightRadius, - }); - - setTimeout(() => { - const wh = `${radius * 2}px`; - Object.assign(ripple.style ?? {}, { - width: wh, - height: wh, - marginLeft: `${dx - radius}px`, - marginTop: `${dy - radius}px`, - }); - }, 0); - - function clearRipple() { - setTimeout(() => { - ripple.style.backgroundColor = 'rgba(0, 0, 0, 0)'; - }, 250); - - setTimeout(() => { - rippleContainer?.parentNode?.removeChild(rippleContainer); - }, 850); - el.removeEventListener('mouseup', clearRipple, false); - el.removeEventListener('mouseleave', clearRipple, false); - el.removeEventListener('dragstart', clearRipple, false); - setTimeout(() => { - let clearPosition = true; - for (let i = 0; i < el.childNodes.length; i++) { - if ((el.childNodes[i] as Recordable).className === 'ripple-container') { - clearPosition = false; - } - } - - if (clearPosition) { - el.style.position = storedTargetPosition !== 'static' ? storedTargetPosition : ''; - } - }, options.transition + 260); - } - - if (event.type === 'mousedown') { - el.addEventListener('mouseup', clearRipple, false); - el.addEventListener('mouseleave', clearRipple, false); - el.addEventListener('dragstart', clearRipple, false); - } else { - clearRipple(); - } - - (el as Recordable).setBackground = (bgColor: string) => { - if (!bgColor) { - return; - } - ripple.style.backgroundColor = bgColor; - }; -} - -function setProps(modifiers: Recordable, props: Recordable) { - modifiers.forEach((item: Recordable) => { - if (isNaN(Number(item))) props.event = item; - else props.transition = item; - }); -} - -export default RippleDirective; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/appEnum.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/appEnum.ts deleted file mode 100644 index 1fc3989fc..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/appEnum.ts +++ /dev/null @@ -1,52 +0,0 @@ -export const SIDE_BAR_MINI_WIDTH = 48; -export const SIDE_BAR_SHOW_TIT_MINI_WIDTH = 80; - -export enum ContentEnum { - // auto width - FULL = 'full', - // fixed width - FIXED = 'fixed', -} - -// menu theme enum -export enum ThemeEnum { - DARK = 'dark', - LIGHT = 'light', -} - -export enum SettingButtonPositionEnum { - AUTO = 'auto', - HEADER = 'header', - FIXED = 'fixed', -} - -export enum SessionTimeoutProcessingEnum { - ROUTE_JUMP, - PAGE_COVERAGE, -} - -/** - * 权限模式 - */ -export enum PermissionModeEnum { - // role - // 角色权限 - ROLE = 'ROLE', - // black - // 后端 - BACK = 'BACK', - // route mapping - // 路由映射 - ROUTE_MAPPING = 'ROUTE_MAPPING', -} - -// Route switching animation -// 路由切换动画 -export enum RouterTransitionEnum { - ZOOM_FADE = 'zoom-fade', - ZOOM_OUT = 'zoom-out', - FADE_SIDE = 'fade-slide', - FADE = 'fade', - FADE_BOTTOM = 'fade-bottom', - FADE_SCALE = 'fade-scale', -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/breakpointEnum.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/breakpointEnum.ts deleted file mode 100644 index 93acc1a31..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/breakpointEnum.ts +++ /dev/null @@ -1,28 +0,0 @@ -export enum sizeEnum { - XS = 'XS', - SM = 'SM', - MD = 'MD', - LG = 'LG', - XL = 'XL', - XXL = 'XXL', -} - -export enum screenEnum { - XS = 480, - SM = 576, - MD = 768, - LG = 992, - XL = 1200, - XXL = 1600, -} - -const screenMap = new Map(); - -screenMap.set(sizeEnum.XS, screenEnum.XS); -screenMap.set(sizeEnum.SM, screenEnum.SM); -screenMap.set(sizeEnum.MD, screenEnum.MD); -screenMap.set(sizeEnum.LG, screenEnum.LG); -screenMap.set(sizeEnum.XL, screenEnum.XL); -screenMap.set(sizeEnum.XXL, screenEnum.XXL); - -export { screenMap }; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/cacheEnum.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/cacheEnum.ts deleted file mode 100644 index 6b4a4f962..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/cacheEnum.ts +++ /dev/null @@ -1,37 +0,0 @@ -// token key -export const TOKEN_KEY = 'TOKEN__'; - -export const LOCALE_KEY = 'LOCALE__'; - -// user info key -export const USER_INFO_KEY = 'USER__INFO__'; - -// role info key -export const ROLES_KEY = 'ROLES__KEY__'; - -// project config key -export const PROJ_CFG_KEY = 'PROJ__CFG__KEY__'; - -// lock info -export const LOCK_INFO_KEY = 'LOCK__INFO__KEY__'; - -export const MULTIPLE_TABS_KEY = 'MULTIPLE_TABS__KEY__'; - -export const APP_DARK_MODE_KEY_ = '__APP__DARK__MODE__'; - -// base global local key -export const APP_LOCAL_CACHE_KEY = 'COMMON__LOCAL__KEY__'; - -// base global session key -export const APP_SESSION_CACHE_KEY = 'COMMON__SESSION__KEY__'; - -export const ABP_LOCALE_KEY = 'ABP_LOCALE__'; - -export const ABP_TETANT_KEY = 'ABP_TETANT__'; - -export const AUTH_KEY = 'AUTH__KEY__'; - -export enum CacheTypeEnum { - SESSION, - LOCAL, -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/exceptionEnum.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/exceptionEnum.ts deleted file mode 100644 index d28f4d0e3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/exceptionEnum.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * @description: Exception related enumeration - */ -export enum ExceptionEnum { - // page not access - PAGE_NOT_ACCESS = 403, - - // page not found - PAGE_NOT_FOUND = 404, - - // error - ERROR = 500, - - // net work error - NET_WORK_ERROR = 10000, - - // No data on the page. In fact, it is not an exception page - PAGE_NOT_DATA = 10100, -} - -export enum ErrorTypeEnum { - VUE = 'vue', - SCRIPT = 'script', - RESOURCE = 'resource', - AJAX = 'ajax', - PROMISE = 'promise', -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/httpEnum.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/httpEnum.ts deleted file mode 100644 index 61a944a1c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/httpEnum.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @description: Request result set - */ -export enum ResultEnum { - SUCCESS = 0, - ERROR = 1, - TIMEOUT = 401, - TYPE = 'success', -} - -/** - * @description: request method - */ -export enum RequestEnum { - GET = 'GET', - POST = 'POST', - PUT = 'PUT', - DELETE = 'DELETE', -} - -/** - * @description: contentType - */ -export enum ContentTypeEnum { - // json - JSON = 'application/json;charset=UTF-8', - // form-data qs - FORM_URLENCODED = 'application/x-www-form-urlencoded;charset=UTF-8', - // form-data upload - FORM_DATA = 'multipart/form-data;charset=UTF-8', -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/menuEnum.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/menuEnum.ts deleted file mode 100644 index 89cfa9f5c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/menuEnum.ts +++ /dev/null @@ -1,50 +0,0 @@ -/** - * @description: menu type - */ -export enum MenuTypeEnum { - // left menu - SIDEBAR = 'sidebar', - - MIX_SIDEBAR = 'mix-sidebar', - // mixin menu - MIX = 'mix', - // top menu - TOP_MENU = 'top-menu', -} - -// 折叠触发器位置 -export enum TriggerEnum { - // 不显示 - NONE = 'NONE', - // 菜单底部 - FOOTER = 'FOOTER', - // 头部 - HEADER = 'HEADER', -} - -export type Mode = 'vertical' | 'vertical-right' | 'horizontal' | 'inline'; - -// menu mode -export enum MenuModeEnum { - VERTICAL = 'vertical', - HORIZONTAL = 'horizontal', - VERTICAL_RIGHT = 'vertical-right', - INLINE = 'inline', -} - -export enum MenuSplitTyeEnum { - NONE, - TOP, - LEFT, -} - -export enum TopMenuAlignEnum { - CENTER = 'center', - START = 'start', - END = 'end', -} - -export enum MixSidebarTriggerEnum { - HOVER = 'hover', - CLICK = 'click', -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/pageEnum.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/pageEnum.ts deleted file mode 100644 index e739d67af..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/pageEnum.ts +++ /dev/null @@ -1,12 +0,0 @@ -export enum PageEnum { - // basic login path - BASE_LOGIN = '/login', - // basic home path - BASE_HOME = '/dashboard', - // error page path - ERROR_PAGE = '/exception', - // error log page path - ERROR_LOG_PAGE = '/error-log/list', -} - -export const PageWrapperFixedHeightKey = 'PageWrapperFixedHeight'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/roleEnum.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/roleEnum.ts deleted file mode 100644 index 857868d59..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/roleEnum.ts +++ /dev/null @@ -1,7 +0,0 @@ -export enum RoleEnum { - // super admin - SUPER = 'super', - - // tester - TEST = 'test', -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/sizeEnum.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/sizeEnum.ts deleted file mode 100644 index 9bac18437..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/enums/sizeEnum.ts +++ /dev/null @@ -1,19 +0,0 @@ -export enum SizeEnum { - DEFAULT = 'default', - SMALL = 'small', - LARGE = 'large', -} - -export enum SizeNumberEnum { - DEFAULT = 48, - SMALL = 16, - LARGE = 64, -} - -export const sizeMap: Map = (() => { - const map = new Map(); - map.set(SizeEnum.DEFAULT, SizeNumberEnum.DEFAULT); - map.set(SizeEnum.SMALL, SizeNumberEnum.SMALL); - map.set(SizeEnum.LARGE, SizeNumberEnum.LARGE); - return map; -})(); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/component/useFormItem.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/component/useFormItem.ts deleted file mode 100644 index cee415e88..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/component/useFormItem.ts +++ /dev/null @@ -1,60 +0,0 @@ -import type { UnwrapRef, Ref, WritableComputedRef, DeepReadonly } from 'vue'; -import { - reactive, - readonly, - computed, - getCurrentInstance, - watchEffect, - unref, - nextTick, - toRaw, -} from 'vue'; - -import { isEqual } from 'lodash-es'; - -export function useRuleFormItem>( - props: T, - key?: K, - changeEvent?, - emitData?: Ref, -): [WritableComputedRef, (val: V) => void, DeepReadonly]; - -export function useRuleFormItem( - props: T, - key: keyof T = 'value', - changeEvent = 'change', - emitData?: Ref, -) { - const instance = getCurrentInstance(); - const emit = instance?.emit; - - const innerState = reactive({ - value: props[key], - }); - - const defaultState = readonly(innerState); - - const setState = (val: UnwrapRef): void => { - innerState.value = val as T[keyof T]; - }; - - watchEffect(() => { - innerState.value = props[key]; - }); - - const state: any = computed({ - get() { - return innerState.value; - }, - set(value) { - if (isEqual(value, defaultState.value)) return; - - innerState.value = value as T[keyof T]; - nextTick(() => { - emit?.(changeEvent, value, ...(toRaw(unref(emitData)) || [])); - }); - }, - }); - - return [state, setState, defaultState]; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/component/usePageContext.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/component/usePageContext.ts deleted file mode 100644 index 12cc16057..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/component/usePageContext.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { InjectionKey, ComputedRef, Ref } from 'vue'; -import { createContext, useContext } from '/@/hooks/core/useContext'; - -export interface PageContextProps { - contentHeight: ComputedRef; - pageHeight: Ref; - setPageHeight: (height: number) => Promise; -} - -const key: InjectionKey = Symbol(); - -export function createPageContext(context: PageContextProps) { - return createContext(context, key, { native: true }); -} - -export function usePageContext() { - return useContext(key); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/onMountedOrActivated.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/onMountedOrActivated.ts deleted file mode 100644 index ffabf18de..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/onMountedOrActivated.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { nextTick, onMounted, onActivated } from 'vue'; - -export function onMountedOrActivated(hook: Fn) { - let mounted: boolean; - - onMounted(() => { - hook(); - nextTick(() => { - mounted = true; - }); - }); - - onActivated(() => { - if (mounted) { - hook(); - } - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useAttrs.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useAttrs.ts deleted file mode 100644 index a7c5bd74c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useAttrs.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { getCurrentInstance, reactive, shallowRef, watchEffect } from 'vue'; -import type { Ref } from 'vue'; -interface Params { - excludeListeners?: boolean; - excludeKeys?: string[]; - excludeDefaultKeys?: boolean; -} - -const DEFAULT_EXCLUDE_KEYS = ['class', 'style']; -const LISTENER_PREFIX = /^on[A-Z]/; - -export function entries(obj: Recordable): [string, T][] { - return Object.keys(obj).map((key: string) => [key, obj[key]]); -} - -export function useAttrs(params: Params = {}): Ref | {} { - const instance = getCurrentInstance(); - if (!instance) return {}; - - const { excludeListeners = false, excludeKeys = [], excludeDefaultKeys = true } = params; - const attrs = shallowRef({}); - const allExcludeKeys = excludeKeys.concat(excludeDefaultKeys ? DEFAULT_EXCLUDE_KEYS : []); - - // Since attrs are not reactive, make it reactive instead of doing in `onUpdated` hook for better performance - instance.attrs = reactive(instance.attrs); - - watchEffect(() => { - const res = entries(instance.attrs).reduce((acm, [key, val]) => { - if (!allExcludeKeys.includes(key) && !(excludeListeners && LISTENER_PREFIX.test(key))) { - acm[key] = val; - } - - return acm; - }, {} as Recordable); - - attrs.value = res; - }); - - return attrs; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useContext.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useContext.ts deleted file mode 100644 index c68618740..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useContext.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { - InjectionKey, - provide, - inject, - reactive, - readonly as defineReadonly, - // defineComponent, - UnwrapRef, -} from 'vue'; - -export interface CreateContextOptions { - readonly?: boolean; - createProvider?: boolean; - native?: boolean; -} - -type ShallowUnwrap = { - [P in keyof T]: UnwrapRef; -}; - -export function createContext( - context: any, - key: InjectionKey = Symbol(), - options: CreateContextOptions = {}, -) { - const { readonly = true, createProvider = false, native = false } = options; - - const state = reactive(context); - const provideData = readonly ? defineReadonly(state) : state; - !createProvider && provide(key, native ? context : provideData); - - return { - state, - }; -} - -export function useContext(key: InjectionKey, native?: boolean): T; - -export function useContext( - key: InjectionKey = Symbol(), - defaultValue?: any, -): ShallowUnwrap { - return inject(key, defaultValue || {}); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useLockFn.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useLockFn.ts deleted file mode 100644 index 0a8b3a79e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useLockFn.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ref, unref } from 'vue'; - -export function useLockFn

(fn: (...args: P) => Promise) { - const lockRef = ref(false); - return async function (...args: P) { - if (unref(lockRef)) return; - lockRef.value = true; - try { - const ret = await fn(...args); - lockRef.value = false; - return ret; - } catch (e) { - lockRef.value = false; - throw e; - } - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useRefs.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useRefs.ts deleted file mode 100644 index 180bb1497..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useRefs.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { Ref } from 'vue'; -import { ref, onBeforeUpdate } from 'vue'; - -export function useRefs(): [Ref, (index: number) => (el: HTMLElement) => void] { - const refs = ref([]) as Ref; - - onBeforeUpdate(() => { - refs.value = []; - }); - - const setRefs = (index: number) => (el: HTMLElement) => { - refs.value[index] = el; - }; - - return [refs, setRefs]; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useTimeout.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useTimeout.ts deleted file mode 100644 index 9905c2b6f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/core/useTimeout.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { ref, watch } from 'vue'; -import { tryOnUnmounted } from '@vueuse/core'; -import { isFunction } from '/@/utils/is'; - -export function useTimeoutFn(handle: Fn, wait: number, native = false) { - if (!isFunction(handle)) { - throw new Error('handle is not Function!'); - } - - const { readyRef, stop, start } = useTimeoutRef(wait); - if (native) { - handle(); - } else { - watch( - readyRef, - (maturity) => { - maturity && handle(); - }, - { immediate: false }, - ); - } - return { readyRef, stop, start }; -} - -export function useTimeoutRef(wait: number) { - const readyRef = ref(false); - - let timer: TimeoutHandle; - function stop(): void { - readyRef.value = false; - timer && window.clearTimeout(timer); - } - function start(): void { - stop(); - timer = setTimeout(() => { - readyRef.value = true; - }, wait); - } - - start(); - - tryOnUnmounted(stop); - - return { readyRef, stop, start }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useBreakpoint.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useBreakpoint.ts deleted file mode 100644 index 01bbbecc5..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useBreakpoint.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { ref, computed, ComputedRef, unref } from 'vue'; -import { useEventListener } from '/@/hooks/event/useEventListener'; -import { screenMap, sizeEnum, screenEnum } from '/@/enums/breakpointEnum'; - -let globalScreenRef: ComputedRef; -let globalWidthRef: ComputedRef; -let globalRealWidthRef: ComputedRef; - -export interface CreateCallbackParams { - screen: ComputedRef; - width: ComputedRef; - realWidth: ComputedRef; - screenEnum: typeof screenEnum; - screenMap: Map; - sizeEnum: typeof sizeEnum; -} - -export function useBreakpoint() { - return { - screenRef: computed(() => unref(globalScreenRef)), - widthRef: globalWidthRef, - screenEnum, - realWidthRef: globalRealWidthRef, - }; -} - -// Just call it once -export function createBreakpointListen(fn?: (opt: CreateCallbackParams) => void) { - const screenRef = ref(sizeEnum.XL); - const realWidthRef = ref(window.innerWidth); - - function getWindowWidth() { - const width = document.body.clientWidth; - const xs = screenMap.get(sizeEnum.XS)!; - const sm = screenMap.get(sizeEnum.SM)!; - const md = screenMap.get(sizeEnum.MD)!; - const lg = screenMap.get(sizeEnum.LG)!; - const xl = screenMap.get(sizeEnum.XL)!; - if (width < xs) { - screenRef.value = sizeEnum.XS; - } else if (width < sm) { - screenRef.value = sizeEnum.SM; - } else if (width < md) { - screenRef.value = sizeEnum.MD; - } else if (width < lg) { - screenRef.value = sizeEnum.LG; - } else if (width < xl) { - screenRef.value = sizeEnum.XL; - } else { - screenRef.value = sizeEnum.XXL; - } - realWidthRef.value = width; - } - - useEventListener({ - el: window, - name: 'resize', - - listener: () => { - getWindowWidth(); - resizeFn(); - }, - // wait: 100, - }); - - getWindowWidth(); - globalScreenRef = computed(() => unref(screenRef)); - globalWidthRef = computed((): number => screenMap.get(unref(screenRef)!)!); - globalRealWidthRef = computed((): number => unref(realWidthRef)); - - function resizeFn() { - fn?.({ - screen: globalScreenRef, - width: globalWidthRef, - realWidth: globalRealWidthRef, - screenEnum, - screenMap, - sizeEnum, - }); - } - - resizeFn(); - return { - screenRef: globalScreenRef, - screenEnum, - widthRef: globalWidthRef, - realWidthRef: globalRealWidthRef, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useEventListener.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useEventListener.ts deleted file mode 100644 index 892cd92e1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useEventListener.ts +++ /dev/null @@ -1,58 +0,0 @@ -import type { Ref } from 'vue'; -import { ref, watch, unref } from 'vue'; -import { useThrottleFn, useDebounceFn } from '@vueuse/core'; - -export type RemoveEventFn = () => void; -export interface UseEventParams { - el?: Element | Ref | Window | any; - name: string; - listener: EventListener; - options?: boolean | AddEventListenerOptions; - autoRemove?: boolean; - isDebounce?: boolean; - wait?: number; -} -export function useEventListener({ - el = window, - name, - listener, - options, - autoRemove = true, - isDebounce = true, - wait = 80, -}: UseEventParams): { removeEvent: RemoveEventFn } { - /* eslint-disable-next-line */ - let remove: RemoveEventFn = () => {}; - const isAddRef = ref(false); - - if (el) { - const element = ref(el as Element) as Ref; - - const handler = isDebounce ? useDebounceFn(listener, wait) : useThrottleFn(listener, wait); - const realHandler = wait ? handler : listener; - const removeEventListener = (e: Element) => { - isAddRef.value = true; - e.removeEventListener(name, realHandler, options); - }; - const addEventListener = (e: Element) => e.addEventListener(name, realHandler, options); - - const removeWatch = watch( - element, - (v, _ov, cleanUp) => { - if (v) { - !unref(isAddRef) && addEventListener(v); - cleanUp(() => { - autoRemove && removeEventListener(v); - }); - } - }, - { immediate: true }, - ); - - remove = () => { - removeEventListener(element.value); - removeWatch(); - }; - } - return { removeEvent: remove }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useIntersectionObserver.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useIntersectionObserver.ts deleted file mode 100644 index b9badcaee..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useIntersectionObserver.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Ref, watchEffect, ref } from 'vue'; - -interface IntersectionObserverProps { - target: Ref; - root?: Ref; - onIntersect: IntersectionObserverCallback; - rootMargin?: string; - threshold?: number; -} - -export function useIntersectionObserver({ - target, - root, - onIntersect, - rootMargin = '0px', - threshold = 0.1, -}: IntersectionObserverProps) { - let cleanup = () => {}; - const observer: Ref> = ref(null); - const stopEffect = watchEffect(() => { - cleanup(); - - observer.value = new IntersectionObserver(onIntersect, { - root: root ? root.value : null, - rootMargin, - threshold, - }); - - const current = target.value; - - current && observer.value.observe(current); - - cleanup = () => { - if (observer.value) { - observer.value.disconnect(); - target.value && observer.value.unobserve(target.value); - } - }; - }); - - return { - observer, - stop: () => { - cleanup(); - stopEffect(); - }, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useScroll.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useScroll.ts deleted file mode 100644 index cc60f9bf5..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useScroll.ts +++ /dev/null @@ -1,65 +0,0 @@ -import type { Ref } from 'vue'; - -import { ref, onMounted, watch, onUnmounted } from 'vue'; -import { isWindow, isObject } from '/@/utils/is'; -import { useThrottleFn } from '@vueuse/core'; - -export function useScroll( - refEl: Ref, - options?: { - wait?: number; - leading?: boolean; - trailing?: boolean; - }, -) { - const refX = ref(0); - const refY = ref(0); - let handler = () => { - if (isWindow(refEl.value)) { - refX.value = refEl.value.scrollX; - refY.value = refEl.value.scrollY; - } else if (refEl.value) { - refX.value = (refEl.value as Element).scrollLeft; - refY.value = (refEl.value as Element).scrollTop; - } - }; - - if (isObject(options)) { - let wait = 0; - if (options.wait && options.wait > 0) { - wait = options.wait; - Reflect.deleteProperty(options, 'wait'); - } - - handler = useThrottleFn(handler, wait); - } - - let stopWatch: () => void; - onMounted(() => { - stopWatch = watch( - refEl, - (el, prevEl, onCleanup) => { - if (el) { - el.addEventListener('scroll', handler); - } else if (prevEl) { - prevEl.removeEventListener('scroll', handler); - } - onCleanup(() => { - refX.value = refY.value = 0; - el && el.removeEventListener('scroll', handler); - }); - }, - { immediate: true }, - ); - }); - - onUnmounted(() => { - refEl.value && refEl.value.removeEventListener('scroll', handler); - }); - - function stop() { - stopWatch && stopWatch(); - } - - return { refX, refY, stop }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useScrollTo.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useScrollTo.ts deleted file mode 100644 index f6d5dc61b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useScrollTo.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { isFunction, isUnDef } from '/@/utils/is'; -import { ref, unref } from 'vue'; - -export interface ScrollToParams { - el: any; - to: number; - duration?: number; - callback?: () => any; -} - -const easeInOutQuad = (t: number, b: number, c: number, d: number) => { - t /= d / 2; - if (t < 1) { - return (c / 2) * t * t + b; - } - t--; - return (-c / 2) * (t * (t - 2) - 1) + b; -}; -const move = (el: HTMLElement, amount: number) => { - el.scrollTop = amount; -}; - -const position = (el: HTMLElement) => { - return el.scrollTop; -}; -export function useScrollTo({ el, to, duration = 500, callback }: ScrollToParams) { - const isActiveRef = ref(false); - const start = position(el); - const change = to - start; - const increment = 20; - let currentTime = 0; - duration = isUnDef(duration) ? 500 : duration; - - const animateScroll = function () { - if (!unref(isActiveRef)) { - return; - } - currentTime += increment; - const val = easeInOutQuad(currentTime, start, change, duration); - move(el, val); - if (currentTime < duration && unref(isActiveRef)) { - requestAnimationFrame(animateScroll); - } else { - if (callback && isFunction(callback)) { - callback(); - } - } - }; - const run = () => { - isActiveRef.value = true; - animateScroll(); - }; - - const stop = () => { - isActiveRef.value = false; - }; - - return { start: run, stop }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useWindowSizeFn.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useWindowSizeFn.ts deleted file mode 100644 index 01cdc7529..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/event/useWindowSizeFn.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { tryOnMounted, tryOnUnmounted, useDebounceFn } from '@vueuse/core'; - -interface WindowSizeOptions { - once?: boolean; - immediate?: boolean; - listenerOptions?: AddEventListenerOptions | boolean; -} - -export function useWindowSizeFn(fn: Fn, wait = 150, options?: WindowSizeOptions) { - let handler = () => { - fn(); - }; - const handleSize = useDebounceFn(handler, wait); - handler = handleSize; - - const start = () => { - if (options && options.immediate) { - handler(); - } - window.addEventListener('resize', handler); - }; - - const stop = () => { - window.removeEventListener('resize', handler); - }; - - tryOnMounted(() => { - start(); - }); - - tryOnUnmounted(() => { - stop(); - }); - return [start, stop]; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/index.ts deleted file mode 100644 index 56e393fa1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { GlobConfig } from '/#/config'; - -import { warn } from '/@/utils/log'; -import { getAppEnvConfig } from '/@/utils/env'; - -export const useGlobSetting = (): Readonly => { - const { - VITE_GLOB_APP_TITLE, - VITE_GLOB_API_URL, - VITE_GLOB_APP_SHORT_NAME, - VITE_GLOB_API_URL_PREFIX, - VITE_GLOB_UPLOAD_URL, - } = getAppEnvConfig(); - - if (!/[a-zA-Z\_]*/.test(VITE_GLOB_APP_SHORT_NAME)) { - warn( - `VITE_GLOB_APP_SHORT_NAME Variables can only be characters/underscores, please modify in the environment variables and re-running.`, - ); - } - - // Take global configuration - const glob: Readonly = { - title: VITE_GLOB_APP_TITLE, - apiUrl: VITE_GLOB_API_URL, - shortName: VITE_GLOB_APP_SHORT_NAME, - urlPrefix: VITE_GLOB_API_URL_PREFIX, - uploadUrl: VITE_GLOB_UPLOAD_URL, - }; - return glob as Readonly; -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useHeaderSetting.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useHeaderSetting.ts deleted file mode 100644 index d590be8cf..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useHeaderSetting.ts +++ /dev/null @@ -1,105 +0,0 @@ -import type { HeaderSetting } from '/#/config'; - -import { computed, unref } from 'vue'; - -import { useAppStore } from '/@/store/modules/app'; - -import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; -import { useRootSetting } from '/@/hooks/setting/useRootSetting'; -import { useFullContent } from '/@/hooks/web/useFullContent'; -import { MenuModeEnum } from '/@/enums/menuEnum'; - -export function useHeaderSetting() { - const { getFullContent } = useFullContent(); - const appStore = useAppStore(); - - const getShowFullHeaderRef = computed(() => { - return ( - !unref(getFullContent) && - unref(getShowMixHeaderRef) && - unref(getShowHeader) && - !unref(getIsTopMenu) && - !unref(getIsMixSidebar) - ); - }); - - const getUnFixedAndFull = computed(() => !unref(getFixed) && !unref(getShowFullHeaderRef)); - - const getShowInsetHeaderRef = computed(() => { - const need = !unref(getFullContent) && unref(getShowHeader); - return ( - (need && !unref(getShowMixHeaderRef)) || - (need && unref(getIsTopMenu)) || - (need && unref(getIsMixSidebar)) - ); - }); - - const { - getMenuMode, - getSplit, - getShowHeaderTrigger, - getIsSidebarType, - getIsMixSidebar, - getIsTopMenu, - } = useMenuSetting(); - const { getShowBreadCrumb, getShowLogo } = useRootSetting(); - - const getShowMixHeaderRef = computed(() => !unref(getIsSidebarType) && unref(getShowHeader)); - - const getShowDoc = computed(() => appStore.getHeaderSetting.showDoc); - - const getHeaderTheme = computed(() => appStore.getHeaderSetting.theme); - - const getShowHeader = computed(() => appStore.getHeaderSetting.show); - - const getFixed = computed(() => appStore.getHeaderSetting.fixed); - - const getHeaderBgColor = computed(() => appStore.getHeaderSetting.bgColor); - - const getShowSearch = computed(() => appStore.getHeaderSetting.showSearch); - - const getUseLockPage = computed(() => appStore.getHeaderSetting.useLockPage); - - const getShowFullScreen = computed(() => appStore.getHeaderSetting.showFullScreen); - - const getShowNotice = computed(() => appStore.getHeaderSetting.showNotice); - - const getShowBread = computed(() => { - return ( - unref(getMenuMode) !== MenuModeEnum.HORIZONTAL && unref(getShowBreadCrumb) && !unref(getSplit) - ); - }); - - const getShowHeaderLogo = computed(() => { - return unref(getShowLogo) && !unref(getIsSidebarType) && !unref(getIsMixSidebar); - }); - - const getShowContent = computed(() => { - return unref(getShowBread) || unref(getShowHeaderTrigger); - }); - - // Set header configuration - function setHeaderSetting(headerSetting: Partial) { - appStore.setProjectConfig({ headerSetting }); - } - return { - setHeaderSetting, - - getShowDoc, - getShowSearch, - getHeaderTheme, - getUseLockPage, - getShowFullScreen, - getShowNotice, - getShowBread, - getShowContent, - getShowHeaderLogo, - getShowHeader, - getFixed, - getShowMixHeaderRef, - getShowFullHeaderRef, - getShowInsetHeaderRef, - getUnFixedAndFull, - getHeaderBgColor, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useMenuSetting.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useMenuSetting.ts deleted file mode 100644 index 3566bfd27..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useMenuSetting.ts +++ /dev/null @@ -1,170 +0,0 @@ -import type { MenuSetting } from '/#/config'; - -import { computed, unref, ref } from 'vue'; - -import { useAppStore } from '/@/store/modules/app'; - -import { SIDE_BAR_MINI_WIDTH, SIDE_BAR_SHOW_TIT_MINI_WIDTH } from '/@/enums/appEnum'; -import { MenuModeEnum, MenuTypeEnum, TriggerEnum } from '/@/enums/menuEnum'; -import { useFullContent } from '/@/hooks/web/useFullContent'; - -const mixSideHasChildren = ref(false); - -export function useMenuSetting() { - const { getFullContent: fullContent } = useFullContent(); - const appStore = useAppStore(); - - const getShowSidebar = computed(() => { - return ( - unref(getSplit) || - (unref(getShowMenu) && unref(getMenuMode) !== MenuModeEnum.HORIZONTAL && !unref(fullContent)) - ); - }); - - const getCollapsed = computed(() => appStore.getMenuSetting.collapsed); - - const getMenuType = computed(() => appStore.getMenuSetting.type); - - const getMenuMode = computed(() => appStore.getMenuSetting.mode); - - const getMenuFixed = computed(() => appStore.getMenuSetting.fixed); - - const getShowMenu = computed(() => appStore.getMenuSetting.show); - - const getMenuHidden = computed(() => appStore.getMenuSetting.hidden); - - const getMenuWidth = computed(() => appStore.getMenuSetting.menuWidth); - - const getTrigger = computed(() => appStore.getMenuSetting.trigger); - - const getMenuTheme = computed(() => appStore.getMenuSetting.theme); - - const getSplit = computed(() => appStore.getMenuSetting.split); - - const getMenuBgColor = computed(() => appStore.getMenuSetting.bgColor); - - const getMixSideTrigger = computed(() => appStore.getMenuSetting.mixSideTrigger); - - const getCanDrag = computed(() => appStore.getMenuSetting.canDrag); - - const getAccordion = computed(() => appStore.getMenuSetting.accordion); - - const getMixSideFixed = computed(() => appStore.getMenuSetting.mixSideFixed); - - const getTopMenuAlign = computed(() => appStore.getMenuSetting.topMenuAlign); - - const getCloseMixSidebarOnChange = computed( - () => appStore.getMenuSetting.closeMixSidebarOnChange, - ); - - const getIsSidebarType = computed(() => unref(getMenuType) === MenuTypeEnum.SIDEBAR); - - const getIsTopMenu = computed(() => unref(getMenuType) === MenuTypeEnum.TOP_MENU); - - const getCollapsedShowTitle = computed(() => appStore.getMenuSetting.collapsedShowTitle); - - const getShowTopMenu = computed(() => { - return unref(getMenuMode) === MenuModeEnum.HORIZONTAL || unref(getSplit); - }); - - const getShowHeaderTrigger = computed(() => { - if ( - unref(getMenuType) === MenuTypeEnum.TOP_MENU || - !unref(getShowMenu) || - unref(getMenuHidden) - ) { - return false; - } - - return unref(getTrigger) === TriggerEnum.HEADER; - }); - - const getIsHorizontal = computed(() => { - return unref(getMenuMode) === MenuModeEnum.HORIZONTAL; - }); - - const getIsMixSidebar = computed(() => { - return unref(getMenuType) === MenuTypeEnum.MIX_SIDEBAR; - }); - - const getIsMixMode = computed(() => { - return unref(getMenuMode) === MenuModeEnum.INLINE && unref(getMenuType) === MenuTypeEnum.MIX; - }); - - const getRealWidth = computed(() => { - if (unref(getIsMixSidebar)) { - return unref(getCollapsed) && !unref(getMixSideFixed) - ? unref(getMiniWidthNumber) - : unref(getMenuWidth); - } - return unref(getCollapsed) ? unref(getMiniWidthNumber) : unref(getMenuWidth); - }); - - const getMiniWidthNumber = computed(() => { - const { collapsedShowTitle, siderHidden } = appStore.getMenuSetting; - return siderHidden - ? 0 - : collapsedShowTitle - ? SIDE_BAR_SHOW_TIT_MINI_WIDTH - : SIDE_BAR_MINI_WIDTH; - }); - - const getCalcContentWidth = computed(() => { - const width = - unref(getIsTopMenu) || !unref(getShowMenu) || (unref(getSplit) && unref(getMenuHidden)) - ? 0 - : unref(getIsMixSidebar) - ? (unref(getCollapsed) ? SIDE_BAR_MINI_WIDTH : SIDE_BAR_SHOW_TIT_MINI_WIDTH) + - (unref(getMixSideFixed) && unref(mixSideHasChildren) ? unref(getRealWidth) : 0) - : unref(getRealWidth); - - return `calc(100% - ${unref(width)}px)`; - }); - - // Set menu configuration - function setMenuSetting(menuSetting: Partial): void { - appStore.setProjectConfig({ menuSetting }); - } - - function toggleCollapsed() { - setMenuSetting({ - collapsed: !unref(getCollapsed), - }); - } - return { - setMenuSetting, - - toggleCollapsed, - - getMenuFixed, - getRealWidth, - getMenuType, - getMenuMode, - getShowMenu, - getCollapsed, - getMiniWidthNumber, - getCalcContentWidth, - getMenuWidth, - getTrigger, - getSplit, - getMenuTheme, - getCanDrag, - getCollapsedShowTitle, - getIsHorizontal, - getIsSidebarType, - getAccordion, - getShowTopMenu, - getShowHeaderTrigger, - getTopMenuAlign, - getMenuHidden, - getIsTopMenu, - getMenuBgColor, - getShowSidebar, - getIsMixMode, - getIsMixSidebar, - getCloseMixSidebarOnChange, - getMixSideTrigger, - getMixSideFixed, - mixSideHasChildren, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useMultipleTabSetting.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useMultipleTabSetting.ts deleted file mode 100644 index 7caa75378..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useMultipleTabSetting.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { MultiTabsSetting } from '/#/config'; - -import { computed } from 'vue'; - -import { useAppStore } from '/@/store/modules/app'; - -export function useMultipleTabSetting() { - const appStore = useAppStore(); - - const getShowMultipleTab = computed(() => appStore.getMultiTabsSetting.show); - - const getShowQuick = computed(() => appStore.getMultiTabsSetting.showQuick); - - const getShowRedo = computed(() => appStore.getMultiTabsSetting.showRedo); - - const getShowFold = computed(() => appStore.getMultiTabsSetting.showFold); - - function setMultipleTabSetting(multiTabsSetting: Partial) { - appStore.setProjectConfig({ multiTabsSetting }); - } - return { - setMultipleTabSetting, - getShowMultipleTab, - getShowQuick, - getShowRedo, - getShowFold, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useRootSetting.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useRootSetting.ts deleted file mode 100644 index 4976e40ac..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useRootSetting.ts +++ /dev/null @@ -1,95 +0,0 @@ -import type { ProjectConfig } from '/#/config'; - -import { computed } from 'vue'; - -import { useAppStore } from '/@/store/modules/app'; -import { ContentEnum, ThemeEnum } from '/@/enums/appEnum'; - -type RootSetting = Omit< - ProjectConfig, - 'locale' | 'headerSetting' | 'menuSetting' | 'multiTabsSetting' ->; - -export function useRootSetting() { - const appStore = useAppStore(); - - const getPageLoading = computed(() => appStore.getPageLoading); - - const getOpenKeepAlive = computed(() => appStore.getProjectConfig.openKeepAlive); - - const getSettingButtonPosition = computed(() => appStore.getProjectConfig.settingButtonPosition); - - const getCanEmbedIFramePage = computed(() => appStore.getProjectConfig.canEmbedIFramePage); - - const getPermissionMode = computed(() => appStore.getProjectConfig.permissionMode); - - const getShowLogo = computed(() => appStore.getProjectConfig.showLogo); - - const getContentMode = computed(() => appStore.getProjectConfig.contentMode); - - const getUseOpenBackTop = computed(() => appStore.getProjectConfig.useOpenBackTop); - - const getShowSettingButton = computed(() => appStore.getProjectConfig.showSettingButton); - - const getUseErrorHandle = computed(() => appStore.getProjectConfig.useErrorHandle); - - const getShowFooter = computed(() => appStore.getProjectConfig.showFooter); - - const getShowBreadCrumb = computed(() => appStore.getProjectConfig.showBreadCrumb); - - const getThemeColor = computed(() => appStore.getProjectConfig.themeColor); - - const getShowBreadCrumbIcon = computed(() => appStore.getProjectConfig.showBreadCrumbIcon); - - const getFullContent = computed(() => appStore.getProjectConfig.fullContent); - - const getColorWeak = computed(() => appStore.getProjectConfig.colorWeak); - - const getGrayMode = computed(() => appStore.getProjectConfig.grayMode); - - const getLockTime = computed(() => appStore.getProjectConfig.lockTime); - - const getShowDarkModeToggle = computed(() => appStore.getProjectConfig.showDarkModeToggle); - - const getDarkMode = computed(() => appStore.getDarkMode); - - const getLayoutContentMode = computed(() => - appStore.getProjectConfig.contentMode === ContentEnum.FULL - ? ContentEnum.FULL - : ContentEnum.FIXED, - ); - - function setRootSetting(setting: Partial) { - appStore.setProjectConfig(setting); - } - - function setDarkMode(mode: ThemeEnum) { - appStore.setDarkMode(mode); - } - return { - setRootSetting, - - getSettingButtonPosition, - getFullContent, - getColorWeak, - getGrayMode, - getLayoutContentMode, - getPageLoading, - getOpenKeepAlive, - getCanEmbedIFramePage, - getPermissionMode, - getShowLogo, - getUseErrorHandle, - getShowBreadCrumb, - getShowBreadCrumbIcon, - getUseOpenBackTop, - getShowSettingButton, - getShowFooter, - getContentMode, - getLockTime, - getThemeColor, - getDarkMode, - setDarkMode, - getShowDarkModeToggle, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useTransitionSetting.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useTransitionSetting.ts deleted file mode 100644 index b6d421afb..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/setting/useTransitionSetting.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { TransitionSetting } from '/#/config'; - -import { computed } from 'vue'; - -import { useAppStore } from '/@/store/modules/app'; - -export function useTransitionSetting() { - const appStore = useAppStore(); - - const getEnableTransition = computed(() => appStore.getTransitionSetting?.enable); - - const getOpenNProgress = computed(() => appStore.getTransitionSetting?.openNProgress); - - const getOpenPageLoading = computed((): boolean => { - return !!appStore.getTransitionSetting?.openPageLoading; - }); - - const getBasicTransition = computed(() => appStore.getTransitionSetting?.basicTransition); - - function setTransitionSetting(transitionSetting: Partial) { - appStore.setProjectConfig({ transitionSetting }); - } - return { - setTransitionSetting, - - getEnableTransition, - getOpenNProgress, - getOpenPageLoading, - getBasicTransition, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useAppInject.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useAppInject.ts deleted file mode 100644 index 7d6efb2b8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useAppInject.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { useAppProviderContext } from '/@/components/Application'; -import { computed, unref } from 'vue'; - -export function useAppInject() { - const values = useAppProviderContext(); - - return { - getIsMobile: computed(() => unref(values.isMobile)), - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useContentHeight.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useContentHeight.ts deleted file mode 100644 index d51f4ca4f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useContentHeight.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { ComputedRef, isRef, nextTick, Ref, ref, unref, watch } from 'vue'; -import { onMountedOrActivated } from '/@/hooks/core/onMountedOrActivated'; -import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn'; -import { useLayoutHeight } from '/@/layouts/default/content/useContentViewHeight'; -import { getViewportOffset } from '/@/utils/domUtils'; -import { isNumber, isString } from '/@/utils/is'; - -export interface CompensationHeight { - // 使用 layout Footer 高度作为判断补偿高度的条件 - useLayoutFooter: boolean; - // refs HTMLElement - elements?: Ref[]; -} - -type Upward = number | string | null | undefined; - -/** - * 动态计算内容高度,根据锚点dom最下坐标到屏幕最下坐标,根据传入dom的高度、padding、margin等值进行动态计算 - * 最终获取合适的内容高度 - * - * @param flag 用于开启计算的响应式标识 - * @param anchorRef 锚点组件 Ref - * @param subtractHeightRefs 待减去高度的组件列表 Ref - * @param substractSpaceRefs 待减去空闲空间(margins/paddings)的组件列表 Ref - * @param offsetHeightRef 计算偏移的响应式高度,计算高度时将直接减去此值 - * @param upwardSpace 向上递归减去空闲空间的 层级 或 直到指定class为止 数值为2代表向上递归两次|数值为ant-layout表示向上递归直到碰见.ant-layout为止 - * @returns 响应式高度 - */ -export function useContentHeight( - flag: ComputedRef, - anchorRef: Ref, - subtractHeightRefs: Ref[], - substractSpaceRefs: Ref[], - upwardSpace: Ref | ComputedRef | Upward = 0, - offsetHeightRef: Ref = ref(0), -) { - const contentHeight: Ref> = ref(null); - const { footerHeightRef: layoutFooterHeightRef } = useLayoutHeight(); - let compensationHeight: CompensationHeight = { - useLayoutFooter: true, - }; - - const setCompensation = (params: CompensationHeight) => { - compensationHeight = params; - }; - - function redoHeight() { - nextTick(() => { - calcContentHeight(); - }); - } - - function calcSubtractSpace( - element: Element | null | undefined, - direction: 'all' | 'top' | 'bottom' = 'all', - ): number { - function numberPx(px: string) { - return Number(px.replace(/[^\d]/g, '')); - } - let subtractHeight = 0; - const ZERO_PX = '0px'; - if (element) { - const cssStyle = getComputedStyle(element); - const marginTop = numberPx(cssStyle?.marginTop ?? ZERO_PX); - const marginBottom = numberPx(cssStyle?.marginBottom ?? ZERO_PX); - const paddingTop = numberPx(cssStyle?.paddingTop ?? ZERO_PX); - const paddingBottom = numberPx(cssStyle?.paddingBottom ?? ZERO_PX); - if (direction === 'all') { - subtractHeight += marginTop; - subtractHeight += marginBottom; - subtractHeight += paddingTop; - subtractHeight += paddingBottom; - } else if (direction === 'top') { - subtractHeight += marginTop; - subtractHeight += paddingTop; - } else { - subtractHeight += marginBottom; - subtractHeight += paddingBottom; - } - } - return subtractHeight; - } - - function getEl(element: any): Nullable { - if (element == null) { - return null; - } - return (element instanceof HTMLDivElement ? element : element.$el) as HTMLDivElement; - } - - async function calcContentHeight() { - if (!flag.value) { - return; - } - // Add a delay to get the correct height - await nextTick(); - - const anchorEl = getEl(unref(anchorRef)); - if (!anchorEl) { - return; - } - const { bottomIncludeBody } = getViewportOffset(anchorEl); - - // substract elements height - let substractHeight = 0; - subtractHeightRefs.forEach((item) => { - substractHeight += getEl(unref(item))?.offsetHeight ?? 0; - }); - - // subtract margins / paddings - let substractSpaceHeight = calcSubtractSpace(anchorEl) ?? 0; - substractSpaceRefs.forEach((item) => { - substractSpaceHeight += calcSubtractSpace(getEl(unref(item))); - }); - - // upwardSpace - let upwardSpaceHeight = 0; - function upward(element: Element | null, upwardLvlOrClass: number | string | null | undefined) { - if (element && upwardLvlOrClass) { - const parent = element.parentElement; - if (parent) { - if (isString(upwardLvlOrClass)) { - if (!parent.classList.contains(upwardLvlOrClass)) { - upwardSpaceHeight += calcSubtractSpace(parent, 'bottom'); - upward(parent, upwardLvlOrClass); - } else { - upwardSpaceHeight += calcSubtractSpace(parent, 'bottom'); - } - } else if (isNumber(upwardLvlOrClass)) { - if (upwardLvlOrClass > 0) { - upwardSpaceHeight += calcSubtractSpace(parent, 'bottom'); - upward(parent, --upwardLvlOrClass); - } - } - } - } - } - if (isRef(upwardSpace)) { - upward(anchorEl, unref(upwardSpace)); - } else { - upward(anchorEl, upwardSpace); - } - - let height = - bottomIncludeBody - - unref(layoutFooterHeightRef) - - unref(offsetHeightRef) - - substractHeight - - substractSpaceHeight - - upwardSpaceHeight; - - // compensation height - const calcCompensationHeight = () => { - compensationHeight.elements?.forEach((item) => { - height += getEl(unref(item))?.offsetHeight ?? 0; - }); - }; - if (compensationHeight.useLayoutFooter && unref(layoutFooterHeightRef) > 0) { - calcCompensationHeight(); - } else { - calcCompensationHeight(); - } - - contentHeight.value = height; - } - - onMountedOrActivated(() => { - nextTick(() => { - calcContentHeight(); - }); - }); - useWindowSizeFn( - () => { - calcContentHeight(); - }, - 50, - { immediate: true }, - ); - watch( - () => [layoutFooterHeightRef.value], - () => { - calcContentHeight(); - }, - { - flush: 'post', - immediate: true, - }, - ); - - return { redoHeight, setCompensation, contentHeight }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useContextMenu.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useContextMenu.ts deleted file mode 100644 index d3c53ce68..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useContextMenu.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { onUnmounted, getCurrentInstance } from 'vue'; -import { createContextMenu, destroyContextMenu } from '/@/components/ContextMenu'; -import type { ContextMenuItem } from '/@/components/ContextMenu'; -export type { ContextMenuItem }; -export function useContextMenu(authRemove = true) { - if (getCurrentInstance() && authRemove) { - onUnmounted(() => { - destroyContextMenu(); - }); - } - return [createContextMenu, destroyContextMenu]; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useCopyToClipboard.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useCopyToClipboard.ts deleted file mode 100644 index 69abf26d8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useCopyToClipboard.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { ref, watch } from 'vue'; - -import { isDef } from '/@/utils/is'; -interface Options { - target?: HTMLElement; -} -export function useCopyToClipboard(initial?: string) { - const clipboardRef = ref(initial || ''); - const isSuccessRef = ref(false); - const copiedRef = ref(false); - - watch( - clipboardRef, - (str?: string) => { - if (isDef(str)) { - copiedRef.value = true; - isSuccessRef.value = copyTextToClipboard(str); - } - }, - { immediate: !!initial, flush: 'sync' }, - ); - - return { clipboardRef, isSuccessRef, copiedRef }; -} - -export function copyTextToClipboard(input: string, { target = document.body }: Options = {}) { - const element = document.createElement('textarea'); - const previouslyFocusedElement = document.activeElement; - - element.value = input; - - element.setAttribute('readonly', ''); - - (element.style as any).contain = 'strict'; - element.style.position = 'absolute'; - element.style.left = '-9999px'; - element.style.fontSize = '12pt'; - - const selection = document.getSelection(); - let originalRange; - if (selection && selection.rangeCount > 0) { - originalRange = selection.getRangeAt(0); - } - - target.append(element); - element.select(); - - element.selectionStart = 0; - element.selectionEnd = input.length; - - let isSuccess = false; - try { - isSuccess = document.execCommand('copy'); - } catch (e: any) { - throw new Error(e); - } - - element.remove(); - - if (originalRange && selection) { - selection.removeAllRanges(); - selection.addRange(originalRange); - } - - if (previouslyFocusedElement) { - (previouslyFocusedElement as HTMLElement).focus(); - } - return isSuccess; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useDesign.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useDesign.ts deleted file mode 100644 index 046674b64..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useDesign.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { useAppProviderContext } from '/@/components/Application'; -// import { computed } from 'vue'; -// import { lowerFirst } from 'lodash-es'; -export function useDesign(scope: string) { - const values = useAppProviderContext(); - // const $style = cssModule ? useCssModule() : {}; - - // const style: Record = {}; - // if (cssModule) { - // Object.keys($style).forEach((key) => { - // // const moduleCls = $style[key]; - // const k = key.replace(new RegExp(`^${values.prefixCls}-?`, 'ig'), ''); - // style[lowerFirst(k)] = $style[key]; - // }); - // } - return { - // prefixCls: computed(() => `${values.prefixCls}-${scope}`), - prefixCls: `${values.prefixCls}-${scope}`, - prefixVar: values.prefixCls, - // style, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useECharts.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useECharts.ts deleted file mode 100644 index cdc02efc0..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useECharts.ts +++ /dev/null @@ -1,121 +0,0 @@ -import type { EChartsOption } from 'echarts'; -import type { Ref } from 'vue'; -import { useTimeoutFn } from '/@/hooks/core/useTimeout'; -import { tryOnUnmounted } from '@vueuse/core'; -import { unref, nextTick, watch, computed, ref } from 'vue'; -import { useDebounceFn } from '@vueuse/core'; -import { useEventListener } from '/@/hooks/event/useEventListener'; -import { useBreakpoint } from '/@/hooks/event/useBreakpoint'; -import echarts from '/@/utils/lib/echarts'; -import { useRootSetting } from '/@/hooks/setting/useRootSetting'; - -export function useECharts( - elRef: Ref, - theme: 'light' | 'dark' | 'default' = 'default', -) { - const { getDarkMode: getSysDarkMode } = useRootSetting(); - - const getDarkMode = computed(() => { - return theme === 'default' ? getSysDarkMode.value : theme; - }); - let chartInstance: echarts.ECharts | null = null; - let resizeFn: Fn = resize; - const cacheOptions = ref({}) as Ref; - let removeResizeFn: Fn = () => {}; - - resizeFn = useDebounceFn(resize, 200); - - const getOptions = computed(() => { - if (getDarkMode.value !== 'dark') { - return cacheOptions.value as EChartsOption; - } - return { - backgroundColor: 'transparent', - ...cacheOptions.value, - } as EChartsOption; - }); - - function initCharts(t = theme) { - const el = unref(elRef); - if (!el || !unref(el)) { - return; - } - - chartInstance = echarts.init(el, t); - const { removeEvent } = useEventListener({ - el: window, - name: 'resize', - listener: resizeFn, - }); - removeResizeFn = removeEvent; - const { widthRef, screenEnum } = useBreakpoint(); - if (unref(widthRef) <= screenEnum.MD || el.offsetHeight === 0) { - useTimeoutFn(() => { - resizeFn(); - }, 30); - } - } - - function setOptions(options: EChartsOption, clear = true) { - cacheOptions.value = options; - if (unref(elRef)?.offsetHeight === 0) { - useTimeoutFn(() => { - setOptions(unref(getOptions)); - }, 30); - return; - } - nextTick(() => { - useTimeoutFn(() => { - if (!chartInstance) { - initCharts(getDarkMode.value as 'default'); - - if (!chartInstance) return; - } - clear && chartInstance?.clear(); - - chartInstance?.setOption(unref(getOptions)); - }, 30); - }); - } - - function resize() { - chartInstance?.resize({ - animation: { - duration: 300, - easing: 'quadraticIn', - }, - }); - } - - watch( - () => getDarkMode.value, - (theme) => { - if (chartInstance) { - chartInstance.dispose(); - initCharts(theme as 'default'); - setOptions(cacheOptions.value); - } - }, - ); - - tryOnUnmounted(() => { - if (!chartInstance) return; - removeResizeFn(); - chartInstance.dispose(); - chartInstance = null; - }); - - function getInstance(): echarts.ECharts | null { - if (!chartInstance) { - initCharts(getDarkMode.value as 'default'); - } - return chartInstance; - } - - return { - setOptions, - resize, - echarts, - getInstance, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useFullContent.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useFullContent.ts deleted file mode 100644 index 7dea07709..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useFullContent.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { computed, unref } from 'vue'; - -import { useAppStore } from '/@/store/modules/app'; - -import { useRouter } from 'vue-router'; - -/** - * @description: Full screen display content - */ -export const useFullContent = () => { - const appStore = useAppStore(); - const router = useRouter(); - const { currentRoute } = router; - - // Whether to display the content in full screen without displaying the menu - const getFullContent = computed(() => { - // Query parameters, the full screen is displayed when the address bar has a full parameter - const route = unref(currentRoute); - const query = route.query; - if (query && Reflect.has(query, '__full__')) { - return true; - } - // Return to the configuration in the configuration file - return appStore.getProjectConfig.fullContent; - }); - - return { getFullContent }; -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useI18n.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useI18n.ts deleted file mode 100644 index 2a777b781..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useI18n.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { i18n } from '/@/locales/setupI18n'; - -type I18nGlobalTranslation = { - (key: string): string; - (key: string, locale: string): string; - (key: string, locale: string, list: unknown[]): string; - (key: string, locale: string, named: Record): string; - (key: string, list: unknown[]): string; - (key: string, named: Record): string; -}; - -type I18nTranslationRestParameters = [string, any]; - -function getKey(namespace: string | undefined, key: string) { - if (!namespace) { - return key; - } - if (key.startsWith(namespace)) { - return key; - } - return `${namespace}.${key}`; -} - -export function useI18n(namespace?: string): { - t: I18nGlobalTranslation; -} { - const normalFn = { - t: (key: string) => { - return getKey(namespace, key); - }, - }; - - if (!i18n) { - return normalFn; - } - - const { t, ...methods } = i18n.global; - - const tFn: I18nGlobalTranslation = (key: string, ...arg: any[]) => { - if (!key) return ''; - if (!key.includes('.') && !namespace) return key; - return t(getKey(namespace, key), ...(arg as I18nTranslationRestParameters)); - }; - return { - ...methods, - t: tFn, - }; -} - -// Why write this function? -// Mainly to configure the vscode i18nn ally plugin. This function is only used for routing and menus. Please use useI18n for other places - -// 为什么要编写此函数? -// 主要用于配合vscode i18nn ally插件。此功能仅用于路由和菜单。请在其他地方使用useI18n -export const t = (key: string) => key; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useLockPage.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useLockPage.ts deleted file mode 100644 index c543be954..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useLockPage.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { computed, onUnmounted, unref, watchEffect } from 'vue'; -import { useThrottleFn } from '@vueuse/core'; - -import { useAppStore } from '/@/store/modules/app'; -import { useLockStore } from '/@/store/modules/lock'; - -import { useUserStore } from '/@/store/modules/user'; -import { useRootSetting } from '../setting/useRootSetting'; - -export function useLockPage() { - const { getLockTime } = useRootSetting(); - const lockStore = useLockStore(); - const userStore = useUserStore(); - const appStore = useAppStore(); - - let timeId: TimeoutHandle; - - function clear(): void { - window.clearTimeout(timeId); - } - - function resetCalcLockTimeout(): void { - // not login - if (!userStore.getToken) { - clear(); - return; - } - const lockTime = appStore.getProjectConfig.lockTime; - if (!lockTime || lockTime < 1) { - clear(); - return; - } - clear(); - - timeId = setTimeout(() => { - lockPage(); - }, lockTime * 60 * 1000); - } - - function lockPage(): void { - lockStore.setLockInfo({ - isLock: true, - pwd: undefined, - }); - } - - watchEffect((onClean) => { - if (userStore.getToken) { - resetCalcLockTimeout(); - } else { - clear(); - } - onClean(() => { - clear(); - }); - }); - - onUnmounted(() => { - clear(); - }); - - const keyupFn = useThrottleFn(resetCalcLockTimeout, 2000); - - return computed(() => { - if (unref(getLockTime)) { - return { onKeyup: keyupFn, onMousemove: keyupFn }; - } else { - clear(); - return {}; - } - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useMessage.tsx b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useMessage.tsx deleted file mode 100644 index 91112f34a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useMessage.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import type { ModalFunc, ModalFuncProps } from 'ant-design-vue/lib/modal/Modal'; - -import { Modal, message as Message, notification } from 'ant-design-vue'; -import { InfoCircleFilled, CheckCircleFilled, CloseCircleFilled } from '@ant-design/icons-vue'; - -import { NotificationArgsProps, ConfigProps } from 'ant-design-vue/lib/notification'; -import { useI18n } from './useI18n'; -import { isString } from '/@/utils/is'; - -export interface NotifyApi { - info(config: NotificationArgsProps): void; - success(config: NotificationArgsProps): void; - error(config: NotificationArgsProps): void; - warn(config: NotificationArgsProps): void; - warning(config: NotificationArgsProps): void; - open(args: NotificationArgsProps): void; - close(key: String): void; - config(options: ConfigProps): void; - destroy(): void; -} - -export declare type NotificationPlacement = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'; -export declare type IconType = 'success' | 'info' | 'error' | 'warning'; -export interface ModalOptionsEx extends Omit { - iconType: 'warning' | 'success' | 'error' | 'info'; -} -export type ModalOptionsPartial = Partial & Pick; - -interface ConfirmOptions { - info: ModalFunc; - success: ModalFunc; - error: ModalFunc; - warn: ModalFunc; - warning: ModalFunc; -} - -function getIcon(iconType: string) { - if (iconType === 'warning') { - return ; - } else if (iconType === 'success') { - return ; - } else if (iconType === 'info') { - return ; - } else { - return ; - } -} - -function renderContent({ content }: Pick) { - if (isString(content)) { - return

${content as string}
`}>
; - } else { - return content; - } -} - -/** - * @description: Create confirmation box - */ -function createConfirm(options: ModalOptionsEx): ConfirmOptions { - const iconType = options.iconType || 'warning'; - Reflect.deleteProperty(options, 'iconType'); - const opt: ModalFuncProps = { - centered: true, - icon: getIcon(iconType), - ...options, - content: renderContent(options), - }; - return Modal.confirm(opt) as unknown as ConfirmOptions; -} - -const getBaseOptions = () => { - const { t } = useI18n(); - return { - okText: t('common.okText'), - centered: true, - }; -}; - -function createModalOptions(options: ModalOptionsPartial, icon: string): ModalOptionsPartial { - return { - ...getBaseOptions(), - ...options, - content: renderContent(options), - icon: getIcon(icon), - }; -} - -function createSuccessModal(options: ModalOptionsPartial) { - return Modal.success(createModalOptions(options, 'success')); -} - -function createErrorModal(options: ModalOptionsPartial) { - return Modal.error(createModalOptions(options, 'close')); -} - -function createInfoModal(options: ModalOptionsPartial) { - return Modal.info(createModalOptions(options, 'info')); -} - -function createWarningModal(options: ModalOptionsPartial) { - return Modal.warning(createModalOptions(options, 'warning')); -} - -notification.config({ - placement: 'topRight', - duration: 3, -}); - -/** - * @description: message - */ -export function useMessage() { - return { - createMessage: Message, - notification: notification as NotifyApi, - createConfirm: createConfirm, - createSuccessModal, - createErrorModal, - createInfoModal, - createWarningModal, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/usePage.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/usePage.ts deleted file mode 100644 index 67e2c2892..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/usePage.ts +++ /dev/null @@ -1,53 +0,0 @@ -import type { RouteLocationRaw, Router } from 'vue-router'; - -import { PageEnum } from '/@/enums/pageEnum'; -import { unref } from 'vue'; - -import { useRouter } from 'vue-router'; -import { REDIRECT_NAME } from '/@/router/constant'; - -export type PathAsPageEnum = T extends { path: string } ? T & { path: PageEnum } : T; -export type RouteLocationRawEx = PathAsPageEnum; - -function handleError(e: Error) { - console.error(e); -} - -/** - * page switch - */ -export function useGo(_router?: Router) { - const { push, replace } = _router || useRouter(); - function go(opt: RouteLocationRawEx = PageEnum.BASE_HOME, isReplace = false) { - if (!opt) { - return; - } - isReplace ? replace(opt).catch(handleError) : push(opt).catch(handleError); - } - return go; -} - -/** - * @description: redo current page - */ -export const useRedo = (_router?: Router) => { - const { push, currentRoute } = _router || useRouter(); - const { query, params = {}, name, fullPath } = unref(currentRoute.value); - function redo(): Promise { - return new Promise((resolve) => { - if (name === REDIRECT_NAME) { - resolve(false); - return; - } - if (name && Object.keys(params).length > 0) { - params['_redirect_type'] = 'name'; - params['path'] = String(name); - } else { - params['_redirect_type'] = 'path'; - params['path'] = fullPath; - } - push({ name: REDIRECT_NAME, params, query }).then(() => resolve(true)); - }); - } - return redo; -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/usePagination.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/usePagination.ts deleted file mode 100644 index 1e199139e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/usePagination.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { Ref } from 'vue'; -import { ref, unref, computed } from 'vue'; - -function pagination(list: T[], pageNo: number, pageSize: number): T[] { - const offset = (pageNo - 1) * Number(pageSize); - const ret = - offset + Number(pageSize) >= list.length - ? list.slice(offset, list.length) - : list.slice(offset, offset + Number(pageSize)); - return ret; -} - -export function usePagination(list: Ref, pageSize: number) { - const currentPage = ref(1); - const pageSizeRef = ref(pageSize); - - const getPaginationList = computed(() => { - return pagination(unref(list), unref(currentPage), unref(pageSizeRef)); - }); - - const getTotal = computed(() => { - return unref(list).length; - }); - - function setCurrentPage(page: number) { - currentPage.value = page; - } - - function setPageSize(pageSize: number) { - pageSizeRef.value = pageSize; - } - - return { setCurrentPage, getTotal, setPageSize, getPaginationList }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/usePermission.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/usePermission.ts deleted file mode 100644 index 75d433df7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/usePermission.ts +++ /dev/null @@ -1,100 +0,0 @@ -import type { RouteRecordRaw } from 'vue-router'; - -import { useAppStore } from '/@/store/modules/app'; -import { usePermissionStore } from '/@/store/modules/permission'; -import { useUserStore } from '/@/store/modules/user'; - -import { useTabs } from './useTabs'; - -import { router, resetRouter } from '/@/router'; -// import { RootRoute } from '/@/router/routes'; - -import projectSetting from '/@/settings/projectSetting'; -import { PermissionModeEnum } from '/@/enums/appEnum'; -import { RoleEnum } from '/@/enums/roleEnum'; - -import { isArray } from '/@/utils/is'; -import { useMultipleTabStore } from '/@/store/modules/multipleTab'; - -// User permissions related operations -export function usePermission() { - const userStore = useUserStore(); - const appStore = useAppStore(); - const permissionStore = usePermissionStore(); - const { closeAll } = useTabs(router); - - /** - * Change permission mode - */ - async function togglePermissionMode() { - appStore.setProjectConfig({ - permissionMode: - projectSetting.permissionMode === PermissionModeEnum.BACK - ? PermissionModeEnum.ROUTE_MAPPING - : PermissionModeEnum.BACK, - }); - location.reload(); - } - - /** - * Reset and regain authority resource information - * 重置和重新获得权限资源信息 - * @param id - */ - async function resume() { - const tabStore = useMultipleTabStore(); - tabStore.clearCacheTabs(); - resetRouter(); - const routes = await permissionStore.buildRoutesAction(); - routes.forEach((route) => { - router.addRoute(route as unknown as RouteRecordRaw); - }); - permissionStore.setLastBuildMenuTime(); - closeAll(); - } - - /** - * Determine whether there is permission - */ - function hasPermission(value?: RoleEnum | RoleEnum[] | string | string[], def = true): boolean { - - // Visible by default - if (!value) { - return def; - } - - let result = true; - if (value) { - const allCodeList = permissionStore.getPermCodeList; - result = allCodeList == undefined ? false : allCodeList.includes(value as string); - } - return result - } - - /** - * Change roles - * @param roles - */ - async function changeRole(roles: RoleEnum | RoleEnum[]): Promise { - if (projectSetting.permissionMode !== PermissionModeEnum.ROUTE_MAPPING) { - throw new Error( - 'Please switch PermissionModeEnum to ROUTE_MAPPING mode in the configuration to operate!', - ); - } - - if (!isArray(roles)) { - roles = [roles]; - } - userStore.setRoleList(roles); - await resume(); - } - - /** - * refresh menu data - */ - async function refreshMenu() { - resume(); - } - - return { changeRole, hasPermission, togglePermissionMode, refreshMenu }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useScript.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useScript.ts deleted file mode 100644 index 9707116a2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useScript.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { onMounted, onUnmounted, ref } from 'vue'; - -interface ScriptOptions { - src: string; -} - -export function useScript(opts: ScriptOptions) { - const isLoading = ref(false); - const error = ref(false); - const success = ref(false); - let script: HTMLScriptElement; - - const promise = new Promise((resolve, reject) => { - onMounted(() => { - script = document.createElement('script'); - script.type = 'text/javascript'; - script.onload = function () { - isLoading.value = false; - success.value = true; - error.value = false; - resolve(''); - }; - - script.onerror = function (err) { - isLoading.value = false; - success.value = false; - error.value = true; - reject(err); - }; - - script.src = opts.src; - document.head.appendChild(script); - }); - }); - - onUnmounted(() => { - script && script.remove(); - }); - - return { - isLoading, - error, - success, - toPromise: () => promise, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useSignalR.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useSignalR.ts deleted file mode 100644 index 9caa8478c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useSignalR.ts +++ /dev/null @@ -1,129 +0,0 @@ -import * as signalR from '@microsoft/signalr'; -import { useMessage } from '/@/hooks/web/useMessage'; -import { useUserStoreWithOut } from '/@/store/modules/user'; -let connection:signalR.HubConnection; -export function useSignalR() { - - /** - * 开始连接SignalR - */ - async function startConnect() { - try { - connectionsignalR(); - await connection.start(); - } catch (err) { - console.log(err); - setTimeout(() => startConnect(), 5000); - } - } - - /** - * 关闭SignalR连接 - */ - function closeConnect(): void {8 - if (connection) { - connection.stop(); - } - } - - async function connectionsignalR(){ - const userStore = useUserStoreWithOut(); - const token = userStore.getToken; - const url = (import.meta.env.VITE_WEBSOCKE_URL as string) + '/signalr/notification'; - connection = new signalR.HubConnectionBuilder() - .withUrl(url, { - accessTokenFactory: () => token, - skipNegotiation: true, - transport: signalR.HttpTransportType.WebSockets, - }) - .withAutomaticReconnect({ - nextRetryDelayInMilliseconds: retryContext => { - - //重连规则:重连次数<300:间隔1s;重试次数<3000:间隔3s;重试次数>3000:间隔30s - let count = retryContext.previousRetryCount / 300; - if (count < 1)//重试次数<300,间隔1s - { - return 1000; - } - else if (count < 10) //重试次数>300:间隔5s - { - return 1000 * 5; - - } - else //重试次数>3000:间隔30s - { - return 1000 * 30; - } - } - }) - .configureLogging(signalR.LogLevel.Debug) - .build(); - - //接收普通文本消息 - connection.on('ReceiveTextMessageAsync', ReceiveTextMessageHandlerAsync); - //接收广播消息 - connection.on('ReceiveBroadCastMessageAsync', ReceiveBroadCastMessageHandlerAsync); - } - - /** - * 接收文本消息 - * @param message 消息体 - */ - function ReceiveTextMessageHandlerAsync(message: any) { - console.log(message); - const { notification } = useMessage(); - if (message.messageLevel == 10) { - notification.warn({ - message: message.title, - description: message.content, - }); - } else if (message.messageLevel == 20) { - notification.info({ - message: message.title, - description: message.content, - }); - } else if (message.messageLevel == 30) { - notification.error({ - message: message.title, - description: message.content, - }); - } else { - notification.info({ - message: message.title, - description: message.content, - }); - } - } - - /** - * 接收广播消息 - * @param message 消息体 - */ - function ReceiveBroadCastMessageHandlerAsync(message: any) { - - const { notification } = useMessage(); - if (message.messageLevel == 10) { - notification.warn({ - message: message.title, - description: message.content, - }); - } else if (message.messageLevel == 20) { - notification.info({ - message: message.title, - description: message.content, - }); - } else if (message.messageLevel == 30) { - notification.error({ - message: message.title, - description: message.content, - }); - } else { - notification.info({ - message: message.title, - description: message.content, - }); - } - } - - return { startConnect, closeConnect }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useSortable.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useSortable.ts deleted file mode 100644 index 4c66b6af1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useSortable.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { nextTick, unref } from 'vue'; -import type { Ref } from 'vue'; -import type { Options } from 'sortablejs'; - -export function useSortable(el: HTMLElement | Ref, options?: Options) { - function initSortable() { - nextTick(async () => { - if (!el) return; - - const Sortable = (await import('sortablejs')).default; - Sortable.create(unref(el), { - animation: 500, - delay: 400, - delayOnTouchOnly: true, - ...options, - }); - }); - } - - return { initSortable }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useTabs.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useTabs.ts deleted file mode 100644 index 14dde2f86..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useTabs.ts +++ /dev/null @@ -1,103 +0,0 @@ -import type { RouteLocationNormalized, Router } from 'vue-router'; - -import { useRouter } from 'vue-router'; -import { unref } from 'vue'; - -import { useMultipleTabStore } from '/@/store/modules/multipleTab'; -import { useAppStore } from '/@/store/modules/app'; - -enum TableActionEnum { - REFRESH, - CLOSE_ALL, - CLOSE_LEFT, - CLOSE_RIGHT, - CLOSE_OTHER, - CLOSE_CURRENT, - CLOSE, -} - -export function useTabs(_router?: Router) { - const appStore = useAppStore(); - - function canIUseTabs(): boolean { - const { show } = appStore.getMultiTabsSetting; - if (!show) { - throw new Error('The multi-tab page is currently not open, please open it in the settings!'); - } - return !!show; - } - - const tabStore = useMultipleTabStore(); - const router = _router || useRouter(); - - const { currentRoute } = router; - - function getCurrentTab() { - const route = unref(currentRoute); - return tabStore.getTabList.find((item) => item.fullPath === route.fullPath)!; - } - - async function updateTabTitle(title: string, tab?: RouteLocationNormalized) { - const canIUse = canIUseTabs; - if (!canIUse) { - return; - } - const targetTab = tab || getCurrentTab(); - await tabStore.setTabTitle(title, targetTab); - } - - async function updateTabPath(path: string, tab?: RouteLocationNormalized) { - const canIUse = canIUseTabs; - if (!canIUse) { - return; - } - const targetTab = tab || getCurrentTab(); - await tabStore.updateTabPath(path, targetTab); - } - - async function handleTabAction(action: TableActionEnum, tab?: RouteLocationNormalized) { - const canIUse = canIUseTabs; - if (!canIUse) { - return; - } - const currentTab = getCurrentTab(); - switch (action) { - case TableActionEnum.REFRESH: - await tabStore.refreshPage(router); - break; - - case TableActionEnum.CLOSE_ALL: - await tabStore.closeAllTab(router); - break; - - case TableActionEnum.CLOSE_LEFT: - await tabStore.closeLeftTabs(currentTab, router); - break; - - case TableActionEnum.CLOSE_RIGHT: - await tabStore.closeRightTabs(currentTab, router); - break; - - case TableActionEnum.CLOSE_OTHER: - await tabStore.closeOtherTabs(currentTab, router); - break; - - case TableActionEnum.CLOSE_CURRENT: - case TableActionEnum.CLOSE: - await tabStore.closeTab(tab || currentTab, router); - break; - } - } - - return { - refreshPage: () => handleTabAction(TableActionEnum.REFRESH), - closeAll: () => handleTabAction(TableActionEnum.CLOSE_ALL), - closeLeft: () => handleTabAction(TableActionEnum.CLOSE_LEFT), - closeRight: () => handleTabAction(TableActionEnum.CLOSE_RIGHT), - closeOther: () => handleTabAction(TableActionEnum.CLOSE_OTHER), - closeCurrent: () => handleTabAction(TableActionEnum.CLOSE_CURRENT), - close: (tab?: RouteLocationNormalized) => handleTabAction(TableActionEnum.CLOSE, tab), - setTitle: (title: string, tab?: RouteLocationNormalized) => updateTabTitle(title, tab), - updatePath: (fullPath: string, tab?: RouteLocationNormalized) => updateTabPath(fullPath, tab), - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useTitle.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useTitle.ts deleted file mode 100644 index a7f48d854..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useTitle.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { watch, unref } from 'vue'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { useTitle as usePageTitle } from '@vueuse/core'; -import { useGlobSetting } from '/@/hooks/setting'; -import { useRouter } from 'vue-router'; -import { useLocaleStore } from '/@/store/modules/locale'; - -import { REDIRECT_NAME } from '/@/router/constant'; - -/** - * Listening to page changes and dynamically changing site titles - */ -export function useTitle() { - const { title } = useGlobSetting(); - const { t } = useI18n(); - const { currentRoute } = useRouter(); - const localeStore = useLocaleStore(); - - const pageTitle = usePageTitle(); - - watch( - [() => currentRoute.value.path, () => localeStore.getLocale], - () => { - const route = unref(currentRoute); - - if (route.name === REDIRECT_NAME) { - return; - } - - const tTitle = t(route?.meta?.title as string); - pageTitle.value = tTitle ? ` ${tTitle} - ${title} ` : `${title}`; - }, - { immediate: true }, - ); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useWatermark.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useWatermark.ts deleted file mode 100644 index a42b84b21..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/hooks/web/useWatermark.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { getCurrentInstance, onBeforeUnmount, ref, Ref, shallowRef, unref } from 'vue'; -import { useRafThrottle } from '/@/utils/domUtils'; -import { addResizeListener, removeResizeListener } from '/@/utils/event'; -import { isDef } from '/@/utils/is'; - -const domSymbol = Symbol('watermark-dom'); - -export function useWatermark( - appendEl: Ref = ref(document.body) as Ref, -) { - const func = useRafThrottle(function () { - const el = unref(appendEl); - if (!el) return; - const { clientHeight: height, clientWidth: width } = el; - updateWatermark({ height, width }); - }); - const id = domSymbol.toString(); - const watermarkEl = shallowRef(); - - const clear = () => { - const domId = unref(watermarkEl); - watermarkEl.value = undefined; - const el = unref(appendEl); - if (!el) return; - domId && el.removeChild(domId); - removeResizeListener(el, func); - }; - - function createBase64(str: string) { - const can = document.createElement('canvas'); - const width = 300; - const height = 240; - Object.assign(can, { width, height }); - - const cans = can.getContext('2d'); - if (cans) { - cans.rotate((-20 * Math.PI) / 120); - cans.font = '15px Vedana'; - cans.fillStyle = 'rgba(0, 0, 0, 0.15)'; - cans.textAlign = 'left'; - cans.textBaseline = 'middle'; - cans.fillText(str, width / 20, height); - } - return can.toDataURL('image/png'); - } - - function updateWatermark( - options: { - width?: number; - height?: number; - str?: string; - } = {}, - ) { - const el = unref(watermarkEl); - if (!el) return; - if (isDef(options.width)) { - el.style.width = `${options.width}px`; - } - if (isDef(options.height)) { - el.style.height = `${options.height}px`; - } - if (isDef(options.str)) { - el.style.background = `url(${createBase64(options.str)}) left top repeat`; - } - } - - const createWatermark = (str: string) => { - if (unref(watermarkEl)) { - updateWatermark({ str }); - return id; - } - const div = document.createElement('div'); - watermarkEl.value = div; - div.id = id; - div.style.pointerEvents = 'none'; - div.style.top = '0px'; - div.style.left = '0px'; - div.style.position = 'absolute'; - div.style.zIndex = '100000'; - const el = unref(appendEl); - if (!el) return id; - const { clientHeight: height, clientWidth: width } = el; - updateWatermark({ str, width, height }); - el.appendChild(div); - return id; - }; - - function setWatermark(str: string) { - createWatermark(str); - addResizeListener(document.documentElement, func); - const instance = getCurrentInstance(); - if (instance) { - onBeforeUnmount(() => { - clear(); - }); - } - } - - return { setWatermark, clear }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/content/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/content/index.vue deleted file mode 100644 index 3f6d193b4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/content/index.vue +++ /dev/null @@ -1,51 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/content/useContentContext.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/content/useContentContext.ts deleted file mode 100644 index f12e77b79..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/content/useContentContext.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { InjectionKey, ComputedRef } from 'vue'; -import { createContext, useContext } from '/@/hooks/core/useContext'; - -export interface ContentContextProps { - contentHeight: ComputedRef; - setPageHeight: (height: number) => Promise; -} - -const key: InjectionKey = Symbol(); - -export function createContentContext(context: ContentContextProps) { - return createContext(context, key, { native: true }); -} - -export function useContentContext() { - return useContext(key); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/content/useContentViewHeight.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/content/useContentViewHeight.ts deleted file mode 100644 index f620a336f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/content/useContentViewHeight.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { ref, computed, unref } from 'vue'; -import { createPageContext } from '/@/hooks/component/usePageContext'; -import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn'; - -const headerHeightRef = ref(0); -const footerHeightRef = ref(0); - -export function useLayoutHeight() { - function setHeaderHeight(val) { - headerHeightRef.value = val; - } - function setFooterHeight(val) { - footerHeightRef.value = val; - } - return { headerHeightRef, footerHeightRef, setHeaderHeight, setFooterHeight }; -} - -export function useContentViewHeight() { - const contentHeight = ref(window.innerHeight); - const pageHeight = ref(window.innerHeight); - const getViewHeight = computed(() => { - return unref(contentHeight) - unref(headerHeightRef) - unref(footerHeightRef) || 0; - }); - - useWindowSizeFn( - () => { - contentHeight.value = window.innerHeight; - }, - 100, - { immediate: true }, - ); - - async function setPageHeight(height: number) { - pageHeight.value = height; - } - - createPageContext({ - contentHeight: getViewHeight, - setPageHeight, - pageHeight, - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/feature/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/feature/index.vue deleted file mode 100644 index 0db26ef58..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/feature/index.vue +++ /dev/null @@ -1,83 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/footer/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/footer/index.vue deleted file mode 100644 index 62e3c5e98..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/footer/index.vue +++ /dev/null @@ -1,95 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/MultipleHeader.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/MultipleHeader.vue deleted file mode 100644 index c852b7ee7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/MultipleHeader.vue +++ /dev/null @@ -1,126 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/Breadcrumb.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/Breadcrumb.vue deleted file mode 100644 index 67266d2ed..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/Breadcrumb.vue +++ /dev/null @@ -1,204 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/ErrorAction.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/ErrorAction.vue deleted file mode 100644 index 243e58700..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/ErrorAction.vue +++ /dev/null @@ -1,48 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/FullScreen.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/FullScreen.vue deleted file mode 100644 index 374ee7619..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/FullScreen.vue +++ /dev/null @@ -1,37 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/index.ts deleted file mode 100644 index 09e767e7f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'; -import FullScreen from './FullScreen.vue'; - -export const UserDropDown = createAsyncComponent(() => import('./user-dropdown/index.vue'), { - loading: true, -}); - -export const LayoutBreadcrumb = createAsyncComponent(() => import('./Breadcrumb.vue')); - -export const Notify = createAsyncComponent(() => import('./notify/index.vue')); - -export const ErrorAction = createAsyncComponent(() => import('./ErrorAction.vue')); - -export { FullScreen }; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/lock/LockModal.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/lock/LockModal.vue deleted file mode 100644 index 4e098eb3c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/lock/LockModal.vue +++ /dev/null @@ -1,126 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/notify/NoticeList.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/notify/NoticeList.vue deleted file mode 100644 index f3689abd6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/notify/NoticeList.vue +++ /dev/null @@ -1,135 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/notify/data.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/notify/data.ts deleted file mode 100644 index e1a3ed2d3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/notify/data.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { - NotificationServiceProxy, - PagingNotificationListOutput, - PagingNotificationListInput, - PagingNotificationListOutputPagedResultDto, -} from '/@/services/ServiceProxies'; -export interface ListItem { - id: string; - avatar: string; - // 通知的标题内容 - title: string; - // 是否在标题上显示删除线 - titleDelete?: boolean; - datetime: string; - type: string; - read?: boolean; - description: string; - clickClose?: boolean; - extra?: string; - color?: string; -} - -export interface TabItem { - key: string; - name: string; - list?: PagingNotificationListOutput[]; - unreadlist?: ListItem[]; -} - -export const tabListData: TabItem[] = [ - { - key: '1', - name: '消息', - list: [], - }, - { - key: '2', - name: '通知', - list: [], - }, -]; - -export async function getTextAsync(): Promise { - let request = new PagingNotificationListInput(); - request.pageSize = 5; - const _notificationServiceProxy = new NotificationServiceProxy(); - return await _notificationServiceProxy.common(request); -} - -export async function getBroadCastAsync(): Promise { - let request = new PagingNotificationListInput(); - request.pageSize = 5; - const _notificationServiceProxy = new NotificationServiceProxy(); - return await _notificationServiceProxy.broadCast(request); -} - -export async function setReadAsync(request) { - const _notificationServiceProxy = new NotificationServiceProxy(); - await _notificationServiceProxy.read(request); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/notify/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/notify/index.vue deleted file mode 100644 index ce968efbc..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/notify/index.vue +++ /dev/null @@ -1,82 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/user-dropdown/ChangePassword.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/user-dropdown/ChangePassword.vue deleted file mode 100644 index ad4c48e89..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/user-dropdown/ChangePassword.vue +++ /dev/null @@ -1,94 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/user-dropdown/DropMenuItem.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/user-dropdown/DropMenuItem.vue deleted file mode 100644 index 987af2756..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/user-dropdown/DropMenuItem.vue +++ /dev/null @@ -1,32 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/user-dropdown/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/user-dropdown/index.vue deleted file mode 100644 index e3f45499d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/components/user-dropdown/index.vue +++ /dev/null @@ -1,182 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/index.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/index.less deleted file mode 100644 index b16007e77..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/index.less +++ /dev/null @@ -1,196 +0,0 @@ -@header-trigger-prefix-cls: ~'@{namespace}-layout-header-trigger'; -@header-prefix-cls: ~'@{namespace}-layout-header'; -@breadcrumb-prefix-cls: ~'@{namespace}-layout-breadcrumb'; -@logo-prefix-cls: ~'@{namespace}-app-logo'; - -.@{header-prefix-cls} { - display: flex; - height: @header-height; - padding: 0; - margin-left: -1px; - line-height: @header-height; - color: @white; - background-color: @white; - align-items: center; - justify-content: space-between; - - &--mobile { - .@{breadcrumb-prefix-cls}, - .error-action, - .notify-item, - .fullscreen-item { - display: none; - } - - .@{logo-prefix-cls} { - min-width: unset; - padding-right: 0; - - &__title { - display: none; - } - } - .@{header-trigger-prefix-cls} { - padding: 0 4px 0 8px !important; - } - .@{header-prefix-cls}-action { - padding-right: 4px; - } - } - - &--fixed { - position: fixed; - top: 0; - left: 0; - z-index: @layout-header-fixed-z-index; - width: 100%; - } - - &-logo { - height: @header-height; - min-width: 192px; - padding: 0 10px; - font-size: 14px; - - img { - width: @logo-width; - height: @logo-width; - margin-right: 2px; - } - } - - &-left { - display: flex; - height: 100%; - align-items: center; - - .@{header-trigger-prefix-cls} { - display: flex; - height: 100%; - padding: 1px 10px 0; - cursor: pointer; - align-items: center; - - .anticon { - font-size: 16px; - } - - &.light { - &:hover { - background-color: @header-light-bg-hover-color; - } - - svg { - fill: #000; - } - } - - &.dark { - &:hover { - background-color: @header-dark-bg-hover-color; - } - } - } - } - - &-menu { - height: 100%; - min-width: 0; - flex: 1; - align-items: center; - } - - &-action { - display: flex; - min-width: 180px; - // padding-right: 12px; - align-items: center; - - &__item { - display: flex !important; - height: @header-height; - padding: 0 2px; - font-size: 1.2em; - cursor: pointer; - align-items: center; - - .ant-badge { - height: @header-height; - line-height: @header-height; - } - - .ant-badge-dot { - top: 10px; - right: 2px; - } - } - - span[role='img'] { - padding: 0 8px; - } - } - - &--light { - background-color: @white !important; - border-bottom: 1px solid @header-light-bottom-border-color; - border-left: 1px solid @header-light-bottom-border-color; - - .@{header-prefix-cls}-logo { - color: @text-color-base; - - &:hover { - background-color: @header-light-bg-hover-color; - } - } - - .@{header-prefix-cls}-action { - &__item { - color: @text-color-base; - - .app-iconify { - padding: 0 10px; - font-size: 16px !important; - } - - &:hover { - background-color: @header-light-bg-hover-color; - } - } - - &-icon, - span[role='img'] { - color: @text-color-base; - } - } - } - - &--dark { - background-color: @header-dark-bg-color !important; - // border-bottom: 1px solid @border-color-base; - border-left: 1px solid @border-color-base; - .@{header-prefix-cls}-logo { - &:hover { - background-color: @header-dark-bg-hover-color; - } - } - - .@{header-prefix-cls}-action { - &__item { - .app-iconify { - padding: 0 10px; - font-size: 16px !important; - } - - .ant-badge { - span { - color: @white; - } - } - - &:hover { - background-color: @header-dark-bg-hover-color; - } - } - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/index.vue deleted file mode 100644 index 59e1537b4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/header/index.vue +++ /dev/null @@ -1,229 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/index.vue deleted file mode 100644 index 4a230ba6b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/index.vue +++ /dev/null @@ -1,92 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/menu/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/menu/index.vue deleted file mode 100644 index a6b7dff6d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/menu/index.vue +++ /dev/null @@ -1,197 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/menu/useLayoutMenu.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/menu/useLayoutMenu.ts deleted file mode 100644 index 33c776800..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/menu/useLayoutMenu.ts +++ /dev/null @@ -1,109 +0,0 @@ -import type { Menu } from '/@/router/types'; -import type { Ref } from 'vue'; -import { watch, unref, ref, computed } from 'vue'; -import { useRouter } from 'vue-router'; -import { MenuSplitTyeEnum } from '/@/enums/menuEnum'; -import { useThrottleFn } from '@vueuse/core'; -import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; -import { getChildrenMenus, getCurrentParentPath, getMenus, getShallowMenus } from '/@/router/menus'; -import { usePermissionStore } from '/@/store/modules/permission'; -import { useAppInject } from '/@/hooks/web/useAppInject'; - -export function useSplitMenu(splitType: Ref) { - // Menu array - const menusRef = ref([]); - const { currentRoute } = useRouter(); - const { getIsMobile } = useAppInject(); - const permissionStore = usePermissionStore(); - const { setMenuSetting, getIsHorizontal, getSplit } = useMenuSetting(); - - const throttleHandleSplitLeftMenu = useThrottleFn(handleSplitLeftMenu, 50); - - const splitNotLeft = computed( - () => unref(splitType) !== MenuSplitTyeEnum.LEFT && !unref(getIsHorizontal), - ); - - const getSplitLeft = computed( - () => !unref(getSplit) || unref(splitType) !== MenuSplitTyeEnum.LEFT, - ); - - const getSpiltTop = computed(() => unref(splitType) === MenuSplitTyeEnum.TOP); - - const normalType = computed(() => { - return unref(splitType) === MenuSplitTyeEnum.NONE || !unref(getSplit); - }); - - watch( - [() => unref(currentRoute).path, () => unref(splitType)], - async ([path]: [string, MenuSplitTyeEnum]) => { - if (unref(splitNotLeft) || unref(getIsMobile)) return; - - const { meta } = unref(currentRoute); - const currentActiveMenu = meta.currentActiveMenu as string; - let parentPath = await getCurrentParentPath(path); - if (!parentPath) { - parentPath = await getCurrentParentPath(currentActiveMenu); - } - parentPath && throttleHandleSplitLeftMenu(parentPath); - }, - { - immediate: true, - }, - ); - - // Menu changes - watch( - [() => permissionStore.getLastBuildMenuTime, () => permissionStore.getBackMenuList], - () => { - genMenus(); - }, - { - immediate: true, - }, - ); - - // split Menu changes - watch( - () => getSplit.value, - () => { - if (unref(splitNotLeft)) return; - genMenus(); - }, - ); - - // Handle left menu split - async function handleSplitLeftMenu(parentPath: string) { - if (unref(getSplitLeft) || unref(getIsMobile)) return; - - // spilt mode left - const children = await getChildrenMenus(parentPath); - - if (!children || !children.length) { - setMenuSetting({ hidden: true }); - menusRef.value = []; - return; - } - - setMenuSetting({ hidden: false }); - menusRef.value = children; - } - - // get menus - async function genMenus() { - // normal mode - if (unref(normalType) || unref(getIsMobile)) { - menusRef.value = await getMenus(); - return; - } - - // split-top - if (unref(getSpiltTop)) { - const shallowMenus = await getShallowMenus(); - - menusRef.value = shallowMenus; - return; - } - } - - return { menusRef }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/SettingDrawer.tsx b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/SettingDrawer.tsx deleted file mode 100644 index d28310fcf..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/SettingDrawer.tsx +++ /dev/null @@ -1,427 +0,0 @@ -import { defineComponent, computed, unref } from 'vue'; -import { BasicDrawer } from '/@/components/Drawer/index'; -import { Divider } from 'ant-design-vue'; -import { - TypePicker, - ThemeColorPicker, - SettingFooter, - SwitchItem, - SelectItem, - InputNumberItem, -} from './components'; - -import { AppDarkModeToggle } from '/@/components/Application'; - -import { MenuTypeEnum, TriggerEnum } from '/@/enums/menuEnum'; - -import { useRootSetting } from '/@/hooks/setting/useRootSetting'; -import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; -import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting'; -import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting'; -import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting'; -import { useI18n } from '/@/hooks/web/useI18n'; - -import { baseHandler } from './handler'; - -import { - HandlerEnum, - contentModeOptions, - topMenuAlignOptions, - getMenuTriggerOptions, - routerTransitionOptions, - menuTypeList, - mixSidebarTriggerOptions, -} from './enum'; - -import { - HEADER_PRESET_BG_COLOR_LIST, - SIDE_BAR_BG_COLOR_LIST, - APP_PRESET_COLOR_LIST, -} from '/@/settings/designSetting'; - -const { t } = useI18n(); - -export default defineComponent({ - name: 'SettingDrawer', - setup(_, { attrs }) { - const { - getContentMode, - getShowFooter, - getShowBreadCrumb, - getShowBreadCrumbIcon, - getShowLogo, - getFullContent, - getColorWeak, - getGrayMode, - getLockTime, - getShowDarkModeToggle, - getThemeColor, - } = useRootSetting(); - - const { getOpenPageLoading, getBasicTransition, getEnableTransition, getOpenNProgress } = - useTransitionSetting(); - - const { - getIsHorizontal, - getShowMenu, - getMenuType, - getTrigger, - getCollapsedShowTitle, - getMenuFixed, - getCollapsed, - getCanDrag, - getTopMenuAlign, - getAccordion, - getMenuWidth, - getMenuBgColor, - getIsTopMenu, - getSplit, - getIsMixSidebar, - getCloseMixSidebarOnChange, - getMixSideTrigger, - getMixSideFixed, - } = useMenuSetting(); - - const { - getShowHeader, - getFixed: getHeaderFixed, - getHeaderBgColor, - getShowSearch, - } = useHeaderSetting(); - - const { getShowMultipleTab, getShowQuick, getShowRedo, getShowFold } = useMultipleTabSetting(); - - const getShowMenuRef = computed(() => { - return unref(getShowMenu) && !unref(getIsHorizontal); - }); - - function renderSidebar() { - return ( - <> - { - baseHandler(HandlerEnum.CHANGE_LAYOUT, { - mode: item.mode, - type: item.type, - split: unref(getIsHorizontal) ? false : undefined, - }); - }} - def={unref(getMenuType)} - /> - - ); - } - - function renderHeaderTheme() { - return ( - - ); - } - - function renderSiderTheme() { - return ( - - ); - } - - function renderMainTheme() { - return ( - - ); - } - - /** - * @description: - */ - function renderFeatures() { - let triggerDef = unref(getTrigger); - - const triggerOptions = getMenuTriggerOptions(unref(getSplit)); - const some = triggerOptions.some((item) => item.value === triggerDef); - if (!some) { - triggerDef = TriggerEnum.FOOTER; - } - - return ( - <> - - - - - - - - - - - - - - - - - - - { - return parseInt(value) === 0 - ? `0(${t('layout.setting.notAutoScreenLock')})` - : `${value}${t('layout.setting.minute')}`; - }} - /> - `${parseInt(value)}px`} - /> - - ); - } - - function renderContent() { - return ( - <> - - - - - - - - - - - - - - - - - - - - - - - ); - } - - function renderTransition() { - return ( - <> - - - - - - - - ); - } - - return () => ( - - {unref(getShowDarkModeToggle) && {() => t('layout.setting.darkMode')}} - {unref(getShowDarkModeToggle) && } - {() => t('layout.setting.navMode')} - {renderSidebar()} - {() => t('layout.setting.sysTheme')} - {renderMainTheme()} - {() => t('layout.setting.headerTheme')} - {renderHeaderTheme()} - {() => t('layout.setting.sidebarTheme')} - {renderSiderTheme()} - {() => t('layout.setting.interfaceFunction')} - {renderFeatures()} - {() => t('layout.setting.interfaceDisplay')} - {renderContent()} - {() => t('layout.setting.animation')} - {renderTransition()} - - - - ); - }, -}); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/InputNumberItem.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/InputNumberItem.vue deleted file mode 100644 index a2f5bc5c7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/InputNumberItem.vue +++ /dev/null @@ -1,56 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/SelectItem.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/SelectItem.vue deleted file mode 100644 index 676ca9125..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/SelectItem.vue +++ /dev/null @@ -1,75 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/SettingFooter.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/SettingFooter.vue deleted file mode 100644 index 237566401..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/SettingFooter.vue +++ /dev/null @@ -1,99 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/SwitchItem.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/SwitchItem.vue deleted file mode 100644 index ff2747777..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/SwitchItem.vue +++ /dev/null @@ -1,66 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/ThemeColorPicker.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/ThemeColorPicker.vue deleted file mode 100644 index d0f28ba89..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/ThemeColorPicker.vue +++ /dev/null @@ -1,88 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/TypePicker.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/TypePicker.vue deleted file mode 100644 index ce8610a20..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/TypePicker.vue +++ /dev/null @@ -1,178 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/index.ts deleted file mode 100644 index bd248885d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/components/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'; - -export const TypePicker = createAsyncComponent(() => import('./TypePicker.vue')); -export const ThemeColorPicker = createAsyncComponent(() => import('./ThemeColorPicker.vue')); -export const SettingFooter = createAsyncComponent(() => import('./SettingFooter.vue')); -export const SwitchItem = createAsyncComponent(() => import('./SwitchItem.vue')); -export const SelectItem = createAsyncComponent(() => import('./SelectItem.vue')); -export const InputNumberItem = createAsyncComponent(() => import('./InputNumberItem.vue')); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/enum.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/enum.ts deleted file mode 100644 index 1e9633a7a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/enum.ts +++ /dev/null @@ -1,156 +0,0 @@ -import { ContentEnum, RouterTransitionEnum } from '/@/enums/appEnum'; -import { - MenuModeEnum, - MenuTypeEnum, - TopMenuAlignEnum, - TriggerEnum, - MixSidebarTriggerEnum, -} from '/@/enums/menuEnum'; - -import { useI18n } from '/@/hooks/web/useI18n'; - -const { t } = useI18n(); - -export enum HandlerEnum { - CHANGE_LAYOUT, - CHANGE_THEME_COLOR, - CHANGE_THEME, - // menu - MENU_HAS_DRAG, - MENU_ACCORDION, - MENU_TRIGGER, - MENU_TOP_ALIGN, - MENU_COLLAPSED, - MENU_COLLAPSED_SHOW_TITLE, - MENU_WIDTH, - MENU_SHOW_SIDEBAR, - MENU_THEME, - MENU_SPLIT, - MENU_FIXED, - MENU_CLOSE_MIX_SIDEBAR_ON_CHANGE, - MENU_TRIGGER_MIX_SIDEBAR, - MENU_FIXED_MIX_SIDEBAR, - - // header - HEADER_SHOW, - HEADER_THEME, - HEADER_FIXED, - - HEADER_SEARCH, - - TABS_SHOW_QUICK, - TABS_SHOW_REDO, - TABS_SHOW, - TABS_SHOW_FOLD, - - LOCK_TIME, - FULL_CONTENT, - CONTENT_MODE, - SHOW_BREADCRUMB, - SHOW_BREADCRUMB_ICON, - GRAY_MODE, - COLOR_WEAK, - SHOW_LOGO, - SHOW_FOOTER, - - ROUTER_TRANSITION, - OPEN_PROGRESS, - OPEN_PAGE_LOADING, - OPEN_ROUTE_TRANSITION, -} - -export const contentModeOptions = [ - { - value: ContentEnum.FULL, - label: t('layout.setting.contentModeFull'), - }, - { - value: ContentEnum.FIXED, - label: t('layout.setting.contentModeFixed'), - }, -]; - -export const topMenuAlignOptions = [ - { - value: TopMenuAlignEnum.CENTER, - label: t('layout.setting.topMenuAlignRight'), - }, - { - value: TopMenuAlignEnum.START, - label: t('layout.setting.topMenuAlignLeft'), - }, - { - value: TopMenuAlignEnum.END, - label: t('layout.setting.topMenuAlignCenter'), - }, -]; - -export const getMenuTriggerOptions = (hideTop: boolean) => { - return [ - { - value: TriggerEnum.NONE, - label: t('layout.setting.menuTriggerNone'), - }, - { - value: TriggerEnum.FOOTER, - label: t('layout.setting.menuTriggerBottom'), - }, - ...(hideTop - ? [] - : [ - { - value: TriggerEnum.HEADER, - label: t('layout.setting.menuTriggerTop'), - }, - ]), - ]; -}; - -export const routerTransitionOptions = [ - RouterTransitionEnum.ZOOM_FADE, - RouterTransitionEnum.FADE, - RouterTransitionEnum.ZOOM_OUT, - RouterTransitionEnum.FADE_SIDE, - RouterTransitionEnum.FADE_BOTTOM, - RouterTransitionEnum.FADE_SCALE, -].map((item) => { - return { - label: item, - value: item, - }; -}); - -export const menuTypeList = [ - { - title: t('layout.setting.menuTypeSidebar'), - mode: MenuModeEnum.INLINE, - type: MenuTypeEnum.SIDEBAR, - }, - { - title: t('layout.setting.menuTypeMix'), - mode: MenuModeEnum.INLINE, - type: MenuTypeEnum.MIX, - }, - - { - title: t('layout.setting.menuTypeTopMenu'), - mode: MenuModeEnum.HORIZONTAL, - type: MenuTypeEnum.TOP_MENU, - }, - { - title: t('layout.setting.menuTypeMixSidebar'), - mode: MenuModeEnum.INLINE, - type: MenuTypeEnum.MIX_SIDEBAR, - }, -]; - -export const mixSidebarTriggerOptions = [ - { - value: MixSidebarTriggerEnum.HOVER, - label: t('layout.setting.triggerHover'), - }, - { - value: MixSidebarTriggerEnum.CLICK, - label: t('layout.setting.triggerClick'), - }, -]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/handler.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/handler.ts deleted file mode 100644 index 0909008a6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/handler.ts +++ /dev/null @@ -1,174 +0,0 @@ -import { HandlerEnum } from './enum'; -import { updateHeaderBgColor, updateSidebarBgColor } from '/@/logics/theme/updateBackground'; -import { updateColorWeak } from '/@/logics/theme/updateColorWeak'; -import { updateGrayMode } from '/@/logics/theme/updateGrayMode'; - -import { useAppStore } from '/@/store/modules/app'; -import { ProjectConfig } from '/#/config'; -import { changeTheme } from '/@/logics/theme'; -import { updateDarkTheme } from '/@/logics/theme/dark'; -import { useRootSetting } from '/@/hooks/setting/useRootSetting'; - -export function baseHandler(event: HandlerEnum, value: any) { - const appStore = useAppStore(); - const config = handler(event, value); - appStore.setProjectConfig(config); - if (event === HandlerEnum.CHANGE_THEME) { - updateHeaderBgColor(); - updateSidebarBgColor(); - } -} - -export function handler(event: HandlerEnum, value: any): DeepPartial { - const appStore = useAppStore(); - - const { getThemeColor, getDarkMode } = useRootSetting(); - switch (event) { - case HandlerEnum.CHANGE_LAYOUT: - const { mode, type, split } = value; - const splitOpt = split === undefined ? { split } : {}; - - return { - menuSetting: { - mode, - type, - collapsed: false, - show: true, - hidden: false, - ...splitOpt, - }, - }; - - case HandlerEnum.CHANGE_THEME_COLOR: - if (getThemeColor.value === value) { - return {}; - } - changeTheme(value); - - return { themeColor: value }; - - case HandlerEnum.CHANGE_THEME: - if (getDarkMode.value === value) { - return {}; - } - updateDarkTheme(value); - - return {}; - - case HandlerEnum.MENU_HAS_DRAG: - return { menuSetting: { canDrag: value } }; - - case HandlerEnum.MENU_ACCORDION: - return { menuSetting: { accordion: value } }; - - case HandlerEnum.MENU_TRIGGER: - return { menuSetting: { trigger: value } }; - - case HandlerEnum.MENU_TOP_ALIGN: - return { menuSetting: { topMenuAlign: value } }; - - case HandlerEnum.MENU_COLLAPSED: - return { menuSetting: { collapsed: value } }; - - case HandlerEnum.MENU_WIDTH: - return { menuSetting: { menuWidth: value } }; - - case HandlerEnum.MENU_SHOW_SIDEBAR: - return { menuSetting: { show: value } }; - - case HandlerEnum.MENU_COLLAPSED_SHOW_TITLE: - return { menuSetting: { collapsedShowTitle: value } }; - - case HandlerEnum.MENU_THEME: - updateSidebarBgColor(value); - return { menuSetting: { bgColor: value } }; - - case HandlerEnum.MENU_SPLIT: - return { menuSetting: { split: value } }; - - case HandlerEnum.MENU_CLOSE_MIX_SIDEBAR_ON_CHANGE: - return { menuSetting: { closeMixSidebarOnChange: value } }; - - case HandlerEnum.MENU_FIXED: - return { menuSetting: { fixed: value } }; - - case HandlerEnum.MENU_TRIGGER_MIX_SIDEBAR: - return { menuSetting: { mixSideTrigger: value } }; - - case HandlerEnum.MENU_FIXED_MIX_SIDEBAR: - return { menuSetting: { mixSideFixed: value } }; - - // ============transition================== - case HandlerEnum.OPEN_PAGE_LOADING: - appStore.setPageLoading(false); - return { transitionSetting: { openPageLoading: value } }; - - case HandlerEnum.ROUTER_TRANSITION: - return { transitionSetting: { basicTransition: value } }; - - case HandlerEnum.OPEN_ROUTE_TRANSITION: - return { transitionSetting: { enable: value } }; - - case HandlerEnum.OPEN_PROGRESS: - return { transitionSetting: { openNProgress: value } }; - // ============root================== - - case HandlerEnum.LOCK_TIME: - return { lockTime: value }; - - case HandlerEnum.FULL_CONTENT: - return { fullContent: value }; - - case HandlerEnum.CONTENT_MODE: - return { contentMode: value }; - - case HandlerEnum.SHOW_BREADCRUMB: - return { showBreadCrumb: value }; - - case HandlerEnum.SHOW_BREADCRUMB_ICON: - return { showBreadCrumbIcon: value }; - - case HandlerEnum.GRAY_MODE: - updateGrayMode(value); - return { grayMode: value }; - - case HandlerEnum.SHOW_FOOTER: - return { showFooter: value }; - - case HandlerEnum.COLOR_WEAK: - updateColorWeak(value); - return { colorWeak: value }; - - case HandlerEnum.SHOW_LOGO: - return { showLogo: value }; - - // ============tabs================== - case HandlerEnum.TABS_SHOW_QUICK: - return { multiTabsSetting: { showQuick: value } }; - - case HandlerEnum.TABS_SHOW: - return { multiTabsSetting: { show: value } }; - - case HandlerEnum.TABS_SHOW_REDO: - return { multiTabsSetting: { showRedo: value } }; - - case HandlerEnum.TABS_SHOW_FOLD: - return { multiTabsSetting: { showFold: value } }; - - // ============header================== - case HandlerEnum.HEADER_THEME: - updateHeaderBgColor(value); - return { headerSetting: { bgColor: value } }; - - case HandlerEnum.HEADER_SEARCH: - return { headerSetting: { showSearch: value } }; - - case HandlerEnum.HEADER_FIXED: - return { headerSetting: { fixed: value } }; - - case HandlerEnum.HEADER_SHOW: - return { headerSetting: { show: value } }; - default: - return {}; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/index.vue deleted file mode 100644 index 9c5bb87f4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/setting/index.vue +++ /dev/null @@ -1,26 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/DragBar.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/DragBar.vue deleted file mode 100644 index 9bae60c1e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/DragBar.vue +++ /dev/null @@ -1,66 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/LayoutSider.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/LayoutSider.vue deleted file mode 100644 index 21445059c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/LayoutSider.vue +++ /dev/null @@ -1,185 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/MixSider.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/MixSider.vue deleted file mode 100644 index 5e4fae5bd..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/MixSider.vue +++ /dev/null @@ -1,591 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/index.vue deleted file mode 100644 index d5357f44a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/index.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/useLayoutSider.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/useLayoutSider.ts deleted file mode 100644 index 66656b254..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/sider/useLayoutSider.ts +++ /dev/null @@ -1,143 +0,0 @@ -import type { Ref } from 'vue'; - -import { computed, unref, onMounted, nextTick } from 'vue'; - -import { TriggerEnum } from '/@/enums/menuEnum'; - -import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; -import { useDebounceFn } from '@vueuse/core'; -import { useAppStore } from '/@/store/modules/app'; - -/** - * Handle related operations of menu events - */ -export function useSiderEvent() { - const appStore = useAppStore(); - const { getMiniWidthNumber } = useMenuSetting(); - - const getCollapsedWidth = computed(() => { - return unref(getMiniWidthNumber); - }); - - function onBreakpointChange(broken: boolean) { - appStore.setProjectConfig({ - menuSetting: { - siderHidden: broken, - }, - }); - } - - return { getCollapsedWidth, onBreakpointChange }; -} - -/** - * Handle related operations of menu folding - */ -export function useTrigger(getIsMobile: Ref) { - const { getTrigger, getSplit } = useMenuSetting(); - - const getShowTrigger = computed(() => { - const trigger = unref(getTrigger); - - return ( - trigger !== TriggerEnum.NONE && - !unref(getIsMobile) && - (trigger === TriggerEnum.FOOTER || unref(getSplit)) - ); - }); - - const getTriggerAttr = computed(() => { - if (unref(getShowTrigger)) { - return {}; - } - return { - trigger: null, - }; - }); - - return { getTriggerAttr, getShowTrigger }; -} - -/** - * Handle menu drag and drop related operations - * @param siderRef - * @param dragBarRef - */ -export function useDragLine(siderRef: Ref, dragBarRef: Ref, mix = false) { - const { getMiniWidthNumber, getCollapsed, setMenuSetting } = useMenuSetting(); - - onMounted(() => { - nextTick(() => { - const exec = useDebounceFn(changeWrapWidth, 80); - exec(); - }); - }); - - function getEl(elRef: Ref): any { - const el = unref(elRef); - if (!el) return null; - if (Reflect.has(el, '$el')) { - return (unref(elRef) as ComponentRef)?.$el; - } - return unref(elRef); - } - - function handleMouseMove(ele: HTMLElement, wrap: HTMLElement, clientX: number) { - document.onmousemove = function (innerE) { - let iT = (ele as any).left + (innerE.clientX - clientX); - innerE = innerE || window.event; - const maxT = 800; - const minT = unref(getMiniWidthNumber); - iT < 0 && (iT = 0); - iT > maxT && (iT = maxT); - iT < minT && (iT = minT); - ele.style.left = wrap.style.width = iT + 'px'; - return false; - }; - } - - // Drag and drop in the menu area-release the mouse - function removeMouseup(ele: any) { - const wrap = getEl(siderRef); - document.onmouseup = function () { - document.onmousemove = null; - document.onmouseup = null; - wrap.style.transition = 'width 0.2s'; - const width = parseInt(wrap.style.width); - - if (!mix) { - const miniWidth = unref(getMiniWidthNumber); - if (!unref(getCollapsed)) { - width > miniWidth + 20 - ? setMenuSetting({ menuWidth: width }) - : setMenuSetting({ collapsed: true }); - } else { - width > miniWidth && setMenuSetting({ collapsed: false, menuWidth: width }); - } - } else { - setMenuSetting({ menuWidth: width }); - } - - ele.releaseCapture?.(); - }; - } - - function changeWrapWidth() { - const ele = getEl(dragBarRef); - if (!ele) return; - const wrap = getEl(siderRef); - if (!wrap) return; - - ele.onmousedown = (e: any) => { - wrap.style.transition = 'unset'; - const clientX = e?.clientX; - ele.left = ele.offsetLeft; - handleMouseMove(ele, wrap, clientX); - removeMouseup(ele); - ele.setCapture?.(); - return false; - }; - } - - return {}; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/components/FoldButton.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/components/FoldButton.vue deleted file mode 100644 index c8ea290ea..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/components/FoldButton.vue +++ /dev/null @@ -1,42 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/components/TabContent.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/components/TabContent.vue deleted file mode 100644 index 27a065de1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/components/TabContent.vue +++ /dev/null @@ -1,76 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/components/TabRedo.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/components/TabRedo.vue deleted file mode 100644 index a6fa65754..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/components/TabRedo.vue +++ /dev/null @@ -1,33 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/index.less b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/index.less deleted file mode 100644 index e6cdeb3da..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/index.less +++ /dev/null @@ -1,207 +0,0 @@ -@prefix-cls: ~'@{namespace}-multiple-tabs'; - -html[data-theme='dark'] { - .@{prefix-cls} { - .ant-tabs-tab { - border-bottom: 1px solid @border-color-base; - } - } -} - -html[data-theme='light'] { - .@{prefix-cls} { - .ant-tabs-tab:not(.ant-tabs-tab-active) { - border: 1px solid #d9d9d9 !important; - } - } -} - -.@{prefix-cls} { - z-index: 10; - height: @multiple-height + 2; - line-height: @multiple-height + 2; - background-color: @component-background; - border-bottom: 1px solid @border-color-base; - - .ant-tabs-small { - height: @multiple-height; - } - - .ant-tabs.ant-tabs-card { - .ant-tabs-nav { - padding-top: 2px; - height: @multiple-height; - margin: 0; - background-color: @component-background; - border: 0; - box-shadow: none; - - .ant-tabs-nav-container { - height: @multiple-height; - padding-top: 2px; - } - - .ant-tabs-tab { - height: calc(@multiple-height - 2px); - padding-right: 12px; - line-height: calc(@multiple-height - 2px); - color: @text-color-base; - background-color: @component-background; - transition: none; - - &:hover { - .ant-tabs-tab-remove { - opacity: 1; - } - } - - .ant-tabs-tab-remove { - width: 8px; - height: 28px; - font-size: 12px; - color: inherit; - opacity: 0; - transition: none; - margin-left: 2px; - margin-right: -4px; - - &:hover { - svg { - width: 0.8em; - } - } - } - - // > div { - // display: flex; - // justify-content: center; - // align-items: center; - // } - - svg { - fill: @text-color-base; - } - } - - .ant-tabs-tab:not(.ant-tabs-tab-active) { - &:hover { - color: @primary-color; - } - } - - .ant-tabs-tab-active { - position: relative; - padding-left: 18px; - background: @primary-color; - border: 0; - transition: none; - - span { - color: @white !important; - } - - .ant-tabs-tab-remove { - opacity: 1; - } - - svg { - width: 0.7em; - fill: @white; - } - } - } - - .ant-tabs-nav > div:nth-child(1) { - padding: 0 6px; - - .ant-tabs-tab { - margin-right: 3px !important; - } - } - } - - .ant-tabs-tab:not(.ant-tabs-tab-active) { - .anticon-close { - font-size: 12px; - - svg { - width: 0.6em; - } - } - } - - .ant-dropdown-trigger { - display: inline-flex; - } - - &--hide-close { - .ant-tabs-tab-remove { - opacity: 0 !important; - } - } - - &-content { - &__extra-quick, - &__extra-redo, - &__extra-fold { - display: inline-block; - width: 36px; - height: @multiple-height; - line-height: @multiple-height; - color: @text-color-secondary; - text-align: center; - cursor: pointer; - border-left: 1px solid @border-color-base; - - &:hover { - color: @text-color-base; - } - - span[role='img'] { - transform: rotate(90deg); - } - } - - &__extra-redo { - span[role='img'] { - transform: rotate(0deg); - } - } - - &__info { - display: inline-block; - width: 100%; - height: @multiple-height - 2; - padding-left: 0; - margin-left: -10px; - font-size: 12px; - cursor: pointer; - user-select: none; - } - } -} - -.ant-tabs-dropdown-menu { - &-title-content { - display: flex; - align-items: center; - - .@{prefix-cls} { - &-content__info { - width: auto; - margin-left: 0; - line-height: 28px; - } - } - } - - &-item-remove { - margin-left: auto; - } -} - -.multiple-tabs__dropdown { - .ant-dropdown-content { - width: 172px; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/index.vue deleted file mode 100644 index 553baebb5..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/index.vue +++ /dev/null @@ -1,144 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/types.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/types.ts deleted file mode 100644 index 3a8cfd9cc..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/types.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { DropMenu } from '/@/components/Dropdown/index'; -import type { RouteLocationNormalized } from 'vue-router'; - -export enum TabContentEnum { - TAB_TYPE, - EXTRA_TYPE, -} - -export type { DropMenu }; - -export interface TabContentProps { - tabItem: RouteLocationNormalized; - type?: TabContentEnum; - trigger?: ('click' | 'hover' | 'contextmenu')[]; -} - -export enum MenuEventEnum { - REFRESH_PAGE, - CLOSE_CURRENT, - CLOSE_LEFT, - CLOSE_RIGHT, - CLOSE_OTHER, - CLOSE_ALL, - SCALE, -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/useMultipleTabs.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/useMultipleTabs.ts deleted file mode 100644 index 71b9029cb..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/useMultipleTabs.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { toRaw, ref, nextTick } from 'vue'; -import type { RouteLocationNormalized } from 'vue-router'; -import { useDesign } from '/@/hooks/web/useDesign'; -import { useSortable } from '/@/hooks/web/useSortable'; -import { useMultipleTabStore } from '/@/store/modules/multipleTab'; -import { isNullAndUnDef } from '/@/utils/is'; -import projectSetting from '/@/settings/projectSetting'; -import { useRouter } from 'vue-router'; - -export function initAffixTabs(): string[] { - const affixList = ref([]); - - const tabStore = useMultipleTabStore(); - const router = useRouter(); - /** - * @description: Filter all fixed routes - */ - function filterAffixTabs(routes: RouteLocationNormalized[]) { - const tabs: RouteLocationNormalized[] = []; - routes && - routes.forEach((route) => { - if (route.meta && route.meta.affix) { - tabs.push(toRaw(route)); - } - }); - return tabs; - } - - /** - * @description: Set fixed tabs - */ - function addAffixTabs(): void { - const affixTabs = filterAffixTabs(router.getRoutes() as unknown as RouteLocationNormalized[]); - affixList.value = affixTabs; - for (const tab of affixTabs) { - tabStore.addTab({ - meta: tab.meta, - name: tab.name, - path: tab.path, - } as unknown as RouteLocationNormalized); - } - } - - let isAddAffix = false; - - if (!isAddAffix) { - addAffixTabs(); - isAddAffix = true; - } - return affixList.value.map((item) => item.meta?.title).filter(Boolean) as string[]; -} - -export function useTabsDrag(affixTextList: string[]) { - const tabStore = useMultipleTabStore(); - const { multiTabsSetting } = projectSetting; - const { prefixCls } = useDesign('multiple-tabs'); - nextTick(() => { - if (!multiTabsSetting.canDrag) return; - const el = document.querySelectorAll( - `.${prefixCls} .ant-tabs-nav-wrap > div`, - )?.[0] as HTMLElement; - const { initSortable } = useSortable(el, { - filter: (e: ChangeEvent) => { - const text = e?.target?.innerText; - if (!text) return false; - return affixTextList.includes(text); - }, - onEnd: (evt) => { - const { oldIndex, newIndex } = evt; - - if (isNullAndUnDef(oldIndex) || isNullAndUnDef(newIndex) || oldIndex === newIndex) { - return; - } - - tabStore.sortTabs(oldIndex, newIndex); - }, - }); - initSortable(); - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/useTabDropdown.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/useTabDropdown.ts deleted file mode 100644 index 016ce8c34..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/tabs/useTabDropdown.ts +++ /dev/null @@ -1,140 +0,0 @@ -import type { TabContentProps } from './types'; -import type { DropMenu } from '/@/components/Dropdown'; -import type { ComputedRef } from 'vue'; - -import { computed, unref, reactive } from 'vue'; -import { MenuEventEnum } from './types'; -import { useMultipleTabStore } from '/@/store/modules/multipleTab'; -import { RouteLocationNormalized, useRouter } from 'vue-router'; -import { useTabs } from '/@/hooks/web/useTabs'; -import { useI18n } from '/@/hooks/web/useI18n'; - -export function useTabDropdown(tabContentProps: TabContentProps, getIsTabs: ComputedRef) { - const state = reactive({ - current: null as Nullable, - currentIndex: 0, - }); - - const { t } = useI18n(); - const tabStore = useMultipleTabStore(); - const { currentRoute } = useRouter(); - const { refreshPage, closeAll, close, closeLeft, closeOther, closeRight } = useTabs(); - - const getTargetTab = computed((): RouteLocationNormalized => { - return unref(getIsTabs) ? tabContentProps.tabItem : unref(currentRoute); - }); - - /** - * @description: drop-down list - */ - const getDropMenuList = computed(() => { - if (!unref(getTargetTab)) { - return; - } - const { meta } = unref(getTargetTab); - const { path } = unref(currentRoute); - - const curItem = state.current; - - const isCurItem = curItem ? curItem.path === path : false; - - // Refresh button - const index = state.currentIndex; - const refreshDisabled = !isCurItem; - // Close left - const closeLeftDisabled = index === 0 || !isCurItem; - - const disabled = tabStore.getTabList.length === 1; - - // Close right - const closeRightDisabled = - !isCurItem || (index === tabStore.getTabList.length - 1 && tabStore.getLastDragEndIndex >= 0); - const dropMenuList: DropMenu[] = [ - { - icon: 'ion:reload-sharp', - event: MenuEventEnum.REFRESH_PAGE, - text: t('layout.multipleTab.reload'), - disabled: refreshDisabled, - }, - { - icon: 'clarity:close-line', - event: MenuEventEnum.CLOSE_CURRENT, - text: t('layout.multipleTab.close'), - disabled: !!meta?.affix || disabled, - divider: true, - }, - { - icon: 'line-md:arrow-close-left', - event: MenuEventEnum.CLOSE_LEFT, - text: t('layout.multipleTab.closeLeft'), - disabled: closeLeftDisabled, - divider: false, - }, - { - icon: 'line-md:arrow-close-right', - event: MenuEventEnum.CLOSE_RIGHT, - text: t('layout.multipleTab.closeRight'), - disabled: closeRightDisabled, - divider: true, - }, - { - icon: 'dashicons:align-center', - event: MenuEventEnum.CLOSE_OTHER, - text: t('layout.multipleTab.closeOther'), - disabled: disabled || !isCurItem, - }, - { - icon: 'clarity:minus-line', - event: MenuEventEnum.CLOSE_ALL, - text: t('layout.multipleTab.closeAll'), - disabled: disabled, - }, - ]; - - return dropMenuList; - }); - - function handleContextMenu(tabItem: RouteLocationNormalized) { - return (e: Event) => { - if (!tabItem) { - return; - } - e?.preventDefault(); - const index = tabStore.getTabList.findIndex((tab) => tab.path === tabItem.path); - state.current = tabItem; - state.currentIndex = index; - }; - } - - // Handle right click event - function handleMenuEvent(menu: DropMenu): void { - const { event } = menu; - switch (event) { - case MenuEventEnum.REFRESH_PAGE: - // refresh page - refreshPage(); - break; - // Close current - case MenuEventEnum.CLOSE_CURRENT: - close(tabContentProps.tabItem); - break; - // Close left - case MenuEventEnum.CLOSE_LEFT: - closeLeft(); - break; - // Close right - case MenuEventEnum.CLOSE_RIGHT: - closeRight(); - break; - // Close other - case MenuEventEnum.CLOSE_OTHER: - closeOther(); - break; - // Close all - case MenuEventEnum.CLOSE_ALL: - closeAll(); - break; - } - } - return { getDropMenuList, handleMenuEvent, handleContextMenu }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/trigger/HeaderTrigger.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/trigger/HeaderTrigger.vue deleted file mode 100644 index d7dbb238d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/trigger/HeaderTrigger.vue +++ /dev/null @@ -1,25 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/trigger/SiderTrigger.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/trigger/SiderTrigger.vue deleted file mode 100644 index 0eb38b560..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/trigger/SiderTrigger.vue +++ /dev/null @@ -1,21 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/trigger/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/trigger/index.vue deleted file mode 100644 index 61f43b347..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/default/trigger/index.vue +++ /dev/null @@ -1,22 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/iframe/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/iframe/index.vue deleted file mode 100644 index d9ee7e5b8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/iframe/index.vue +++ /dev/null @@ -1,29 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/iframe/useFrameKeepAlive.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/iframe/useFrameKeepAlive.ts deleted file mode 100644 index e84c49fe9..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/iframe/useFrameKeepAlive.ts +++ /dev/null @@ -1,59 +0,0 @@ -import type { AppRouteRecordRaw } from '/@/router/types'; - -import { computed, toRaw, unref } from 'vue'; - -import { useMultipleTabStore } from '/@/store/modules/multipleTab'; - -import { uniqBy } from 'lodash-es'; - -import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting'; - -import { useRouter } from 'vue-router'; - -export function useFrameKeepAlive() { - const router = useRouter(); - const { currentRoute } = router; - const { getShowMultipleTab } = useMultipleTabSetting(); - const tabStore = useMultipleTabStore(); - const getFramePages = computed(() => { - const ret = getAllFramePages(toRaw(router.getRoutes()) as unknown as AppRouteRecordRaw[]) || []; - return ret; - }); - - const getOpenTabList = computed((): string[] => { - return tabStore.getTabList.reduce((prev: string[], next) => { - if (next.meta && Reflect.has(next.meta, 'frameSrc')) { - prev.push(next.name as string); - } - return prev; - }, []); - }); - - function getAllFramePages(routes: AppRouteRecordRaw[]): AppRouteRecordRaw[] { - let res: AppRouteRecordRaw[] = []; - for (const route of routes) { - const { meta: { frameSrc } = {}, children } = route; - if (frameSrc) { - res.push(route); - } - if (children && children.length) { - res.push(...getAllFramePages(children)); - } - } - res = uniqBy(res, 'name'); - return res; - } - - function showIframe(item: AppRouteRecordRaw) { - return item.name === unref(currentRoute).name; - } - - function hasRenderFrame(name: string) { - if (!unref(getShowMultipleTab)) { - return router.currentRoute.value.name === name; - } - return unref(getOpenTabList).includes(name); - } - - return { hasRenderFrame, getFramePages, showIframe, getAllFramePages }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/page/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/page/index.vue deleted file mode 100644 index 72fe90f61..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/page/index.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/page/transition.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/page/transition.ts deleted file mode 100644 index 9e93009d2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/layouts/page/transition.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { FunctionalComponent } from 'vue'; -import type { RouteLocation } from 'vue-router'; - -export interface DefaultContext { - Component: FunctionalComponent & { type: Recordable }; - route: RouteLocation; -} - -export function getTransitionName({ - route, - openCache, - cacheTabs, - enableTransition, - def, -}: Pick & { - enableTransition: boolean; - openCache: boolean; - def: string; - cacheTabs: string[]; -}): string | undefined { - if (!enableTransition) { - return undefined; - } - - const isInCache = cacheTabs.includes(route.name as string); - const transitionName = 'fade-slide'; - let name: string | undefined = transitionName; - - if (openCache) { - name = isInCache && route.meta.loaded ? transitionName : undefined; - } - return name || (route.meta.transitionName as string) || def; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/helper.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/helper.ts deleted file mode 100644 index 4f784394c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/helper.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { LocaleType } from '/#/config'; - -import { set } from 'lodash-es'; - -export const loadLocalePool: LocaleType[] = []; - -export function setHtmlPageLang(locale: LocaleType) { - document.querySelector('html')?.setAttribute('lang', locale); -} - -export function setLoadLocalePool(cb: (loadLocalePool: LocaleType[]) => void) { - cb(loadLocalePool); -} - -export function genMessage(langs: Record>, prefix = 'lang') { - const obj: Recordable = {}; - - Object.keys(langs).forEach((key) => { - const langFileModule = langs[key].default; - let fileName = key.replace(`./${prefix}/`, '').replace(/^\.\//, ''); - const lastIndex = fileName.lastIndexOf('.'); - fileName = fileName.substring(0, lastIndex); - const keyList = fileName.split('/'); - const moduleName = keyList.shift(); - const objKey = keyList.join('.'); - - if (moduleName) { - if (objKey) { - set(obj, moduleName, obj[moduleName] || {}); - set(obj[moduleName], objKey, langFileModule); - } else { - set(obj, moduleName, langFileModule || {}); - } - } - }); - return obj; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en.ts deleted file mode 100644 index f2bf24736..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { genMessage } from '../helper'; -import antdLocale from 'ant-design-vue/es/locale/en_US'; - -const modules = import.meta.globEager('./en/**/*.ts'); -export default { - message: { - ...genMessage(modules, 'en'), - antdLocale, - }, - dateLocale: null, - dateLocaleName: 'en', -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/common.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/common.ts deleted file mode 100644 index 348a50a38..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/common.ts +++ /dev/null @@ -1,43 +0,0 @@ -export default { - okText: 'OK', - closeText: 'Close', - cancelText: 'Cancel', - loadingText: 'Loading...', - saveText: 'Save', - delText: 'Delete', - resetText: 'Reset', - searchText: 'Search', - queryText: 'Search', - editText: 'Edit', - inputText: 'Please enter', - chooseText: 'Please choose', - redo: 'Refresh', - back: 'Back', - light: 'Light', - dark: 'Dark', - enabled: 'Enabled', - disEnabled: 'DisEnabled', - locked: 'Locked', - unLocked: 'UnLocked', - createText: 'Create', - tip: 'Tip', - askDelete: 'Are you sure you want to delete', - operationSuccess: 'Operation Success', - disEnabledSelf: "You can't disable yourself", - true: 'True', - false: 'False', - key: 'Key', - action: 'Action', - creationTime: 'CreationTime', - detail: 'Detail', - status: 'Status', - active: 'IsActive', - download: 'DownLoad', - export: 'Export', - isEnabled: 'IsEnabled', - default: 'Default', - name: 'Name', - value: 'Value', - parameterValidationFailure: 'Parameter Validation Failure', - permissionDenied: 'Permission Denied', -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/component.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/component.ts deleted file mode 100644 index b93dbd548..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/component.ts +++ /dev/null @@ -1,129 +0,0 @@ -export default { - app: { - searchNotData: 'No search results yet', - toSearch: 'to search', - toNavigate: 'to navigate', - }, - countdown: { - normalText: 'Get SMS code', - sendText: 'Reacquire in {0}s', - }, - cropper: { - selectImage: 'Select Image', - uploadSuccess: 'Uploaded success!', - modalTitle: 'Avatar upload', - okText: 'Confirm and upload', - btn_reset: 'Reset', - btn_rotate_left: 'Counterclockwise rotation', - btn_rotate_right: 'Clockwise rotation', - btn_scale_x: 'Flip horizontal', - btn_scale_y: 'Flip vertical', - btn_zoom_in: 'Zoom in', - btn_zoom_out: 'Zoom out', - preview: 'Preivew', - }, - drawer: { - loadingText: 'Loading...', - cancelText: 'Close', - okText: 'Confirm', - }, - excel: { - exportModalTitle: 'Export data', - fileType: 'File type', - fileName: 'File name', - }, - form: { - putAway: 'Put away', - unfold: 'Unfold', - maxTip: 'The number of characters should be less than {0}', - apiSelectNotFound: 'Wait for data loading to complete...', - }, - icon: { - placeholder: 'Click the select icon', - search: 'Search icon', - copy: 'Copy icon successfully!', - }, - menu: { - search: 'Menu search', - }, - modal: { - cancelText: 'Close', - okText: 'Confirm', - close: 'Close', - maximize: 'Maximize', - restore: 'Restore', - }, - table: { - settingDens: 'Density', - settingDensDefault: 'Default', - settingDensMiddle: 'Middle', - settingDensSmall: 'Compact', - settingColumn: 'Column settings', - settingColumnShow: 'Column display', - settingIndexColumnShow: 'Index Column', - settingSelectColumnShow: 'Selection Column', - settingFixedLeft: 'Fixed Left', - settingFixedRight: 'Fixed Right', - settingFullScreen: 'Full Screen', - index: 'Index', - total: 'total of {total}', - }, - time: { - before: ' ago', - after: ' after', - just: 'just now', - seconds: ' seconds', - minutes: ' minutes', - hours: ' hours', - days: ' days', - }, - tree: { - selectAll: 'Select All', - unSelectAll: 'Cancel Select', - expandAll: 'Expand All', - unExpandAll: 'Collapse all', - - checkStrictly: 'Hierarchical association', - checkUnStrictly: 'Hierarchical independence', - }, - upload: { - save: 'Save', - upload: 'Upload', - imgUpload: 'ImageUpload', - uploaded: 'Uploaded', - - operating: 'Operating', - del: 'Delete', - download: 'download', - saveWarn: 'Please wait for the file to upload and save!', - saveError: 'There is no file successfully uploaded and cannot be saved!', - - preview: 'Preview', - choose: 'Select the file', - - accept: 'Support {0} format', - acceptUpload: 'Only upload files in {0} format', - maxSize: 'A single file does not exceed {0}MB ', - maxSizeMultiple: 'Only upload files up to {0}MB!', - maxNumber: 'Only upload up to {0} files', - - legend: 'Legend', - fileName: 'File name', - fileSize: 'File size', - fileStatue: 'File status', - - startUpload: 'Start upload', - uploadSuccess: 'Upload successfully', - uploadError: 'Upload failed', - uploading: 'Uploading', - uploadWait: 'Please wait for the file upload to finish', - reUploadFailed: 'Re-upload failed files', - }, - verify: { - error: 'verification failed!', - time: 'The verification is successful and it takes {time} seconds!', - redoTip: 'Click the picture to refresh', - dragText: 'Hold down the slider and drag', - successText: 'Verified', - }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/layout.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/layout.ts deleted file mode 100644 index 5a9408a08..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/layout.ts +++ /dev/null @@ -1,115 +0,0 @@ -export default { - footer: { onlinePreview: 'Preview', onlineDocument: 'Document' }, - header: { - // user dropdown - dropdownItemDoc: 'Document', - dropdownItemLoginOut: 'Login Out', - - tooltipErrorLog: 'Error log', - tooltipLock: 'Lock screen', - tooltipNotify: 'Notification', - - tooltipEntryFull: 'Full Screen', - tooltipExitFull: 'Exit Full Screen', - - // lock - lockScreenPassword: 'Lock screen password', - lockScreen: 'Lock screen', - lockScreenBtn: 'Locking', - - home: 'Home', - }, - multipleTab: { - reload: 'Refresh current', - close: 'Close current', - closeLeft: 'Close Left', - closeRight: 'Close Right', - closeOther: 'Close Other', - closeAll: 'Close All', - }, - setting: { - // content mode - contentModeFull: 'Full', - contentModeFixed: 'Fixed width', - // topMenu align - topMenuAlignLeft: 'Left', - topMenuAlignRight: 'Center', - topMenuAlignCenter: 'Right', - // menu trigger - menuTriggerNone: 'Not Show', - menuTriggerBottom: 'Bottom', - menuTriggerTop: 'Top', - // menu type - menuTypeSidebar: 'Left menu mode', - menuTypeMixSidebar: 'Left menu mixed mode', - menuTypeMix: 'Top Menu Mix mode', - menuTypeTopMenu: 'Top menu mode', - - on: 'On', - off: 'Off', - minute: 'Minute', - - operatingTitle: 'Successful!', - operatingContent: - 'The copy is successful, please go to src/settings/projectSetting.ts to modify the configuration!', - resetSuccess: 'Successfully reset!', - - copyBtn: 'Copy', - clearBtn: 'Clear cache and to the login page', - - drawerTitle: 'Configuration', - - darkMode: 'Dark mode', - navMode: 'Navigation mode', - interfaceFunction: 'Interface function', - interfaceDisplay: 'Interface display', - animation: 'Animation', - splitMenu: 'Split menu', - closeMixSidebarOnChange: 'Switch page to close menu', - - sysTheme: 'System theme', - headerTheme: 'Header theme', - sidebarTheme: 'Menu theme', - - menuDrag: 'Drag Sidebar', - menuSearch: 'Menu search', - menuAccordion: 'Sidebar accordion', - menuCollapse: 'Collapse menu', - collapseMenuDisplayName: 'Collapse menu display name', - topMenuLayout: 'Top menu layout', - menuCollapseButton: 'Menu collapse button', - contentMode: 'Content area width', - expandedMenuWidth: 'Expanded menu width', - - breadcrumb: 'Breadcrumbs', - breadcrumbIcon: 'Breadcrumbs Icon', - tabs: 'Tabs', - tabDetail: 'Tab Detail', - tabsQuickBtn: 'Tabs quick button', - tabsRedoBtn: 'Tabs redo button', - tabsFoldBtn: 'Tabs flod button', - sidebar: 'Sidebar', - header: 'Header', - footer: 'Footer', - fullContent: 'Full content', - grayMode: 'Gray mode', - colorWeak: 'Color Weak Mode', - - progress: 'Progress', - switchLoading: 'Switch Loading', - switchAnimation: 'Switch animation', - animationType: 'Animation type', - - autoScreenLock: 'Auto screen lock', - notAutoScreenLock: 'Not auto lock', - - fixedHeader: 'Fixed header', - fixedSideBar: 'Fixed Sidebar', - - mixSidebarTrigger: 'Mixed menu Trigger', - triggerHover: 'Hover', - triggerClick: 'Click', - - mixSidebarFixed: 'Fixed expanded menu', - }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/admin.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/admin.ts deleted file mode 100644 index fc3c88a2f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/admin.ts +++ /dev/null @@ -1,99 +0,0 @@ -export default { - systemManagement: 'SystemManagement', - userManagement: 'UserManagement', - roleManagement: 'RoleManagement', - languageManagement: 'LanguageManagement', - languageTextManagement: 'LanguageTextManagement', - language_cultureName: 'CultureName', - language_uiCultureName: 'UICultureName', - language_displayName: 'DisplayName', - language_flagIcon: 'FlagIcon', - languageTexts_resourceName: 'ResourceName', - userManagement_userName: 'UserName', - userManagement_name: 'Name', - userManagement_email: 'Email', - userManagement_phone: 'phone', - userManagement_createTime: 'CreateTime', - userManagement_create_user: 'Create User', - userManagement_edit_user: 'Edit User', - userManagement_password: 'Password', - userManagement_confirm_password: 'Password(Confirm)', - userManagement_userInfo: 'UserInfo', - userManagement_role: 'Role', - - userManagement_roleName: 'RoleName', - roleManagement_name: 'Name', - roleManagement_default: 'Default', - roleManagement_edit: 'Edit Role', - roleManagement_create_role: 'Create Role', - roleManagement_permission: 'Permission', - userManagement_locked: 'Locked', - - audit_executeTime: 'ExecutionTime', - audit_endTime: 'EndTime', - audit_userName: 'UserName', - audit_httpMethod: 'HttpMethod', - audit_httpStatusCode: 'HttpStatusCode', - audit_httpRequest: 'HttpRequest', - audit_ipAddress: 'IP Address', - audit_time: 'Time', - audit_duration: 'Execution Duration(ms)', - audit_url: 'URL', - audit_entityInfo: 'EntityInformation', - audit_message: 'Message', - audit_hasException: 'HasException', - audit_hasException_all: 'All', - audit_hasException_yes: 'Yes', - audit_hasException_no: 'No', - audit_applicationName: 'ApplicationName', - audit_serviceName: 'serviceName', - audit_methodName: 'methodName', - audit_parameters: 'parameters', - grantedMessage: 'Authorization Successful, Please Login Again.', - close: 'close', - auditLog: 'AuditLog', - esLogs: 'ESLog', - backgroundTask: 'BackgroundTask', - integratedEvent: 'IntegratedEvent', - tenant: 'Tenant', - identityServer: 'IdentityServer', - client: 'Client', - apiResource: 'ApiResource', - apiScope: 'ApiScope', - identityResource: 'IdentityResource', - - logLevel: 'Level', - logContent: 'Content', - settingManagement: 'SettingManagement', - dictionaryManagement: 'DataDictionary', - dictionaryTypeName: 'Type', - dictionaryCode: 'Code', - dictionaryDisplayText: 'Name', - dictionaryDescription: 'Description', - dictionaryOrder: 'Order', - chooseDictionary: 'Please Choose DataDictionary Type', - nonZeroMessage: 'Please enter a non-zero positive integer', - fileName: 'FileName', - fileNameManagement: 'FileNameManagement', - currentPassword: 'CurrentPassword', - newPassword: 'NewPassword', - confirmPassword: 'ConfirmPassword', - editPasswordMessage: 'The passwords entered twice are inconsistent. Procedure', - executionTime: 'ExecutionTime', - executionDuration: 'ExecutionDuration(Millisecond)', - organizationUnitName: 'Name', - parentOrganizationUnitName: 'ParentOrganizationUnit', - organizationUnitManagement: 'OrganizationUnitManagement', - createRootOrganizationUnit: 'CreateRootOrganizationUnit', - organizationUnit: 'OrganizationUnit', - member: 'Member', - role: 'Role', - identitySecurityLog: 'IdentitySecurityLog', - identitySecurityLog_ApplicationName: 'ApplicationName', - identitySecurityLog_Identity: 'Identity', - identitySecurityLog_Action: 'Action', - identitySecurityLog_UserName: 'UserName', - identitySecurityLog_CorrelationId: 'CorrelationId', - identitySecurityLog_ClientIpAddress: 'ClientIpAddress', - identitySecurityLog_CreationTime: 'LoginTime', -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/basic.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/basic.ts deleted file mode 100644 index b6faa00ef..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/basic.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default { - login: 'Login', - errorLogList: 'Error Log', -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/dashboard.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/dashboard.ts deleted file mode 100644 index 6d047b570..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/dashboard.ts +++ /dev/null @@ -1,6 +0,0 @@ -export default { - dashboard: 'Dashboard', - about: 'About', - workbench: 'Workbench', - analysis: 'Analysis', -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/tenant.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/tenant.ts deleted file mode 100644 index 5e227b5b2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/routes/tenant.ts +++ /dev/null @@ -1,8 +0,0 @@ -export default { - name: 'Name', - connectionString: 'ConnectionString', - tenantManagement: 'TenantManagement', - tenantList: 'TenantList', - adminPassword: 'AdminPassword', - adminEmailAddress: 'AdminEmailAddress', -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/sys.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/sys.ts deleted file mode 100644 index b257473f4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/en/sys.ts +++ /dev/null @@ -1,105 +0,0 @@ -export default { - api: { - operationFailed: 'Operation failed', - errorTip: 'Error Tip', - errorMessage: 'The operation failed, the system is abnormal!', - timeoutMessage: 'Login timed out, please log in again!', - apiTimeoutMessage: 'The interface request timed out, please refresh the page and try again!', - apiRequestFailed: 'The interface request failed, please try again later!', - networkException: 'network anomaly', - networkExceptionMsg: - 'Please check if your network connection is normal! The network is abnormal', - - errMsg401: 'The user does not have permission (token, user name, password error)!', - errMsg403: 'The user is authorized, but access is forbidden!', - errMsg404: 'Network request error, the resource was not found!', - errMsg405: 'Network request error, request method not allowed!', - errMsg408: 'Network request timed out!', - errMsg500: 'Server error, please contact the administrator!', - errMsg501: 'The network is not implemented!', - errMsg502: 'Network Error!', - errMsg503: 'The service is unavailable, the server is temporarily overloaded or maintained!', - errMsg504: 'Network timeout!', - errMsg505: 'The http version does not support the request!', - }, - app: { - logoutTip: 'Reminder', - logoutMessage: 'Confirm to exit the system?', - menuLoading: 'Menu loading...', - }, - errorLog: { - tableTitle: 'Error log list', - tableColumnType: 'Type', - tableColumnDate: 'Time', - tableColumnFile: 'File', - tableColumnMsg: 'Error message', - tableColumnStackMsg: 'Stack info', - - tableActionDesc: 'Details', - - modalTitle: 'Error details', - - fireVueError: 'Fire vue error', - fireResourceError: 'Fire resource error', - fireAjaxError: 'Fire ajax error', - - enableMessage: 'Only effective when useErrorHandle=true in `/src/settings/projectSetting.ts`.', - }, - exception: { - backLogin: 'Back Login', - backHome: 'Back Home', - subTitle403: "Sorry, you don't have access to this page.", - subTitle404: 'Sorry, the page you visited does not exist.', - subTitle500: 'Sorry, the server is reporting an error.', - noDataTitle: 'No data on the current page.', - networkErrorTitle: 'Network Error', - networkErrorSubTitle: - 'Sorry,Your network connection has been disconnected, please check your network!', - }, - lock: { - unlock: 'Click to unlock', - alert: 'Lock screen password error', - backToLogin: 'Back to login', - entry: 'Enter the system', - placeholder: 'Please enter the lock screen password or user password', - }, - login: { - backSignIn: 'Back sign in', - mobileSignInFormTitle: 'Mobile sign in', - qrSignInFormTitle: 'Qr code sign in', - signInFormTitle: 'Sign in', - signUpFormTitle: 'Sign up', - forgetFormTitle: 'Reset password', - tenantFormTitle: 'Tenant sign in', - signInTitle: 'Backstage management system', - signInDesc: 'Enter your personal details and get started!', - policy: 'I agree to the xxx Privacy Policy', - scanSign: `scanning the code to complete the login`, - - loginButton: 'Sign in', - registerButton: 'Sign up', - rememberMe: 'Remember me', - forgetPassword: 'Forget Password?', - otherSignIn: 'Sign in with', - - // notify - loginSuccessTitle: 'Login successful', - loginSuccessDesc: 'Welcome back', - - // placeholder - accountPlaceholder: 'Please input username', - passwordPlaceholder: 'Please input password', - smsPlaceholder: 'Please input sms code', - mobilePlaceholder: 'Please input mobile', - policyPlaceholder: 'Register after checking', - diffPwd: 'The two passwords are inconsistent', - - userName: 'Username', - password: 'Password', - confirmPassword: 'Confirm Password', - email: 'Email', - smsCode: 'SMS code', - mobile: 'Mobile', - tenant: 'Tenant', - }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/common.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/common.ts deleted file mode 100644 index b1f267f59..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/common.ts +++ /dev/null @@ -1,46 +0,0 @@ -export default { - okText: '确认', - closeText: '关闭', - cancelText: '取消', - loadingText: '加载中...', - saveText: '保存', - delText: '删除', - resetText: '重置', - searchText: '搜索', - editText: '编辑', - queryText: '查询', - inputText: '请输入', - chooseText: '请选择', - action: '操作', - redo: '刷新', - back: '返回', - light: '亮色主题', - dark: '黑暗主题', - true: '是', - false: '否', - operationSuccess: '操作成功', - operationFail: '操作失败', - authorityText: '登录过期', - systemErrorText: '系统异常', - enabled: '启用', - disEnabled: '禁用', - locked: '已锁定', - unLocked: '未锁定', - createText: '新增', - tip: '提示', - askDelete: '确认删除吗', - disEnabledSelf: '不能禁用自己', - key: '关键字', - creationTime: '创建时间', - detail: '详情', - status: '状态', - active: '是否激活', - download: '下载', - export: '导出', - isEnabled: '是否启用', - default: '默认', - name: '名称', - value: '值', - parameterValidationFailure: '参数验证失败', - permissionDenied: '权限不足', -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/component.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/component.ts deleted file mode 100644 index d9b54eb59..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/component.ts +++ /dev/null @@ -1,134 +0,0 @@ -export default { - app: { - searchNotData: '暂无搜索结果', - toSearch: '确认', - toNavigate: '切换', - }, - countdown: { - normalText: '获取验证码', - sendText: '{0}秒后重新获取', - }, - cropper: { - selectImage: '选择图片', - uploadSuccess: '上传成功', - modalTitle: '头像上传', - okText: '确认并上传', - btn_reset: '重置', - btn_rotate_left: '逆时针旋转', - btn_rotate_right: '顺时针旋转', - btn_scale_x: '水平翻转', - btn_scale_y: '垂直翻转', - btn_zoom_in: '放大', - btn_zoom_out: '缩小', - preview: '预览', - }, - drawer: { - loadingText: '加载中...', - cancelText: '关闭', - okText: '确认', - }, - excel: { - exportModalTitle: '导出数据', - fileType: '文件类型', - fileName: '文件名', - }, - form: { - putAway: '收起', - unfold: '展开', - - maxTip: '字符数应小于{0}位', - - apiSelectNotFound: '请等待数据加载完成...', - }, - icon: { - placeholder: '点击选择图标', - search: '搜索图标', - copy: '复制图标成功!', - }, - menu: { - search: '菜单搜索', - }, - modal: { - cancelText: '关闭', - okText: '确认', - close: '关闭', - maximize: '最大化', - restore: '还原', - }, - table: { - settingDens: '密度', - settingDensDefault: '默认', - settingDensMiddle: '中等', - settingDensSmall: '紧凑', - settingColumn: '列设置', - settingColumnShow: '列展示', - settingIndexColumnShow: '序号列', - settingSelectColumnShow: '勾选列', - settingFixedLeft: '固定到左侧', - settingFixedRight: '固定到右侧', - settingFullScreen: '全屏', - - index: '序号', - - total: '共 {total} 条数据', - }, - time: { - before: '前', - after: '后', - just: '刚刚', - seconds: '秒', - minutes: '分钟', - hours: '小时', - days: '天', - }, - tree: { - selectAll: '选择全部', - unSelectAll: '取消选择', - expandAll: '展开全部', - unExpandAll: '折叠全部', - checkStrictly: '层级关联', - checkUnStrictly: '层级独立', - }, - upload: { - save: '保存', - upload: '上传', - imgUpload: '图片上传', - uploaded: '已上传', - - operating: '操作', - del: '删除', - download: '下载', - saveWarn: '请等待文件上传后,保存!', - saveError: '没有上传成功的文件,无法保存!', - - preview: '预览', - choose: '选择文件', - - accept: '支持{0}格式', - acceptUpload: '只能上传{0}格式文件', - maxSize: '单个文件不超过{0}MB', - maxSizeMultiple: '只能上传不超过{0}MB的文件!', - maxNumber: '最多只能上传{0}个文件', - - legend: '略缩图', - fileName: '文件名', - fileSize: '文件大小', - fileStatue: '状态', - - startUpload: '开始上传', - uploadSuccess: '上传成功', - uploadError: '上传失败', - uploading: '上传中', - uploadWait: '请等待文件上传结束后操作', - reUploadFailed: '重新上传失败文件', - }, - verify: { - error: '验证失败!', - time: '验证校验成功,耗时{time}秒!', - - redoTip: '点击图片可刷新', - - dragText: '请按住滑块拖动', - successText: '验证通过', - }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/layout.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/layout.ts deleted file mode 100644 index ed1f85372..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/layout.ts +++ /dev/null @@ -1,115 +0,0 @@ -export default { - footer: { onlinePreview: '在线预览', onlineDocument: '在线文档' }, - header: { - // user dropdown - dropdownItemDoc: '文档', - dropdownItemLoginOut: '退出系统', - - // tooltip - tooltipErrorLog: '错误日志', - tooltipLock: '锁定屏幕', - tooltipNotify: '消息通知', - - tooltipEntryFull: '全屏', - tooltipExitFull: '退出全屏', - - // lock - lockScreenPassword: '锁屏密码', - lockScreen: '锁定屏幕', - lockScreenBtn: '锁定', - - home: '首页', - }, - multipleTab: { - reload: '重新加载', - close: '关闭标签页', - closeLeft: '关闭左侧标签页', - closeRight: '关闭右侧标签页', - closeOther: '关闭其它标签页', - closeAll: '关闭全部标签页', - }, - setting: { - // content mode - contentModeFull: '流式', - contentModeFixed: '定宽', - // topMenu align - topMenuAlignLeft: '居左', - topMenuAlignRight: '居中', - topMenuAlignCenter: '居右', - // menu trigger - menuTriggerNone: '不显示', - menuTriggerBottom: '底部', - menuTriggerTop: '顶部', - // menu type - menuTypeSidebar: '左侧菜单模式', - menuTypeMixSidebar: '左侧菜单混合模式', - menuTypeMix: '顶部菜单混合模式', - menuTypeTopMenu: '顶部菜单模式', - - on: '开', - off: '关', - minute: '分钟', - - operatingTitle: '操作成功', - operatingContent: '复制成功,请到 src/settings/projectSetting.ts 中修改配置!', - resetSuccess: '重置成功!', - - copyBtn: '拷贝', - clearBtn: '清空缓存并返回登录页', - - drawerTitle: '项目配置', - - darkMode: '主题', - navMode: '导航栏模式', - interfaceFunction: '界面功能', - interfaceDisplay: '界面显示', - animation: '动画', - splitMenu: '分割菜单', - closeMixSidebarOnChange: '切换页面关闭菜单', - - sysTheme: '系统主题', - headerTheme: '顶栏主题', - sidebarTheme: '菜单主题', - - menuDrag: '侧边菜单拖拽', - menuSearch: '菜单搜索', - menuAccordion: '侧边菜单手风琴模式', - menuCollapse: '折叠菜单', - collapseMenuDisplayName: '折叠菜单显示名称', - topMenuLayout: '顶部菜单布局', - menuCollapseButton: '菜单折叠按钮', - contentMode: '内容区域宽度', - expandedMenuWidth: '菜单展开宽度', - - breadcrumb: '面包屑', - breadcrumbIcon: '面包屑图标', - tabs: '标签页', - tabDetail: '标签详情页', - tabsQuickBtn: '标签页快捷按钮', - tabsRedoBtn: '标签页刷新按钮', - tabsFoldBtn: '标签页折叠按钮', - sidebar: '左侧菜单', - header: '顶栏', - footer: '页脚', - fullContent: '全屏内容', - grayMode: '灰色模式', - colorWeak: '色弱模式', - - progress: '顶部进度条', - switchLoading: '切换loading', - switchAnimation: '切换动画', - animationType: '动画类型', - - autoScreenLock: '自动锁屏', - notAutoScreenLock: '不自动锁屏', - - fixedHeader: '固定header', - fixedSideBar: '固定Sidebar', - - mixSidebarTrigger: '混合菜单触发方式', - triggerHover: '悬停', - triggerClick: '点击', - - mixSidebarFixed: '固定展开菜单', - }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/admin.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/admin.ts deleted file mode 100644 index c7b16b948..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/admin.ts +++ /dev/null @@ -1,99 +0,0 @@ -export default { - systemManagement: '系统管理', - userManagement: '用户管理', - roleManagement: '角色管理', - languageManagement: '语言管理', - languageTextManagement: '语言文本管理', - language_cultureName: '语言名称', - language_uiCultureName: 'UI语言名称', - language_displayName: '显示名称', - language_flagIcon: '图标', - languageTexts_resourceName: '资源名称', - userManagement_userName: '用户名', - userManagement_name: '真实名称', - userManagement_email: '邮箱', - userManagement_phone: '手机号码', - userManagement_createTime: '创建时间', - userManagement_password: '密码', - userManagement_confirm_password: '密码(再次确认)', - userManagement_create_user: '新增用户', - userManagement_edit_user: '编辑用户', - userManagement_userInfo: '用户信息', - userManagement_role: '角色', - userManagement_roleName: '角色名称', - roleManagement_name: '名称', - roleManagement_default: '默认', - roleManagement_edit: '编辑角色', - roleManagement_create_role: '创建角色', - roleManagement_permission: '授权', - userManagement_locked: '锁定', - audit_executeTime: '执行时间', - audit_userName: '用户名', - audit_httpMethod: 'Http方法', - audit_httpStatusCode: 'Http状态码', - audit_httpRequest: 'Http请求', - audit_ipAddress: 'IP地址', - audit_time: '时间', - audit_duration: '持续时间(ms)', - audit_url: 'Url地址', - audit_entityInfo: '实体信息', - audit_message: '报文', - audit_applicationName: '应用名称', - audit_hasException: '是否异常', - audit_hasException_all: '全部', - audit_hasException_yes: '是', - audit_hasException_no: '否', - audit_serviceName: '服务名', - audit_methodName: '方法名', - audit_parameters: '参数', - grantedMessage: '授权成功,请重新登录.', - close: '关闭', - - auditLog: '审计日志', - esLogs: 'ES日志', - backgroundTask: '后台任务', - integratedEvent: '集成事件', - tenant: '租户', - identityServer: '身份认证中心', - client: '客户端', - apiResource: 'Api资源', - apiScope: 'ApiScope', - identityResource: 'Identity资源', - - logLevel: '级别', - logContent: '内容', - detail: '详情', - settingManagement: '设置管理', - dictionaryManagement: '数据字典', - dictionaryTypeName: '字典类型', - dictionaryCode: '编码', - dictionaryDisplayText: '名称', - dictionaryDescription: '描述', - dictionaryOrder: '排序', - chooseDictionary: '请选择字典类型', - nonZeroMessage: '请输入非零的正整数', - fileName: '文件名称', - fileNameManagement: '文件管理', - currentPassword: '当前密码', - newPassword: '新密码', - confirmPassword: '确认密码', - editPasswordMessage: '输入的2次密码不一致', - executionTime: '执行时间', - executionDuration: '响应时间(毫秒)', - executionMessage: '异常内容', - organizationUnitName: '名称', - parentOrganizationUnitName: '上级组织机构', - organizationUnitManagement: '组织机构管理', - createRootOrganizationUnit: '新增根机构', - organizationUnit: '组织机构', - member: '成员', - role: '角色', - identitySecurityLog: '登录日志', - identitySecurityLog_ApplicationName: '应用程序名称', - identitySecurityLog_Identity: '登录方式', - identitySecurityLog_Action: '登录地址', - identitySecurityLog_UserName: '用户名', - identitySecurityLog_CorrelationId: 'CorrelationId', - identitySecurityLog_ClientIpAddress: '客户端IP', - identitySecurityLog_CreationTime: '登录时间', -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/basic.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/basic.ts deleted file mode 100644 index 3d03e8ef1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/basic.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default { - login: '登录', - errorLogList: '错误日志列表', -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/dashboard.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/dashboard.ts deleted file mode 100644 index 04b1b1978..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/dashboard.ts +++ /dev/null @@ -1,6 +0,0 @@ -export default { - dashboard: 'Dashboard', - about: '关于', - workbench: '工作台', - analysis: '分析页', -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/tenant.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/tenant.ts deleted file mode 100644 index 9549d9201..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/routes/tenant.ts +++ /dev/null @@ -1,8 +0,0 @@ -export default { - name: '名称', - connectionString: '连接字符串', - tenantManagement: '租户管理', - tenantList: '租户列表', - adminPassword: '管理员密码', - adminEmailAddress: '管理员邮箱', -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/sys.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/sys.ts deleted file mode 100644 index e4a302d1c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh-CN/sys.ts +++ /dev/null @@ -1,99 +0,0 @@ -export default { - api: { - operationFailed: '操作失败', - errorTip: '错误提示', - errorMessage: '操作失败,系统异常!', - timeoutMessage: '登录超时,请重新登录!', - apiTimeoutMessage: '接口请求超时,请刷新页面重试!', - apiRequestFailed: '请求出错,请稍候重试', - networkException: '网络异常', - networkExceptionMsg: '网络异常,请检查您的网络连接是否正常!', - - errMsg401: '用户没有权限(令牌、用户名、密码错误)!', - errMsg403: '用户得到授权,但是访问是被禁止的。!', - errMsg404: '网络请求错误,未找到该资源!', - errMsg405: '网络请求错误,请求方法未允许!', - errMsg408: '网络请求超时!', - errMsg500: '服务器错误,请联系管理员!', - errMsg501: '网络未实现!', - errMsg502: '网络错误!', - errMsg503: '服务不可用,服务器暂时过载或维护!', - errMsg504: '网络超时!', - errMsg505: 'http版本不支持该请求!', - }, - app: { logoutTip: '温馨提醒', logoutMessage: '是否确认退出系统?', menuLoading: '菜单加载中...' }, - errorLog: { - tableTitle: '错误日志列表', - tableColumnType: '类型', - tableColumnDate: '时间', - tableColumnFile: '文件', - tableColumnMsg: '错误信息', - tableColumnStackMsg: 'stack信息', - - tableActionDesc: '详情', - - modalTitle: '错误详情', - - fireVueError: '点击触发vue错误', - fireResourceError: '点击触发资源加载错误', - fireAjaxError: '点击触发ajax错误', - - enableMessage: '只在`/src/settings/projectSetting.ts` 内的useErrorHandle=true时生效.', - }, - exception: { - backLogin: '返回登录', - backHome: '返回首页', - subTitle403: '抱歉,您无权访问此页面。', - subTitle404: '抱歉,您访问的页面不存在。', - subTitle500: '抱歉,服务器报告错误。', - noDataTitle: '当前页无数据', - networkErrorTitle: '网络错误', - networkErrorSubTitle: '抱歉,您的网络连接已断开,请检查您的网络!', - }, - lock: { - unlock: '点击解锁', - alert: '锁屏密码错误', - backToLogin: '返回登录', - entry: '进入系统', - placeholder: '请输入锁屏密码或者用户密码', - }, - login: { - backSignIn: '返回', - signInFormTitle: '登录', - mobileSignInFormTitle: '手机登录', - qrSignInFormTitle: '二维码登录', - signUpFormTitle: '注册', - forgetFormTitle: '重置密码', - tenantFormTitle: '租户登录', - signInTitle: '开箱即用的中后台管理系统', - signInDesc: '输入您的个人详细信息开始使用!', - policy: '我同意xxx隐私政策', - scanSign: `扫码后点击"确认",即可完成登录`, - - loginButton: '登录', - registerButton: '注册', - rememberMe: '记住我', - forgetPassword: '忘记密码?', - otherSignIn: '其他登录方式', - - // notify - loginSuccessTitle: '登录成功', - loginSuccessDesc: '欢迎回来', - - // placeholder - accountPlaceholder: '请输入账号', - passwordPlaceholder: '请输入密码', - smsPlaceholder: '请输入验证码', - mobilePlaceholder: '请输入手机号码', - policyPlaceholder: '勾选后才能注册', - diffPwd: '两次输入密码不一致', - - userName: '账号', - password: '密码', - confirmPassword: '确认密码', - email: '邮箱', - smsCode: '短信验证码', - mobile: '手机号码', - tenant: '租户', - }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh_CN.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh_CN.ts deleted file mode 100644 index d715c582c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/lang/zh_CN.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { genMessage } from '../helper'; -import antdLocale from 'ant-design-vue/es/locale/zh_CN'; - -const modules = import.meta.globEager('./zh-CN/**/*.ts'); -export default { - message: { - ...genMessage(modules, 'zh-CN'), - antdLocale, - }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/setupI18n.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/setupI18n.ts deleted file mode 100644 index 405fb0c28..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/setupI18n.ts +++ /dev/null @@ -1,44 +0,0 @@ -import type { App } from 'vue'; -import type { I18n, I18nOptions } from 'vue-i18n'; - -import { createI18n } from 'vue-i18n'; -import { setHtmlPageLang, setLoadLocalePool } from './helper'; -import { localeSetting } from '/@/settings/localeSetting'; -import { useLocaleStoreWithOut } from '/@/store/modules/locale'; - -const { fallback, availableLocales } = localeSetting; - -export let i18n: ReturnType; - -async function createI18nOptions(): Promise { - const localeStore = useLocaleStoreWithOut(); - const locale = localeStore.getLocale; - const defaultLocal = await import(`./lang/${locale}.ts`); - const message = defaultLocal.default?.message ?? {}; - - setHtmlPageLang(locale); - setLoadLocalePool((loadLocalePool) => { - loadLocalePool.push(locale); - }); - - return { - legacy: false, - locale, - fallbackLocale: fallback, - messages: { - [locale]: message, - }, - availableLocales: availableLocales, - sync: true, //If you don’t want to inherit locale from global scope, you need to set sync of i18n component option to false. - silentTranslationWarn: true, // true - warning off - missingWarn: false, - silentFallbackWarn: true, - }; -} - -// setup i18n instance with glob -export async function setupI18n(app: App) { - const options = await createI18nOptions(); - i18n = createI18n(options) as I18n; - app.use(i18n); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/useLocale.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/useLocale.ts deleted file mode 100644 index 64bd4a1ed..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/locales/useLocale.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Multi-language related operations - */ -import type { LocaleType } from '/#/config'; - -import { i18n } from './setupI18n'; -import { useLocaleStoreWithOut } from '/@/store/modules/locale'; -import { unref, computed } from 'vue'; -import { loadLocalePool, setHtmlPageLang } from './helper'; - -interface LangModule { - message: Recordable; - dateLocale: Recordable; - dateLocaleName: string; -} - -function setI18nLanguage(locale: LocaleType) { - const localeStore = useLocaleStoreWithOut(); - - if (i18n.mode === 'legacy') { - i18n.global.locale = locale; - } else { - (i18n.global.locale as any).value = locale; - } - localeStore.setLocaleInfo({ locale }); - setHtmlPageLang(locale); -} - -export function useLocale() { - const localeStore = useLocaleStoreWithOut(); - const getLocale = computed(() => localeStore.getLocale); - const getShowLocalePicker = computed(() => localeStore.getShowPicker); - - const getAntdLocale = computed((): any => { - return i18n.global.getLocaleMessage(unref(getLocale))?.antdLocale ?? {}; - }); - - // Switching the language will change the locale of useI18n - // And submit to configuration modification - async function changeLocale(locale: LocaleType) { - const globalI18n = i18n.global; - const currentLocale = unref(globalI18n.locale); - if (currentLocale === locale) { - return locale; - } - - if (loadLocalePool.includes(locale)) { - setI18nLanguage(locale); - return locale; - } - const langModule = ((await import(`./lang/${locale}.ts`)) as any).default as LangModule; - if (!langModule) return; - - const { message } = langModule; - - globalI18n.setLocaleMessage(locale, message); - loadLocalePool.push(locale); - - setI18nLanguage(locale); - return locale; - } - - return { - getLocale, - getShowLocalePicker, - changeLocale, - getAntdLocale, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/error-handle/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/error-handle/index.ts deleted file mode 100644 index e04c00980..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/error-handle/index.ts +++ /dev/null @@ -1,184 +0,0 @@ -/** - * Used to configure the global error handling function, which can monitor vue errors, script errors, static resource errors and Promise errors - */ - -import type { ErrorLogInfo } from '/#/store'; - -import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog'; - -import { ErrorTypeEnum } from '/@/enums/exceptionEnum'; -import { App } from 'vue'; -import projectSetting from '/@/settings/projectSetting'; - -/** - * Handling error stack information - * @param error - */ -function processStackMsg(error: Error) { - if (!error.stack) { - return ''; - } - let stack = error.stack - .replace(/\n/gi, '') // Remove line breaks to save the size of the transmitted content - .replace(/\bat\b/gi, '@') // At in chrome, @ in ff - .split('@') // Split information with @ - .slice(0, 9) // The maximum stack length (Error.stackTraceLimit = 10), so only take the first 10 - .map((v) => v.replace(/^\s*|\s*$/g, '')) // Remove extra spaces - .join('~') // Manually add separators for later display - .replace(/\?[^:]+/gi, ''); // Remove redundant parameters of js file links (?x=1 and the like) - const msg = error.toString(); - if (stack.indexOf(msg) < 0) { - stack = msg + '@' + stack; - } - return stack; -} - -/** - * get comp name - * @param vm - */ -function formatComponentName(vm: any) { - if (vm.$root === vm) { - return { - name: 'root', - path: 'root', - }; - } - - const options = vm.$options as any; - if (!options) { - return { - name: 'anonymous', - path: 'anonymous', - }; - } - const name = options.name || options._componentTag; - return { - name: name, - path: options.__file, - }; -} - -/** - * Configure Vue error handling function - */ - -function vueErrorHandler(err: Error, vm: any, info: string) { - const errorLogStore = useErrorLogStoreWithOut(); - const { name, path } = formatComponentName(vm); - errorLogStore.addErrorLogInfo({ - type: ErrorTypeEnum.VUE, - name, - file: path, - message: err.message, - stack: processStackMsg(err), - detail: info, - url: window.location.href, - }); -} - -/** - * Configure script error handling function - */ -export function scriptErrorHandler( - event: Event | string, - source?: string, - lineno?: number, - colno?: number, - error?: Error, -) { - if (event === 'Script error.' && !source) { - return false; - } - const errorInfo: Partial = {}; - colno = colno || (window.event && (window.event as any).errorCharacter) || 0; - errorInfo.message = event as string; - if (error?.stack) { - errorInfo.stack = error.stack; - } else { - errorInfo.stack = ''; - } - const name = source ? source.substr(source.lastIndexOf('/') + 1) : 'script'; - const errorLogStore = useErrorLogStoreWithOut(); - errorLogStore.addErrorLogInfo({ - type: ErrorTypeEnum.SCRIPT, - name: name, - file: source as string, - detail: 'lineno' + lineno, - url: window.location.href, - ...(errorInfo as Pick), - }); - return true; -} - -/** - * Configure Promise error handling function - */ -function registerPromiseErrorHandler() { - window.addEventListener( - 'unhandledrejection', - function (event) { - const errorLogStore = useErrorLogStoreWithOut(); - errorLogStore.addErrorLogInfo({ - type: ErrorTypeEnum.PROMISE, - name: 'Promise Error!', - file: 'none', - detail: 'promise error!', - url: window.location.href, - stack: 'promise error!', - message: event.reason, - }); - }, - true, - ); -} - -/** - * Configure monitoring resource loading error handling function - */ -function registerResourceErrorHandler() { - // Monitoring resource loading error(img,script,css,and jsonp) - window.addEventListener( - 'error', - function (e: Event) { - const target = e.target ? e.target : (e.srcElement as any); - const errorLogStore = useErrorLogStoreWithOut(); - errorLogStore.addErrorLogInfo({ - type: ErrorTypeEnum.RESOURCE, - name: 'Resource Error!', - file: (e.target || ({} as any)).currentSrc, - detail: JSON.stringify({ - tagName: target.localName, - html: target.outerHTML, - type: e.type, - }), - url: window.location.href, - stack: 'resource is not found', - message: (e.target || ({} as any)).localName + ' is load error', - }); - }, - true, - ); -} - -/** - * Configure global error handling - * @param app - */ -export function setupErrorHandle(app: App) { - const { useErrorHandle } = projectSetting; - if (!useErrorHandle) { - return; - } - // Vue exception monitoring; - app.config.errorHandler = vueErrorHandler; - - // script error - window.onerror = scriptErrorHandler; - - // promise exception - registerPromiseErrorHandler(); - - // Static resource exception - registerResourceErrorHandler(); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/initAppConfig.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/initAppConfig.ts deleted file mode 100644 index a18645066..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/initAppConfig.ts +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Application configuration - */ -import type { ProjectConfig } from '/#/config'; - -import { PROJ_CFG_KEY } from '/@/enums/cacheEnum'; -import projectSetting from '/@/settings/projectSetting'; - -import { updateHeaderBgColor, updateSidebarBgColor } from '/@/logics/theme/updateBackground'; -import { updateColorWeak } from '/@/logics/theme/updateColorWeak'; -import { updateGrayMode } from '/@/logics/theme/updateGrayMode'; -import { updateDarkTheme } from '/@/logics/theme/dark'; -import { changeTheme } from '/@/logics/theme'; - -import { useAppStore } from '/@/store/modules/app'; -import { useLocaleStore } from '/@/store/modules/locale'; - -import { getCommonStoragePrefix, getStorageShortName } from '/@/utils/env'; - -import { primaryColor } from '../../build/config/themeConfig'; -import { Persistent } from '/@/utils/cache/persistent'; -import { deepMerge } from '/@/utils'; -import { ThemeEnum } from '/@/enums/appEnum'; - -// Initial project configuration -export function initAppConfigStore() { - const localeStore = useLocaleStore(); - const appStore = useAppStore(); - let projCfg: ProjectConfig = Persistent.getLocal(PROJ_CFG_KEY) as ProjectConfig; - projCfg = deepMerge(projectSetting, projCfg || {}); - const darkMode = appStore.getDarkMode; - const { - colorWeak, - grayMode, - themeColor, - - headerSetting: { bgColor: headerBgColor } = {}, - menuSetting: { bgColor } = {}, - } = projCfg; - try { - if (themeColor && themeColor !== primaryColor) { - changeTheme(themeColor); - } - - grayMode && updateGrayMode(grayMode); - colorWeak && updateColorWeak(colorWeak); - } catch (error) { - console.log(error); - } - appStore.setProjectConfig(projCfg); - - // init dark mode - updateDarkTheme(darkMode); - if (darkMode === ThemeEnum.DARK) { - updateHeaderBgColor(); - updateSidebarBgColor(); - } else { - headerBgColor && updateHeaderBgColor(headerBgColor); - bgColor && updateSidebarBgColor(bgColor); - } - // init store - localeStore.initLocale(); - - setTimeout(() => { - clearObsoleteStorage(); - }, 16); -} - -/** - * As the version continues to iterate, there will be more and more cache keys stored in localStorage. - * This method is used to delete useless keys - */ -export function clearObsoleteStorage() { - const commonPrefix = getCommonStoragePrefix(); - const shortPrefix = getStorageShortName(); - - [localStorage, sessionStorage].forEach((item: Storage) => { - Object.keys(item).forEach((key) => { - if (key && key.startsWith(commonPrefix) && !key.startsWith(shortPrefix)) { - item.removeItem(key); - } - }); - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/mitt/routeChange.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/mitt/routeChange.ts deleted file mode 100644 index 864828e29..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/mitt/routeChange.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Used to monitor routing changes to change the status of menus and tabs. There is no need to monitor the route, because the route status change is affected by the page rendering time, which will be slow - */ - -import mitt from '/@/utils/mitt'; -import type { RouteLocationNormalized } from 'vue-router'; -import { getRawRoute } from '/@/utils'; - -const emitter = mitt(); - -const key = Symbol(); - -let lastChangeTab: RouteLocationNormalized; - -export function setRouteChange(lastChangeRoute: RouteLocationNormalized) { - const r = getRawRoute(lastChangeRoute); - emitter.emit(key, r); - lastChangeTab = r; -} - -export function listenerRouteChange( - callback: (route: RouteLocationNormalized) => void, - immediate = true, -) { - emitter.on(key, callback); - immediate && lastChangeTab && callback(lastChangeTab); -} - -export function removeTabChangeListener() { - emitter.clear(); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/dark.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/dark.ts deleted file mode 100644 index 7069826b8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/dark.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { darkCssIsReady, loadDarkThemeCss } from 'vite-plugin-theme/es/client'; -import { addClass, hasClass, removeClass } from '/@/utils/domUtils'; - -export async function updateDarkTheme(mode: string | null = 'light') { - const htmlRoot = document.getElementById('htmlRoot'); - if (!htmlRoot) { - return; - } - const hasDarkClass = hasClass(htmlRoot, 'dark'); - if (mode === 'dark') { - if (import.meta.env.PROD && !darkCssIsReady) { - await loadDarkThemeCss(); - } - htmlRoot.setAttribute('data-theme', 'dark'); - if (!hasDarkClass) { - addClass(htmlRoot, 'dark'); - } - } else { - htmlRoot.setAttribute('data-theme', 'light'); - if (hasDarkClass) { - removeClass(htmlRoot, 'dark'); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/index.ts deleted file mode 100644 index 5635a604b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { getThemeColors, generateColors } from '../../../build/config/themeConfig'; - -import { replaceStyleVariables } from 'vite-plugin-theme/es/client'; -import { mixLighten, mixDarken, tinycolor } from 'vite-plugin-theme/es/colorUtils'; - -export async function changeTheme(color: string) { - const colors = generateColors({ - mixDarken, - mixLighten, - tinycolor, - color, - }); - - return await replaceStyleVariables({ - colorVariables: [...getThemeColors(color), ...colors], - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/updateBackground.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/updateBackground.ts deleted file mode 100644 index 3f15c9052..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/updateBackground.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { colorIsDark, lighten, darken } from '/@/utils/color'; -import { useAppStore } from '/@/store/modules/app'; -import { ThemeEnum } from '/@/enums/appEnum'; -import { setCssVar } from './util'; - -const HEADER_BG_COLOR_VAR = '--header-bg-color'; -const HEADER_BG_HOVER_COLOR_VAR = '--header-bg-hover-color'; -const HEADER_MENU_ACTIVE_BG_COLOR_VAR = '--header-active-menu-bg-color'; - -const SIDER_DARK_BG_COLOR = '--sider-dark-bg-color'; -const SIDER_DARK_DARKEN_BG_COLOR = '--sider-dark-darken-bg-color'; -const SIDER_LIGHTEN_BG_COLOR = '--sider-dark-lighten-bg-color'; - -/** - * Change the background color of the top header - * @param color - */ -export function updateHeaderBgColor(color?: string) { - const appStore = useAppStore(); - const darkMode = appStore.getDarkMode === ThemeEnum.DARK; - if (!color) { - if (darkMode) { - color = '#151515'; - } else { - color = appStore.getHeaderSetting.bgColor; - } - } - // bg color - setCssVar(HEADER_BG_COLOR_VAR, color); - - // hover color - const hoverColor = lighten(color!, 6); - setCssVar(HEADER_BG_HOVER_COLOR_VAR, hoverColor); - setCssVar(HEADER_MENU_ACTIVE_BG_COLOR_VAR, hoverColor); - - // Determine the depth of the color value and automatically switch the theme - const isDark = colorIsDark(color!); - - appStore.setProjectConfig({ - headerSetting: { - theme: isDark || darkMode ? ThemeEnum.DARK : ThemeEnum.LIGHT, - }, - }); -} - -/** - * Change the background color of the left menu - * @param color bg color - */ -export function updateSidebarBgColor(color?: string) { - const appStore = useAppStore(); - - // if (!isHexColor(color)) return; - const darkMode = appStore.getDarkMode === ThemeEnum.DARK; - if (!color) { - if (darkMode) { - color = '#212121'; - } else { - color = appStore.getMenuSetting.bgColor; - } - } - setCssVar(SIDER_DARK_BG_COLOR, color); - setCssVar(SIDER_DARK_DARKEN_BG_COLOR, darken(color!, 6)); - setCssVar(SIDER_LIGHTEN_BG_COLOR, lighten(color!, 5)); - - // only #ffffff is light - // Only when the background color is #fff, the theme of the menu will be changed to light - const isLight = ['#fff', '#ffffff'].includes(color!.toLowerCase()); - - appStore.setProjectConfig({ - menuSetting: { - theme: isLight && !darkMode ? ThemeEnum.LIGHT : ThemeEnum.DARK, - }, - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/updateColorWeak.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/updateColorWeak.ts deleted file mode 100644 index 8a0e64a27..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/updateColorWeak.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { toggleClass } from './util'; - -/** - * Change the status of the project's color weakness mode - * @param colorWeak - */ -export function updateColorWeak(colorWeak: boolean) { - toggleClass(colorWeak, 'color-weak', document.documentElement); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/updateGrayMode.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/updateGrayMode.ts deleted file mode 100644 index 0fd16fe69..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/updateGrayMode.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { toggleClass } from './util'; - -/** - * Change project gray mode status - * @param gray - */ -export function updateGrayMode(gray: boolean) { - toggleClass(gray, 'gray-mode', document.documentElement); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/util.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/util.ts deleted file mode 100644 index 30aef3701..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/logics/theme/util.ts +++ /dev/null @@ -1,11 +0,0 @@ -const docEle = document.documentElement; -export function toggleClass(flag: boolean, clsName: string, target?: HTMLElement) { - const targetEl = target || document.body; - let { className } = targetEl; - className = className.replace(clsName, ''); - targetEl.className = flag ? `${className} ${clsName} ` : className; -} - -export function setCssVar(prop: string, val: any, dom = docEle) { - dom.style.setProperty(prop, val); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/main.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/main.ts deleted file mode 100644 index 8d11d5861..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/main.ts +++ /dev/null @@ -1,61 +0,0 @@ -import 'virtual:windi-base.css'; -import 'virtual:windi-components.css'; -import '/@/design/index.less'; -import 'virtual:windi-utilities.css'; -// Register icon sprite -import 'virtual:svg-icons-register'; -import App from './App.vue'; -import { createApp } from 'vue'; -import { initAppConfigStore } from '/@/logics/initAppConfig'; -import { setupErrorHandle } from '/@/logics/error-handle'; -import { router, setupRouter } from '/@/router'; -import { setupRouterGuard } from '/@/router/guard'; -import { setupStore } from '/@/store'; -import { setupGlobDirectives } from '/@/directives'; -import { setupI18n } from '/@/locales/setupI18n'; -import { registerGlobComp } from '/@/components/registerGlobComp'; -import Antd from 'ant-design-vue'; -async function bootstrap() { - const app = createApp(App); - app.use(Antd); - // Configure store - // 配置 store - setupStore(app); - - // Initialize internal system configuration - // 初始化内部系统配置 - initAppConfigStore(); - - // Register global components - // 注册全局组件 - registerGlobComp(app); - - // Multilingual configuration - // 多语言配置 - // Asynchronous case: language files may be obtained from the server side - // 异步案例:语言文件可能从服务器端获取 - await setupI18n(app); - - // Configure routing - // 配置路由 - setupRouter(app); - - // router-guard - // 路由守卫 - setupRouterGuard(router); - - // Register global directive - // 注册全局指令 - setupGlobDirectives(app); - - // Configure global error handling - // 配置全局错误处理 - setupErrorHandle(app); - - // https://next.router.vuejs.org/api/#isready - // await router.isReady(); - - app.mount('#app'); -} - -bootstrap(); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/constant.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/constant.ts deleted file mode 100644 index d39a67e56..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/constant.ts +++ /dev/null @@ -1,24 +0,0 @@ -export const REDIRECT_NAME = 'Redirect'; - -export const PARENT_LAYOUT_NAME = 'ParentLayout'; - -export const PAGE_NOT_FOUND_NAME = 'PageNotFound'; - -export const EXCEPTION_COMPONENT = () => import('/@/views/sys/exception/Exception.vue'); - -/** - * @description: default layout - */ -export const LAYOUT = () => import('/@/layouts/default/index.vue'); - -/** - * @description: parent-layout - */ -export const getParentLayout = (_name?: string) => { - return () => - new Promise((resolve) => { - resolve({ - name: PARENT_LAYOUT_NAME, - }); - }); -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/index.ts deleted file mode 100644 index c5677499a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/index.ts +++ /dev/null @@ -1,147 +0,0 @@ -import type { Router, RouteLocationNormalized } from 'vue-router'; -import { useAppStoreWithOut } from '/@/store/modules/app'; -import { useUserStoreWithOut } from '/@/store/modules/user'; -import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting'; -import { AxiosCanceler } from '/@/utils/http/axios/axiosCancel'; -import { Modal, notification } from 'ant-design-vue'; -import { warn } from '/@/utils/log'; -import { unref } from 'vue'; -import { setRouteChange } from '/@/logics/mitt/routeChange'; -import { createPermissionGuard } from './permissionGuard'; -import { createStateGuard } from './stateGuard'; -import nProgress from 'nprogress'; -import projectSetting from '/@/settings/projectSetting'; -import { createParamMenuGuard } from './paramMenuGuard'; - -// Don't change the order of creation -export function setupRouterGuard(router: Router) { - createPageGuard(router); - createPageLoadingGuard(router); - createHttpGuard(router); - createScrollGuard(router); - createMessageGuard(router); - createProgressGuard(router); - createPermissionGuard(router); - createParamMenuGuard(router); // must after createPermissionGuard (menu has been built.) - createStateGuard(router); -} - -/** - * Hooks for handling page state - */ -function createPageGuard(router: Router) { - const loadedPageMap = new Map(); - - router.beforeEach(async (to) => { - // The page has already been loaded, it will be faster to open it again, you don’t need to do loading and other processing - to.meta.loaded = !!loadedPageMap.get(to.path); - // Notify routing changes - setRouteChange(to); - - return true; - }); - - router.afterEach((to) => { - loadedPageMap.set(to.path, true); - }); -} - -// Used to handle page loading status -function createPageLoadingGuard(router: Router) { - const userStore = useUserStoreWithOut(); - const appStore = useAppStoreWithOut(); - const { getOpenPageLoading } = useTransitionSetting(); - router.beforeEach(async (to) => { - if (!userStore.getToken) { - return true; - } - if (to.meta.loaded) { - return true; - } - - if (unref(getOpenPageLoading)) { - appStore.setPageLoadingAction(true); - return true; - } - - return true; - }); - router.afterEach(async () => { - if (unref(getOpenPageLoading)) { - // TODO Looking for a better way - // The timer simulates the loading time to prevent flashing too fast, - setTimeout(() => { - appStore.setPageLoading(false); - }, 220); - } - return true; - }); -} - -/** - * The interface used to close the current page to complete the request when the route is switched - * @param router - */ -function createHttpGuard(router: Router) { - const { removeAllHttpPending } = projectSetting; - let axiosCanceler: Nullable; - if (removeAllHttpPending) { - axiosCanceler = new AxiosCanceler(); - } - router.beforeEach(async () => { - // Switching the route will delete the previous request - axiosCanceler?.removeAllPending(); - return true; - }); -} - -// Routing switch back to the top -function createScrollGuard(router: Router) { - const isHash = (href: string) => { - return /^#/.test(href); - }; - - const body = document.body; - - router.afterEach(async (to) => { - // scroll top - isHash((to as RouteLocationNormalized & { href: string })?.href) && body.scrollTo(0, 0); - return true; - }); -} - -/** - * Used to close the message instance when the route is switched - * @param router - */ -export function createMessageGuard(router: Router) { - const { closeMessageOnSwitch } = projectSetting; - - router.beforeEach(async () => { - try { - if (closeMessageOnSwitch) { - Modal.destroyAll(); - notification.destroy(); - } - } catch (error) { - warn('message guard error:' + error); - } - return true; - }); -} - -export function createProgressGuard(router: Router) { - const { getOpenNProgress } = useTransitionSetting(); - router.beforeEach(async (to) => { - if (to.meta.loaded) { - return true; - } - unref(getOpenNProgress) && nProgress.start(); - return true; - }); - - router.afterEach(async () => { - unref(getOpenNProgress) && nProgress.done(); - return true; - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/paramMenuGuard.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/paramMenuGuard.ts deleted file mode 100644 index 1c75157ba..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/paramMenuGuard.ts +++ /dev/null @@ -1,47 +0,0 @@ -import type { Router } from 'vue-router'; -import { configureDynamicParamsMenu } from '../helper/menuHelper'; -import { Menu } from '../types'; -import { PermissionModeEnum } from '/@/enums/appEnum'; -import { useAppStoreWithOut } from '/@/store/modules/app'; - -import { usePermissionStoreWithOut } from '/@/store/modules/permission'; - -export function createParamMenuGuard(router: Router) { - const permissionStore = usePermissionStoreWithOut(); - router.beforeEach(async (to, _, next) => { - // filter no name route - if (!to.name) { - next(); - return; - } - - // menu has been built. - if (!permissionStore.getIsDynamicAddedRoute) { - next(); - return; - } - - let menus: Menu[] = []; - if (isBackMode()) { - menus = permissionStore.getBackMenuList; - } else if (isRouteMappingMode()) { - menus = permissionStore.getFrontMenuList; - } - menus.forEach((item) => configureDynamicParamsMenu(item, to.params)); - - next(); - }); -} - -const getPermissionMode = () => { - const appStore = useAppStoreWithOut(); - return appStore.getProjectConfig.permissionMode; -}; - -const isBackMode = () => { - return getPermissionMode() === PermissionModeEnum.BACK; -}; - -const isRouteMappingMode = () => { - return getPermissionMode() === PermissionModeEnum.ROUTE_MAPPING; -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/permissionGuard.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/permissionGuard.ts deleted file mode 100644 index ce9632965..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/permissionGuard.ts +++ /dev/null @@ -1,99 +0,0 @@ -import type { Router, RouteRecordRaw } from 'vue-router'; - -import { usePermissionStoreWithOut } from '/@/store/modules/permission'; - -import { PageEnum } from '/@/enums/pageEnum'; -import { useUserStoreWithOut } from '/@/store/modules/user'; - -import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; - -import { RootRoute } from '/@/router/routes'; - -const LOGIN_PATH = PageEnum.BASE_LOGIN; - -const ROOT_PATH = RootRoute.path; - -const whitePathList: PageEnum[] = [LOGIN_PATH]; - -export function createPermissionGuard(router: Router) { - const userStore = useUserStoreWithOut(); - const permissionStore = usePermissionStoreWithOut(); - router.beforeEach(async (to, from, next) => { - if ( - from.path === ROOT_PATH && - to.path === PageEnum.BASE_HOME && - userStore.getUserInfo.homePath && - userStore.getUserInfo.homePath !== PageEnum.BASE_HOME - ) { - next(userStore.getUserInfo.homePath); - return; - } - - // Whitelist can be directly entered - if (whitePathList.includes(to.path as PageEnum)) { - next(); - return; - } - - const token = userStore.getToken; - - // token does not exist - - if (to.meta.ignoreAuth) { - next(); - return; - } - - if (token) { - if (userStore.checkUserLoginExpire) { - router.replace(PageEnum.BASE_LOGIN); - return; - } - } else { - next({path:PageEnum.BASE_LOGIN}) - //router.replace(PageEnum.BASE_LOGIN); - return; - } - - // Jump to the 404 page after processing the login - if ( - from.path === LOGIN_PATH && - to.name === PAGE_NOT_FOUND_ROUTE.name && - to.fullPath !== (userStore.getUserInfo.homePath || PageEnum.BASE_HOME) - ) { - next(userStore.getUserInfo.homePath || PageEnum.BASE_HOME); - return; - } - - // get userinfo while last fetch time is empty - if (userStore.getLastUpdateTime === 0) { - //await userStore.getUserInfoAction(); - await userStore.getUserInfo; - } - - if (permissionStore.getIsDynamicAddedRoute) { - next(); - return; - } - - const routes = await permissionStore.buildRoutesAction(); - - routes.forEach((route) => { - router.addRoute(route as unknown as RouteRecordRaw); - }); - - router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw); - - permissionStore.setDynamicAddedRoute(true); - - if (to.name === PAGE_NOT_FOUND_ROUTE.name) { - // 动态添加路由后,此处应当重定向到fullPath,否则会加载404页面内容 - next({ path: to.fullPath, replace: true, query: to.query }); - } else { - const redirectPath = (from.query.redirect || to.path) as string; - const redirect = decodeURIComponent(redirectPath); - const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect }; - next(nextData); - } - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/stateGuard.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/stateGuard.ts deleted file mode 100644 index c34513cc4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/guard/stateGuard.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { Router } from 'vue-router'; -import { useAppStore } from '/@/store/modules/app'; -import { useMultipleTabStore } from '/@/store/modules/multipleTab'; -import { useUserStore } from '/@/store/modules/user'; -import { usePermissionStore } from '/@/store/modules/permission'; -import { PageEnum } from '/@/enums/pageEnum'; -import { removeTabChangeListener } from '/@/logics/mitt/routeChange'; - -export function createStateGuard(router: Router) { - router.afterEach((to) => { - // Just enter the login page and clear the authentication information - if (to.path === PageEnum.BASE_LOGIN) { - const tabStore = useMultipleTabStore(); - const userStore = useUserStore(); - const appStore = useAppStore(); - const permissionStore = usePermissionStore(); - appStore.resetAllState(); - permissionStore.resetState(); - tabStore.resetState(); - userStore.resetState(); - removeTabChangeListener(); - } - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/helper/menuHelper.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/helper/menuHelper.ts deleted file mode 100644 index f0767b212..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/helper/menuHelper.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { AppRouteModule } from '/@/router/types'; -import type { MenuModule, Menu, AppRouteRecordRaw } from '/@/router/types'; -import { findPath, treeMap } from '/@/utils/helper/treeHelper'; -import { cloneDeep } from 'lodash-es'; -import { isUrl } from '/@/utils/is'; -import { RouteParams } from 'vue-router'; -import { toRaw } from 'vue'; - -export function getAllParentPath(treeData: T[], path: string) { - const menuList = findPath(treeData, (n) => n.path === path) as Menu[]; - return (menuList || []).map((item) => item.path); -} - -// 路径处理 -function joinParentPath(menus: Menu[], parentPath = '') { - for (let index = 0; index < menus.length; index++) { - const menu = menus[index]; - // https://next.router.vuejs.org/guide/essentials/nested-routes.html - // Note that nested paths that start with / will be treated as a root path. - // 请注意,以 / 开头的嵌套路径将被视为根路径。 - // This allows you to leverage the component nesting without having to use a nested URL. - // 这允许你利用组件嵌套,而无需使用嵌套 URL。 - if (!(menu.path.startsWith('/') || isUrl(menu.path))) { - // path doesn't start with /, nor is it a url, join parent path - // 路径不以 / 开头,也不是 url,加入父路径 - menu.path = `${parentPath}/${menu.path}`; - } - if (menu?.children?.length) { - joinParentPath(menu.children, menu.meta?.hidePathForChildren ? parentPath : menu.path); - } - } -} - -// Parsing the menu module -export function transformMenuModule(menuModule: MenuModule): Menu { - const { menu } = menuModule; - - const menuList = [menu]; - - joinParentPath(menuList); - return menuList[0]; -} - -// 将路由转换成菜单 -export function transformRouteToMenu(routeModList: AppRouteModule[], routerMapping = false) { - // 借助 lodash 深拷贝 - const cloneRouteModList = cloneDeep(routeModList); - const routeList: AppRouteRecordRaw[] = []; - - // 对路由项进行修改 - cloneRouteModList.forEach((item) => { - if (routerMapping && item.meta.hideChildrenInMenu && typeof item.redirect === 'string') { - item.path = item.redirect; - } - - if (item.meta?.single) { - const realItem = item?.children?.[0]; - realItem && routeList.push(realItem); - } else { - routeList.push(item); - } - }); - // 提取树指定结构 - const list = treeMap(routeList, { - conversion: (node: AppRouteRecordRaw) => { - const { meta: { title, hideMenu = false } = {} } = node; - - return { - ...(node.meta || {}), - meta: node.meta, - name: title, - hideMenu, - path: node.path, - ...(node.redirect ? { redirect: node.redirect } : {}), - }; - }, - }); - // 路径处理 - joinParentPath(list); - return cloneDeep(list); -} - -/** - * config menu with given params - */ -const menuParamRegex = /(?::)([\s\S]+?)((?=\/)|$)/g; - -export function configureDynamicParamsMenu(menu: Menu, params: RouteParams) { - const { path, paramPath } = toRaw(menu); - let realPath = paramPath ? paramPath : path; - const matchArr = realPath.match(menuParamRegex); - - matchArr?.forEach((it) => { - const realIt = it.substr(1); - if (params[realIt]) { - realPath = realPath.replace(`:${realIt}`, params[realIt] as string); - } - }); - // save original param path. - if (!paramPath && matchArr && matchArr.length > 0) { - menu.paramPath = path; - } - menu.path = realPath; - // children - menu.children?.forEach((item) => configureDynamicParamsMenu(item, params)); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/helper/routeHelper.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/helper/routeHelper.ts deleted file mode 100644 index c90a21d3f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/helper/routeHelper.ts +++ /dev/null @@ -1,178 +0,0 @@ -import type { AppRouteModule, AppRouteRecordRaw } from '/@/router/types'; -import type { Router, RouteRecordNormalized } from 'vue-router'; - -import { getParentLayout, LAYOUT, EXCEPTION_COMPONENT } from '/@/router/constant'; -import { cloneDeep, omit } from 'lodash-es'; -import { warn } from '/@/utils/log'; -import { createRouter, createWebHistory } from 'vue-router'; - -export type LayoutMapKey = 'LAYOUT'; -const IFRAME = () => import('/@/views/sys/iframe/FrameBlank.vue'); - -const LayoutMap = new Map Promise>(); - -LayoutMap.set('LAYOUT', LAYOUT); -LayoutMap.set('IFRAME', IFRAME); - -let dynamicViewsModules: Record Promise>; - -// Dynamic introduction -function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) { - dynamicViewsModules = dynamicViewsModules || import.meta.glob('../../views/**/*.{vue,tsx}'); - if (!routes) return; - routes.forEach((item) => { - if (!item.component && item.meta?.frameSrc) { - item.component = 'IFRAME'; - } - const { component, name } = item; - const { children } = item; - if (component) { - const layoutFound = LayoutMap.get(component.toUpperCase()); - if (layoutFound) { - item.component = layoutFound; - } else { - item.component = dynamicImport(dynamicViewsModules, component as string); - } - } else if (name) { - item.component = getParentLayout(); - } - children && asyncImportRoute(children); - }); -} - -function dynamicImport( - dynamicViewsModules: Record Promise>, - component: string, -) { - const keys = Object.keys(dynamicViewsModules); - const matchKeys = keys.filter((key) => { - const k = key.replace('../../views', ''); - const startFlag = component.startsWith('/'); - const endFlag = component.endsWith('.vue') || component.endsWith('.tsx'); - const startIndex = startFlag ? 0 : 1; - const lastIndex = endFlag ? k.length : k.lastIndexOf('.'); - return k.substring(startIndex, lastIndex) === component; - }); - if (matchKeys?.length === 1) { - const matchKey = matchKeys[0]; - return dynamicViewsModules[matchKey]; - } else if (matchKeys?.length > 1) { - warn( - 'Please do not create `.vue` and `.TSX` files with the same file name in the same hierarchical directory under the views folder. This will cause dynamic introduction failure', - ); - return; - } else { - warn('在src/views/下找不到`' + component + '.vue` 或 `' + component + '.tsx`, 请自行创建!'); - return EXCEPTION_COMPONENT; - } -} - -// Turn background objects into routing objects -// 将背景对象变成路由对象 -export function transformObjToRoute(routeList: AppRouteModule[]): T[] { - routeList.forEach((route) => { - const component = route.component as string; - if (component) { - if (component.toUpperCase() === 'LAYOUT') { - route.component = LayoutMap.get(component.toUpperCase()); - } else { - route.children = [cloneDeep(route)]; - route.component = LAYOUT; - route.name = `${route.name}Parent`; - route.path = ''; - const meta = route.meta || {}; - meta.single = true; - meta.affix = false; - route.meta = meta; - } - } else { - warn('请正确配置路由:' + route?.name + '的component属性'); - } - route.children && asyncImportRoute(route.children); - }); - return routeList as unknown as T[]; -} - -/** - * Convert multi-level routing to level 2 routing - * 将多级路由转换为 2 级路由 - */ -export function flatMultiLevelRoutes(routeModules: AppRouteModule[]) { - const modules: AppRouteModule[] = cloneDeep(routeModules); - - for (let index = 0; index < modules.length; index++) { - const routeModule = modules[index]; - // 判断级别是否 多级 路由 - if (!isMultipleRoute(routeModule)) { - // 声明终止当前循环, 即跳过此次循环,进行下一轮 - continue; - } - // 路由等级提升 - promoteRouteLevel(routeModule); - } - return modules; -} - -// Routing level upgrade -// 路由等级提升 -function promoteRouteLevel(routeModule: AppRouteModule) { - // Use vue-router to splice menus - // 使用vue-router拼接菜单 - // createRouter 创建一个可以被 Vue 应用程序使用的路由实例 - let router: Router | null = createRouter({ - routes: [routeModule as unknown as RouteRecordNormalized], - history: createWebHistory(), - }); - // getRoutes: 获取所有 路由记录的完整列表。 - const routes = router.getRoutes(); - // 将所有子路由添加到二级路由 - addToChildren(routes, routeModule.children || [], routeModule); - router = null; - - // omit lodash的函数 对传入的item对象的children进行删除 - routeModule.children = routeModule.children?.map((item) => omit(item, 'children')); -} - -// Add all sub-routes to the secondary route -// 将所有子路由添加到二级路由 -function addToChildren( - routes: RouteRecordNormalized[], - children: AppRouteRecordRaw[], - routeModule: AppRouteModule, -) { - for (let index = 0; index < children.length; index++) { - const child = children[index]; - const route = routes.find((item) => item.name === child.name); - if (!route) { - continue; - } - routeModule.children = routeModule.children || []; - if (!routeModule.children.find((item) => item.name === route.name)) { - routeModule.children?.push(route as unknown as AppRouteModule); - } - if (child.children?.length) { - addToChildren(routes, child.children, routeModule); - } - } -} - -// Determine whether the level exceeds 2 levels -// 判断级别是否超过2级 -function isMultipleRoute(routeModule: AppRouteModule) { - // Reflect.has 与 in 操作符 相同, 用于检查一个对象(包括它原型链上)是否拥有某个属性 - if (!routeModule || !Reflect.has(routeModule, 'children') || !routeModule.children?.length) { - return false; - } - - const children = routeModule.children; - - let flag = false; - for (let index = 0; index < children.length; index++) { - const child = children[index]; - if (child.children?.length) { - flag = true; - break; - } - } - return flag; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/index.ts deleted file mode 100644 index 28483ba8c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/index.ts +++ /dev/null @@ -1,42 +0,0 @@ -import type { RouteRecordRaw } from 'vue-router'; -import type { App } from 'vue'; - -import { createRouter, createWebHistory } from 'vue-router'; -import { basicRoutes } from './routes'; - -// 白名单应该包含基本静态路由 -const WHITE_NAME_LIST: string[] = []; -const getRouteNames = (array: any[]) => - array.forEach((item) => { - WHITE_NAME_LIST.push(item.name); - getRouteNames(item.children || []); - }); -getRouteNames(basicRoutes); - -// app router -// 创建一个可以被 Vue 应用程序使用的路由实例 -export const router = createRouter({ - // 创建一个 hash 历史记录。 - history: createWebHistory(import.meta.env.VITE_PUBLIC_PATH), - // 应该添加到路由的初始路由列表。 - routes: basicRoutes as unknown as RouteRecordRaw[], - // 是否应该禁止尾部斜杠。默认为假 - strict: true, - scrollBehavior: () => ({ left: 0, top: 0 }), -}); - -// reset router -export function resetRouter() { - router.getRoutes().forEach((route) => { - const { name } = route; - if (name && !WHITE_NAME_LIST.includes(name as string)) { - router.hasRoute(name) && router.removeRoute(name); - } - }); -} - -// config router -// 配置路由器 -export function setupRouter(app: App) { - app.use(router); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/menus/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/menus/index.ts deleted file mode 100644 index bf677214d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/menus/index.ts +++ /dev/null @@ -1,126 +0,0 @@ -import type { Menu, MenuModule } from '/@/router/types'; -import type { RouteRecordNormalized } from 'vue-router'; - -import { useAppStoreWithOut } from '/@/store/modules/app'; -import { usePermissionStore } from '/@/store/modules/permission'; -import { transformMenuModule, getAllParentPath } from '/@/router/helper/menuHelper'; -import { filter } from '/@/utils/helper/treeHelper'; -import { isUrl } from '/@/utils/is'; -import { router } from '/@/router'; -import { PermissionModeEnum } from '/@/enums/appEnum'; -import { pathToRegexp } from 'path-to-regexp'; - -const modules = import.meta.globEager('./modules/**/*.ts'); - -const menuModules: MenuModule[] = []; - -Object.keys(modules).forEach((key) => { - const mod = modules[key].default || {}; - const modList = Array.isArray(mod) ? [...mod] : [mod]; - menuModules.push(...modList); -}); - -// =========================== -// ==========Helper=========== -// =========================== - -const getPermissionMode = () => { - const appStore = useAppStoreWithOut(); - return appStore.getProjectConfig.permissionMode; -}; -const isBackMode = () => { - return getPermissionMode() === PermissionModeEnum.BACK; -}; - -const isRouteMappingMode = () => { - return getPermissionMode() === PermissionModeEnum.ROUTE_MAPPING; -}; - -const isRoleMode = () => { - return getPermissionMode() === PermissionModeEnum.ROLE; -}; - -const staticMenus: Menu[] = []; -(() => { - menuModules.sort((a, b) => { - return (a.orderNo || 0) - (b.orderNo || 0); - }); - - for (const menu of menuModules) { - staticMenus.push(transformMenuModule(menu)); - } -})(); - -async function getAsyncMenus() { - const permissionStore = usePermissionStore(); - if (isBackMode()) { - return permissionStore.getBackMenuList.filter((item) => !item.meta?.hideMenu && !item.hideMenu); - } - if (isRouteMappingMode()) { - return permissionStore.getFrontMenuList.filter((item) => !item.hideMenu); - } - return staticMenus; -} - -export const getMenus = async (): Promise => { - const menus = await getAsyncMenus(); - if (isRoleMode()) { - const routes = router.getRoutes(); - return filter(menus, basicFilter(routes)); - } - return menus; -}; - -export async function getCurrentParentPath(currentPath: string) { - const menus = await getAsyncMenus(); - const allParentPath = await getAllParentPath(menus, currentPath); - return allParentPath?.[0]; -} - -// Get the level 1 menu, delete children -export async function getShallowMenus(): Promise { - const menus = await getAsyncMenus(); - const shallowMenuList = menus.map((item) => ({ ...item, children: undefined })); - if (isRoleMode()) { - const routes = router.getRoutes(); - return shallowMenuList.filter(basicFilter(routes)); - } - return shallowMenuList; -} - -// Get the children of the menu -export async function getChildrenMenus(parentPath: string) { - const menus = await getMenus(); - const parent = menus.find((item) => item.path === parentPath); - if (!parent || !parent.children || !!parent?.meta?.hideChildrenInMenu) { - return [] as Menu[]; - } - if (isRoleMode()) { - const routes = router.getRoutes(); - return filter(parent.children, basicFilter(routes)); - } - return parent.children; -} - -function basicFilter(routes: RouteRecordNormalized[]) { - return (menu: Menu) => { - const matchRoute = routes.find((route) => { - if (isUrl(menu.path)) return true; - - if (route.meta?.carryParam) { - return pathToRegexp(route.path).test(menu.path); - } - const isSame = route.path === menu.path; - if (!isSame) return false; - - if (route.meta?.ignoreAuth) return true; - - return isSame || pathToRegexp(route.path).test(menu.path); - }); - - if (!matchRoute) return false; - menu.icon = (menu.icon || matchRoute.meta.icon) as string; - menu.meta = matchRoute.meta; - return true; - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/basic.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/basic.ts deleted file mode 100644 index b92deea7e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/basic.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { AppRouteRecordRaw } from '/@/router/types'; - -import { - REDIRECT_NAME, - LAYOUT, - EXCEPTION_COMPONENT, - PAGE_NOT_FOUND_NAME, -} from '/@/router/constant'; - -// 404 on a page -export const PAGE_NOT_FOUND_ROUTE: AppRouteRecordRaw = { - path: '/:path(.*)*', - name: PAGE_NOT_FOUND_NAME, - component: LAYOUT, - meta: { - title: 'ErrorPage', - hideBreadcrumb: true, - hideMenu: true, - }, - children: [ - { - path: '/:path(.*)*', - name: PAGE_NOT_FOUND_NAME, - component: EXCEPTION_COMPONENT, - meta: { - title: 'ErrorPage', - hideBreadcrumb: true, - hideMenu: true, - }, - }, - ], -}; - -export const REDIRECT_ROUTE: AppRouteRecordRaw = { - path: '/redirect', - component: LAYOUT, - name: 'RedirectTo', - meta: { - title: REDIRECT_NAME, - hideBreadcrumb: true, - hideMenu: true, - }, - children: [ - { - path: '/redirect/:path(.*)', - name: REDIRECT_NAME, - component: () => import('/@/views/sys/redirect/index.vue'), - meta: { - title: REDIRECT_NAME, - hideBreadcrumb: true, - }, - }, - ], -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/index.ts deleted file mode 100644 index 526234200..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type { AppRouteRecordRaw, AppRouteModule } from '/@/router/types'; - -import { PAGE_NOT_FOUND_ROUTE, REDIRECT_ROUTE } from '/@/router/routes/basic'; - -import { mainOutRoutes } from './mainOut'; -import { PageEnum } from '/@/enums/pageEnum'; -import { t } from '/@/hooks/web/useI18n'; - -// import.meta.globEager() 直接引入所有的模块 Vite 独有的功能 -const modules = import.meta.globEager('./modules/**/*.ts'); -const routeModuleList: AppRouteModule[] = []; - -// 加入到路由集合中 -Object.keys(modules).forEach((key) => { - const mod = modules[key].default || {}; - const modList = Array.isArray(mod) ? [...mod] : [mod]; - routeModuleList.push(...modList); -}); - -export const asyncRoutes = [PAGE_NOT_FOUND_ROUTE, ...routeModuleList]; - -// 根路由 -export const RootRoute: AppRouteRecordRaw = { - path: '/', - name: 'Root', - redirect: PageEnum.BASE_HOME, - meta: { - title: 'Root', - }, -}; - -export const LoginRoute: AppRouteRecordRaw = { - path: '/login', - name: 'Login', - component: () => import('/@/views/sys/login/Login.vue'), - meta: { - title: t('routes.basic.login'), - }, -}; - -// Basic routing without permission -// 未经许可的基本路由 -export const basicRoutes = [ - LoginRoute, - RootRoute, - ...mainOutRoutes, - REDIRECT_ROUTE, - PAGE_NOT_FOUND_ROUTE, -]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/mainOut.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/mainOut.ts deleted file mode 100644 index 559656b86..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/mainOut.ts +++ /dev/null @@ -1,40 +0,0 @@ -/** -The routing of this file will not show the layout. -It is an independent new page. -the contents of the file still need to log in to access - */ -import type { AppRouteModule } from '/@/router/types'; - -// test -// http:ip:port/main-out -export const mainOutRoutes: AppRouteModule[] = [ - { - path: '/oidcSignIn', - name: 'OidcSignIn', - component: () => import('/@/views/sys/login/OidcSignIn.vue'), - meta: { - title: 'Oidc', - ignoreAuth: true, - }, - }, - { - path: '/oidcSignOut', - name: 'OidcSignOut', - component: () => import('/@/views/sys/login/OidcSignOut.vue'), - meta: { - title: 'Oidc', - ignoreAuth: true, - }, - }, - { - path: '/githubSignIn', - name: 'GithubOidcSign', - component: () => import('/@/views/sys/login/GithubOidcSignIn.vue'), - meta: { - title: 'GithubOidcSign', - ignoreAuth: true, - }, - }, -]; - -export const mainOutRouteNames = mainOutRoutes.map((item) => item.name); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/modules/admin.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/modules/admin.ts deleted file mode 100644 index b3d0a2954..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/modules/admin.ts +++ /dev/null @@ -1,110 +0,0 @@ -import type { AppRouteModule } from '/@/router/types'; -import { LAYOUT } from '/@/router/constant'; -import { t } from '/@/hooks/web/useI18n'; - -const admin: AppRouteModule = { - path: '/admin', - name: 'Admin', - component: LAYOUT, - //redirect: '/admin/abpUser', - meta: { - orderNo: 20, - icon: 'ion:grid-outline', - title: t('routes.admin.systemManagement'), - policy: 'AbpIdentity', - }, - children: [ - { - path: 'abpUser', - name: 'AbpUser', - component: () => import('/@/views/admin/users/AbpUser.vue'), - meta: { - title: t('routes.admin.userManagement'), - policy: 'AbpIdentity.Users', - icon: 'ant-design:skin-outlined', - }, - }, - { - path: 'abpRole', - name: 'AbpRole', - component: () => import('/@/views/admin/roles/AbpRole.vue'), - meta: { - title: t('routes.admin.roleManagement'), - policy: 'AbpIdentity.Roles', - icon: 'ant-design:lock-outlined', - }, - }, - { - path: 'organizationUnit', - name: 'organizationUnit', - component: () => import('/@/views/admin/organizationUnits/OrganizationUnit.vue'), - meta: { - title: t('routes.admin.organizationUnitManagement'), - icon: 'ant-design:gold-outlined', - policy: 'AbpIdentity.OrganizationUnitManagement', - }, - }, - { - path: 'settings', - name: 'Settings', - component: () => import('/@/views/admin/settings/Setting.vue'), - meta: { - title: t('routes.admin.settingManagement'), - policy: 'AbpIdentity.Setting', - icon: 'ant-design:unordered-list-outlined', - }, - }, - { - path: 'abpAuditLogs', - name: 'AuditLogs', - component: () => import('/@/views/admin/auditLog/AuditLog.vue'), - meta: { - title: t('routes.admin.auditLog'), - policy: 'AbpIdentity.AuditLog', - icon: 'ant-design:snippets-twotone', - }, - }, - { - path: 'identitySecurityLogs', - name: 'IdentitySecurityLogs', - component: () => import('/@/views/admin/identitySecurityLog/Index.vue'), - meta: { - title: t('routes.admin.identitySecurityLog'), - policy: 'AbpIdentity.IdentitySecurityLogs', - icon: 'ant-design:file-protect-outlined', - }, - }, - { - path: 'dataDictionary', - name: 'dataDictionary', - component: () => import('/@/views/admin/dictionary/AbpDictionary.vue'), - meta: { - title: t('routes.admin.dictionaryManagement'), - icon: 'ant-design:table-outlined', - policy: 'AbpIdentity.DataDictionaryManagement', - }, - }, - { - path: 'language', - name: 'language', - component: () => import('/@/views/admin/language/Index.vue'), - meta: { - title: t('routes.admin.languageManagement'), - icon: 'ant-design:read-outlined', - policy: 'AbpIdentity.Languages', - }, - }, - { - path: 'languageText', - name: 'languageText', - component: () => import('/@/views/admin/languageText/Index.vue'), - meta: { - title: t('routes.admin.languageTextManagement'), - icon: 'ant-design:font-size-outlined', - policy: 'AbpIdentity.LanguageTexts', - }, - }, - ], -}; - -export default admin; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/modules/dashboard.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/modules/dashboard.ts deleted file mode 100644 index de2bba7bc..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/modules/dashboard.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { AppRouteModule } from '/@/router/types'; - -import { LAYOUT } from '/@/router/constant'; -import { t } from '/@/hooks/web/useI18n'; - -const dashboard: AppRouteModule = { - path: '/dashboard', - name: 'Dashboard', - component: LAYOUT, - redirect: '/dashboard/analysis', - meta: { - orderNo: 10, - icon: 'ant-design:bank-filled', - title: t('routes.dashboard.analysis'), - hideChildrenInMenu: true, - }, - children: [ - { - path: 'analysis', - name: 'Analysis', - component: () => import('/@/views/dashboard/analysis/index.vue'), - meta: { - affix: true, - title: t('routes.dashboard.analysis'), - hideMenu: true, - }, - }, - ], -}; - -export default dashboard; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/modules/tenant.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/modules/tenant.ts deleted file mode 100644 index ce8a8334e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/routes/modules/tenant.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { AppRouteModule } from '/@/router/types'; -import { LAYOUT } from '/@/router/constant'; -import { t } from '/@/hooks/web/useI18n'; -const tenant: AppRouteModule = { - path: '/tenant', - name: 'Tenant', - component: LAYOUT, - meta: { - orderNo: 30, - icon: 'ant-design:contacts-outlined', - title: t('routes.tenant.tenantManagement'), - policy: 'AbpTenantManagement', - }, - children: [ - { - path: 'Tenant', - name: 'Tenant', - component: () => import('/@/views/tenants/Tenant.vue'), - meta: { - title: t('routes.tenant.tenantList'), - icon: 'ant-design:switcher-filled', - policy: 'AbpTenantManagement.Tenants', - }, - }, - ], -}; - -export default tenant; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/types.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/types.ts deleted file mode 100644 index 082d20840..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/router/types.ts +++ /dev/null @@ -1,58 +0,0 @@ -import type { RouteRecordRaw, RouteMeta } from 'vue-router'; -import { RoleEnum } from '/@/enums/roleEnum'; -import { defineComponent } from 'vue'; - -export type Component = - | ReturnType - | (() => Promise) - | (() => Promise); - -// @ts-ignore -export interface AppRouteRecordRaw extends Omit { - name: string; - meta: RouteMeta; - component?: Component | string; - components?: Component; - children?: AppRouteRecordRaw[]; - props?: Recordable; - fullPath?: string; -} - -export interface MenuTag { - type?: 'primary' | 'error' | 'warn' | 'success'; - content?: string; - dot?: boolean; -} - -export interface Menu { - name: string; - - icon?: string; - - path: string; - - // path contains param, auto assignment. - paramPath?: string; - - disabled?: boolean; - - children?: Menu[]; - - orderNo?: number; - - roles?: RoleEnum[]; - - meta?: Partial; - - tag?: MenuTag; - - hideMenu?: boolean; -} - -export interface MenuModule { - orderNo?: number; - menu: Menu; -} - -// export type AppRouteModule = RouteModule | AppRouteRecordRaw; -export type AppRouteModule = AppRouteRecordRaw; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/services/ServiceProxies.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/services/ServiceProxies.ts deleted file mode 100644 index 8b35851de..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/services/ServiceProxies.ts +++ /dev/null @@ -1,16518 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -//---------------------- -// -// Generated using the NSwag toolchain v13.20.0.0 (NJsonSchema v10.9.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org) -// -//---------------------- -// ReSharper disable InconsistentNaming - -import {ServiceProxyBase} from './ServiceProxyBase' -import axios, { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse, CancelToken } from 'axios'; - -import dayjs from 'dayjs'; - -export class AbpApiDefinitionServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * @param includeTypes (optional) - * @return Success - */ - apiDefinition(includeTypes: boolean | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/api/abp/api-definition?"; - if (includeTypes === null) - throw new Error("The parameter 'includeTypes' cannot be null."); - else if (includeTypes !== undefined) - url_ += "IncludeTypes=" + encodeURIComponent("" + includeTypes) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_ = { - method: "GET", - url: url_, - headers: { - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processApiDefinition(_response)); - }); - } - - protected processApiDefinition(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = ApplicationApiDescriptionModel.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class AbpApplicationConfigurationServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * @param includeLocalizationResources (optional) - * @return Success - */ - applicationConfiguration(includeLocalizationResources: boolean | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/api/abp/application-configuration?"; - if (includeLocalizationResources === null) - throw new Error("The parameter 'includeLocalizationResources' cannot be null."); - else if (includeLocalizationResources !== undefined) - url_ += "IncludeLocalizationResources=" + encodeURIComponent("" + includeLocalizationResources) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_ = { - method: "GET", - url: url_, - headers: { - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processApplicationConfiguration(_response)); - }); - } - - protected processApplicationConfiguration(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = ApplicationConfigurationDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class AbpApplicationLocalizationServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * @param onlyDynamics (optional) - * @return Success - */ - applicationLocalization(cultureName: string, onlyDynamics: boolean | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/api/abp/application-localization?"; - if (cultureName === undefined || cultureName === null) - throw new Error("The parameter 'cultureName' must be defined and cannot be null."); - else - url_ += "CultureName=" + encodeURIComponent("" + cultureName) + "&"; - if (onlyDynamics === null) - throw new Error("The parameter 'onlyDynamics' cannot be null."); - else if (onlyDynamics !== undefined) - url_ += "OnlyDynamics=" + encodeURIComponent("" + onlyDynamics) + "&"; - url_ = url_.replace(/[?&]$/, ""); - - let options_ = { - method: "GET", - url: url_, - headers: { - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processApplicationLocalization(_response)); - }); - } - - protected processApplicationLocalization(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = ApplicationLocalizationDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class AccountServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * 登录 - * @param body (optional) - * @return Success - */ - login(body: LoginInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/api/app/account/login"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processLogin(_response)); - }); - } - - protected processLogin(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = LoginOutput.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class AuditLogsServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * 分页获取审计日志信息 - * @param body (optional) - * @return Success - */ - page(body: PagingAuditLogInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/AuditLogs/page"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processPage(_response)); - }); - } - - protected processPage(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = PagingAuditLogOutputPagedResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class DataDictionaryServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * 分页字典类型 - * @param body (optional) - * @return Success - */ - page(body: PagingDataDictionaryInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/DataDictionary/page"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processPage(_response)); - }); - } - - protected processPage(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = PagingDataDictionaryOutputPagedResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 分页字典明细 - * @param body (optional) - * @return Success - */ - pageDetail(body: PagingDataDictionaryDetailInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/DataDictionary/pageDetail"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processPageDetail(_response)); - }); - } - - protected processPageDetail(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = PagingDataDictionaryDetailOutputPagedResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 创建字典类型 - * @param body (optional) - * @return Success - */ - create(body: CreateDataDictinaryInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/DataDictionary/create"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processCreate(_response)); - }); - } - - protected processCreate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 创建字典明细 - * @param body (optional) - * @return Success - */ - createDetail(body: CreateDataDictinaryDetailInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/DataDictionary/createDetail"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processCreateDetail(_response)); - }); - } - - protected processCreateDetail(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 设置字典明细状态 - * @param body (optional) - * @return Success - */ - status(body: SetDataDictinaryDetailInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/DataDictionary/status"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processStatus(_response)); - }); - } - - protected processStatus(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 更新字典明细 - * @param body (optional) - * @return Success - */ - updateDetail(body: UpdateDetailInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/DataDictionary/updateDetail"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processUpdateDetail(_response)); - }); - } - - protected processUpdateDetail(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 删除字典明细 - * @param body (optional) - * @return Success - */ - delete(body: DeleteDataDictionaryDetailInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/DataDictionary/delete"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processDelete(_response)); - }); - } - - protected processDelete(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 删除字典类型 - * @param body (optional) - * @return Success - */ - deleteDataDictionaryType(body: IdInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/DataDictionary/deleteDataDictionaryType"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processDeleteDataDictionaryType(_response)); - }); - } - - protected processDeleteDataDictionaryType(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 修改字典类型 - * @param body (optional) - * @return Success - */ - update(body: UpdateDataDictinaryInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/DataDictionary/update"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processUpdate(_response)); - }); - } - - protected processUpdate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class IdentitySecurityLogsServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * 分页获取登录日志信息 - * @param body (optional) - * @return Success - */ - page(body: PagingIdentitySecurityLogInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/IdentitySecurityLogs/page"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processPage(_response)); - }); - } - - protected processPage(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = PagingIdentitySecurityLogOutputPagedResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class LanguagesServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * 获取所有语言 - * @return Success - */ - all( cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Languages/All"; - url_ = url_.replace(/[?&]$/, ""); - - let options_ = { - method: "POST", - url: url_, - headers: { - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processAll(_response)); - }); - } - - protected processAll(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - if (Array.isArray(resultData200)) { - result200 = [] as any; - for (let item of resultData200) - result200!.push(PageLanguageOutput.fromJS(item)); - } - else { - result200 = null; - } - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 分页查询语言 - * @param body (optional) - * @return Success - */ - page(body: PageLanguageInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Languages/Page"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processPage(_response)); - }); - } - - protected processPage(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = PageLanguageOutputPagedResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 创建语言 - * @param body (optional) - * @return Success - */ - create(body: CreateLanguageInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Languages/Create"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processCreate(_response)); - }); - } - - protected processCreate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 编辑语言 - * @param body (optional) - * @return Success - */ - update(body: UpdateLanguageInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Languages/Update"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processUpdate(_response)); - }); - } - - protected processUpdate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 删除语言 - * @param body (optional) - * @return Success - */ - delete(body: DeleteLanguageInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Languages/Delete"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processDelete(_response)); - }); - } - - protected processDelete(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 设置默认语言 - * @param body (optional) - * @return Success - */ - setDefault(body: IdInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Languages/SetDefault"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processSetDefault(_response)); - }); - } - - protected processSetDefault(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class LanguageTextsServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * 获取所有资源 - * @return Success - */ - allResource( cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/LanguageTexts/AllResource"; - url_ = url_.replace(/[?&]$/, ""); - - let options_ = { - method: "POST", - url: url_, - headers: { - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processAllResource(_response)); - }); - } - - protected processAllResource(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - if (Array.isArray(resultData200)) { - result200 = [] as any; - for (let item of resultData200) - result200!.push(StringStringFromSelector.fromJS(item)); - } - else { - result200 = null; - } - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 分页查询语言文本 - * @param body (optional) - * @return Success - */ - page(body: PageLanguageTextInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/LanguageTexts/Page"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processPage(_response)); - }); - } - - protected processPage(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = PageLanguageTextOutputPagedResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 创建语言文本 - * @param body (optional) - * @return Success - */ - create(body: CreateLanguageTextInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/LanguageTexts/Create"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processCreate(_response)); - }); - } - - protected processCreate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 编辑语言文本 - * @param body (optional) - * @return Success - */ - update(body: UpdateLanguageTextInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/LanguageTexts/Update"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processUpdate(_response)); - }); - } - - protected processUpdate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class NotificationServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * 分页获取用户普通文本消息 - * @param body (optional) - * @return Success - */ - common(body: PagingNotificationListInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Notification/Common"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processCommon(_response)); - }); - } - - protected processCommon(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = PagingNotificationListOutputPagedResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 分页获取广播消息 - * @param body (optional) - * @return Success - */ - broadCast(body: PagingNotificationListInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Notification/BroadCast"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processBroadCast(_response)); - }); - } - - protected processBroadCast(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = PagingNotificationListOutputPagedResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 发送警告文本消息 - * @param body (optional) - * @return Success - */ - sendCommonWarningMessage(body: SendCommonMessageInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Notification/SendCommonWarningMessage"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processSendCommonWarningMessage(_response)); - }); - } - - protected processSendCommonWarningMessage(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 发送普通文本消息 - * @param body (optional) - * @return Success - */ - sendCommonInformationMessage(body: SendCommonMessageInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Notification/SendCommonInformationMessage"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processSendCommonInformationMessage(_response)); - }); - } - - protected processSendCommonInformationMessage(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 发送错误文本消息 - * @param body (optional) - * @return Success - */ - sendCommonErrorMessage(body: SendCommonMessageInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Notification/SendCommonErrorMessage"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processSendCommonErrorMessage(_response)); - }); - } - - protected processSendCommonErrorMessage(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 发送警告广播消息 - * @param body (optional) - * @return Success - */ - sendBroadCastWarningMessage(body: SendBroadCastMessageInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Notification/SendBroadCastWarningMessage"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processSendBroadCastWarningMessage(_response)); - }); - } - - protected processSendBroadCastWarningMessage(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 发送正常广播消息 - * @param body (optional) - * @return Success - */ - sendBroadCastInformationMessage(body: SendBroadCastMessageInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Notification/SendBroadCastInformationMessage"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processSendBroadCastInformationMessage(_response)); - }); - } - - protected processSendBroadCastInformationMessage(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 发送错误广播消息 - * @param body (optional) - * @return Success - */ - sendBroadCastErrorMessage(body: SendBroadCastMessageInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Notification/SendBroadCastErrorMessage"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processSendBroadCastErrorMessage(_response)); - }); - } - - protected processSendBroadCastErrorMessage(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 消息设置为已读 - * @param body (optional) - * @return Success - */ - read(body: SetReadInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Notification/Read"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processRead(_response)); - }); - } - - protected processRead(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class OrganizationUnitsServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * 获取组织机构树 - * @return Success - */ - tree( cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/OrganizationUnits/tree"; - url_ = url_.replace(/[?&]$/, ""); - - let options_ = { - method: "POST", - url: url_, - headers: { - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processTree(_response)); - }); - } - - protected processTree(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - if (Array.isArray(resultData200)) { - result200 = [] as any; - for (let item of resultData200) - result200!.push(TreeOutput.fromJS(item)); - } - else { - result200 = null; - } - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 创建组织机构 - * @param body (optional) - * @return Success - */ - create(body: CreateOrganizationUnitInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/OrganizationUnits/create"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processCreate(_response)); - }); - } - - protected processCreate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 删除组织机构 - * @param body (optional) - * @return Success - */ - delete(body: IdInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/OrganizationUnits/delete"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processDelete(_response)); - }); - } - - protected processDelete(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 编辑组织机构 - * @param body (optional) - * @return Success - */ - update(body: UpdateOrganizationUnitInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/OrganizationUnits/update"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processUpdate(_response)); - }); - } - - protected processUpdate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 向组织机构添加角色 - * @param body (optional) - * @return Success - */ - addRoleToOrganizationUnit(body: AddRoleToOrganizationUnitInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/OrganizationUnits/addRoleToOrganizationUnitAsync"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processAddRoleToOrganizationUnit(_response)); - }); - } - - protected processAddRoleToOrganizationUnit(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 向组织机构删除角色 - * @param body (optional) - * @return Success - */ - removeRoleFromOrganizationUnit(body: RemoveRoleToOrganizationUnitInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/OrganizationUnits/removeRoleFromOrganizationUnitAsync"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processRemoveRoleFromOrganizationUnit(_response)); - }); - } - - protected processRemoveRoleFromOrganizationUnit(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 向组织机构添加用户 - * @param body (optional) - * @return Success - */ - addUserToOrganizationUnit(body: AddUserToOrganizationUnitInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/OrganizationUnits/addUserToOrganizationUnit"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processAddUserToOrganizationUnit(_response)); - }); - } - - protected processAddUserToOrganizationUnit(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 向组织机构删除用户 - * @param body (optional) - * @return Success - */ - removeUserFromOrganizationUnit(body: RemoveUserToOrganizationUnitInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/OrganizationUnits/removeUserFromOrganizationUnit"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processRemoveUserFromOrganizationUnit(_response)); - }); - } - - protected processRemoveUserFromOrganizationUnit(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 分页获取组织机构下用户 - * @param body (optional) - * @return Success - */ - getUsers(body: GetOrganizationUnitUserInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/OrganizationUnits/getUsers"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processGetUsers(_response)); - }); - } - - protected processGetUsers(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = GetOrganizationUnitUserOutputPagedResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 分页获取组织机构下角色 - * @param body (optional) - * @return Success - */ - getRoles(body: GetOrganizationUnitRoleInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/OrganizationUnits/getRoles"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processGetRoles(_response)); - }); - } - - protected processGetRoles(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = GetOrganizationUnitRoleOutputPagedResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 获取不在组织机构的用户 - * @param body (optional) - * @return Success - */ - getUnAddUsers(body: GetUnAddUserInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/OrganizationUnits/getUnAddUsers"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processGetUnAddUsers(_response)); - }); - } - - protected processGetUnAddUsers(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = GetUnAddUserOutputPagedResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 获取不在组织机构的角色 - * @param body (optional) - * @return Success - */ - getUnAddRoles(body: GetUnAddRoleInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/OrganizationUnits/getUnAddRoles"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processGetUnAddRoles(_response)); - }); - } - - protected processGetUnAddRoles(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = GetUnAddRoleOutputPagedResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class PermissionsServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * 获取角色权限 - * @param body (optional) - * @return Success - */ - tree(body: GetPermissionInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Permissions/tree"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processTree(_response)); - }); - } - - protected processTree(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = PermissionOutput.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 更新角色 - * @param body (optional) - * @return Success - */ - update(body: UpdateRolePermissionsInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Permissions/update"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processUpdate(_response)); - }); - } - - protected processUpdate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class RolesServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * 获取所有角色 - * @return Success - */ - all( cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Roles/all"; - url_ = url_.replace(/[?&]$/, ""); - - let options_ = { - method: "POST", - url: url_, - headers: { - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processAll(_response)); - }); - } - - protected processAll(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = IdentityRoleDtoListResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 分页获取角色 - * @param body (optional) - * @return Success - */ - page(body: PagingRoleListInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Roles/page"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processPage(_response)); - }); - } - - protected processPage(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = IdentityRoleDtoPagedResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 创建角色 - * @param body (optional) - * @return Success - */ - create(body: IdentityRoleCreateDto | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Roles/create"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processCreate(_response)); - }); - } - - protected processCreate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = IdentityRoleDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 更新角色 - * @param body (optional) - * @return Success - */ - update(body: UpdateRoleInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Roles/update"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processUpdate(_response)); - }); - } - - protected processUpdate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = IdentityRoleDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 删除角色 - * @param body (optional) - * @return Success - */ - delete(body: IdInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Roles/delete"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processDelete(_response)); - }); - } - - protected processDelete(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class SettingsServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * 获取所有Setting - * @return Success - */ - all( cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Settings/all"; - url_ = url_.replace(/[?&]$/, ""); - - let options_ = { - method: "POST", - url: url_, - headers: { - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processAll(_response)); - }); - } - - protected processAll(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - if (Array.isArray(resultData200)) { - result200 = [] as any; - for (let item of resultData200) - result200!.push(SettingOutput.fromJS(item)); - } - else { - result200 = null; - } - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 更新Setting - * @param body (optional) - * @return Success - */ - update(body: UpdateSettingInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Settings/update"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processUpdate(_response)); - }); - } - - protected processUpdate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class TenantsServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * 通过名称获取租户信息 - * @param body (optional) - * @return Success - */ - find(body: FindTenantByNameInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Tenants/find"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processFind(_response)); - }); - } - - protected processFind(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = FindTenantResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 分页获取租户信息 - * @param body (optional) - * @return Success - */ - page(body: PagingTenantInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Tenants/page"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processPage(_response)); - }); - } - - protected processPage(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = TenantDtoPagedResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 创建租户 - * @param body (optional) - * @return Success - */ - create(body: TenantCreateDto | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Tenants/create"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processCreate(_response)); - }); - } - - protected processCreate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = TenantDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 更新租户 - * @param body (optional) - * @return Success - */ - update(body: UpdateTenantInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Tenants/update"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processUpdate(_response)); - }); - } - - protected processUpdate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = TenantDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 删除租户 - * @param body (optional) - * @return Success - */ - delete(body: IdInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Tenants/delete"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processDelete(_response)); - }); - } - - protected processDelete(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 获取租户连接字符串 - * @param body (optional) - * @return Success - */ - getConnectionString(body: IdInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Tenants/getConnectionString"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processGetConnectionString(_response)); - }); - } - - protected processGetConnectionString(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = resultData200 !== undefined ? resultData200 : null; - - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 更新租户连接字符串 - * @param body (optional) - * @return Success - */ - updateConnectionString(body: UpdateConnectionStringInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Tenants/updateConnectionString"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processUpdateConnectionString(_response)); - }); - } - - protected processUpdateConnectionString(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 删除租户连接字符串 - * @param body (optional) - * @return Success - */ - deleteConnectionString(body: IdInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Tenants/deleteConnectionString"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processDeleteConnectionString(_response)); - }); - } - - protected processDeleteConnectionString(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class UsersServiceProxy extends ServiceProxyBase { - private instance: AxiosInstance; - private baseUrl: string; - protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; - - constructor(baseUrl?: string, instance?: AxiosInstance) { - super(); - this.instance = instance ? instance : axios.create(); - this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : ""; - } - - /** - * 分页获取用户信息 - * @param body (optional) - * @return Success - */ - page(body: PagingUserListInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Users/page"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processPage(_response)); - }); - } - - protected processPage(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = IdentityUserDtoPagedResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 导出用户列表 - * @param body (optional) - * @return Success - */ - export(body: PagingUserListInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Users/export"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - responseType: "blob", - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processExport(_response)); - }); - } - - protected processExport(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200 || status === 206) { - const contentDisposition = response.headers ? response.headers["content-disposition"] : undefined; - let fileNameMatch = contentDisposition ? /filename\*=(?:(\\?['"])(.*?)\1|(?:[^\s]+'.*?')?([^;\n]*))/g.exec(contentDisposition) : undefined; - let fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[3] || fileNameMatch[2] : undefined; - if (fileName) { - fileName = decodeURIComponent(fileName); - } else { - fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined; - fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined; - } - return Promise.resolve({ fileName: fileName, status: status, data: new Blob([response.data], { type: response.headers["content-type"] }), headers: _headers }); - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 创建用户 - * @param body (optional) - * @return Success - */ - create(body: IdentityUserCreateDto | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Users/create"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processCreate(_response)); - }); - } - - protected processCreate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = IdentityUserDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 编辑用户 - * @param body (optional) - * @return Success - */ - update(body: UpdateUserInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Users/update"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processUpdate(_response)); - }); - } - - protected processUpdate(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = IdentityUserDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 删除用户 - * @param body (optional) - * @return Success - */ - delete(body: IdInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Users/delete"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processDelete(_response)); - }); - } - - protected processDelete(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 获取用户角色信息 - * @param body (optional) - * @return Success - */ - role(body: IdInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Users/role"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processRole(_response)); - }); - } - - protected processRole(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = IdentityRoleDtoListResultDto.fromJS(resultData200); - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 修改当前用户密码 - * @param body (optional) - * @return Success - */ - changePassword(body: ChangePasswordInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Users/changePassword"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - "Accept": "text/plain" - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processChangePassword(_response)); - }); - } - - protected processChangePassword(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - let result200: any = null; - let resultData200 = _responseText; - result200 = resultData200 !== undefined ? resultData200 : null; - - return Promise.resolve(result200); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } - - /** - * 锁定用户 - * @param body (optional) - * @return Success - */ - lock(body: LockUserInput | undefined , cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/Users/lock"; - url_ = url_.replace(/[?&]$/, ""); - - const content_ = JSON.stringify(body); - - let options_ = { - data: content_, - method: "POST", - url: url_, - headers: { - "Content-Type": "application/json", - }, - cancelToken - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.instance.request(transformedOptions_); - }).catch((_error: any) => { - if (isAxiosError(_error) && _error.response) { - return _error.response; - } else { - throw _error; - } - }).then((_response: AxiosResponse) => { - return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processLock(_response)); - }); - } - - protected processLock(response: AxiosResponse): Promise { - const status = response.status; - let _headers: any = {}; - if (response.headers && typeof response.headers === "object") { - for (let k in response.headers) { - if (response.headers.hasOwnProperty(k)) { - _headers[k] = response.headers[k]; - } - } - } - if (status === 200) { - const _responseText = response.data; - return Promise.resolve(null as any); - - } else if (status === 403) { - const _responseText = response.data; - let result403: any = null; - let resultData403 = _responseText; - result403 = RemoteServiceErrorResponse.fromJS(resultData403); - return throwException("Forbidden", status, _responseText, _headers, result403); - - } else if (status === 401) { - const _responseText = response.data; - let result401: any = null; - let resultData401 = _responseText; - result401 = RemoteServiceErrorResponse.fromJS(resultData401); - return throwException("Unauthorized", status, _responseText, _headers, result401); - - } else if (status === 400) { - const _responseText = response.data; - let result400: any = null; - let resultData400 = _responseText; - result400 = RemoteServiceErrorResponse.fromJS(resultData400); - return throwException("Bad Request", status, _responseText, _headers, result400); - - } else if (status === 404) { - const _responseText = response.data; - let result404: any = null; - let resultData404 = _responseText; - result404 = RemoteServiceErrorResponse.fromJS(resultData404); - return throwException("Not Found", status, _responseText, _headers, result404); - - } else if (status === 501) { - const _responseText = response.data; - let result501: any = null; - let resultData501 = _responseText; - result501 = RemoteServiceErrorResponse.fromJS(resultData501); - return throwException("Server Error", status, _responseText, _headers, result501); - - } else if (status === 500) { - const _responseText = response.data; - let result500: any = null; - let resultData500 = _responseText; - result500 = RemoteServiceErrorResponse.fromJS(resultData500); - return throwException("Server Error", status, _responseText, _headers, result500); - - } else if (status !== 200 && status !== 204) { - const _responseText = response.data; - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - } - return Promise.resolve(null as any); - } -} - -export class AbpLoginResult implements IAbpLoginResult { - result!: LoginResultType; - readonly description!: string | undefined; - - constructor(data?: IAbpLoginResult) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.result = _data["result"]; - (this).description = _data["description"]; - } - } - - static fromJS(data: any): AbpLoginResult { - data = typeof data === 'object' ? data : {}; - let result = new AbpLoginResult(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["result"] = this.result; - data["description"] = this.description; - return data; - } -} - -export interface IAbpLoginResult { - result: LoginResultType; - description: string | undefined; -} - -export class ActionApiDescriptionModel implements IActionApiDescriptionModel { - uniqueName!: string | undefined; - name!: string | undefined; - httpMethod!: string | undefined; - url!: string | undefined; - supportedVersions!: string[] | undefined; - parametersOnMethod!: MethodParameterApiDescriptionModel[] | undefined; - parameters!: ParameterApiDescriptionModel[] | undefined; - returnValue!: ReturnValueApiDescriptionModel; - allowAnonymous!: boolean | undefined; - implementFrom!: string | undefined; - - constructor(data?: IActionApiDescriptionModel) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.uniqueName = _data["uniqueName"]; - this.name = _data["name"]; - this.httpMethod = _data["httpMethod"]; - this.url = _data["url"]; - if (Array.isArray(_data["supportedVersions"])) { - this.supportedVersions = [] as any; - for (let item of _data["supportedVersions"]) - this.supportedVersions!.push(item); - } - if (Array.isArray(_data["parametersOnMethod"])) { - this.parametersOnMethod = [] as any; - for (let item of _data["parametersOnMethod"]) - this.parametersOnMethod!.push(MethodParameterApiDescriptionModel.fromJS(item)); - } - if (Array.isArray(_data["parameters"])) { - this.parameters = [] as any; - for (let item of _data["parameters"]) - this.parameters!.push(ParameterApiDescriptionModel.fromJS(item)); - } - this.returnValue = _data["returnValue"] ? ReturnValueApiDescriptionModel.fromJS(_data["returnValue"]) : undefined; - this.allowAnonymous = _data["allowAnonymous"]; - this.implementFrom = _data["implementFrom"]; - } - } - - static fromJS(data: any): ActionApiDescriptionModel { - data = typeof data === 'object' ? data : {}; - let result = new ActionApiDescriptionModel(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["uniqueName"] = this.uniqueName; - data["name"] = this.name; - data["httpMethod"] = this.httpMethod; - data["url"] = this.url; - if (Array.isArray(this.supportedVersions)) { - data["supportedVersions"] = []; - for (let item of this.supportedVersions) - data["supportedVersions"].push(item); - } - if (Array.isArray(this.parametersOnMethod)) { - data["parametersOnMethod"] = []; - for (let item of this.parametersOnMethod) - data["parametersOnMethod"].push(item.toJSON()); - } - if (Array.isArray(this.parameters)) { - data["parameters"] = []; - for (let item of this.parameters) - data["parameters"].push(item.toJSON()); - } - data["returnValue"] = this.returnValue ? this.returnValue.toJSON() : undefined; - data["allowAnonymous"] = this.allowAnonymous; - data["implementFrom"] = this.implementFrom; - return data; - } -} - -export interface IActionApiDescriptionModel { - uniqueName: string | undefined; - name: string | undefined; - httpMethod: string | undefined; - url: string | undefined; - supportedVersions: string[] | undefined; - parametersOnMethod: MethodParameterApiDescriptionModel[] | undefined; - parameters: ParameterApiDescriptionModel[] | undefined; - returnValue: ReturnValueApiDescriptionModel; - allowAnonymous: boolean | undefined; - implementFrom: string | undefined; -} - -export class AddRoleToOrganizationUnitInput implements IAddRoleToOrganizationUnitInput { - roleId!: string[] | undefined; - organizationUnitId!: string; - - constructor(data?: IAddRoleToOrganizationUnitInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["roleId"])) { - this.roleId = [] as any; - for (let item of _data["roleId"]) - this.roleId!.push(item); - } - this.organizationUnitId = _data["organizationUnitId"]; - } - } - - static fromJS(data: any): AddRoleToOrganizationUnitInput { - data = typeof data === 'object' ? data : {}; - let result = new AddRoleToOrganizationUnitInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.roleId)) { - data["roleId"] = []; - for (let item of this.roleId) - data["roleId"].push(item); - } - data["organizationUnitId"] = this.organizationUnitId; - return data; - } -} - -export interface IAddRoleToOrganizationUnitInput { - roleId: string[] | undefined; - organizationUnitId: string; -} - -export class AddUserToOrganizationUnitInput implements IAddUserToOrganizationUnitInput { - userId!: string[] | undefined; - organizationUnitId!: string; - - constructor(data?: IAddUserToOrganizationUnitInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["userId"])) { - this.userId = [] as any; - for (let item of _data["userId"]) - this.userId!.push(item); - } - this.organizationUnitId = _data["organizationUnitId"]; - } - } - - static fromJS(data: any): AddUserToOrganizationUnitInput { - data = typeof data === 'object' ? data : {}; - let result = new AddUserToOrganizationUnitInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.userId)) { - data["userId"] = []; - for (let item of this.userId) - data["userId"].push(item); - } - data["organizationUnitId"] = this.organizationUnitId; - return data; - } -} - -export interface IAddUserToOrganizationUnitInput { - userId: string[] | undefined; - organizationUnitId: string; -} - -export class AggregateRouteConfig implements IAggregateRouteConfig { - routeKey!: string | undefined; - parameter!: string | undefined; - jsonPath!: string | undefined; - - constructor(data?: IAggregateRouteConfig) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.routeKey = _data["routeKey"]; - this.parameter = _data["parameter"]; - this.jsonPath = _data["jsonPath"]; - } - } - - static fromJS(data: any): AggregateRouteConfig { - data = typeof data === 'object' ? data : {}; - let result = new AggregateRouteConfig(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["routeKey"] = this.routeKey; - data["parameter"] = this.parameter; - data["jsonPath"] = this.jsonPath; - return data; - } -} - -export interface IAggregateRouteConfig { - routeKey: string | undefined; - parameter: string | undefined; - jsonPath: string | undefined; -} - -export class ApplicationApiDescriptionModel implements IApplicationApiDescriptionModel { - modules!: { [key: string]: ModuleApiDescriptionModel; } | undefined; - types!: { [key: string]: TypeApiDescriptionModel; } | undefined; - - constructor(data?: IApplicationApiDescriptionModel) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["modules"]) { - this.modules = {} as any; - for (let key in _data["modules"]) { - if (_data["modules"].hasOwnProperty(key)) - (this.modules)![key] = _data["modules"][key] ? ModuleApiDescriptionModel.fromJS(_data["modules"][key]) : new ModuleApiDescriptionModel(); - } - } - if (_data["types"]) { - this.types = {} as any; - for (let key in _data["types"]) { - if (_data["types"].hasOwnProperty(key)) - (this.types)![key] = _data["types"][key] ? TypeApiDescriptionModel.fromJS(_data["types"][key]) : new TypeApiDescriptionModel(); - } - } - } - } - - static fromJS(data: any): ApplicationApiDescriptionModel { - data = typeof data === 'object' ? data : {}; - let result = new ApplicationApiDescriptionModel(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.modules) { - data["modules"] = {}; - for (let key in this.modules) { - if (this.modules.hasOwnProperty(key)) - (data["modules"])[key] = this.modules[key] ? this.modules[key].toJSON() : undefined; - } - } - if (this.types) { - data["types"] = {}; - for (let key in this.types) { - if (this.types.hasOwnProperty(key)) - (data["types"])[key] = this.types[key] ? this.types[key].toJSON() : undefined; - } - } - return data; - } -} - -export interface IApplicationApiDescriptionModel { - modules: { [key: string]: ModuleApiDescriptionModel; } | undefined; - types: { [key: string]: TypeApiDescriptionModel; } | undefined; -} - -export class ApplicationAuthConfigurationDto implements IApplicationAuthConfigurationDto { - grantedPolicies!: { [key: string]: boolean; } | undefined; - - constructor(data?: IApplicationAuthConfigurationDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["grantedPolicies"]) { - this.grantedPolicies = {} as any; - for (let key in _data["grantedPolicies"]) { - if (_data["grantedPolicies"].hasOwnProperty(key)) - (this.grantedPolicies)![key] = _data["grantedPolicies"][key]; - } - } - } - } - - static fromJS(data: any): ApplicationAuthConfigurationDto { - data = typeof data === 'object' ? data : {}; - let result = new ApplicationAuthConfigurationDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.grantedPolicies) { - data["grantedPolicies"] = {}; - for (let key in this.grantedPolicies) { - if (this.grantedPolicies.hasOwnProperty(key)) - (data["grantedPolicies"])[key] = (this.grantedPolicies)[key]; - } - } - return data; - } -} - -export interface IApplicationAuthConfigurationDto { - grantedPolicies: { [key: string]: boolean; } | undefined; -} - -export class ApplicationConfigurationDto implements IApplicationConfigurationDto { - localization!: ApplicationLocalizationConfigurationDto; - auth!: ApplicationAuthConfigurationDto; - setting!: ApplicationSettingConfigurationDto; - currentUser!: CurrentUserDto; - features!: ApplicationFeatureConfigurationDto; - globalFeatures!: ApplicationGlobalFeatureConfigurationDto; - multiTenancy!: MultiTenancyInfoDto; - currentTenant!: CurrentTenantDto; - timing!: TimingDto; - clock!: ClockDto; - objectExtensions!: ObjectExtensionsDto; - extraProperties!: { [key: string]: any; } | undefined; - - constructor(data?: IApplicationConfigurationDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.localization = _data["localization"] ? ApplicationLocalizationConfigurationDto.fromJS(_data["localization"]) : undefined; - this.auth = _data["auth"] ? ApplicationAuthConfigurationDto.fromJS(_data["auth"]) : undefined; - this.setting = _data["setting"] ? ApplicationSettingConfigurationDto.fromJS(_data["setting"]) : undefined; - this.currentUser = _data["currentUser"] ? CurrentUserDto.fromJS(_data["currentUser"]) : undefined; - this.features = _data["features"] ? ApplicationFeatureConfigurationDto.fromJS(_data["features"]) : undefined; - this.globalFeatures = _data["globalFeatures"] ? ApplicationGlobalFeatureConfigurationDto.fromJS(_data["globalFeatures"]) : undefined; - this.multiTenancy = _data["multiTenancy"] ? MultiTenancyInfoDto.fromJS(_data["multiTenancy"]) : undefined; - this.currentTenant = _data["currentTenant"] ? CurrentTenantDto.fromJS(_data["currentTenant"]) : undefined; - this.timing = _data["timing"] ? TimingDto.fromJS(_data["timing"]) : undefined; - this.clock = _data["clock"] ? ClockDto.fromJS(_data["clock"]) : undefined; - this.objectExtensions = _data["objectExtensions"] ? ObjectExtensionsDto.fromJS(_data["objectExtensions"]) : undefined; - if (_data["extraProperties"]) { - this.extraProperties = {} as any; - for (let key in _data["extraProperties"]) { - if (_data["extraProperties"].hasOwnProperty(key)) - (this.extraProperties)![key] = _data["extraProperties"][key]; - } - } - } - } - - static fromJS(data: any): ApplicationConfigurationDto { - data = typeof data === 'object' ? data : {}; - let result = new ApplicationConfigurationDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["localization"] = this.localization ? this.localization.toJSON() : undefined; - data["auth"] = this.auth ? this.auth.toJSON() : undefined; - data["setting"] = this.setting ? this.setting.toJSON() : undefined; - data["currentUser"] = this.currentUser ? this.currentUser.toJSON() : undefined; - data["features"] = this.features ? this.features.toJSON() : undefined; - data["globalFeatures"] = this.globalFeatures ? this.globalFeatures.toJSON() : undefined; - data["multiTenancy"] = this.multiTenancy ? this.multiTenancy.toJSON() : undefined; - data["currentTenant"] = this.currentTenant ? this.currentTenant.toJSON() : undefined; - data["timing"] = this.timing ? this.timing.toJSON() : undefined; - data["clock"] = this.clock ? this.clock.toJSON() : undefined; - data["objectExtensions"] = this.objectExtensions ? this.objectExtensions.toJSON() : undefined; - if (this.extraProperties) { - data["extraProperties"] = {}; - for (let key in this.extraProperties) { - if (this.extraProperties.hasOwnProperty(key)) - (data["extraProperties"])[key] = (this.extraProperties)[key]; - } - } - return data; - } -} - -export interface IApplicationConfigurationDto { - localization: ApplicationLocalizationConfigurationDto; - auth: ApplicationAuthConfigurationDto; - setting: ApplicationSettingConfigurationDto; - currentUser: CurrentUserDto; - features: ApplicationFeatureConfigurationDto; - globalFeatures: ApplicationGlobalFeatureConfigurationDto; - multiTenancy: MultiTenancyInfoDto; - currentTenant: CurrentTenantDto; - timing: TimingDto; - clock: ClockDto; - objectExtensions: ObjectExtensionsDto; - extraProperties: { [key: string]: any; } | undefined; -} - -export class ApplicationFeatureConfigurationDto implements IApplicationFeatureConfigurationDto { - values!: { [key: string]: string; } | undefined; - - constructor(data?: IApplicationFeatureConfigurationDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["values"]) { - this.values = {} as any; - for (let key in _data["values"]) { - if (_data["values"].hasOwnProperty(key)) - (this.values)![key] = _data["values"][key]; - } - } - } - } - - static fromJS(data: any): ApplicationFeatureConfigurationDto { - data = typeof data === 'object' ? data : {}; - let result = new ApplicationFeatureConfigurationDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.values) { - data["values"] = {}; - for (let key in this.values) { - if (this.values.hasOwnProperty(key)) - (data["values"])[key] = (this.values)[key]; - } - } - return data; - } -} - -export interface IApplicationFeatureConfigurationDto { - values: { [key: string]: string; } | undefined; -} - -export class ApplicationGlobalFeatureConfigurationDto implements IApplicationGlobalFeatureConfigurationDto { - enabledFeatures!: string[] | undefined; - - constructor(data?: IApplicationGlobalFeatureConfigurationDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["enabledFeatures"])) { - this.enabledFeatures = [] as any; - for (let item of _data["enabledFeatures"]) - this.enabledFeatures!.push(item); - } - } - } - - static fromJS(data: any): ApplicationGlobalFeatureConfigurationDto { - data = typeof data === 'object' ? data : {}; - let result = new ApplicationGlobalFeatureConfigurationDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.enabledFeatures)) { - data["enabledFeatures"] = []; - for (let item of this.enabledFeatures) - data["enabledFeatures"].push(item); - } - return data; - } -} - -export interface IApplicationGlobalFeatureConfigurationDto { - enabledFeatures: string[] | undefined; -} - -export class ApplicationLocalizationConfigurationDto implements IApplicationLocalizationConfigurationDto { - values!: { [key: string]: { [key: string]: string; }; } | undefined; - resources!: { [key: string]: ApplicationLocalizationResourceDto; } | undefined; - languages!: LanguageInfo[] | undefined; - currentCulture!: CurrentCultureDto; - defaultResourceName!: string | undefined; - languagesMap!: { [key: string]: NameValue[]; } | undefined; - languageFilesMap!: { [key: string]: NameValue[]; } | undefined; - - constructor(data?: IApplicationLocalizationConfigurationDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["values"]) { - this.values = {} as any; - for (let key in _data["values"]) { - if (_data["values"].hasOwnProperty(key)) - (this.values)![key] = _data["values"][key]; - } - } - if (_data["resources"]) { - this.resources = {} as any; - for (let key in _data["resources"]) { - if (_data["resources"].hasOwnProperty(key)) - (this.resources)![key] = _data["resources"][key] ? ApplicationLocalizationResourceDto.fromJS(_data["resources"][key]) : new ApplicationLocalizationResourceDto(); - } - } - if (Array.isArray(_data["languages"])) { - this.languages = [] as any; - for (let item of _data["languages"]) - this.languages!.push(LanguageInfo.fromJS(item)); - } - this.currentCulture = _data["currentCulture"] ? CurrentCultureDto.fromJS(_data["currentCulture"]) : undefined; - this.defaultResourceName = _data["defaultResourceName"]; - if (_data["languagesMap"]) { - this.languagesMap = {} as any; - for (let key in _data["languagesMap"]) { - if (_data["languagesMap"].hasOwnProperty(key)) - (this.languagesMap)![key] = _data["languagesMap"][key] ? _data["languagesMap"][key].map((i: any) => NameValue.fromJS(i)) : undefined; - } - } - if (_data["languageFilesMap"]) { - this.languageFilesMap = {} as any; - for (let key in _data["languageFilesMap"]) { - if (_data["languageFilesMap"].hasOwnProperty(key)) - (this.languageFilesMap)![key] = _data["languageFilesMap"][key] ? _data["languageFilesMap"][key].map((i: any) => NameValue.fromJS(i)) : undefined; - } - } - } - } - - static fromJS(data: any): ApplicationLocalizationConfigurationDto { - data = typeof data === 'object' ? data : {}; - let result = new ApplicationLocalizationConfigurationDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.values) { - data["values"] = {}; - for (let key in this.values) { - if (this.values.hasOwnProperty(key)) - (data["values"])[key] = (this.values)[key]; - } - } - if (this.resources) { - data["resources"] = {}; - for (let key in this.resources) { - if (this.resources.hasOwnProperty(key)) - (data["resources"])[key] = this.resources[key] ? this.resources[key].toJSON() : undefined; - } - } - if (Array.isArray(this.languages)) { - data["languages"] = []; - for (let item of this.languages) - data["languages"].push(item.toJSON()); - } - data["currentCulture"] = this.currentCulture ? this.currentCulture.toJSON() : undefined; - data["defaultResourceName"] = this.defaultResourceName; - if (this.languagesMap) { - data["languagesMap"] = {}; - for (let key in this.languagesMap) { - if (this.languagesMap.hasOwnProperty(key)) - (data["languagesMap"])[key] = (this.languagesMap)[key]; - } - } - if (this.languageFilesMap) { - data["languageFilesMap"] = {}; - for (let key in this.languageFilesMap) { - if (this.languageFilesMap.hasOwnProperty(key)) - (data["languageFilesMap"])[key] = (this.languageFilesMap)[key]; - } - } - return data; - } -} - -export interface IApplicationLocalizationConfigurationDto { - values: { [key: string]: { [key: string]: string; }; } | undefined; - resources: { [key: string]: ApplicationLocalizationResourceDto; } | undefined; - languages: LanguageInfo[] | undefined; - currentCulture: CurrentCultureDto; - defaultResourceName: string | undefined; - languagesMap: { [key: string]: NameValue[]; } | undefined; - languageFilesMap: { [key: string]: NameValue[]; } | undefined; -} - -export class ApplicationLocalizationDto implements IApplicationLocalizationDto { - resources!: { [key: string]: ApplicationLocalizationResourceDto; } | undefined; - - constructor(data?: IApplicationLocalizationDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["resources"]) { - this.resources = {} as any; - for (let key in _data["resources"]) { - if (_data["resources"].hasOwnProperty(key)) - (this.resources)![key] = _data["resources"][key] ? ApplicationLocalizationResourceDto.fromJS(_data["resources"][key]) : new ApplicationLocalizationResourceDto(); - } - } - } - } - - static fromJS(data: any): ApplicationLocalizationDto { - data = typeof data === 'object' ? data : {}; - let result = new ApplicationLocalizationDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.resources) { - data["resources"] = {}; - for (let key in this.resources) { - if (this.resources.hasOwnProperty(key)) - (data["resources"])[key] = this.resources[key] ? this.resources[key].toJSON() : undefined; - } - } - return data; - } -} - -export interface IApplicationLocalizationDto { - resources: { [key: string]: ApplicationLocalizationResourceDto; } | undefined; -} - -export class ApplicationLocalizationResourceDto implements IApplicationLocalizationResourceDto { - texts!: { [key: string]: string; } | undefined; - baseResources!: string[] | undefined; - - constructor(data?: IApplicationLocalizationResourceDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["texts"]) { - this.texts = {} as any; - for (let key in _data["texts"]) { - if (_data["texts"].hasOwnProperty(key)) - (this.texts)![key] = _data["texts"][key]; - } - } - if (Array.isArray(_data["baseResources"])) { - this.baseResources = [] as any; - for (let item of _data["baseResources"]) - this.baseResources!.push(item); - } - } - } - - static fromJS(data: any): ApplicationLocalizationResourceDto { - data = typeof data === 'object' ? data : {}; - let result = new ApplicationLocalizationResourceDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.texts) { - data["texts"] = {}; - for (let key in this.texts) { - if (this.texts.hasOwnProperty(key)) - (data["texts"])[key] = (this.texts)[key]; - } - } - if (Array.isArray(this.baseResources)) { - data["baseResources"] = []; - for (let item of this.baseResources) - data["baseResources"].push(item); - } - return data; - } -} - -export interface IApplicationLocalizationResourceDto { - texts: { [key: string]: string; } | undefined; - baseResources: string[] | undefined; -} - -export class ApplicationSettingConfigurationDto implements IApplicationSettingConfigurationDto { - values!: { [key: string]: string; } | undefined; - - constructor(data?: IApplicationSettingConfigurationDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["values"]) { - this.values = {} as any; - for (let key in _data["values"]) { - if (_data["values"].hasOwnProperty(key)) - (this.values)![key] = _data["values"][key]; - } - } - } - } - - static fromJS(data: any): ApplicationSettingConfigurationDto { - data = typeof data === 'object' ? data : {}; - let result = new ApplicationSettingConfigurationDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.values) { - data["values"] = {}; - for (let key in this.values) { - if (this.values.hasOwnProperty(key)) - (data["values"])[key] = (this.values)[key]; - } - } - return data; - } -} - -export interface IApplicationSettingConfigurationDto { - values: { [key: string]: string; } | undefined; -} - -export class ChangePasswordInput implements IChangePasswordInput { - currentPassword!: string | undefined; - newPassword!: string; - - constructor(data?: IChangePasswordInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.currentPassword = _data["currentPassword"]; - this.newPassword = _data["newPassword"]; - } - } - - static fromJS(data: any): ChangePasswordInput { - data = typeof data === 'object' ? data : {}; - let result = new ChangePasswordInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["currentPassword"] = this.currentPassword; - data["newPassword"] = this.newPassword; - return data; - } -} - -export interface IChangePasswordInput { - currentPassword: string | undefined; - newPassword: string; -} - -export class ClockDto implements IClockDto { - kind!: string | undefined; - - constructor(data?: IClockDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.kind = _data["kind"]; - } - } - - static fromJS(data: any): ClockDto { - data = typeof data === 'object' ? data : {}; - let result = new ClockDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["kind"] = this.kind; - return data; - } -} - -export interface IClockDto { - kind: string | undefined; -} - -export class ControllerApiDescriptionModel implements IControllerApiDescriptionModel { - controllerName!: string | undefined; - controllerGroupName!: string | undefined; - isRemoteService!: boolean; - isIntegrationService!: boolean; - apiVersion!: string | undefined; - type!: string | undefined; - interfaces!: ControllerInterfaceApiDescriptionModel[] | undefined; - actions!: { [key: string]: ActionApiDescriptionModel; } | undefined; - - constructor(data?: IControllerApiDescriptionModel) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.controllerName = _data["controllerName"]; - this.controllerGroupName = _data["controllerGroupName"]; - this.isRemoteService = _data["isRemoteService"]; - this.isIntegrationService = _data["isIntegrationService"]; - this.apiVersion = _data["apiVersion"]; - this.type = _data["type"]; - if (Array.isArray(_data["interfaces"])) { - this.interfaces = [] as any; - for (let item of _data["interfaces"]) - this.interfaces!.push(ControllerInterfaceApiDescriptionModel.fromJS(item)); - } - if (_data["actions"]) { - this.actions = {} as any; - for (let key in _data["actions"]) { - if (_data["actions"].hasOwnProperty(key)) - (this.actions)![key] = _data["actions"][key] ? ActionApiDescriptionModel.fromJS(_data["actions"][key]) : new ActionApiDescriptionModel(); - } - } - } - } - - static fromJS(data: any): ControllerApiDescriptionModel { - data = typeof data === 'object' ? data : {}; - let result = new ControllerApiDescriptionModel(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["controllerName"] = this.controllerName; - data["controllerGroupName"] = this.controllerGroupName; - data["isRemoteService"] = this.isRemoteService; - data["isIntegrationService"] = this.isIntegrationService; - data["apiVersion"] = this.apiVersion; - data["type"] = this.type; - if (Array.isArray(this.interfaces)) { - data["interfaces"] = []; - for (let item of this.interfaces) - data["interfaces"].push(item.toJSON()); - } - if (this.actions) { - data["actions"] = {}; - for (let key in this.actions) { - if (this.actions.hasOwnProperty(key)) - (data["actions"])[key] = this.actions[key] ? this.actions[key].toJSON() : undefined; - } - } - return data; - } -} - -export interface IControllerApiDescriptionModel { - controllerName: string | undefined; - controllerGroupName: string | undefined; - isRemoteService: boolean; - isIntegrationService: boolean; - apiVersion: string | undefined; - type: string | undefined; - interfaces: ControllerInterfaceApiDescriptionModel[] | undefined; - actions: { [key: string]: ActionApiDescriptionModel; } | undefined; -} - -export class ControllerInterfaceApiDescriptionModel implements IControllerInterfaceApiDescriptionModel { - type!: string | undefined; - name!: string | undefined; - methods!: InterfaceMethodApiDescriptionModel[] | undefined; - - constructor(data?: IControllerInterfaceApiDescriptionModel) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.type = _data["type"]; - this.name = _data["name"]; - if (Array.isArray(_data["methods"])) { - this.methods = [] as any; - for (let item of _data["methods"]) - this.methods!.push(InterfaceMethodApiDescriptionModel.fromJS(item)); - } - } - } - - static fromJS(data: any): ControllerInterfaceApiDescriptionModel { - data = typeof data === 'object' ? data : {}; - let result = new ControllerInterfaceApiDescriptionModel(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["type"] = this.type; - data["name"] = this.name; - if (Array.isArray(this.methods)) { - data["methods"] = []; - for (let item of this.methods) - data["methods"].push(item.toJSON()); - } - return data; - } -} - -export interface IControllerInterfaceApiDescriptionModel { - type: string | undefined; - name: string | undefined; - methods: InterfaceMethodApiDescriptionModel[] | undefined; -} - -export class CreateDataDictinaryDetailInput implements ICreateDataDictinaryDetailInput { - id!: string; - code!: string | undefined; - displayText!: string | undefined; - description!: string | undefined; - order!: number; - - constructor(data?: ICreateDataDictinaryDetailInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.code = _data["code"]; - this.displayText = _data["displayText"]; - this.description = _data["description"]; - this.order = _data["order"]; - } - } - - static fromJS(data: any): CreateDataDictinaryDetailInput { - data = typeof data === 'object' ? data : {}; - let result = new CreateDataDictinaryDetailInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["code"] = this.code; - data["displayText"] = this.displayText; - data["description"] = this.description; - data["order"] = this.order; - return data; - } -} - -export interface ICreateDataDictinaryDetailInput { - id: string; - code: string | undefined; - displayText: string | undefined; - description: string | undefined; - order: number; -} - -export class CreateDataDictinaryInput implements ICreateDataDictinaryInput { - code!: string | undefined; - displayText!: string | undefined; - description!: string | undefined; - - constructor(data?: ICreateDataDictinaryInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.code = _data["code"]; - this.displayText = _data["displayText"]; - this.description = _data["description"]; - } - } - - static fromJS(data: any): CreateDataDictinaryInput { - data = typeof data === 'object' ? data : {}; - let result = new CreateDataDictinaryInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["code"] = this.code; - data["displayText"] = this.displayText; - data["description"] = this.description; - return data; - } -} - -export interface ICreateDataDictinaryInput { - code: string | undefined; - displayText: string | undefined; - description: string | undefined; -} - -/** 创建语言 */ -export class CreateLanguageInput implements ICreateLanguageInput { - /** 语言名称 */ - cultureName!: string | undefined; - /** Ui语言名称 */ - uiCultureName!: string | undefined; - /** 显示名称 */ - displayName!: string | undefined; - /** 图标 */ - flagIcon!: string | undefined; - /** 是否启用 */ - isEnabled!: boolean; - - constructor(data?: ICreateLanguageInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.cultureName = _data["cultureName"]; - this.uiCultureName = _data["uiCultureName"]; - this.displayName = _data["displayName"]; - this.flagIcon = _data["flagIcon"]; - this.isEnabled = _data["isEnabled"]; - } - } - - static fromJS(data: any): CreateLanguageInput { - data = typeof data === 'object' ? data : {}; - let result = new CreateLanguageInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["cultureName"] = this.cultureName; - data["uiCultureName"] = this.uiCultureName; - data["displayName"] = this.displayName; - data["flagIcon"] = this.flagIcon; - data["isEnabled"] = this.isEnabled; - return data; - } -} - -/** 创建语言 */ -export interface ICreateLanguageInput { - /** 语言名称 */ - cultureName: string | undefined; - /** Ui语言名称 */ - uiCultureName: string | undefined; - /** 显示名称 */ - displayName: string | undefined; - /** 图标 */ - flagIcon: string | undefined; - /** 是否启用 */ - isEnabled: boolean; -} - -/** 创建语言文本 */ -export class CreateLanguageTextInput implements ICreateLanguageTextInput { - /** 资源名称 */ - resourceName!: string | undefined; - /** 语言名称 */ - cultureName!: string | undefined; - /** 名称 */ - name!: string | undefined; - /** 值 */ - value!: string | undefined; - - constructor(data?: ICreateLanguageTextInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.resourceName = _data["resourceName"]; - this.cultureName = _data["cultureName"]; - this.name = _data["name"]; - this.value = _data["value"]; - } - } - - static fromJS(data: any): CreateLanguageTextInput { - data = typeof data === 'object' ? data : {}; - let result = new CreateLanguageTextInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["resourceName"] = this.resourceName; - data["cultureName"] = this.cultureName; - data["name"] = this.name; - data["value"] = this.value; - return data; - } -} - -/** 创建语言文本 */ -export interface ICreateLanguageTextInput { - /** 资源名称 */ - resourceName: string | undefined; - /** 语言名称 */ - cultureName: string | undefined; - /** 名称 */ - name: string | undefined; - /** 值 */ - value: string | undefined; -} - -export class CreateOrganizationUnitInput implements ICreateOrganizationUnitInput { - displayName!: string | undefined; - parentId!: string | undefined; - - constructor(data?: ICreateOrganizationUnitInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.displayName = _data["displayName"]; - this.parentId = _data["parentId"]; - } - } - - static fromJS(data: any): CreateOrganizationUnitInput { - data = typeof data === 'object' ? data : {}; - let result = new CreateOrganizationUnitInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["displayName"] = this.displayName; - data["parentId"] = this.parentId; - return data; - } -} - -export interface ICreateOrganizationUnitInput { - displayName: string | undefined; - parentId: string | undefined; -} - -export class CurrentCultureDto implements ICurrentCultureDto { - displayName!: string | undefined; - englishName!: string | undefined; - threeLetterIsoLanguageName!: string | undefined; - twoLetterIsoLanguageName!: string | undefined; - isRightToLeft!: boolean; - cultureName!: string | undefined; - name!: string | undefined; - nativeName!: string | undefined; - dateTimeFormat!: DateTimeFormatDto; - - constructor(data?: ICurrentCultureDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.displayName = _data["displayName"]; - this.englishName = _data["englishName"]; - this.threeLetterIsoLanguageName = _data["threeLetterIsoLanguageName"]; - this.twoLetterIsoLanguageName = _data["twoLetterIsoLanguageName"]; - this.isRightToLeft = _data["isRightToLeft"]; - this.cultureName = _data["cultureName"]; - this.name = _data["name"]; - this.nativeName = _data["nativeName"]; - this.dateTimeFormat = _data["dateTimeFormat"] ? DateTimeFormatDto.fromJS(_data["dateTimeFormat"]) : undefined; - } - } - - static fromJS(data: any): CurrentCultureDto { - data = typeof data === 'object' ? data : {}; - let result = new CurrentCultureDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["displayName"] = this.displayName; - data["englishName"] = this.englishName; - data["threeLetterIsoLanguageName"] = this.threeLetterIsoLanguageName; - data["twoLetterIsoLanguageName"] = this.twoLetterIsoLanguageName; - data["isRightToLeft"] = this.isRightToLeft; - data["cultureName"] = this.cultureName; - data["name"] = this.name; - data["nativeName"] = this.nativeName; - data["dateTimeFormat"] = this.dateTimeFormat ? this.dateTimeFormat.toJSON() : undefined; - return data; - } -} - -export interface ICurrentCultureDto { - displayName: string | undefined; - englishName: string | undefined; - threeLetterIsoLanguageName: string | undefined; - twoLetterIsoLanguageName: string | undefined; - isRightToLeft: boolean; - cultureName: string | undefined; - name: string | undefined; - nativeName: string | undefined; - dateTimeFormat: DateTimeFormatDto; -} - -export class CurrentTenantDto implements ICurrentTenantDto { - id!: string | undefined; - name!: string | undefined; - isAvailable!: boolean; - - constructor(data?: ICurrentTenantDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.name = _data["name"]; - this.isAvailable = _data["isAvailable"]; - } - } - - static fromJS(data: any): CurrentTenantDto { - data = typeof data === 'object' ? data : {}; - let result = new CurrentTenantDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["name"] = this.name; - data["isAvailable"] = this.isAvailable; - return data; - } -} - -export interface ICurrentTenantDto { - id: string | undefined; - name: string | undefined; - isAvailable: boolean; -} - -export class CurrentUserDto implements ICurrentUserDto { - isAuthenticated!: boolean; - id!: string | undefined; - tenantId!: string | undefined; - impersonatorUserId!: string | undefined; - impersonatorTenantId!: string | undefined; - impersonatorUserName!: string | undefined; - impersonatorTenantName!: string | undefined; - userName!: string | undefined; - name!: string | undefined; - surName!: string | undefined; - email!: string | undefined; - emailVerified!: boolean; - phoneNumber!: string | undefined; - phoneNumberVerified!: boolean; - roles!: string[] | undefined; - - constructor(data?: ICurrentUserDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.isAuthenticated = _data["isAuthenticated"]; - this.id = _data["id"]; - this.tenantId = _data["tenantId"]; - this.impersonatorUserId = _data["impersonatorUserId"]; - this.impersonatorTenantId = _data["impersonatorTenantId"]; - this.impersonatorUserName = _data["impersonatorUserName"]; - this.impersonatorTenantName = _data["impersonatorTenantName"]; - this.userName = _data["userName"]; - this.name = _data["name"]; - this.surName = _data["surName"]; - this.email = _data["email"]; - this.emailVerified = _data["emailVerified"]; - this.phoneNumber = _data["phoneNumber"]; - this.phoneNumberVerified = _data["phoneNumberVerified"]; - if (Array.isArray(_data["roles"])) { - this.roles = [] as any; - for (let item of _data["roles"]) - this.roles!.push(item); - } - } - } - - static fromJS(data: any): CurrentUserDto { - data = typeof data === 'object' ? data : {}; - let result = new CurrentUserDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["isAuthenticated"] = this.isAuthenticated; - data["id"] = this.id; - data["tenantId"] = this.tenantId; - data["impersonatorUserId"] = this.impersonatorUserId; - data["impersonatorTenantId"] = this.impersonatorTenantId; - data["impersonatorUserName"] = this.impersonatorUserName; - data["impersonatorTenantName"] = this.impersonatorTenantName; - data["userName"] = this.userName; - data["name"] = this.name; - data["surName"] = this.surName; - data["email"] = this.email; - data["emailVerified"] = this.emailVerified; - data["phoneNumber"] = this.phoneNumber; - data["phoneNumberVerified"] = this.phoneNumberVerified; - if (Array.isArray(this.roles)) { - data["roles"] = []; - for (let item of this.roles) - data["roles"].push(item); - } - return data; - } -} - -export interface ICurrentUserDto { - isAuthenticated: boolean; - id: string | undefined; - tenantId: string | undefined; - impersonatorUserId: string | undefined; - impersonatorTenantId: string | undefined; - impersonatorUserName: string | undefined; - impersonatorTenantName: string | undefined; - userName: string | undefined; - name: string | undefined; - surName: string | undefined; - email: string | undefined; - emailVerified: boolean; - phoneNumber: string | undefined; - phoneNumberVerified: boolean; - roles: string[] | undefined; -} - -export class DateTimeFormatDto implements IDateTimeFormatDto { - calendarAlgorithmType!: string | undefined; - dateTimeFormatLong!: string | undefined; - shortDatePattern!: string | undefined; - fullDateTimePattern!: string | undefined; - dateSeparator!: string | undefined; - shortTimePattern!: string | undefined; - longTimePattern!: string | undefined; - - constructor(data?: IDateTimeFormatDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.calendarAlgorithmType = _data["calendarAlgorithmType"]; - this.dateTimeFormatLong = _data["dateTimeFormatLong"]; - this.shortDatePattern = _data["shortDatePattern"]; - this.fullDateTimePattern = _data["fullDateTimePattern"]; - this.dateSeparator = _data["dateSeparator"]; - this.shortTimePattern = _data["shortTimePattern"]; - this.longTimePattern = _data["longTimePattern"]; - } - } - - static fromJS(data: any): DateTimeFormatDto { - data = typeof data === 'object' ? data : {}; - let result = new DateTimeFormatDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["calendarAlgorithmType"] = this.calendarAlgorithmType; - data["dateTimeFormatLong"] = this.dateTimeFormatLong; - data["shortDatePattern"] = this.shortDatePattern; - data["fullDateTimePattern"] = this.fullDateTimePattern; - data["dateSeparator"] = this.dateSeparator; - data["shortTimePattern"] = this.shortTimePattern; - data["longTimePattern"] = this.longTimePattern; - return data; - } -} - -export interface IDateTimeFormatDto { - calendarAlgorithmType: string | undefined; - dateTimeFormatLong: string | undefined; - shortDatePattern: string | undefined; - fullDateTimePattern: string | undefined; - dateSeparator: string | undefined; - shortTimePattern: string | undefined; - longTimePattern: string | undefined; -} - -export class DeleteDataDictionaryDetailInput implements IDeleteDataDictionaryDetailInput { - dataDictionaryId!: string; - dataDictionayDetailId!: string; - - constructor(data?: IDeleteDataDictionaryDetailInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.dataDictionaryId = _data["dataDictionaryId"]; - this.dataDictionayDetailId = _data["dataDictionayDetailId"]; - } - } - - static fromJS(data: any): DeleteDataDictionaryDetailInput { - data = typeof data === 'object' ? data : {}; - let result = new DeleteDataDictionaryDetailInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["dataDictionaryId"] = this.dataDictionaryId; - data["dataDictionayDetailId"] = this.dataDictionayDetailId; - return data; - } -} - -export interface IDeleteDataDictionaryDetailInput { - dataDictionaryId: string; - dataDictionayDetailId: string; -} - -/** 删除语言 */ -export class DeleteLanguageInput implements IDeleteLanguageInput { - /** 语言Id */ - id!: string; - - constructor(data?: IDeleteLanguageInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - } - } - - static fromJS(data: any): DeleteLanguageInput { - data = typeof data === 'object' ? data : {}; - let result = new DeleteLanguageInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - return data; - } -} - -/** 删除语言 */ -export interface IDeleteLanguageInput { - /** 语言Id */ - id: string; -} - -export enum EntityChangeType { - Created = 0, - Updated = 1, - Deleted = 2, -} - -export class EntityExtensionDto implements IEntityExtensionDto { - properties!: { [key: string]: ExtensionPropertyDto; } | undefined; - configuration!: { [key: string]: any; } | undefined; - - constructor(data?: IEntityExtensionDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["properties"]) { - this.properties = {} as any; - for (let key in _data["properties"]) { - if (_data["properties"].hasOwnProperty(key)) - (this.properties)![key] = _data["properties"][key] ? ExtensionPropertyDto.fromJS(_data["properties"][key]) : new ExtensionPropertyDto(); - } - } - if (_data["configuration"]) { - this.configuration = {} as any; - for (let key in _data["configuration"]) { - if (_data["configuration"].hasOwnProperty(key)) - (this.configuration)![key] = _data["configuration"][key]; - } - } - } - } - - static fromJS(data: any): EntityExtensionDto { - data = typeof data === 'object' ? data : {}; - let result = new EntityExtensionDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.properties) { - data["properties"] = {}; - for (let key in this.properties) { - if (this.properties.hasOwnProperty(key)) - (data["properties"])[key] = this.properties[key] ? this.properties[key].toJSON() : undefined; - } - } - if (this.configuration) { - data["configuration"] = {}; - for (let key in this.configuration) { - if (this.configuration.hasOwnProperty(key)) - (data["configuration"])[key] = (this.configuration)[key]; - } - } - return data; - } -} - -export interface IEntityExtensionDto { - properties: { [key: string]: ExtensionPropertyDto; } | undefined; - configuration: { [key: string]: any; } | undefined; -} - -export class ExtensionEnumDto implements IExtensionEnumDto { - fields!: ExtensionEnumFieldDto[] | undefined; - localizationResource!: string | undefined; - - constructor(data?: IExtensionEnumDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["fields"])) { - this.fields = [] as any; - for (let item of _data["fields"]) - this.fields!.push(ExtensionEnumFieldDto.fromJS(item)); - } - this.localizationResource = _data["localizationResource"]; - } - } - - static fromJS(data: any): ExtensionEnumDto { - data = typeof data === 'object' ? data : {}; - let result = new ExtensionEnumDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.fields)) { - data["fields"] = []; - for (let item of this.fields) - data["fields"].push(item.toJSON()); - } - data["localizationResource"] = this.localizationResource; - return data; - } -} - -export interface IExtensionEnumDto { - fields: ExtensionEnumFieldDto[] | undefined; - localizationResource: string | undefined; -} - -export class ExtensionEnumFieldDto implements IExtensionEnumFieldDto { - name!: string | undefined; - value!: any | undefined; - - constructor(data?: IExtensionEnumFieldDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.name = _data["name"]; - this.value = _data["value"]; - } - } - - static fromJS(data: any): ExtensionEnumFieldDto { - data = typeof data === 'object' ? data : {}; - let result = new ExtensionEnumFieldDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["name"] = this.name; - data["value"] = this.value; - return data; - } -} - -export interface IExtensionEnumFieldDto { - name: string | undefined; - value: any | undefined; -} - -export class ExtensionPropertyApiCreateDto implements IExtensionPropertyApiCreateDto { - isAvailable!: boolean; - - constructor(data?: IExtensionPropertyApiCreateDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.isAvailable = _data["isAvailable"]; - } - } - - static fromJS(data: any): ExtensionPropertyApiCreateDto { - data = typeof data === 'object' ? data : {}; - let result = new ExtensionPropertyApiCreateDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["isAvailable"] = this.isAvailable; - return data; - } -} - -export interface IExtensionPropertyApiCreateDto { - isAvailable: boolean; -} - -export class ExtensionPropertyApiDto implements IExtensionPropertyApiDto { - onGet!: ExtensionPropertyApiGetDto; - onCreate!: ExtensionPropertyApiCreateDto; - onUpdate!: ExtensionPropertyApiUpdateDto; - - constructor(data?: IExtensionPropertyApiDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.onGet = _data["onGet"] ? ExtensionPropertyApiGetDto.fromJS(_data["onGet"]) : undefined; - this.onCreate = _data["onCreate"] ? ExtensionPropertyApiCreateDto.fromJS(_data["onCreate"]) : undefined; - this.onUpdate = _data["onUpdate"] ? ExtensionPropertyApiUpdateDto.fromJS(_data["onUpdate"]) : undefined; - } - } - - static fromJS(data: any): ExtensionPropertyApiDto { - data = typeof data === 'object' ? data : {}; - let result = new ExtensionPropertyApiDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["onGet"] = this.onGet ? this.onGet.toJSON() : undefined; - data["onCreate"] = this.onCreate ? this.onCreate.toJSON() : undefined; - data["onUpdate"] = this.onUpdate ? this.onUpdate.toJSON() : undefined; - return data; - } -} - -export interface IExtensionPropertyApiDto { - onGet: ExtensionPropertyApiGetDto; - onCreate: ExtensionPropertyApiCreateDto; - onUpdate: ExtensionPropertyApiUpdateDto; -} - -export class ExtensionPropertyApiGetDto implements IExtensionPropertyApiGetDto { - isAvailable!: boolean; - - constructor(data?: IExtensionPropertyApiGetDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.isAvailable = _data["isAvailable"]; - } - } - - static fromJS(data: any): ExtensionPropertyApiGetDto { - data = typeof data === 'object' ? data : {}; - let result = new ExtensionPropertyApiGetDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["isAvailable"] = this.isAvailable; - return data; - } -} - -export interface IExtensionPropertyApiGetDto { - isAvailable: boolean; -} - -export class ExtensionPropertyApiUpdateDto implements IExtensionPropertyApiUpdateDto { - isAvailable!: boolean; - - constructor(data?: IExtensionPropertyApiUpdateDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.isAvailable = _data["isAvailable"]; - } - } - - static fromJS(data: any): ExtensionPropertyApiUpdateDto { - data = typeof data === 'object' ? data : {}; - let result = new ExtensionPropertyApiUpdateDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["isAvailable"] = this.isAvailable; - return data; - } -} - -export interface IExtensionPropertyApiUpdateDto { - isAvailable: boolean; -} - -export class ExtensionPropertyAttributeDto implements IExtensionPropertyAttributeDto { - typeSimple!: string | undefined; - config!: { [key: string]: any; } | undefined; - - constructor(data?: IExtensionPropertyAttributeDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.typeSimple = _data["typeSimple"]; - if (_data["config"]) { - this.config = {} as any; - for (let key in _data["config"]) { - if (_data["config"].hasOwnProperty(key)) - (this.config)![key] = _data["config"][key]; - } - } - } - } - - static fromJS(data: any): ExtensionPropertyAttributeDto { - data = typeof data === 'object' ? data : {}; - let result = new ExtensionPropertyAttributeDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["typeSimple"] = this.typeSimple; - if (this.config) { - data["config"] = {}; - for (let key in this.config) { - if (this.config.hasOwnProperty(key)) - (data["config"])[key] = (this.config)[key]; - } - } - return data; - } -} - -export interface IExtensionPropertyAttributeDto { - typeSimple: string | undefined; - config: { [key: string]: any; } | undefined; -} - -export class ExtensionPropertyDto implements IExtensionPropertyDto { - type!: string | undefined; - typeSimple!: string | undefined; - displayName!: LocalizableStringDto; - api!: ExtensionPropertyApiDto; - ui!: ExtensionPropertyUiDto; - attributes!: ExtensionPropertyAttributeDto[] | undefined; - configuration!: { [key: string]: any; } | undefined; - defaultValue!: any | undefined; - - constructor(data?: IExtensionPropertyDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.type = _data["type"]; - this.typeSimple = _data["typeSimple"]; - this.displayName = _data["displayName"] ? LocalizableStringDto.fromJS(_data["displayName"]) : undefined; - this.api = _data["api"] ? ExtensionPropertyApiDto.fromJS(_data["api"]) : undefined; - this.ui = _data["ui"] ? ExtensionPropertyUiDto.fromJS(_data["ui"]) : undefined; - if (Array.isArray(_data["attributes"])) { - this.attributes = [] as any; - for (let item of _data["attributes"]) - this.attributes!.push(ExtensionPropertyAttributeDto.fromJS(item)); - } - if (_data["configuration"]) { - this.configuration = {} as any; - for (let key in _data["configuration"]) { - if (_data["configuration"].hasOwnProperty(key)) - (this.configuration)![key] = _data["configuration"][key]; - } - } - this.defaultValue = _data["defaultValue"]; - } - } - - static fromJS(data: any): ExtensionPropertyDto { - data = typeof data === 'object' ? data : {}; - let result = new ExtensionPropertyDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["type"] = this.type; - data["typeSimple"] = this.typeSimple; - data["displayName"] = this.displayName ? this.displayName.toJSON() : undefined; - data["api"] = this.api ? this.api.toJSON() : undefined; - data["ui"] = this.ui ? this.ui.toJSON() : undefined; - if (Array.isArray(this.attributes)) { - data["attributes"] = []; - for (let item of this.attributes) - data["attributes"].push(item.toJSON()); - } - if (this.configuration) { - data["configuration"] = {}; - for (let key in this.configuration) { - if (this.configuration.hasOwnProperty(key)) - (data["configuration"])[key] = (this.configuration)[key]; - } - } - data["defaultValue"] = this.defaultValue; - return data; - } -} - -export interface IExtensionPropertyDto { - type: string | undefined; - typeSimple: string | undefined; - displayName: LocalizableStringDto; - api: ExtensionPropertyApiDto; - ui: ExtensionPropertyUiDto; - attributes: ExtensionPropertyAttributeDto[] | undefined; - configuration: { [key: string]: any; } | undefined; - defaultValue: any | undefined; -} - -export class ExtensionPropertyUiDto implements IExtensionPropertyUiDto { - onTable!: ExtensionPropertyUiTableDto; - onCreateForm!: ExtensionPropertyUiFormDto; - onEditForm!: ExtensionPropertyUiFormDto; - lookup!: ExtensionPropertyUiLookupDto; - - constructor(data?: IExtensionPropertyUiDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.onTable = _data["onTable"] ? ExtensionPropertyUiTableDto.fromJS(_data["onTable"]) : undefined; - this.onCreateForm = _data["onCreateForm"] ? ExtensionPropertyUiFormDto.fromJS(_data["onCreateForm"]) : undefined; - this.onEditForm = _data["onEditForm"] ? ExtensionPropertyUiFormDto.fromJS(_data["onEditForm"]) : undefined; - this.lookup = _data["lookup"] ? ExtensionPropertyUiLookupDto.fromJS(_data["lookup"]) : undefined; - } - } - - static fromJS(data: any): ExtensionPropertyUiDto { - data = typeof data === 'object' ? data : {}; - let result = new ExtensionPropertyUiDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["onTable"] = this.onTable ? this.onTable.toJSON() : undefined; - data["onCreateForm"] = this.onCreateForm ? this.onCreateForm.toJSON() : undefined; - data["onEditForm"] = this.onEditForm ? this.onEditForm.toJSON() : undefined; - data["lookup"] = this.lookup ? this.lookup.toJSON() : undefined; - return data; - } -} - -export interface IExtensionPropertyUiDto { - onTable: ExtensionPropertyUiTableDto; - onCreateForm: ExtensionPropertyUiFormDto; - onEditForm: ExtensionPropertyUiFormDto; - lookup: ExtensionPropertyUiLookupDto; -} - -export class ExtensionPropertyUiFormDto implements IExtensionPropertyUiFormDto { - isVisible!: boolean; - - constructor(data?: IExtensionPropertyUiFormDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.isVisible = _data["isVisible"]; - } - } - - static fromJS(data: any): ExtensionPropertyUiFormDto { - data = typeof data === 'object' ? data : {}; - let result = new ExtensionPropertyUiFormDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["isVisible"] = this.isVisible; - return data; - } -} - -export interface IExtensionPropertyUiFormDto { - isVisible: boolean; -} - -export class ExtensionPropertyUiLookupDto implements IExtensionPropertyUiLookupDto { - url!: string | undefined; - resultListPropertyName!: string | undefined; - displayPropertyName!: string | undefined; - valuePropertyName!: string | undefined; - filterParamName!: string | undefined; - - constructor(data?: IExtensionPropertyUiLookupDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.url = _data["url"]; - this.resultListPropertyName = _data["resultListPropertyName"]; - this.displayPropertyName = _data["displayPropertyName"]; - this.valuePropertyName = _data["valuePropertyName"]; - this.filterParamName = _data["filterParamName"]; - } - } - - static fromJS(data: any): ExtensionPropertyUiLookupDto { - data = typeof data === 'object' ? data : {}; - let result = new ExtensionPropertyUiLookupDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["url"] = this.url; - data["resultListPropertyName"] = this.resultListPropertyName; - data["displayPropertyName"] = this.displayPropertyName; - data["valuePropertyName"] = this.valuePropertyName; - data["filterParamName"] = this.filterParamName; - return data; - } -} - -export interface IExtensionPropertyUiLookupDto { - url: string | undefined; - resultListPropertyName: string | undefined; - displayPropertyName: string | undefined; - valuePropertyName: string | undefined; - filterParamName: string | undefined; -} - -export class ExtensionPropertyUiTableDto implements IExtensionPropertyUiTableDto { - isVisible!: boolean; - - constructor(data?: IExtensionPropertyUiTableDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.isVisible = _data["isVisible"]; - } - } - - static fromJS(data: any): ExtensionPropertyUiTableDto { - data = typeof data === 'object' ? data : {}; - let result = new ExtensionPropertyUiTableDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["isVisible"] = this.isVisible; - return data; - } -} - -export interface IExtensionPropertyUiTableDto { - isVisible: boolean; -} - -export class FileAggregateRoute implements IFileAggregateRoute { - routeKeys!: string[] | undefined; - routeKeysConfig!: AggregateRouteConfig[] | undefined; - upstreamPathTemplate!: string | undefined; - upstreamHost!: string | undefined; - routeIsCaseSensitive!: boolean; - aggregator!: string | undefined; - readonly upstreamHttpMethod!: string[] | undefined; - priority!: number; - - constructor(data?: IFileAggregateRoute) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["routeKeys"])) { - this.routeKeys = [] as any; - for (let item of _data["routeKeys"]) - this.routeKeys!.push(item); - } - if (Array.isArray(_data["routeKeysConfig"])) { - this.routeKeysConfig = [] as any; - for (let item of _data["routeKeysConfig"]) - this.routeKeysConfig!.push(AggregateRouteConfig.fromJS(item)); - } - this.upstreamPathTemplate = _data["upstreamPathTemplate"]; - this.upstreamHost = _data["upstreamHost"]; - this.routeIsCaseSensitive = _data["routeIsCaseSensitive"]; - this.aggregator = _data["aggregator"]; - if (Array.isArray(_data["upstreamHttpMethod"])) { - (this).upstreamHttpMethod = [] as any; - for (let item of _data["upstreamHttpMethod"]) - (this).upstreamHttpMethod!.push(item); - } - this.priority = _data["priority"]; - } - } - - static fromJS(data: any): FileAggregateRoute { - data = typeof data === 'object' ? data : {}; - let result = new FileAggregateRoute(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.routeKeys)) { - data["routeKeys"] = []; - for (let item of this.routeKeys) - data["routeKeys"].push(item); - } - if (Array.isArray(this.routeKeysConfig)) { - data["routeKeysConfig"] = []; - for (let item of this.routeKeysConfig) - data["routeKeysConfig"].push(item.toJSON()); - } - data["upstreamPathTemplate"] = this.upstreamPathTemplate; - data["upstreamHost"] = this.upstreamHost; - data["routeIsCaseSensitive"] = this.routeIsCaseSensitive; - data["aggregator"] = this.aggregator; - if (Array.isArray(this.upstreamHttpMethod)) { - data["upstreamHttpMethod"] = []; - for (let item of this.upstreamHttpMethod) - data["upstreamHttpMethod"].push(item); - } - data["priority"] = this.priority; - return data; - } -} - -export interface IFileAggregateRoute { - routeKeys: string[] | undefined; - routeKeysConfig: AggregateRouteConfig[] | undefined; - upstreamPathTemplate: string | undefined; - upstreamHost: string | undefined; - routeIsCaseSensitive: boolean; - aggregator: string | undefined; - upstreamHttpMethod: string[] | undefined; - priority: number; -} - -export class FileAuthenticationOptions implements IFileAuthenticationOptions { - authenticationProviderKey!: string | undefined; - allowedScopes!: string[] | undefined; - - constructor(data?: IFileAuthenticationOptions) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.authenticationProviderKey = _data["authenticationProviderKey"]; - if (Array.isArray(_data["allowedScopes"])) { - this.allowedScopes = [] as any; - for (let item of _data["allowedScopes"]) - this.allowedScopes!.push(item); - } - } - } - - static fromJS(data: any): FileAuthenticationOptions { - data = typeof data === 'object' ? data : {}; - let result = new FileAuthenticationOptions(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["authenticationProviderKey"] = this.authenticationProviderKey; - if (Array.isArray(this.allowedScopes)) { - data["allowedScopes"] = []; - for (let item of this.allowedScopes) - data["allowedScopes"].push(item); - } - return data; - } -} - -export interface IFileAuthenticationOptions { - authenticationProviderKey: string | undefined; - allowedScopes: string[] | undefined; -} - -export class FileCacheOptions implements IFileCacheOptions { - ttlSeconds!: number; - region!: string | undefined; - - constructor(data?: IFileCacheOptions) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.ttlSeconds = _data["ttlSeconds"]; - this.region = _data["region"]; - } - } - - static fromJS(data: any): FileCacheOptions { - data = typeof data === 'object' ? data : {}; - let result = new FileCacheOptions(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["ttlSeconds"] = this.ttlSeconds; - data["region"] = this.region; - return data; - } -} - -export interface IFileCacheOptions { - ttlSeconds: number; - region: string | undefined; -} - -export class FileConfiguration implements IFileConfiguration { - routes!: FileRoute[] | undefined; - dynamicRoutes!: FileDynamicRoute[] | undefined; - aggregates!: FileAggregateRoute[] | undefined; - globalConfiguration!: FileGlobalConfiguration; - - constructor(data?: IFileConfiguration) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["routes"])) { - this.routes = [] as any; - for (let item of _data["routes"]) - this.routes!.push(FileRoute.fromJS(item)); - } - if (Array.isArray(_data["dynamicRoutes"])) { - this.dynamicRoutes = [] as any; - for (let item of _data["dynamicRoutes"]) - this.dynamicRoutes!.push(FileDynamicRoute.fromJS(item)); - } - if (Array.isArray(_data["aggregates"])) { - this.aggregates = [] as any; - for (let item of _data["aggregates"]) - this.aggregates!.push(FileAggregateRoute.fromJS(item)); - } - this.globalConfiguration = _data["globalConfiguration"] ? FileGlobalConfiguration.fromJS(_data["globalConfiguration"]) : undefined; - } - } - - static fromJS(data: any): FileConfiguration { - data = typeof data === 'object' ? data : {}; - let result = new FileConfiguration(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.routes)) { - data["routes"] = []; - for (let item of this.routes) - data["routes"].push(item.toJSON()); - } - if (Array.isArray(this.dynamicRoutes)) { - data["dynamicRoutes"] = []; - for (let item of this.dynamicRoutes) - data["dynamicRoutes"].push(item.toJSON()); - } - if (Array.isArray(this.aggregates)) { - data["aggregates"] = []; - for (let item of this.aggregates) - data["aggregates"].push(item.toJSON()); - } - data["globalConfiguration"] = this.globalConfiguration ? this.globalConfiguration.toJSON() : undefined; - return data; - } -} - -export interface IFileConfiguration { - routes: FileRoute[] | undefined; - dynamicRoutes: FileDynamicRoute[] | undefined; - aggregates: FileAggregateRoute[] | undefined; - globalConfiguration: FileGlobalConfiguration; -} - -export class FileDynamicRoute implements IFileDynamicRoute { - serviceName!: string | undefined; - rateLimitRule!: FileRateLimitRule; - downstreamHttpVersion!: string | undefined; - - constructor(data?: IFileDynamicRoute) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.serviceName = _data["serviceName"]; - this.rateLimitRule = _data["rateLimitRule"] ? FileRateLimitRule.fromJS(_data["rateLimitRule"]) : undefined; - this.downstreamHttpVersion = _data["downstreamHttpVersion"]; - } - } - - static fromJS(data: any): FileDynamicRoute { - data = typeof data === 'object' ? data : {}; - let result = new FileDynamicRoute(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["serviceName"] = this.serviceName; - data["rateLimitRule"] = this.rateLimitRule ? this.rateLimitRule.toJSON() : undefined; - data["downstreamHttpVersion"] = this.downstreamHttpVersion; - return data; - } -} - -export interface IFileDynamicRoute { - serviceName: string | undefined; - rateLimitRule: FileRateLimitRule; - downstreamHttpVersion: string | undefined; -} - -export class FileGlobalConfiguration implements IFileGlobalConfiguration { - requestIdKey!: string | undefined; - serviceDiscoveryProvider!: FileServiceDiscoveryProvider; - rateLimitOptions!: FileRateLimitOptions; - qoSOptions!: FileQoSOptions; - baseUrl!: string | undefined; - loadBalancerOptions!: FileLoadBalancerOptions; - downstreamScheme!: string | undefined; - httpHandlerOptions!: FileHttpHandlerOptions; - downstreamHttpVersion!: string | undefined; - - constructor(data?: IFileGlobalConfiguration) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.requestIdKey = _data["requestIdKey"]; - this.serviceDiscoveryProvider = _data["serviceDiscoveryProvider"] ? FileServiceDiscoveryProvider.fromJS(_data["serviceDiscoveryProvider"]) : undefined; - this.rateLimitOptions = _data["rateLimitOptions"] ? FileRateLimitOptions.fromJS(_data["rateLimitOptions"]) : undefined; - this.qoSOptions = _data["qoSOptions"] ? FileQoSOptions.fromJS(_data["qoSOptions"]) : undefined; - this.baseUrl = _data["baseUrl"]; - this.loadBalancerOptions = _data["loadBalancerOptions"] ? FileLoadBalancerOptions.fromJS(_data["loadBalancerOptions"]) : undefined; - this.downstreamScheme = _data["downstreamScheme"]; - this.httpHandlerOptions = _data["httpHandlerOptions"] ? FileHttpHandlerOptions.fromJS(_data["httpHandlerOptions"]) : undefined; - this.downstreamHttpVersion = _data["downstreamHttpVersion"]; - } - } - - static fromJS(data: any): FileGlobalConfiguration { - data = typeof data === 'object' ? data : {}; - let result = new FileGlobalConfiguration(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["requestIdKey"] = this.requestIdKey; - data["serviceDiscoveryProvider"] = this.serviceDiscoveryProvider ? this.serviceDiscoveryProvider.toJSON() : undefined; - data["rateLimitOptions"] = this.rateLimitOptions ? this.rateLimitOptions.toJSON() : undefined; - data["qoSOptions"] = this.qoSOptions ? this.qoSOptions.toJSON() : undefined; - data["baseUrl"] = this.baseUrl; - data["loadBalancerOptions"] = this.loadBalancerOptions ? this.loadBalancerOptions.toJSON() : undefined; - data["downstreamScheme"] = this.downstreamScheme; - data["httpHandlerOptions"] = this.httpHandlerOptions ? this.httpHandlerOptions.toJSON() : undefined; - data["downstreamHttpVersion"] = this.downstreamHttpVersion; - return data; - } -} - -export interface IFileGlobalConfiguration { - requestIdKey: string | undefined; - serviceDiscoveryProvider: FileServiceDiscoveryProvider; - rateLimitOptions: FileRateLimitOptions; - qoSOptions: FileQoSOptions; - baseUrl: string | undefined; - loadBalancerOptions: FileLoadBalancerOptions; - downstreamScheme: string | undefined; - httpHandlerOptions: FileHttpHandlerOptions; - downstreamHttpVersion: string | undefined; -} - -export class FileHostAndPort implements IFileHostAndPort { - host!: string | undefined; - port!: number; - - constructor(data?: IFileHostAndPort) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.host = _data["host"]; - this.port = _data["port"]; - } - } - - static fromJS(data: any): FileHostAndPort { - data = typeof data === 'object' ? data : {}; - let result = new FileHostAndPort(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["host"] = this.host; - data["port"] = this.port; - return data; - } -} - -export interface IFileHostAndPort { - host: string | undefined; - port: number; -} - -export class FileHttpHandlerOptions implements IFileHttpHandlerOptions { - allowAutoRedirect!: boolean; - useCookieContainer!: boolean; - useTracing!: boolean; - useProxy!: boolean; - maxConnectionsPerServer!: number; - - constructor(data?: IFileHttpHandlerOptions) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.allowAutoRedirect = _data["allowAutoRedirect"]; - this.useCookieContainer = _data["useCookieContainer"]; - this.useTracing = _data["useTracing"]; - this.useProxy = _data["useProxy"]; - this.maxConnectionsPerServer = _data["maxConnectionsPerServer"]; - } - } - - static fromJS(data: any): FileHttpHandlerOptions { - data = typeof data === 'object' ? data : {}; - let result = new FileHttpHandlerOptions(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["allowAutoRedirect"] = this.allowAutoRedirect; - data["useCookieContainer"] = this.useCookieContainer; - data["useTracing"] = this.useTracing; - data["useProxy"] = this.useProxy; - data["maxConnectionsPerServer"] = this.maxConnectionsPerServer; - return data; - } -} - -export interface IFileHttpHandlerOptions { - allowAutoRedirect: boolean; - useCookieContainer: boolean; - useTracing: boolean; - useProxy: boolean; - maxConnectionsPerServer: number; -} - -export class FileLoadBalancerOptions implements IFileLoadBalancerOptions { - type!: string | undefined; - key!: string | undefined; - expiry!: number; - - constructor(data?: IFileLoadBalancerOptions) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.type = _data["type"]; - this.key = _data["key"]; - this.expiry = _data["expiry"]; - } - } - - static fromJS(data: any): FileLoadBalancerOptions { - data = typeof data === 'object' ? data : {}; - let result = new FileLoadBalancerOptions(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["type"] = this.type; - data["key"] = this.key; - data["expiry"] = this.expiry; - return data; - } -} - -export interface IFileLoadBalancerOptions { - type: string | undefined; - key: string | undefined; - expiry: number; -} - -export class FileQoSOptions implements IFileQoSOptions { - exceptionsAllowedBeforeBreaking!: number; - durationOfBreak!: number; - timeoutValue!: number; - - constructor(data?: IFileQoSOptions) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.exceptionsAllowedBeforeBreaking = _data["exceptionsAllowedBeforeBreaking"]; - this.durationOfBreak = _data["durationOfBreak"]; - this.timeoutValue = _data["timeoutValue"]; - } - } - - static fromJS(data: any): FileQoSOptions { - data = typeof data === 'object' ? data : {}; - let result = new FileQoSOptions(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["exceptionsAllowedBeforeBreaking"] = this.exceptionsAllowedBeforeBreaking; - data["durationOfBreak"] = this.durationOfBreak; - data["timeoutValue"] = this.timeoutValue; - return data; - } -} - -export interface IFileQoSOptions { - exceptionsAllowedBeforeBreaking: number; - durationOfBreak: number; - timeoutValue: number; -} - -export class FileRateLimitOptions implements IFileRateLimitOptions { - clientIdHeader!: string | undefined; - quotaExceededMessage!: string | undefined; - rateLimitCounterPrefix!: string | undefined; - disableRateLimitHeaders!: boolean; - httpStatusCode!: number; - - constructor(data?: IFileRateLimitOptions) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.clientIdHeader = _data["clientIdHeader"]; - this.quotaExceededMessage = _data["quotaExceededMessage"]; - this.rateLimitCounterPrefix = _data["rateLimitCounterPrefix"]; - this.disableRateLimitHeaders = _data["disableRateLimitHeaders"]; - this.httpStatusCode = _data["httpStatusCode"]; - } - } - - static fromJS(data: any): FileRateLimitOptions { - data = typeof data === 'object' ? data : {}; - let result = new FileRateLimitOptions(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["clientIdHeader"] = this.clientIdHeader; - data["quotaExceededMessage"] = this.quotaExceededMessage; - data["rateLimitCounterPrefix"] = this.rateLimitCounterPrefix; - data["disableRateLimitHeaders"] = this.disableRateLimitHeaders; - data["httpStatusCode"] = this.httpStatusCode; - return data; - } -} - -export interface IFileRateLimitOptions { - clientIdHeader: string | undefined; - quotaExceededMessage: string | undefined; - rateLimitCounterPrefix: string | undefined; - disableRateLimitHeaders: boolean; - httpStatusCode: number; -} - -export class FileRateLimitRule implements IFileRateLimitRule { - clientWhitelist!: string[] | undefined; - enableRateLimiting!: boolean; - period!: string | undefined; - periodTimespan!: number; - limit!: number; - - constructor(data?: IFileRateLimitRule) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["clientWhitelist"])) { - this.clientWhitelist = [] as any; - for (let item of _data["clientWhitelist"]) - this.clientWhitelist!.push(item); - } - this.enableRateLimiting = _data["enableRateLimiting"]; - this.period = _data["period"]; - this.periodTimespan = _data["periodTimespan"]; - this.limit = _data["limit"]; - } - } - - static fromJS(data: any): FileRateLimitRule { - data = typeof data === 'object' ? data : {}; - let result = new FileRateLimitRule(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.clientWhitelist)) { - data["clientWhitelist"] = []; - for (let item of this.clientWhitelist) - data["clientWhitelist"].push(item); - } - data["enableRateLimiting"] = this.enableRateLimiting; - data["period"] = this.period; - data["periodTimespan"] = this.periodTimespan; - data["limit"] = this.limit; - return data; - } -} - -export interface IFileRateLimitRule { - clientWhitelist: string[] | undefined; - enableRateLimiting: boolean; - period: string | undefined; - periodTimespan: number; - limit: number; -} - -export class FileRoute implements IFileRoute { - downstreamPathTemplate!: string | undefined; - upstreamPathTemplate!: string | undefined; - upstreamHttpMethod!: string[] | undefined; - downstreamHttpMethod!: string | undefined; - addHeadersToRequest!: { [key: string]: string; } | undefined; - upstreamHeaderTransform!: { [key: string]: string; } | undefined; - downstreamHeaderTransform!: { [key: string]: string; } | undefined; - addClaimsToRequest!: { [key: string]: string; } | undefined; - routeClaimsRequirement!: { [key: string]: string; } | undefined; - addQueriesToRequest!: { [key: string]: string; } | undefined; - changeDownstreamPathTemplate!: { [key: string]: string; } | undefined; - requestIdKey!: string | undefined; - fileCacheOptions!: FileCacheOptions; - routeIsCaseSensitive!: boolean; - serviceName!: string | undefined; - serviceNamespace!: string | undefined; - downstreamScheme!: string | undefined; - qoSOptions!: FileQoSOptions; - loadBalancerOptions!: FileLoadBalancerOptions; - rateLimitOptions!: FileRateLimitRule; - authenticationOptions!: FileAuthenticationOptions; - httpHandlerOptions!: FileHttpHandlerOptions; - downstreamHostAndPorts!: FileHostAndPort[] | undefined; - upstreamHost!: string | undefined; - key!: string | undefined; - delegatingHandlers!: string[] | undefined; - priority!: number; - timeout!: number; - dangerousAcceptAnyServerCertificateValidator!: boolean; - securityOptions!: FileSecurityOptions; - downstreamHttpVersion!: string | undefined; - - constructor(data?: IFileRoute) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.downstreamPathTemplate = _data["downstreamPathTemplate"]; - this.upstreamPathTemplate = _data["upstreamPathTemplate"]; - if (Array.isArray(_data["upstreamHttpMethod"])) { - this.upstreamHttpMethod = [] as any; - for (let item of _data["upstreamHttpMethod"]) - this.upstreamHttpMethod!.push(item); - } - this.downstreamHttpMethod = _data["downstreamHttpMethod"]; - if (_data["addHeadersToRequest"]) { - this.addHeadersToRequest = {} as any; - for (let key in _data["addHeadersToRequest"]) { - if (_data["addHeadersToRequest"].hasOwnProperty(key)) - (this.addHeadersToRequest)![key] = _data["addHeadersToRequest"][key]; - } - } - if (_data["upstreamHeaderTransform"]) { - this.upstreamHeaderTransform = {} as any; - for (let key in _data["upstreamHeaderTransform"]) { - if (_data["upstreamHeaderTransform"].hasOwnProperty(key)) - (this.upstreamHeaderTransform)![key] = _data["upstreamHeaderTransform"][key]; - } - } - if (_data["downstreamHeaderTransform"]) { - this.downstreamHeaderTransform = {} as any; - for (let key in _data["downstreamHeaderTransform"]) { - if (_data["downstreamHeaderTransform"].hasOwnProperty(key)) - (this.downstreamHeaderTransform)![key] = _data["downstreamHeaderTransform"][key]; - } - } - if (_data["addClaimsToRequest"]) { - this.addClaimsToRequest = {} as any; - for (let key in _data["addClaimsToRequest"]) { - if (_data["addClaimsToRequest"].hasOwnProperty(key)) - (this.addClaimsToRequest)![key] = _data["addClaimsToRequest"][key]; - } - } - if (_data["routeClaimsRequirement"]) { - this.routeClaimsRequirement = {} as any; - for (let key in _data["routeClaimsRequirement"]) { - if (_data["routeClaimsRequirement"].hasOwnProperty(key)) - (this.routeClaimsRequirement)![key] = _data["routeClaimsRequirement"][key]; - } - } - if (_data["addQueriesToRequest"]) { - this.addQueriesToRequest = {} as any; - for (let key in _data["addQueriesToRequest"]) { - if (_data["addQueriesToRequest"].hasOwnProperty(key)) - (this.addQueriesToRequest)![key] = _data["addQueriesToRequest"][key]; - } - } - if (_data["changeDownstreamPathTemplate"]) { - this.changeDownstreamPathTemplate = {} as any; - for (let key in _data["changeDownstreamPathTemplate"]) { - if (_data["changeDownstreamPathTemplate"].hasOwnProperty(key)) - (this.changeDownstreamPathTemplate)![key] = _data["changeDownstreamPathTemplate"][key]; - } - } - this.requestIdKey = _data["requestIdKey"]; - this.fileCacheOptions = _data["fileCacheOptions"] ? FileCacheOptions.fromJS(_data["fileCacheOptions"]) : undefined; - this.routeIsCaseSensitive = _data["routeIsCaseSensitive"]; - this.serviceName = _data["serviceName"]; - this.serviceNamespace = _data["serviceNamespace"]; - this.downstreamScheme = _data["downstreamScheme"]; - this.qoSOptions = _data["qoSOptions"] ? FileQoSOptions.fromJS(_data["qoSOptions"]) : undefined; - this.loadBalancerOptions = _data["loadBalancerOptions"] ? FileLoadBalancerOptions.fromJS(_data["loadBalancerOptions"]) : undefined; - this.rateLimitOptions = _data["rateLimitOptions"] ? FileRateLimitRule.fromJS(_data["rateLimitOptions"]) : undefined; - this.authenticationOptions = _data["authenticationOptions"] ? FileAuthenticationOptions.fromJS(_data["authenticationOptions"]) : undefined; - this.httpHandlerOptions = _data["httpHandlerOptions"] ? FileHttpHandlerOptions.fromJS(_data["httpHandlerOptions"]) : undefined; - if (Array.isArray(_data["downstreamHostAndPorts"])) { - this.downstreamHostAndPorts = [] as any; - for (let item of _data["downstreamHostAndPorts"]) - this.downstreamHostAndPorts!.push(FileHostAndPort.fromJS(item)); - } - this.upstreamHost = _data["upstreamHost"]; - this.key = _data["key"]; - if (Array.isArray(_data["delegatingHandlers"])) { - this.delegatingHandlers = [] as any; - for (let item of _data["delegatingHandlers"]) - this.delegatingHandlers!.push(item); - } - this.priority = _data["priority"]; - this.timeout = _data["timeout"]; - this.dangerousAcceptAnyServerCertificateValidator = _data["dangerousAcceptAnyServerCertificateValidator"]; - this.securityOptions = _data["securityOptions"] ? FileSecurityOptions.fromJS(_data["securityOptions"]) : undefined; - this.downstreamHttpVersion = _data["downstreamHttpVersion"]; - } - } - - static fromJS(data: any): FileRoute { - data = typeof data === 'object' ? data : {}; - let result = new FileRoute(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["downstreamPathTemplate"] = this.downstreamPathTemplate; - data["upstreamPathTemplate"] = this.upstreamPathTemplate; - if (Array.isArray(this.upstreamHttpMethod)) { - data["upstreamHttpMethod"] = []; - for (let item of this.upstreamHttpMethod) - data["upstreamHttpMethod"].push(item); - } - data["downstreamHttpMethod"] = this.downstreamHttpMethod; - if (this.addHeadersToRequest) { - data["addHeadersToRequest"] = {}; - for (let key in this.addHeadersToRequest) { - if (this.addHeadersToRequest.hasOwnProperty(key)) - (data["addHeadersToRequest"])[key] = (this.addHeadersToRequest)[key]; - } - } - if (this.upstreamHeaderTransform) { - data["upstreamHeaderTransform"] = {}; - for (let key in this.upstreamHeaderTransform) { - if (this.upstreamHeaderTransform.hasOwnProperty(key)) - (data["upstreamHeaderTransform"])[key] = (this.upstreamHeaderTransform)[key]; - } - } - if (this.downstreamHeaderTransform) { - data["downstreamHeaderTransform"] = {}; - for (let key in this.downstreamHeaderTransform) { - if (this.downstreamHeaderTransform.hasOwnProperty(key)) - (data["downstreamHeaderTransform"])[key] = (this.downstreamHeaderTransform)[key]; - } - } - if (this.addClaimsToRequest) { - data["addClaimsToRequest"] = {}; - for (let key in this.addClaimsToRequest) { - if (this.addClaimsToRequest.hasOwnProperty(key)) - (data["addClaimsToRequest"])[key] = (this.addClaimsToRequest)[key]; - } - } - if (this.routeClaimsRequirement) { - data["routeClaimsRequirement"] = {}; - for (let key in this.routeClaimsRequirement) { - if (this.routeClaimsRequirement.hasOwnProperty(key)) - (data["routeClaimsRequirement"])[key] = (this.routeClaimsRequirement)[key]; - } - } - if (this.addQueriesToRequest) { - data["addQueriesToRequest"] = {}; - for (let key in this.addQueriesToRequest) { - if (this.addQueriesToRequest.hasOwnProperty(key)) - (data["addQueriesToRequest"])[key] = (this.addQueriesToRequest)[key]; - } - } - if (this.changeDownstreamPathTemplate) { - data["changeDownstreamPathTemplate"] = {}; - for (let key in this.changeDownstreamPathTemplate) { - if (this.changeDownstreamPathTemplate.hasOwnProperty(key)) - (data["changeDownstreamPathTemplate"])[key] = (this.changeDownstreamPathTemplate)[key]; - } - } - data["requestIdKey"] = this.requestIdKey; - data["fileCacheOptions"] = this.fileCacheOptions ? this.fileCacheOptions.toJSON() : undefined; - data["routeIsCaseSensitive"] = this.routeIsCaseSensitive; - data["serviceName"] = this.serviceName; - data["serviceNamespace"] = this.serviceNamespace; - data["downstreamScheme"] = this.downstreamScheme; - data["qoSOptions"] = this.qoSOptions ? this.qoSOptions.toJSON() : undefined; - data["loadBalancerOptions"] = this.loadBalancerOptions ? this.loadBalancerOptions.toJSON() : undefined; - data["rateLimitOptions"] = this.rateLimitOptions ? this.rateLimitOptions.toJSON() : undefined; - data["authenticationOptions"] = this.authenticationOptions ? this.authenticationOptions.toJSON() : undefined; - data["httpHandlerOptions"] = this.httpHandlerOptions ? this.httpHandlerOptions.toJSON() : undefined; - if (Array.isArray(this.downstreamHostAndPorts)) { - data["downstreamHostAndPorts"] = []; - for (let item of this.downstreamHostAndPorts) - data["downstreamHostAndPorts"].push(item.toJSON()); - } - data["upstreamHost"] = this.upstreamHost; - data["key"] = this.key; - if (Array.isArray(this.delegatingHandlers)) { - data["delegatingHandlers"] = []; - for (let item of this.delegatingHandlers) - data["delegatingHandlers"].push(item); - } - data["priority"] = this.priority; - data["timeout"] = this.timeout; - data["dangerousAcceptAnyServerCertificateValidator"] = this.dangerousAcceptAnyServerCertificateValidator; - data["securityOptions"] = this.securityOptions ? this.securityOptions.toJSON() : undefined; - data["downstreamHttpVersion"] = this.downstreamHttpVersion; - return data; - } -} - -export interface IFileRoute { - downstreamPathTemplate: string | undefined; - upstreamPathTemplate: string | undefined; - upstreamHttpMethod: string[] | undefined; - downstreamHttpMethod: string | undefined; - addHeadersToRequest: { [key: string]: string; } | undefined; - upstreamHeaderTransform: { [key: string]: string; } | undefined; - downstreamHeaderTransform: { [key: string]: string; } | undefined; - addClaimsToRequest: { [key: string]: string; } | undefined; - routeClaimsRequirement: { [key: string]: string; } | undefined; - addQueriesToRequest: { [key: string]: string; } | undefined; - changeDownstreamPathTemplate: { [key: string]: string; } | undefined; - requestIdKey: string | undefined; - fileCacheOptions: FileCacheOptions; - routeIsCaseSensitive: boolean; - serviceName: string | undefined; - serviceNamespace: string | undefined; - downstreamScheme: string | undefined; - qoSOptions: FileQoSOptions; - loadBalancerOptions: FileLoadBalancerOptions; - rateLimitOptions: FileRateLimitRule; - authenticationOptions: FileAuthenticationOptions; - httpHandlerOptions: FileHttpHandlerOptions; - downstreamHostAndPorts: FileHostAndPort[] | undefined; - upstreamHost: string | undefined; - key: string | undefined; - delegatingHandlers: string[] | undefined; - priority: number; - timeout: number; - dangerousAcceptAnyServerCertificateValidator: boolean; - securityOptions: FileSecurityOptions; - downstreamHttpVersion: string | undefined; -} - -export class FileSecurityOptions implements IFileSecurityOptions { - ipAllowedList!: string[] | undefined; - ipBlockedList!: string[] | undefined; - - constructor(data?: IFileSecurityOptions) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["ipAllowedList"])) { - this.ipAllowedList = [] as any; - for (let item of _data["ipAllowedList"]) - this.ipAllowedList!.push(item); - } - if (Array.isArray(_data["ipBlockedList"])) { - this.ipBlockedList = [] as any; - for (let item of _data["ipBlockedList"]) - this.ipBlockedList!.push(item); - } - } - } - - static fromJS(data: any): FileSecurityOptions { - data = typeof data === 'object' ? data : {}; - let result = new FileSecurityOptions(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.ipAllowedList)) { - data["ipAllowedList"] = []; - for (let item of this.ipAllowedList) - data["ipAllowedList"].push(item); - } - if (Array.isArray(this.ipBlockedList)) { - data["ipBlockedList"] = []; - for (let item of this.ipBlockedList) - data["ipBlockedList"].push(item); - } - return data; - } -} - -export interface IFileSecurityOptions { - ipAllowedList: string[] | undefined; - ipBlockedList: string[] | undefined; -} - -export class FileServiceDiscoveryProvider implements IFileServiceDiscoveryProvider { - scheme!: string | undefined; - host!: string | undefined; - port!: number; - type!: string | undefined; - token!: string | undefined; - configurationKey!: string | undefined; - pollingInterval!: number; - namespace!: string | undefined; - - constructor(data?: IFileServiceDiscoveryProvider) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.scheme = _data["scheme"]; - this.host = _data["host"]; - this.port = _data["port"]; - this.type = _data["type"]; - this.token = _data["token"]; - this.configurationKey = _data["configurationKey"]; - this.pollingInterval = _data["pollingInterval"]; - this.namespace = _data["namespace"]; - } - } - - static fromJS(data: any): FileServiceDiscoveryProvider { - data = typeof data === 'object' ? data : {}; - let result = new FileServiceDiscoveryProvider(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["scheme"] = this.scheme; - data["host"] = this.host; - data["port"] = this.port; - data["type"] = this.type; - data["token"] = this.token; - data["configurationKey"] = this.configurationKey; - data["pollingInterval"] = this.pollingInterval; - data["namespace"] = this.namespace; - return data; - } -} - -export interface IFileServiceDiscoveryProvider { - scheme: string | undefined; - host: string | undefined; - port: number; - type: string | undefined; - token: string | undefined; - configurationKey: string | undefined; - pollingInterval: number; - namespace: string | undefined; -} - -export class FindTenantByNameInput implements IFindTenantByNameInput { - name!: string | undefined; - - constructor(data?: IFindTenantByNameInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.name = _data["name"]; - } - } - - static fromJS(data: any): FindTenantByNameInput { - data = typeof data === 'object' ? data : {}; - let result = new FindTenantByNameInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["name"] = this.name; - return data; - } -} - -export interface IFindTenantByNameInput { - name: string | undefined; -} - -export class FindTenantResultDto implements IFindTenantResultDto { - success!: boolean; - tenantId!: string | undefined; - name!: string | undefined; - isActive!: boolean; - - constructor(data?: IFindTenantResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.success = _data["success"]; - this.tenantId = _data["tenantId"]; - this.name = _data["name"]; - this.isActive = _data["isActive"]; - } - } - - static fromJS(data: any): FindTenantResultDto { - data = typeof data === 'object' ? data : {}; - let result = new FindTenantResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["success"] = this.success; - data["tenantId"] = this.tenantId; - data["name"] = this.name; - data["isActive"] = this.isActive; - return data; - } -} - -export interface IFindTenantResultDto { - success: boolean; - tenantId: string | undefined; - name: string | undefined; - isActive: boolean; -} - -export class GetOrganizationUnitRoleInput implements IGetOrganizationUnitRoleInput { - /** 当前页面.默认从1开始 */ - pageIndex!: number; - /** 每页多少条.每页显示多少记录 */ - pageSize!: number; - /** 跳过多少条 */ - readonly skipCount!: number; - organizationUnitId!: string; - - constructor(data?: IGetOrganizationUnitRoleInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.pageIndex = _data["pageIndex"]; - this.pageSize = _data["pageSize"]; - (this).skipCount = _data["skipCount"]; - this.organizationUnitId = _data["organizationUnitId"]; - } - } - - static fromJS(data: any): GetOrganizationUnitRoleInput { - data = typeof data === 'object' ? data : {}; - let result = new GetOrganizationUnitRoleInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["pageIndex"] = this.pageIndex; - data["pageSize"] = this.pageSize; - data["skipCount"] = this.skipCount; - data["organizationUnitId"] = this.organizationUnitId; - return data; - } -} - -export interface IGetOrganizationUnitRoleInput { - /** 当前页面.默认从1开始 */ - pageIndex: number; - /** 每页多少条.每页显示多少记录 */ - pageSize: number; - /** 跳过多少条 */ - skipCount: number; - organizationUnitId: string; -} - -export class GetOrganizationUnitRoleOutput implements IGetOrganizationUnitRoleOutput { - id!: string; - name!: string | undefined; - - constructor(data?: IGetOrganizationUnitRoleOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.name = _data["name"]; - } - } - - static fromJS(data: any): GetOrganizationUnitRoleOutput { - data = typeof data === 'object' ? data : {}; - let result = new GetOrganizationUnitRoleOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["name"] = this.name; - return data; - } -} - -export interface IGetOrganizationUnitRoleOutput { - id: string; - name: string | undefined; -} - -export class GetOrganizationUnitRoleOutputPagedResultDto implements IGetOrganizationUnitRoleOutputPagedResultDto { - items!: GetOrganizationUnitRoleOutput[] | undefined; - totalCount!: number; - - constructor(data?: IGetOrganizationUnitRoleOutputPagedResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["items"])) { - this.items = [] as any; - for (let item of _data["items"]) - this.items!.push(GetOrganizationUnitRoleOutput.fromJS(item)); - } - this.totalCount = _data["totalCount"]; - } - } - - static fromJS(data: any): GetOrganizationUnitRoleOutputPagedResultDto { - data = typeof data === 'object' ? data : {}; - let result = new GetOrganizationUnitRoleOutputPagedResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.items)) { - data["items"] = []; - for (let item of this.items) - data["items"].push(item.toJSON()); - } - data["totalCount"] = this.totalCount; - return data; - } -} - -export interface IGetOrganizationUnitRoleOutputPagedResultDto { - items: GetOrganizationUnitRoleOutput[] | undefined; - totalCount: number; -} - -export class GetOrganizationUnitUserInput implements IGetOrganizationUnitUserInput { - /** 当前页面.默认从1开始 */ - pageIndex!: number; - /** 每页多少条.每页显示多少记录 */ - pageSize!: number; - /** 跳过多少条 */ - readonly skipCount!: number; - organizationUnitId!: string; - filter!: string | undefined; - - constructor(data?: IGetOrganizationUnitUserInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.pageIndex = _data["pageIndex"]; - this.pageSize = _data["pageSize"]; - (this).skipCount = _data["skipCount"]; - this.organizationUnitId = _data["organizationUnitId"]; - this.filter = _data["filter"]; - } - } - - static fromJS(data: any): GetOrganizationUnitUserInput { - data = typeof data === 'object' ? data : {}; - let result = new GetOrganizationUnitUserInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["pageIndex"] = this.pageIndex; - data["pageSize"] = this.pageSize; - data["skipCount"] = this.skipCount; - data["organizationUnitId"] = this.organizationUnitId; - data["filter"] = this.filter; - return data; - } -} - -export interface IGetOrganizationUnitUserInput { - /** 当前页面.默认从1开始 */ - pageIndex: number; - /** 每页多少条.每页显示多少记录 */ - pageSize: number; - /** 跳过多少条 */ - skipCount: number; - organizationUnitId: string; - filter: string | undefined; -} - -export class GetOrganizationUnitUserOutput implements IGetOrganizationUnitUserOutput { - id!: string; - userName!: string | undefined; - email!: string | undefined; - - constructor(data?: IGetOrganizationUnitUserOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.userName = _data["userName"]; - this.email = _data["email"]; - } - } - - static fromJS(data: any): GetOrganizationUnitUserOutput { - data = typeof data === 'object' ? data : {}; - let result = new GetOrganizationUnitUserOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["userName"] = this.userName; - data["email"] = this.email; - return data; - } -} - -export interface IGetOrganizationUnitUserOutput { - id: string; - userName: string | undefined; - email: string | undefined; -} - -export class GetOrganizationUnitUserOutputPagedResultDto implements IGetOrganizationUnitUserOutputPagedResultDto { - items!: GetOrganizationUnitUserOutput[] | undefined; - totalCount!: number; - - constructor(data?: IGetOrganizationUnitUserOutputPagedResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["items"])) { - this.items = [] as any; - for (let item of _data["items"]) - this.items!.push(GetOrganizationUnitUserOutput.fromJS(item)); - } - this.totalCount = _data["totalCount"]; - } - } - - static fromJS(data: any): GetOrganizationUnitUserOutputPagedResultDto { - data = typeof data === 'object' ? data : {}; - let result = new GetOrganizationUnitUserOutputPagedResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.items)) { - data["items"] = []; - for (let item of this.items) - data["items"].push(item.toJSON()); - } - data["totalCount"] = this.totalCount; - return data; - } -} - -export interface IGetOrganizationUnitUserOutputPagedResultDto { - items: GetOrganizationUnitUserOutput[] | undefined; - totalCount: number; -} - -export class GetPermissionInput implements IGetPermissionInput { - providerName!: string | undefined; - providerKey!: string | undefined; - - constructor(data?: IGetPermissionInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.providerName = _data["providerName"]; - this.providerKey = _data["providerKey"]; - } - } - - static fromJS(data: any): GetPermissionInput { - data = typeof data === 'object' ? data : {}; - let result = new GetPermissionInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["providerName"] = this.providerName; - data["providerKey"] = this.providerKey; - return data; - } -} - -export interface IGetPermissionInput { - providerName: string | undefined; - providerKey: string | undefined; -} - -export class GetUnAddRoleInput implements IGetUnAddRoleInput { - /** 当前页面.默认从1开始 */ - pageIndex!: number; - /** 每页多少条.每页显示多少记录 */ - pageSize!: number; - /** 跳过多少条 */ - readonly skipCount!: number; - organizationUnitId!: string; - filter!: string | undefined; - - constructor(data?: IGetUnAddRoleInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.pageIndex = _data["pageIndex"]; - this.pageSize = _data["pageSize"]; - (this).skipCount = _data["skipCount"]; - this.organizationUnitId = _data["organizationUnitId"]; - this.filter = _data["filter"]; - } - } - - static fromJS(data: any): GetUnAddRoleInput { - data = typeof data === 'object' ? data : {}; - let result = new GetUnAddRoleInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["pageIndex"] = this.pageIndex; - data["pageSize"] = this.pageSize; - data["skipCount"] = this.skipCount; - data["organizationUnitId"] = this.organizationUnitId; - data["filter"] = this.filter; - return data; - } -} - -export interface IGetUnAddRoleInput { - /** 当前页面.默认从1开始 */ - pageIndex: number; - /** 每页多少条.每页显示多少记录 */ - pageSize: number; - /** 跳过多少条 */ - skipCount: number; - organizationUnitId: string; - filter: string | undefined; -} - -export class GetUnAddRoleOutput implements IGetUnAddRoleOutput { - id!: string; - name!: string | undefined; - - constructor(data?: IGetUnAddRoleOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.name = _data["name"]; - } - } - - static fromJS(data: any): GetUnAddRoleOutput { - data = typeof data === 'object' ? data : {}; - let result = new GetUnAddRoleOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["name"] = this.name; - return data; - } -} - -export interface IGetUnAddRoleOutput { - id: string; - name: string | undefined; -} - -export class GetUnAddRoleOutputPagedResultDto implements IGetUnAddRoleOutputPagedResultDto { - items!: GetUnAddRoleOutput[] | undefined; - totalCount!: number; - - constructor(data?: IGetUnAddRoleOutputPagedResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["items"])) { - this.items = [] as any; - for (let item of _data["items"]) - this.items!.push(GetUnAddRoleOutput.fromJS(item)); - } - this.totalCount = _data["totalCount"]; - } - } - - static fromJS(data: any): GetUnAddRoleOutputPagedResultDto { - data = typeof data === 'object' ? data : {}; - let result = new GetUnAddRoleOutputPagedResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.items)) { - data["items"] = []; - for (let item of this.items) - data["items"].push(item.toJSON()); - } - data["totalCount"] = this.totalCount; - return data; - } -} - -export interface IGetUnAddRoleOutputPagedResultDto { - items: GetUnAddRoleOutput[] | undefined; - totalCount: number; -} - -export class GetUnAddUserInput implements IGetUnAddUserInput { - /** 当前页面.默认从1开始 */ - pageIndex!: number; - /** 每页多少条.每页显示多少记录 */ - pageSize!: number; - /** 跳过多少条 */ - readonly skipCount!: number; - organizationUnitId!: string; - filter!: string | undefined; - - constructor(data?: IGetUnAddUserInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.pageIndex = _data["pageIndex"]; - this.pageSize = _data["pageSize"]; - (this).skipCount = _data["skipCount"]; - this.organizationUnitId = _data["organizationUnitId"]; - this.filter = _data["filter"]; - } - } - - static fromJS(data: any): GetUnAddUserInput { - data = typeof data === 'object' ? data : {}; - let result = new GetUnAddUserInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["pageIndex"] = this.pageIndex; - data["pageSize"] = this.pageSize; - data["skipCount"] = this.skipCount; - data["organizationUnitId"] = this.organizationUnitId; - data["filter"] = this.filter; - return data; - } -} - -export interface IGetUnAddUserInput { - /** 当前页面.默认从1开始 */ - pageIndex: number; - /** 每页多少条.每页显示多少记录 */ - pageSize: number; - /** 跳过多少条 */ - skipCount: number; - organizationUnitId: string; - filter: string | undefined; -} - -export class GetUnAddUserOutput implements IGetUnAddUserOutput { - id!: string; - userName!: string | undefined; - email!: string | undefined; - - constructor(data?: IGetUnAddUserOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.userName = _data["userName"]; - this.email = _data["email"]; - } - } - - static fromJS(data: any): GetUnAddUserOutput { - data = typeof data === 'object' ? data : {}; - let result = new GetUnAddUserOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["userName"] = this.userName; - data["email"] = this.email; - return data; - } -} - -export interface IGetUnAddUserOutput { - id: string; - userName: string | undefined; - email: string | undefined; -} - -export class GetUnAddUserOutputPagedResultDto implements IGetUnAddUserOutputPagedResultDto { - items!: GetUnAddUserOutput[] | undefined; - totalCount!: number; - - constructor(data?: IGetUnAddUserOutputPagedResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["items"])) { - this.items = [] as any; - for (let item of _data["items"]) - this.items!.push(GetUnAddUserOutput.fromJS(item)); - } - this.totalCount = _data["totalCount"]; - } - } - - static fromJS(data: any): GetUnAddUserOutputPagedResultDto { - data = typeof data === 'object' ? data : {}; - let result = new GetUnAddUserOutputPagedResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.items)) { - data["items"] = []; - for (let item of this.items) - data["items"].push(item.toJSON()); - } - data["totalCount"] = this.totalCount; - return data; - } -} - -export interface IGetUnAddUserOutputPagedResultDto { - items: GetUnAddUserOutput[] | undefined; - totalCount: number; -} - -export enum HttpStatusCode { - Continue = 100, - SwitchingProtocols = 101, - Processing = 102, - EarlyHints = 103, - OK = 200, - Created = 201, - Accepted = 202, - NonAuthoritativeInformation = 203, - NoContent = 204, - ResetContent = 205, - PartialContent = 206, - MultiStatus = 207, - AlreadyReported = 208, - IMUsed = 226, - MultipleChoices = 300, - Ambiguous = 301, - MovedPermanently = 302, - Moved = 303, - Found = 304, - Redirect = 305, - SeeOther = 306, - RedirectMethod = 307, - NotModified = 308, - UseProxy = 400, - Unused = 401, - TemporaryRedirect = 402, - RedirectKeepVerb = 403, - PermanentRedirect = 404, - BadRequest = 405, - Unauthorized = 406, - PaymentRequired = 407, - Forbidden = 408, - NotFound = 409, - MethodNotAllowed = 410, - NotAcceptable = 411, - ProxyAuthenticationRequired = 412, - RequestTimeout = 413, - Conflict = 414, - Gone = 415, - LengthRequired = 416, - PreconditionFailed = 417, - RequestEntityTooLarge = 421, - RequestUriTooLong = 422, - UnsupportedMediaType = 423, - RequestedRangeNotSatisfiable = 424, - ExpectationFailed = 426, - MisdirectedRequest = 428, - UnprocessableEntity = 429, - Locked = 431, - FailedDependency = 451, - UpgradeRequired = 500, - PreconditionRequired = 501, - TooManyRequests = 502, - RequestHeaderFieldsTooLarge = 503, - UnavailableForLegalReasons = 504, - InternalServerError = 505, - NotImplemented = 506, - BadGateway = 507, - ServiceUnavailable = 508, - GatewayTimeout = 510, - HttpVersionNotSupported = 511, -} - -export class IanaTimeZone implements IIanaTimeZone { - timeZoneName!: string | undefined; - - constructor(data?: IIanaTimeZone) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.timeZoneName = _data["timeZoneName"]; - } - } - - static fromJS(data: any): IanaTimeZone { - data = typeof data === 'object' ? data : {}; - let result = new IanaTimeZone(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["timeZoneName"] = this.timeZoneName; - return data; - } -} - -export interface IIanaTimeZone { - timeZoneName: string | undefined; -} - -export class IdInput implements IIdInput { - id!: string; - - constructor(data?: IIdInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - } - } - - static fromJS(data: any): IdInput { - data = typeof data === 'object' ? data : {}; - let result = new IdInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - return data; - } -} - -export interface IIdInput { - id: string; -} - -export class IdentityRoleCreateDto implements IIdentityRoleCreateDto { - readonly extraProperties!: { [key: string]: any; } | undefined; - name!: string; - isDefault!: boolean; - isPublic!: boolean; - - constructor(data?: IIdentityRoleCreateDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["extraProperties"]) { - (this).extraProperties = {} as any; - for (let key in _data["extraProperties"]) { - if (_data["extraProperties"].hasOwnProperty(key)) - ((this).extraProperties)![key] = _data["extraProperties"][key]; - } - } - this.name = _data["name"]; - this.isDefault = _data["isDefault"]; - this.isPublic = _data["isPublic"]; - } - } - - static fromJS(data: any): IdentityRoleCreateDto { - data = typeof data === 'object' ? data : {}; - let result = new IdentityRoleCreateDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.extraProperties) { - data["extraProperties"] = {}; - for (let key in this.extraProperties) { - if (this.extraProperties.hasOwnProperty(key)) - (data["extraProperties"])[key] = (this.extraProperties)[key]; - } - } - data["name"] = this.name; - data["isDefault"] = this.isDefault; - data["isPublic"] = this.isPublic; - return data; - } -} - -export interface IIdentityRoleCreateDto { - extraProperties: { [key: string]: any; } | undefined; - name: string; - isDefault: boolean; - isPublic: boolean; -} - -export class IdentityRoleDto implements IIdentityRoleDto { - readonly extraProperties!: { [key: string]: any; } | undefined; - id!: string; - name!: string | undefined; - isDefault!: boolean; - isStatic!: boolean; - isPublic!: boolean; - concurrencyStamp!: string | undefined; - - constructor(data?: IIdentityRoleDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["extraProperties"]) { - (this).extraProperties = {} as any; - for (let key in _data["extraProperties"]) { - if (_data["extraProperties"].hasOwnProperty(key)) - ((this).extraProperties)![key] = _data["extraProperties"][key]; - } - } - this.id = _data["id"]; - this.name = _data["name"]; - this.isDefault = _data["isDefault"]; - this.isStatic = _data["isStatic"]; - this.isPublic = _data["isPublic"]; - this.concurrencyStamp = _data["concurrencyStamp"]; - } - } - - static fromJS(data: any): IdentityRoleDto { - data = typeof data === 'object' ? data : {}; - let result = new IdentityRoleDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.extraProperties) { - data["extraProperties"] = {}; - for (let key in this.extraProperties) { - if (this.extraProperties.hasOwnProperty(key)) - (data["extraProperties"])[key] = (this.extraProperties)[key]; - } - } - data["id"] = this.id; - data["name"] = this.name; - data["isDefault"] = this.isDefault; - data["isStatic"] = this.isStatic; - data["isPublic"] = this.isPublic; - data["concurrencyStamp"] = this.concurrencyStamp; - return data; - } -} - -export interface IIdentityRoleDto { - extraProperties: { [key: string]: any; } | undefined; - id: string; - name: string | undefined; - isDefault: boolean; - isStatic: boolean; - isPublic: boolean; - concurrencyStamp: string | undefined; -} - -export class IdentityRoleDtoListResultDto implements IIdentityRoleDtoListResultDto { - items!: IdentityRoleDto[] | undefined; - - constructor(data?: IIdentityRoleDtoListResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["items"])) { - this.items = [] as any; - for (let item of _data["items"]) - this.items!.push(IdentityRoleDto.fromJS(item)); - } - } - } - - static fromJS(data: any): IdentityRoleDtoListResultDto { - data = typeof data === 'object' ? data : {}; - let result = new IdentityRoleDtoListResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.items)) { - data["items"] = []; - for (let item of this.items) - data["items"].push(item.toJSON()); - } - return data; - } -} - -export interface IIdentityRoleDtoListResultDto { - items: IdentityRoleDto[] | undefined; -} - -export class IdentityRoleDtoPagedResultDto implements IIdentityRoleDtoPagedResultDto { - items!: IdentityRoleDto[] | undefined; - totalCount!: number; - - constructor(data?: IIdentityRoleDtoPagedResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["items"])) { - this.items = [] as any; - for (let item of _data["items"]) - this.items!.push(IdentityRoleDto.fromJS(item)); - } - this.totalCount = _data["totalCount"]; - } - } - - static fromJS(data: any): IdentityRoleDtoPagedResultDto { - data = typeof data === 'object' ? data : {}; - let result = new IdentityRoleDtoPagedResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.items)) { - data["items"] = []; - for (let item of this.items) - data["items"].push(item.toJSON()); - } - data["totalCount"] = this.totalCount; - return data; - } -} - -export interface IIdentityRoleDtoPagedResultDto { - items: IdentityRoleDto[] | undefined; - totalCount: number; -} - -export class IdentityRoleUpdateDto implements IIdentityRoleUpdateDto { - readonly extraProperties!: { [key: string]: any; } | undefined; - name!: string; - isDefault!: boolean; - isPublic!: boolean; - concurrencyStamp!: string | undefined; - - constructor(data?: IIdentityRoleUpdateDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["extraProperties"]) { - (this).extraProperties = {} as any; - for (let key in _data["extraProperties"]) { - if (_data["extraProperties"].hasOwnProperty(key)) - ((this).extraProperties)![key] = _data["extraProperties"][key]; - } - } - this.name = _data["name"]; - this.isDefault = _data["isDefault"]; - this.isPublic = _data["isPublic"]; - this.concurrencyStamp = _data["concurrencyStamp"]; - } - } - - static fromJS(data: any): IdentityRoleUpdateDto { - data = typeof data === 'object' ? data : {}; - let result = new IdentityRoleUpdateDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.extraProperties) { - data["extraProperties"] = {}; - for (let key in this.extraProperties) { - if (this.extraProperties.hasOwnProperty(key)) - (data["extraProperties"])[key] = (this.extraProperties)[key]; - } - } - data["name"] = this.name; - data["isDefault"] = this.isDefault; - data["isPublic"] = this.isPublic; - data["concurrencyStamp"] = this.concurrencyStamp; - return data; - } -} - -export interface IIdentityRoleUpdateDto { - extraProperties: { [key: string]: any; } | undefined; - name: string; - isDefault: boolean; - isPublic: boolean; - concurrencyStamp: string | undefined; -} - -export class IdentityUserCreateDto implements IIdentityUserCreateDto { - readonly extraProperties!: { [key: string]: any; } | undefined; - userName!: string; - name!: string | undefined; - surname!: string | undefined; - email!: string; - phoneNumber!: string | undefined; - isActive!: boolean; - lockoutEnabled!: boolean; - roleNames!: string[] | undefined; - password!: string; - - constructor(data?: IIdentityUserCreateDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["extraProperties"]) { - (this).extraProperties = {} as any; - for (let key in _data["extraProperties"]) { - if (_data["extraProperties"].hasOwnProperty(key)) - ((this).extraProperties)![key] = _data["extraProperties"][key]; - } - } - this.userName = _data["userName"]; - this.name = _data["name"]; - this.surname = _data["surname"]; - this.email = _data["email"]; - this.phoneNumber = _data["phoneNumber"]; - this.isActive = _data["isActive"]; - this.lockoutEnabled = _data["lockoutEnabled"]; - if (Array.isArray(_data["roleNames"])) { - this.roleNames = [] as any; - for (let item of _data["roleNames"]) - this.roleNames!.push(item); - } - this.password = _data["password"]; - } - } - - static fromJS(data: any): IdentityUserCreateDto { - data = typeof data === 'object' ? data : {}; - let result = new IdentityUserCreateDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.extraProperties) { - data["extraProperties"] = {}; - for (let key in this.extraProperties) { - if (this.extraProperties.hasOwnProperty(key)) - (data["extraProperties"])[key] = (this.extraProperties)[key]; - } - } - data["userName"] = this.userName; - data["name"] = this.name; - data["surname"] = this.surname; - data["email"] = this.email; - data["phoneNumber"] = this.phoneNumber; - data["isActive"] = this.isActive; - data["lockoutEnabled"] = this.lockoutEnabled; - if (Array.isArray(this.roleNames)) { - data["roleNames"] = []; - for (let item of this.roleNames) - data["roleNames"].push(item); - } - data["password"] = this.password; - return data; - } -} - -export interface IIdentityUserCreateDto { - extraProperties: { [key: string]: any; } | undefined; - userName: string; - name: string | undefined; - surname: string | undefined; - email: string; - phoneNumber: string | undefined; - isActive: boolean; - lockoutEnabled: boolean; - roleNames: string[] | undefined; - password: string; -} - -export class IdentityUserDto implements IIdentityUserDto { - readonly extraProperties!: { [key: string]: any; } | undefined; - id!: string; - creationTime!: dayjs.Dayjs; - creatorId!: string | undefined; - lastModificationTime!: dayjs.Dayjs | undefined; - lastModifierId!: string | undefined; - isDeleted!: boolean; - deleterId!: string | undefined; - deletionTime!: dayjs.Dayjs | undefined; - tenantId!: string | undefined; - userName!: string | undefined; - name!: string | undefined; - surname!: string | undefined; - email!: string | undefined; - emailConfirmed!: boolean; - phoneNumber!: string | undefined; - phoneNumberConfirmed!: boolean; - isActive!: boolean; - lockoutEnabled!: boolean; - lockoutEnd!: dayjs.Dayjs | undefined; - concurrencyStamp!: string | undefined; - entityVersion!: number; - - constructor(data?: IIdentityUserDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["extraProperties"]) { - (this).extraProperties = {} as any; - for (let key in _data["extraProperties"]) { - if (_data["extraProperties"].hasOwnProperty(key)) - ((this).extraProperties)![key] = _data["extraProperties"][key]; - } - } - this.id = _data["id"]; - this.creationTime = _data["creationTime"] ? dayjs(_data["creationTime"].toString()) : undefined; - this.creatorId = _data["creatorId"]; - this.lastModificationTime = _data["lastModificationTime"] ? dayjs(_data["lastModificationTime"].toString()) : undefined; - this.lastModifierId = _data["lastModifierId"]; - this.isDeleted = _data["isDeleted"]; - this.deleterId = _data["deleterId"]; - this.deletionTime = _data["deletionTime"] ? dayjs(_data["deletionTime"].toString()) : undefined; - this.tenantId = _data["tenantId"]; - this.userName = _data["userName"]; - this.name = _data["name"]; - this.surname = _data["surname"]; - this.email = _data["email"]; - this.emailConfirmed = _data["emailConfirmed"]; - this.phoneNumber = _data["phoneNumber"]; - this.phoneNumberConfirmed = _data["phoneNumberConfirmed"]; - this.isActive = _data["isActive"]; - this.lockoutEnabled = _data["lockoutEnabled"]; - this.lockoutEnd = _data["lockoutEnd"] ? dayjs(_data["lockoutEnd"].toString()) : undefined; - this.concurrencyStamp = _data["concurrencyStamp"]; - this.entityVersion = _data["entityVersion"]; - } - } - - static fromJS(data: any): IdentityUserDto { - data = typeof data === 'object' ? data : {}; - let result = new IdentityUserDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.extraProperties) { - data["extraProperties"] = {}; - for (let key in this.extraProperties) { - if (this.extraProperties.hasOwnProperty(key)) - (data["extraProperties"])[key] = (this.extraProperties)[key]; - } - } - data["id"] = this.id; - data["creationTime"] = this.creationTime ? this.creationTime.toLocaleString() : undefined; - data["creatorId"] = this.creatorId; - data["lastModificationTime"] = this.lastModificationTime ? this.lastModificationTime.toLocaleString() : undefined; - data["lastModifierId"] = this.lastModifierId; - data["isDeleted"] = this.isDeleted; - data["deleterId"] = this.deleterId; - data["deletionTime"] = this.deletionTime ? this.deletionTime.toLocaleString() : undefined; - data["tenantId"] = this.tenantId; - data["userName"] = this.userName; - data["name"] = this.name; - data["surname"] = this.surname; - data["email"] = this.email; - data["emailConfirmed"] = this.emailConfirmed; - data["phoneNumber"] = this.phoneNumber; - data["phoneNumberConfirmed"] = this.phoneNumberConfirmed; - data["isActive"] = this.isActive; - data["lockoutEnabled"] = this.lockoutEnabled; - data["lockoutEnd"] = this.lockoutEnd ? this.lockoutEnd.toLocaleString() : undefined; - data["concurrencyStamp"] = this.concurrencyStamp; - data["entityVersion"] = this.entityVersion; - return data; - } -} - -export interface IIdentityUserDto { - extraProperties: { [key: string]: any; } | undefined; - id: string; - creationTime: dayjs.Dayjs; - creatorId: string | undefined; - lastModificationTime: dayjs.Dayjs | undefined; - lastModifierId: string | undefined; - isDeleted: boolean; - deleterId: string | undefined; - deletionTime: dayjs.Dayjs | undefined; - tenantId: string | undefined; - userName: string | undefined; - name: string | undefined; - surname: string | undefined; - email: string | undefined; - emailConfirmed: boolean; - phoneNumber: string | undefined; - phoneNumberConfirmed: boolean; - isActive: boolean; - lockoutEnabled: boolean; - lockoutEnd: dayjs.Dayjs | undefined; - concurrencyStamp: string | undefined; - entityVersion: number; -} - -export class IdentityUserDtoPagedResultDto implements IIdentityUserDtoPagedResultDto { - items!: IdentityUserDto[] | undefined; - totalCount!: number; - - constructor(data?: IIdentityUserDtoPagedResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["items"])) { - this.items = [] as any; - for (let item of _data["items"]) - this.items!.push(IdentityUserDto.fromJS(item)); - } - this.totalCount = _data["totalCount"]; - } - } - - static fromJS(data: any): IdentityUserDtoPagedResultDto { - data = typeof data === 'object' ? data : {}; - let result = new IdentityUserDtoPagedResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.items)) { - data["items"] = []; - for (let item of this.items) - data["items"].push(item.toJSON()); - } - data["totalCount"] = this.totalCount; - return data; - } -} - -export interface IIdentityUserDtoPagedResultDto { - items: IdentityUserDto[] | undefined; - totalCount: number; -} - -export class IdentityUserUpdateDto implements IIdentityUserUpdateDto { - readonly extraProperties!: { [key: string]: any; } | undefined; - userName!: string; - name!: string | undefined; - surname!: string | undefined; - email!: string; - phoneNumber!: string | undefined; - isActive!: boolean; - lockoutEnabled!: boolean; - roleNames!: string[] | undefined; - password!: string | undefined; - concurrencyStamp!: string | undefined; - - constructor(data?: IIdentityUserUpdateDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["extraProperties"]) { - (this).extraProperties = {} as any; - for (let key in _data["extraProperties"]) { - if (_data["extraProperties"].hasOwnProperty(key)) - ((this).extraProperties)![key] = _data["extraProperties"][key]; - } - } - this.userName = _data["userName"]; - this.name = _data["name"]; - this.surname = _data["surname"]; - this.email = _data["email"]; - this.phoneNumber = _data["phoneNumber"]; - this.isActive = _data["isActive"]; - this.lockoutEnabled = _data["lockoutEnabled"]; - if (Array.isArray(_data["roleNames"])) { - this.roleNames = [] as any; - for (let item of _data["roleNames"]) - this.roleNames!.push(item); - } - this.password = _data["password"]; - this.concurrencyStamp = _data["concurrencyStamp"]; - } - } - - static fromJS(data: any): IdentityUserUpdateDto { - data = typeof data === 'object' ? data : {}; - let result = new IdentityUserUpdateDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.extraProperties) { - data["extraProperties"] = {}; - for (let key in this.extraProperties) { - if (this.extraProperties.hasOwnProperty(key)) - (data["extraProperties"])[key] = (this.extraProperties)[key]; - } - } - data["userName"] = this.userName; - data["name"] = this.name; - data["surname"] = this.surname; - data["email"] = this.email; - data["phoneNumber"] = this.phoneNumber; - data["isActive"] = this.isActive; - data["lockoutEnabled"] = this.lockoutEnabled; - if (Array.isArray(this.roleNames)) { - data["roleNames"] = []; - for (let item of this.roleNames) - data["roleNames"].push(item); - } - data["password"] = this.password; - data["concurrencyStamp"] = this.concurrencyStamp; - return data; - } -} - -export interface IIdentityUserUpdateDto { - extraProperties: { [key: string]: any; } | undefined; - userName: string; - name: string | undefined; - surname: string | undefined; - email: string; - phoneNumber: string | undefined; - isActive: boolean; - lockoutEnabled: boolean; - roleNames: string[] | undefined; - password: string | undefined; - concurrencyStamp: string | undefined; -} - -export class InterfaceMethodApiDescriptionModel implements IInterfaceMethodApiDescriptionModel { - name!: string | undefined; - parametersOnMethod!: MethodParameterApiDescriptionModel[] | undefined; - returnValue!: ReturnValueApiDescriptionModel; - - constructor(data?: IInterfaceMethodApiDescriptionModel) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.name = _data["name"]; - if (Array.isArray(_data["parametersOnMethod"])) { - this.parametersOnMethod = [] as any; - for (let item of _data["parametersOnMethod"]) - this.parametersOnMethod!.push(MethodParameterApiDescriptionModel.fromJS(item)); - } - this.returnValue = _data["returnValue"] ? ReturnValueApiDescriptionModel.fromJS(_data["returnValue"]) : undefined; - } - } - - static fromJS(data: any): InterfaceMethodApiDescriptionModel { - data = typeof data === 'object' ? data : {}; - let result = new InterfaceMethodApiDescriptionModel(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["name"] = this.name; - if (Array.isArray(this.parametersOnMethod)) { - data["parametersOnMethod"] = []; - for (let item of this.parametersOnMethod) - data["parametersOnMethod"].push(item.toJSON()); - } - data["returnValue"] = this.returnValue ? this.returnValue.toJSON() : undefined; - return data; - } -} - -export interface IInterfaceMethodApiDescriptionModel { - name: string | undefined; - parametersOnMethod: MethodParameterApiDescriptionModel[] | undefined; - returnValue: ReturnValueApiDescriptionModel; -} - -export class LanguageInfo implements ILanguageInfo { - cultureName!: string | undefined; - uiCultureName!: string | undefined; - displayName!: string | undefined; - readonly twoLetterISOLanguageName!: string | undefined; - flagIcon!: string | undefined; - - constructor(data?: ILanguageInfo) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.cultureName = _data["cultureName"]; - this.uiCultureName = _data["uiCultureName"]; - this.displayName = _data["displayName"]; - (this).twoLetterISOLanguageName = _data["twoLetterISOLanguageName"]; - this.flagIcon = _data["flagIcon"]; - } - } - - static fromJS(data: any): LanguageInfo { - data = typeof data === 'object' ? data : {}; - let result = new LanguageInfo(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["cultureName"] = this.cultureName; - data["uiCultureName"] = this.uiCultureName; - data["displayName"] = this.displayName; - data["twoLetterISOLanguageName"] = this.twoLetterISOLanguageName; - data["flagIcon"] = this.flagIcon; - return data; - } -} - -export interface ILanguageInfo { - cultureName: string | undefined; - uiCultureName: string | undefined; - displayName: string | undefined; - twoLetterISOLanguageName: string | undefined; - flagIcon: string | undefined; -} - -export class LocalizableStringDto implements ILocalizableStringDto { - name!: string | undefined; - resource!: string | undefined; - - constructor(data?: ILocalizableStringDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.name = _data["name"]; - this.resource = _data["resource"]; - } - } - - static fromJS(data: any): LocalizableStringDto { - data = typeof data === 'object' ? data : {}; - let result = new LocalizableStringDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["name"] = this.name; - data["resource"] = this.resource; - return data; - } -} - -export interface ILocalizableStringDto { - name: string | undefined; - resource: string | undefined; -} - -export class LockUserInput implements ILockUserInput { - userId!: string; - locked!: boolean; - - constructor(data?: ILockUserInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.userId = _data["userId"]; - this.locked = _data["locked"]; - } - } - - static fromJS(data: any): LockUserInput { - data = typeof data === 'object' ? data : {}; - let result = new LockUserInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["userId"] = this.userId; - data["locked"] = this.locked; - return data; - } -} - -export interface ILockUserInput { - userId: string; - locked: boolean; -} - -/** 登录 */ -export class LoginInput implements ILoginInput { - /** 用户名或者邮箱 */ - name!: string | undefined; - /** 密码 */ - password!: string | undefined; - - constructor(data?: ILoginInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.name = _data["name"]; - this.password = _data["password"]; - } - } - - static fromJS(data: any): LoginInput { - data = typeof data === 'object' ? data : {}; - let result = new LoginInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["name"] = this.name; - data["password"] = this.password; - return data; - } -} - -/** 登录 */ -export interface ILoginInput { - /** 用户名或者邮箱 */ - name: string | undefined; - /** 密码 */ - password: string | undefined; -} - -export class LoginOutput implements ILoginOutput { - id!: string; - name!: string | undefined; - userName!: string | undefined; - token!: string | undefined; - roles!: string[] | undefined; - - constructor(data?: ILoginOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.name = _data["name"]; - this.userName = _data["userName"]; - this.token = _data["token"]; - if (Array.isArray(_data["roles"])) { - this.roles = [] as any; - for (let item of _data["roles"]) - this.roles!.push(item); - } - } - } - - static fromJS(data: any): LoginOutput { - data = typeof data === 'object' ? data : {}; - let result = new LoginOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["name"] = this.name; - data["userName"] = this.userName; - data["token"] = this.token; - if (Array.isArray(this.roles)) { - data["roles"] = []; - for (let item of this.roles) - data["roles"].push(item); - } - return data; - } -} - -export interface ILoginOutput { - id: string; - name: string | undefined; - userName: string | undefined; - token: string | undefined; - roles: string[] | undefined; -} - -export enum LoginResultType { - Success = 1, - InvalidUserNameOrPassword = 2, - NotAllowed = 3, - LockedOut = 4, - RequiresTwoFactor = 5, -} - -/** 消息等级 */ -export enum MessageLevel { - Warning = 10, - Information = 20, - Error = 30, -} - -/** 消息类型 */ -export enum MessageType { - BroadCast = 10, - Common = 20, -} - -export class MethodParameterApiDescriptionModel implements IMethodParameterApiDescriptionModel { - name!: string | undefined; - typeAsString!: string | undefined; - type!: string | undefined; - typeSimple!: string | undefined; - isOptional!: boolean; - defaultValue!: any | undefined; - - constructor(data?: IMethodParameterApiDescriptionModel) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.name = _data["name"]; - this.typeAsString = _data["typeAsString"]; - this.type = _data["type"]; - this.typeSimple = _data["typeSimple"]; - this.isOptional = _data["isOptional"]; - this.defaultValue = _data["defaultValue"]; - } - } - - static fromJS(data: any): MethodParameterApiDescriptionModel { - data = typeof data === 'object' ? data : {}; - let result = new MethodParameterApiDescriptionModel(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["name"] = this.name; - data["typeAsString"] = this.typeAsString; - data["type"] = this.type; - data["typeSimple"] = this.typeSimple; - data["isOptional"] = this.isOptional; - data["defaultValue"] = this.defaultValue; - return data; - } -} - -export interface IMethodParameterApiDescriptionModel { - name: string | undefined; - typeAsString: string | undefined; - type: string | undefined; - typeSimple: string | undefined; - isOptional: boolean; - defaultValue: any | undefined; -} - -export class ModuleApiDescriptionModel implements IModuleApiDescriptionModel { - rootPath!: string | undefined; - remoteServiceName!: string | undefined; - controllers!: { [key: string]: ControllerApiDescriptionModel; } | undefined; - - constructor(data?: IModuleApiDescriptionModel) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.rootPath = _data["rootPath"]; - this.remoteServiceName = _data["remoteServiceName"]; - if (_data["controllers"]) { - this.controllers = {} as any; - for (let key in _data["controllers"]) { - if (_data["controllers"].hasOwnProperty(key)) - (this.controllers)![key] = _data["controllers"][key] ? ControllerApiDescriptionModel.fromJS(_data["controllers"][key]) : new ControllerApiDescriptionModel(); - } - } - } - } - - static fromJS(data: any): ModuleApiDescriptionModel { - data = typeof data === 'object' ? data : {}; - let result = new ModuleApiDescriptionModel(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["rootPath"] = this.rootPath; - data["remoteServiceName"] = this.remoteServiceName; - if (this.controllers) { - data["controllers"] = {}; - for (let key in this.controllers) { - if (this.controllers.hasOwnProperty(key)) - (data["controllers"])[key] = this.controllers[key] ? this.controllers[key].toJSON() : undefined; - } - } - return data; - } -} - -export interface IModuleApiDescriptionModel { - rootPath: string | undefined; - remoteServiceName: string | undefined; - controllers: { [key: string]: ControllerApiDescriptionModel; } | undefined; -} - -export class ModuleExtensionDto implements IModuleExtensionDto { - entities!: { [key: string]: EntityExtensionDto; } | undefined; - configuration!: { [key: string]: any; } | undefined; - - constructor(data?: IModuleExtensionDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["entities"]) { - this.entities = {} as any; - for (let key in _data["entities"]) { - if (_data["entities"].hasOwnProperty(key)) - (this.entities)![key] = _data["entities"][key] ? EntityExtensionDto.fromJS(_data["entities"][key]) : new EntityExtensionDto(); - } - } - if (_data["configuration"]) { - this.configuration = {} as any; - for (let key in _data["configuration"]) { - if (_data["configuration"].hasOwnProperty(key)) - (this.configuration)![key] = _data["configuration"][key]; - } - } - } - } - - static fromJS(data: any): ModuleExtensionDto { - data = typeof data === 'object' ? data : {}; - let result = new ModuleExtensionDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.entities) { - data["entities"] = {}; - for (let key in this.entities) { - if (this.entities.hasOwnProperty(key)) - (data["entities"])[key] = this.entities[key] ? this.entities[key].toJSON() : undefined; - } - } - if (this.configuration) { - data["configuration"] = {}; - for (let key in this.configuration) { - if (this.configuration.hasOwnProperty(key)) - (data["configuration"])[key] = (this.configuration)[key]; - } - } - return data; - } -} - -export interface IModuleExtensionDto { - entities: { [key: string]: EntityExtensionDto; } | undefined; - configuration: { [key: string]: any; } | undefined; -} - -export class MultiTenancyInfoDto implements IMultiTenancyInfoDto { - isEnabled!: boolean; - - constructor(data?: IMultiTenancyInfoDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.isEnabled = _data["isEnabled"]; - } - } - - static fromJS(data: any): MultiTenancyInfoDto { - data = typeof data === 'object' ? data : {}; - let result = new MultiTenancyInfoDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["isEnabled"] = this.isEnabled; - return data; - } -} - -export interface IMultiTenancyInfoDto { - isEnabled: boolean; -} - -export class NameValue implements INameValue { - name!: string | undefined; - value!: string | undefined; - - constructor(data?: INameValue) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.name = _data["name"]; - this.value = _data["value"]; - } - } - - static fromJS(data: any): NameValue { - data = typeof data === 'object' ? data : {}; - let result = new NameValue(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["name"] = this.name; - data["value"] = this.value; - return data; - } -} - -export interface INameValue { - name: string | undefined; - value: string | undefined; -} - -export class ObjectExtensionsDto implements IObjectExtensionsDto { - modules!: { [key: string]: ModuleExtensionDto; } | undefined; - enums!: { [key: string]: ExtensionEnumDto; } | undefined; - - constructor(data?: IObjectExtensionsDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["modules"]) { - this.modules = {} as any; - for (let key in _data["modules"]) { - if (_data["modules"].hasOwnProperty(key)) - (this.modules)![key] = _data["modules"][key] ? ModuleExtensionDto.fromJS(_data["modules"][key]) : new ModuleExtensionDto(); - } - } - if (_data["enums"]) { - this.enums = {} as any; - for (let key in _data["enums"]) { - if (_data["enums"].hasOwnProperty(key)) - (this.enums)![key] = _data["enums"][key] ? ExtensionEnumDto.fromJS(_data["enums"][key]) : new ExtensionEnumDto(); - } - } - } - } - - static fromJS(data: any): ObjectExtensionsDto { - data = typeof data === 'object' ? data : {}; - let result = new ObjectExtensionsDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.modules) { - data["modules"] = {}; - for (let key in this.modules) { - if (this.modules.hasOwnProperty(key)) - (data["modules"])[key] = this.modules[key] ? this.modules[key].toJSON() : undefined; - } - } - if (this.enums) { - data["enums"] = {}; - for (let key in this.enums) { - if (this.enums.hasOwnProperty(key)) - (data["enums"])[key] = this.enums[key] ? this.enums[key].toJSON() : undefined; - } - } - return data; - } -} - -export interface IObjectExtensionsDto { - modules: { [key: string]: ModuleExtensionDto; } | undefined; - enums: { [key: string]: ExtensionEnumDto; } | undefined; -} - -/** 创建语言 */ -export class PageLanguageInput implements IPageLanguageInput { - /** 当前页面.默认从1开始 */ - pageIndex!: number; - /** 每页多少条.每页显示多少记录 */ - pageSize!: number; - /** 跳过多少条 */ - readonly skipCount!: number; - filter!: string | undefined; - - constructor(data?: IPageLanguageInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.pageIndex = _data["pageIndex"]; - this.pageSize = _data["pageSize"]; - (this).skipCount = _data["skipCount"]; - this.filter = _data["filter"]; - } - } - - static fromJS(data: any): PageLanguageInput { - data = typeof data === 'object' ? data : {}; - let result = new PageLanguageInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["pageIndex"] = this.pageIndex; - data["pageSize"] = this.pageSize; - data["skipCount"] = this.skipCount; - data["filter"] = this.filter; - return data; - } -} - -/** 创建语言 */ -export interface IPageLanguageInput { - /** 当前页面.默认从1开始 */ - pageIndex: number; - /** 每页多少条.每页显示多少记录 */ - pageSize: number; - /** 跳过多少条 */ - skipCount: number; - filter: string | undefined; -} - -/** 创建语言 */ -export class PageLanguageOutput implements IPageLanguageOutput { - /** 语言Id */ - id!: string; - /** 语言名称 */ - cultureName!: string | undefined; - /** Ui语言名称 */ - uiCultureName!: string | undefined; - /** 显示名称 */ - displayName!: string | undefined; - /** 图标 */ - flagIcon!: string | undefined; - /** 是否启用 */ - isEnabled!: boolean; - /** 创建时间 */ - creationTime!: dayjs.Dayjs; - /** 是否是默认语言 */ - isDefault!: boolean; - - constructor(data?: IPageLanguageOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.cultureName = _data["cultureName"]; - this.uiCultureName = _data["uiCultureName"]; - this.displayName = _data["displayName"]; - this.flagIcon = _data["flagIcon"]; - this.isEnabled = _data["isEnabled"]; - this.creationTime = _data["creationTime"] ? dayjs(_data["creationTime"].toString()) : undefined; - this.isDefault = _data["isDefault"]; - } - } - - static fromJS(data: any): PageLanguageOutput { - data = typeof data === 'object' ? data : {}; - let result = new PageLanguageOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["cultureName"] = this.cultureName; - data["uiCultureName"] = this.uiCultureName; - data["displayName"] = this.displayName; - data["flagIcon"] = this.flagIcon; - data["isEnabled"] = this.isEnabled; - data["creationTime"] = this.creationTime ? this.creationTime.toLocaleString() : undefined; - data["isDefault"] = this.isDefault; - return data; - } -} - -/** 创建语言 */ -export interface IPageLanguageOutput { - /** 语言Id */ - id: string; - /** 语言名称 */ - cultureName: string | undefined; - /** Ui语言名称 */ - uiCultureName: string | undefined; - /** 显示名称 */ - displayName: string | undefined; - /** 图标 */ - flagIcon: string | undefined; - /** 是否启用 */ - isEnabled: boolean; - /** 创建时间 */ - creationTime: dayjs.Dayjs; - /** 是否是默认语言 */ - isDefault: boolean; -} - -export class PageLanguageOutputPagedResultDto implements IPageLanguageOutputPagedResultDto { - items!: PageLanguageOutput[] | undefined; - totalCount!: number; - - constructor(data?: IPageLanguageOutputPagedResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["items"])) { - this.items = [] as any; - for (let item of _data["items"]) - this.items!.push(PageLanguageOutput.fromJS(item)); - } - this.totalCount = _data["totalCount"]; - } - } - - static fromJS(data: any): PageLanguageOutputPagedResultDto { - data = typeof data === 'object' ? data : {}; - let result = new PageLanguageOutputPagedResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.items)) { - data["items"] = []; - for (let item of this.items) - data["items"].push(item.toJSON()); - } - data["totalCount"] = this.totalCount; - return data; - } -} - -export interface IPageLanguageOutputPagedResultDto { - items: PageLanguageOutput[] | undefined; - totalCount: number; -} - -/** 创建语言文本 */ -export class PageLanguageTextInput implements IPageLanguageTextInput { - /** 当前页面.默认从1开始 */ - pageIndex!: number; - /** 每页多少条.每页显示多少记录 */ - pageSize!: number; - /** 跳过多少条 */ - readonly skipCount!: number; - /** 语言 */ - cultureName!: string | undefined; - /** 资源 */ - resourceName!: string | undefined; - /** 查询条件 name or value */ - filter!: string | undefined; - - constructor(data?: IPageLanguageTextInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.pageIndex = _data["pageIndex"]; - this.pageSize = _data["pageSize"]; - (this).skipCount = _data["skipCount"]; - this.cultureName = _data["cultureName"]; - this.resourceName = _data["resourceName"]; - this.filter = _data["filter"]; - } - } - - static fromJS(data: any): PageLanguageTextInput { - data = typeof data === 'object' ? data : {}; - let result = new PageLanguageTextInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["pageIndex"] = this.pageIndex; - data["pageSize"] = this.pageSize; - data["skipCount"] = this.skipCount; - data["cultureName"] = this.cultureName; - data["resourceName"] = this.resourceName; - data["filter"] = this.filter; - return data; - } -} - -/** 创建语言文本 */ -export interface IPageLanguageTextInput { - /** 当前页面.默认从1开始 */ - pageIndex: number; - /** 每页多少条.每页显示多少记录 */ - pageSize: number; - /** 跳过多少条 */ - skipCount: number; - /** 语言 */ - cultureName: string | undefined; - /** 资源 */ - resourceName: string | undefined; - /** 查询条件 name or value */ - filter: string | undefined; -} - -/** 创建语言文本 */ -export class PageLanguageTextOutput implements IPageLanguageTextOutput { - /** 资源名称 */ - resourceName!: string | undefined; - /** 名称 */ - name!: string | undefined; - /** 值 */ - value!: string | undefined; - - constructor(data?: IPageLanguageTextOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.resourceName = _data["resourceName"]; - this.name = _data["name"]; - this.value = _data["value"]; - } - } - - static fromJS(data: any): PageLanguageTextOutput { - data = typeof data === 'object' ? data : {}; - let result = new PageLanguageTextOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["resourceName"] = this.resourceName; - data["name"] = this.name; - data["value"] = this.value; - return data; - } -} - -/** 创建语言文本 */ -export interface IPageLanguageTextOutput { - /** 资源名称 */ - resourceName: string | undefined; - /** 名称 */ - name: string | undefined; - /** 值 */ - value: string | undefined; -} - -export class PageLanguageTextOutputPagedResultDto implements IPageLanguageTextOutputPagedResultDto { - items!: PageLanguageTextOutput[] | undefined; - totalCount!: number; - - constructor(data?: IPageLanguageTextOutputPagedResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["items"])) { - this.items = [] as any; - for (let item of _data["items"]) - this.items!.push(PageLanguageTextOutput.fromJS(item)); - } - this.totalCount = _data["totalCount"]; - } - } - - static fromJS(data: any): PageLanguageTextOutputPagedResultDto { - data = typeof data === 'object' ? data : {}; - let result = new PageLanguageTextOutputPagedResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.items)) { - data["items"] = []; - for (let item of this.items) - data["items"].push(item.toJSON()); - } - data["totalCount"] = this.totalCount; - return data; - } -} - -export interface IPageLanguageTextOutputPagedResultDto { - items: PageLanguageTextOutput[] | undefined; - totalCount: number; -} - -export class PagingAuditLogActionOutput implements IPagingAuditLogActionOutput { - id!: string; - tenantId!: string | undefined; - auditLogId!: string; - serviceName!: string | undefined; - methodName!: string | undefined; - parameters!: string | undefined; - executionTime!: string | undefined; - executionDuration!: number; - extraProperties!: { [key: string]: any; } | undefined; - - constructor(data?: IPagingAuditLogActionOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.tenantId = _data["tenantId"]; - this.auditLogId = _data["auditLogId"]; - this.serviceName = _data["serviceName"]; - this.methodName = _data["methodName"]; - this.parameters = _data["parameters"]; - this.executionTime = _data["executionTime"]; - this.executionDuration = _data["executionDuration"]; - if (_data["extraProperties"]) { - this.extraProperties = {} as any; - for (let key in _data["extraProperties"]) { - if (_data["extraProperties"].hasOwnProperty(key)) - (this.extraProperties)![key] = _data["extraProperties"][key]; - } - } - } - } - - static fromJS(data: any): PagingAuditLogActionOutput { - data = typeof data === 'object' ? data : {}; - let result = new PagingAuditLogActionOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["tenantId"] = this.tenantId; - data["auditLogId"] = this.auditLogId; - data["serviceName"] = this.serviceName; - data["methodName"] = this.methodName; - data["parameters"] = this.parameters; - data["executionTime"] = this.executionTime; - data["executionDuration"] = this.executionDuration; - if (this.extraProperties) { - data["extraProperties"] = {}; - for (let key in this.extraProperties) { - if (this.extraProperties.hasOwnProperty(key)) - (data["extraProperties"])[key] = (this.extraProperties)[key]; - } - } - return data; - } -} - -export interface IPagingAuditLogActionOutput { - id: string; - tenantId: string | undefined; - auditLogId: string; - serviceName: string | undefined; - methodName: string | undefined; - parameters: string | undefined; - executionTime: string | undefined; - executionDuration: number; - extraProperties: { [key: string]: any; } | undefined; -} - -export class PagingAuditLogInput implements IPagingAuditLogInput { - /** 当前页面.默认从1开始 */ - pageIndex!: number; - /** 每页多少条.每页显示多少记录 */ - pageSize!: number; - /** 跳过多少条 */ - readonly skipCount!: number; - /** 排序 */ - sorting!: string | undefined; - /** 开始时间 */ - startTime!: dayjs.Dayjs | undefined; - /** 结束时间 */ - endTime!: dayjs.Dayjs | undefined; - /** 请求方法 */ - httpMethod!: string | undefined; - /** 请求地址 */ - url!: string | undefined; - /** 用户Id */ - userId!: string | undefined; - /** 用户名 */ - userName!: string | undefined; - /** 应用程序名称 */ - applicationName!: string | undefined; - /** RequestId */ - correlationId!: string | undefined; - /** 最大执行时间 */ - maxExecutionDuration!: number | undefined; - /** 最小执行时间 */ - minExecutionDuration!: number | undefined; - /** 是否有异常 */ - hasException!: boolean | undefined; - httpStatusCode!: HttpStatusCode; - /** 客户端IP */ - clientIpAddress!: string | undefined; - - constructor(data?: IPagingAuditLogInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.pageIndex = _data["pageIndex"]; - this.pageSize = _data["pageSize"]; - (this).skipCount = _data["skipCount"]; - this.sorting = _data["sorting"]; - this.startTime = _data["startTime"] ? dayjs(_data["startTime"].toString()) : undefined; - this.endTime = _data["endTime"] ? dayjs(_data["endTime"].toString()) : undefined; - this.httpMethod = _data["httpMethod"]; - this.url = _data["url"]; - this.userId = _data["userId"]; - this.userName = _data["userName"]; - this.applicationName = _data["applicationName"]; - this.correlationId = _data["correlationId"]; - this.maxExecutionDuration = _data["maxExecutionDuration"]; - this.minExecutionDuration = _data["minExecutionDuration"]; - this.hasException = _data["hasException"]; - this.httpStatusCode = _data["httpStatusCode"]; - this.clientIpAddress = _data["clientIpAddress"]; - } - } - - static fromJS(data: any): PagingAuditLogInput { - data = typeof data === 'object' ? data : {}; - let result = new PagingAuditLogInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["pageIndex"] = this.pageIndex; - data["pageSize"] = this.pageSize; - data["skipCount"] = this.skipCount; - data["sorting"] = this.sorting; - data["startTime"] = this.startTime ? this.startTime.toLocaleString() : undefined; - data["endTime"] = this.endTime ? this.endTime.toLocaleString() : undefined; - data["httpMethod"] = this.httpMethod; - data["url"] = this.url; - data["userId"] = this.userId; - data["userName"] = this.userName; - data["applicationName"] = this.applicationName; - data["correlationId"] = this.correlationId; - data["maxExecutionDuration"] = this.maxExecutionDuration; - data["minExecutionDuration"] = this.minExecutionDuration; - data["hasException"] = this.hasException; - data["httpStatusCode"] = this.httpStatusCode; - data["clientIpAddress"] = this.clientIpAddress; - return data; - } -} - -export interface IPagingAuditLogInput { - /** 当前页面.默认从1开始 */ - pageIndex: number; - /** 每页多少条.每页显示多少记录 */ - pageSize: number; - /** 跳过多少条 */ - skipCount: number; - /** 排序 */ - sorting: string | undefined; - /** 开始时间 */ - startTime: dayjs.Dayjs | undefined; - /** 结束时间 */ - endTime: dayjs.Dayjs | undefined; - /** 请求方法 */ - httpMethod: string | undefined; - /** 请求地址 */ - url: string | undefined; - /** 用户Id */ - userId: string | undefined; - /** 用户名 */ - userName: string | undefined; - /** 应用程序名称 */ - applicationName: string | undefined; - /** RequestId */ - correlationId: string | undefined; - /** 最大执行时间 */ - maxExecutionDuration: number | undefined; - /** 最小执行时间 */ - minExecutionDuration: number | undefined; - /** 是否有异常 */ - hasException: boolean | undefined; - httpStatusCode: HttpStatusCode; - /** 客户端IP */ - clientIpAddress: string | undefined; -} - -export class PagingAuditLogOutput implements IPagingAuditLogOutput { - applicationName!: string | undefined; - userId!: string | undefined; - userName!: string | undefined; - tenantId!: string | undefined; - tenantName!: string | undefined; - impersonatorUserId!: string | undefined; - impersonatorTenantId!: string | undefined; - executionTime!: string | undefined; - executionDuration!: number; - clientIpAddress!: string | undefined; - clientName!: string | undefined; - clientId!: string | undefined; - correlationId!: string | undefined; - browserInfo!: string | undefined; - httpMethod!: string | undefined; - url!: string | undefined; - exceptions!: string | undefined; - comments!: string | undefined; - httpStatusCode!: number | undefined; - entityChanges!: PagingEntityChangeOutput[] | undefined; - actions!: PagingAuditLogActionOutput[] | undefined; - - constructor(data?: IPagingAuditLogOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.applicationName = _data["applicationName"]; - this.userId = _data["userId"]; - this.userName = _data["userName"]; - this.tenantId = _data["tenantId"]; - this.tenantName = _data["tenantName"]; - this.impersonatorUserId = _data["impersonatorUserId"]; - this.impersonatorTenantId = _data["impersonatorTenantId"]; - this.executionTime = _data["executionTime"]; - this.executionDuration = _data["executionDuration"]; - this.clientIpAddress = _data["clientIpAddress"]; - this.clientName = _data["clientName"]; - this.clientId = _data["clientId"]; - this.correlationId = _data["correlationId"]; - this.browserInfo = _data["browserInfo"]; - this.httpMethod = _data["httpMethod"]; - this.url = _data["url"]; - this.exceptions = _data["exceptions"]; - this.comments = _data["comments"]; - this.httpStatusCode = _data["httpStatusCode"]; - if (Array.isArray(_data["entityChanges"])) { - this.entityChanges = [] as any; - for (let item of _data["entityChanges"]) - this.entityChanges!.push(PagingEntityChangeOutput.fromJS(item)); - } - if (Array.isArray(_data["actions"])) { - this.actions = [] as any; - for (let item of _data["actions"]) - this.actions!.push(PagingAuditLogActionOutput.fromJS(item)); - } - } - } - - static fromJS(data: any): PagingAuditLogOutput { - data = typeof data === 'object' ? data : {}; - let result = new PagingAuditLogOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["applicationName"] = this.applicationName; - data["userId"] = this.userId; - data["userName"] = this.userName; - data["tenantId"] = this.tenantId; - data["tenantName"] = this.tenantName; - data["impersonatorUserId"] = this.impersonatorUserId; - data["impersonatorTenantId"] = this.impersonatorTenantId; - data["executionTime"] = this.executionTime; - data["executionDuration"] = this.executionDuration; - data["clientIpAddress"] = this.clientIpAddress; - data["clientName"] = this.clientName; - data["clientId"] = this.clientId; - data["correlationId"] = this.correlationId; - data["browserInfo"] = this.browserInfo; - data["httpMethod"] = this.httpMethod; - data["url"] = this.url; - data["exceptions"] = this.exceptions; - data["comments"] = this.comments; - data["httpStatusCode"] = this.httpStatusCode; - if (Array.isArray(this.entityChanges)) { - data["entityChanges"] = []; - for (let item of this.entityChanges) - data["entityChanges"].push(item.toJSON()); - } - if (Array.isArray(this.actions)) { - data["actions"] = []; - for (let item of this.actions) - data["actions"].push(item.toJSON()); - } - return data; - } -} - -export interface IPagingAuditLogOutput { - applicationName: string | undefined; - userId: string | undefined; - userName: string | undefined; - tenantId: string | undefined; - tenantName: string | undefined; - impersonatorUserId: string | undefined; - impersonatorTenantId: string | undefined; - executionTime: string | undefined; - executionDuration: number; - clientIpAddress: string | undefined; - clientName: string | undefined; - clientId: string | undefined; - correlationId: string | undefined; - browserInfo: string | undefined; - httpMethod: string | undefined; - url: string | undefined; - exceptions: string | undefined; - comments: string | undefined; - httpStatusCode: number | undefined; - entityChanges: PagingEntityChangeOutput[] | undefined; - actions: PagingAuditLogActionOutput[] | undefined; -} - -export class PagingAuditLogOutputPagedResultDto implements IPagingAuditLogOutputPagedResultDto { - items!: PagingAuditLogOutput[] | undefined; - totalCount!: number; - - constructor(data?: IPagingAuditLogOutputPagedResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["items"])) { - this.items = [] as any; - for (let item of _data["items"]) - this.items!.push(PagingAuditLogOutput.fromJS(item)); - } - this.totalCount = _data["totalCount"]; - } - } - - static fromJS(data: any): PagingAuditLogOutputPagedResultDto { - data = typeof data === 'object' ? data : {}; - let result = new PagingAuditLogOutputPagedResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.items)) { - data["items"] = []; - for (let item of this.items) - data["items"].push(item.toJSON()); - } - data["totalCount"] = this.totalCount; - return data; - } -} - -export interface IPagingAuditLogOutputPagedResultDto { - items: PagingAuditLogOutput[] | undefined; - totalCount: number; -} - -export class PagingDataDictionaryDetailInput implements IPagingDataDictionaryDetailInput { - /** 当前页面.默认从1开始 */ - pageIndex!: number; - /** 每页多少条.每页显示多少记录 */ - pageSize!: number; - /** 跳过多少条 */ - readonly skipCount!: number; - dataDictionaryId!: string; - filter!: string | undefined; - - constructor(data?: IPagingDataDictionaryDetailInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.pageIndex = _data["pageIndex"]; - this.pageSize = _data["pageSize"]; - (this).skipCount = _data["skipCount"]; - this.dataDictionaryId = _data["dataDictionaryId"]; - this.filter = _data["filter"]; - } - } - - static fromJS(data: any): PagingDataDictionaryDetailInput { - data = typeof data === 'object' ? data : {}; - let result = new PagingDataDictionaryDetailInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["pageIndex"] = this.pageIndex; - data["pageSize"] = this.pageSize; - data["skipCount"] = this.skipCount; - data["dataDictionaryId"] = this.dataDictionaryId; - data["filter"] = this.filter; - return data; - } -} - -export interface IPagingDataDictionaryDetailInput { - /** 当前页面.默认从1开始 */ - pageIndex: number; - /** 每页多少条.每页显示多少记录 */ - pageSize: number; - /** 跳过多少条 */ - skipCount: number; - dataDictionaryId: string; - filter: string | undefined; -} - -export class PagingDataDictionaryDetailOutput implements IPagingDataDictionaryDetailOutput { - id!: string; - /** 所属字典Id */ - dataDictionaryId!: string; - /** 字典明细编码 */ - code!: string | undefined; - /** 展现列表时排序用 */ - order!: number; - /** 英文显示名 */ - displayText!: string | undefined; - /** 描述 */ - description!: string | undefined; - /** 启/停用(默认启用) */ - isEnabled!: boolean; - - constructor(data?: IPagingDataDictionaryDetailOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.dataDictionaryId = _data["dataDictionaryId"]; - this.code = _data["code"]; - this.order = _data["order"]; - this.displayText = _data["displayText"]; - this.description = _data["description"]; - this.isEnabled = _data["isEnabled"]; - } - } - - static fromJS(data: any): PagingDataDictionaryDetailOutput { - data = typeof data === 'object' ? data : {}; - let result = new PagingDataDictionaryDetailOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["dataDictionaryId"] = this.dataDictionaryId; - data["code"] = this.code; - data["order"] = this.order; - data["displayText"] = this.displayText; - data["description"] = this.description; - data["isEnabled"] = this.isEnabled; - return data; - } -} - -export interface IPagingDataDictionaryDetailOutput { - id: string; - /** 所属字典Id */ - dataDictionaryId: string; - /** 字典明细编码 */ - code: string | undefined; - /** 展现列表时排序用 */ - order: number; - /** 英文显示名 */ - displayText: string | undefined; - /** 描述 */ - description: string | undefined; - /** 启/停用(默认启用) */ - isEnabled: boolean; -} - -export class PagingDataDictionaryDetailOutputPagedResultDto implements IPagingDataDictionaryDetailOutputPagedResultDto { - items!: PagingDataDictionaryDetailOutput[] | undefined; - totalCount!: number; - - constructor(data?: IPagingDataDictionaryDetailOutputPagedResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["items"])) { - this.items = [] as any; - for (let item of _data["items"]) - this.items!.push(PagingDataDictionaryDetailOutput.fromJS(item)); - } - this.totalCount = _data["totalCount"]; - } - } - - static fromJS(data: any): PagingDataDictionaryDetailOutputPagedResultDto { - data = typeof data === 'object' ? data : {}; - let result = new PagingDataDictionaryDetailOutputPagedResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.items)) { - data["items"] = []; - for (let item of this.items) - data["items"].push(item.toJSON()); - } - data["totalCount"] = this.totalCount; - return data; - } -} - -export interface IPagingDataDictionaryDetailOutputPagedResultDto { - items: PagingDataDictionaryDetailOutput[] | undefined; - totalCount: number; -} - -export class PagingDataDictionaryInput implements IPagingDataDictionaryInput { - /** 当前页面.默认从1开始 */ - pageIndex!: number; - /** 每页多少条.每页显示多少记录 */ - pageSize!: number; - /** 跳过多少条 */ - readonly skipCount!: number; - filter!: string | undefined; - - constructor(data?: IPagingDataDictionaryInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.pageIndex = _data["pageIndex"]; - this.pageSize = _data["pageSize"]; - (this).skipCount = _data["skipCount"]; - this.filter = _data["filter"]; - } - } - - static fromJS(data: any): PagingDataDictionaryInput { - data = typeof data === 'object' ? data : {}; - let result = new PagingDataDictionaryInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["pageIndex"] = this.pageIndex; - data["pageSize"] = this.pageSize; - data["skipCount"] = this.skipCount; - data["filter"] = this.filter; - return data; - } -} - -export interface IPagingDataDictionaryInput { - /** 当前页面.默认从1开始 */ - pageIndex: number; - /** 每页多少条.每页显示多少记录 */ - pageSize: number; - /** 跳过多少条 */ - skipCount: number; - filter: string | undefined; -} - -export class PagingDataDictionaryOutput implements IPagingDataDictionaryOutput { - id!: string; - /** 字典编码 */ - code!: string | undefined; - /** 显示名 */ - displayText!: string | undefined; - /** 描述 */ - description!: string | undefined; - - constructor(data?: IPagingDataDictionaryOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.code = _data["code"]; - this.displayText = _data["displayText"]; - this.description = _data["description"]; - } - } - - static fromJS(data: any): PagingDataDictionaryOutput { - data = typeof data === 'object' ? data : {}; - let result = new PagingDataDictionaryOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["code"] = this.code; - data["displayText"] = this.displayText; - data["description"] = this.description; - return data; - } -} - -export interface IPagingDataDictionaryOutput { - id: string; - /** 字典编码 */ - code: string | undefined; - /** 显示名 */ - displayText: string | undefined; - /** 描述 */ - description: string | undefined; -} - -export class PagingDataDictionaryOutputPagedResultDto implements IPagingDataDictionaryOutputPagedResultDto { - items!: PagingDataDictionaryOutput[] | undefined; - totalCount!: number; - - constructor(data?: IPagingDataDictionaryOutputPagedResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["items"])) { - this.items = [] as any; - for (let item of _data["items"]) - this.items!.push(PagingDataDictionaryOutput.fromJS(item)); - } - this.totalCount = _data["totalCount"]; - } - } - - static fromJS(data: any): PagingDataDictionaryOutputPagedResultDto { - data = typeof data === 'object' ? data : {}; - let result = new PagingDataDictionaryOutputPagedResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.items)) { - data["items"] = []; - for (let item of this.items) - data["items"].push(item.toJSON()); - } - data["totalCount"] = this.totalCount; - return data; - } -} - -export interface IPagingDataDictionaryOutputPagedResultDto { - items: PagingDataDictionaryOutput[] | undefined; - totalCount: number; -} - -export class PagingEntityChangeOutput implements IPagingEntityChangeOutput { - id!: string; - auditLogId!: string; - tenantId!: string | undefined; - changeTime!: string | undefined; - changeType!: EntityChangeType; - changeTypeDescription!: string | undefined; - entityTenantId!: string | undefined; - entityId!: string | undefined; - entityTypeFullName!: string | undefined; - propertyChanges!: PagingEntityPropertyChangeOutput[] | undefined; - extraProperties!: { [key: string]: any; } | undefined; - - constructor(data?: IPagingEntityChangeOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.auditLogId = _data["auditLogId"]; - this.tenantId = _data["tenantId"]; - this.changeTime = _data["changeTime"]; - this.changeType = _data["changeType"]; - this.changeTypeDescription = _data["changeTypeDescription"]; - this.entityTenantId = _data["entityTenantId"]; - this.entityId = _data["entityId"]; - this.entityTypeFullName = _data["entityTypeFullName"]; - if (Array.isArray(_data["propertyChanges"])) { - this.propertyChanges = [] as any; - for (let item of _data["propertyChanges"]) - this.propertyChanges!.push(PagingEntityPropertyChangeOutput.fromJS(item)); - } - if (_data["extraProperties"]) { - this.extraProperties = {} as any; - for (let key in _data["extraProperties"]) { - if (_data["extraProperties"].hasOwnProperty(key)) - (this.extraProperties)![key] = _data["extraProperties"][key]; - } - } - } - } - - static fromJS(data: any): PagingEntityChangeOutput { - data = typeof data === 'object' ? data : {}; - let result = new PagingEntityChangeOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["auditLogId"] = this.auditLogId; - data["tenantId"] = this.tenantId; - data["changeTime"] = this.changeTime; - data["changeType"] = this.changeType; - data["changeTypeDescription"] = this.changeTypeDescription; - data["entityTenantId"] = this.entityTenantId; - data["entityId"] = this.entityId; - data["entityTypeFullName"] = this.entityTypeFullName; - if (Array.isArray(this.propertyChanges)) { - data["propertyChanges"] = []; - for (let item of this.propertyChanges) - data["propertyChanges"].push(item.toJSON()); - } - if (this.extraProperties) { - data["extraProperties"] = {}; - for (let key in this.extraProperties) { - if (this.extraProperties.hasOwnProperty(key)) - (data["extraProperties"])[key] = (this.extraProperties)[key]; - } - } - return data; - } -} - -export interface IPagingEntityChangeOutput { - id: string; - auditLogId: string; - tenantId: string | undefined; - changeTime: string | undefined; - changeType: EntityChangeType; - changeTypeDescription: string | undefined; - entityTenantId: string | undefined; - entityId: string | undefined; - entityTypeFullName: string | undefined; - propertyChanges: PagingEntityPropertyChangeOutput[] | undefined; - extraProperties: { [key: string]: any; } | undefined; -} - -export class PagingEntityPropertyChangeOutput implements IPagingEntityPropertyChangeOutput { - id!: string; - tenantId!: string | undefined; - entityChangeId!: string; - newValue!: string | undefined; - originalValue!: string | undefined; - propertyName!: string | undefined; - propertyTypeFullName!: string | undefined; - - constructor(data?: IPagingEntityPropertyChangeOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.tenantId = _data["tenantId"]; - this.entityChangeId = _data["entityChangeId"]; - this.newValue = _data["newValue"]; - this.originalValue = _data["originalValue"]; - this.propertyName = _data["propertyName"]; - this.propertyTypeFullName = _data["propertyTypeFullName"]; - } - } - - static fromJS(data: any): PagingEntityPropertyChangeOutput { - data = typeof data === 'object' ? data : {}; - let result = new PagingEntityPropertyChangeOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["tenantId"] = this.tenantId; - data["entityChangeId"] = this.entityChangeId; - data["newValue"] = this.newValue; - data["originalValue"] = this.originalValue; - data["propertyName"] = this.propertyName; - data["propertyTypeFullName"] = this.propertyTypeFullName; - return data; - } -} - -export interface IPagingEntityPropertyChangeOutput { - id: string; - tenantId: string | undefined; - entityChangeId: string; - newValue: string | undefined; - originalValue: string | undefined; - propertyName: string | undefined; - propertyTypeFullName: string | undefined; -} - -export class PagingIdentitySecurityLogInput implements IPagingIdentitySecurityLogInput { - /** 当前页面.默认从1开始 */ - pageIndex!: number; - /** 每页多少条.每页显示多少记录 */ - pageSize!: number; - /** 跳过多少条 */ - readonly skipCount!: number; - /** 排序 */ - sorting!: string | undefined; - /** 开始时间 */ - startTime!: dayjs.Dayjs | undefined; - /** 结束时间 */ - endTime!: dayjs.Dayjs | undefined; - identity!: string | undefined; - /** 请求地址 */ - action!: string | undefined; - /** 用户Id */ - userId!: string | undefined; - /** 用户名 */ - userName!: string | undefined; - /** 应用程序名称 */ - applicationName!: string | undefined; - /** RequestId */ - correlationId!: string | undefined; - /** ClientId */ - clientId!: string | undefined; - - constructor(data?: IPagingIdentitySecurityLogInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.pageIndex = _data["pageIndex"]; - this.pageSize = _data["pageSize"]; - (this).skipCount = _data["skipCount"]; - this.sorting = _data["sorting"]; - this.startTime = _data["startTime"] ? dayjs(_data["startTime"].toString()) : undefined; - this.endTime = _data["endTime"] ? dayjs(_data["endTime"].toString()) : undefined; - this.identity = _data["identity"]; - this.action = _data["action"]; - this.userId = _data["userId"]; - this.userName = _data["userName"]; - this.applicationName = _data["applicationName"]; - this.correlationId = _data["correlationId"]; - this.clientId = _data["clientId"]; - } - } - - static fromJS(data: any): PagingIdentitySecurityLogInput { - data = typeof data === 'object' ? data : {}; - let result = new PagingIdentitySecurityLogInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["pageIndex"] = this.pageIndex; - data["pageSize"] = this.pageSize; - data["skipCount"] = this.skipCount; - data["sorting"] = this.sorting; - data["startTime"] = this.startTime ? this.startTime.toLocaleString() : undefined; - data["endTime"] = this.endTime ? this.endTime.toLocaleString() : undefined; - data["identity"] = this.identity; - data["action"] = this.action; - data["userId"] = this.userId; - data["userName"] = this.userName; - data["applicationName"] = this.applicationName; - data["correlationId"] = this.correlationId; - data["clientId"] = this.clientId; - return data; - } -} - -export interface IPagingIdentitySecurityLogInput { - /** 当前页面.默认从1开始 */ - pageIndex: number; - /** 每页多少条.每页显示多少记录 */ - pageSize: number; - /** 跳过多少条 */ - skipCount: number; - /** 排序 */ - sorting: string | undefined; - /** 开始时间 */ - startTime: dayjs.Dayjs | undefined; - /** 结束时间 */ - endTime: dayjs.Dayjs | undefined; - identity: string | undefined; - /** 请求地址 */ - action: string | undefined; - /** 用户Id */ - userId: string | undefined; - /** 用户名 */ - userName: string | undefined; - /** 应用程序名称 */ - applicationName: string | undefined; - /** RequestId */ - correlationId: string | undefined; - /** ClientId */ - clientId: string | undefined; -} - -export class PagingIdentitySecurityLogOutput implements IPagingIdentitySecurityLogOutput { - id!: string; - tenantId!: string | undefined; - applicationName!: string | undefined; - identity!: string | undefined; - action!: string | undefined; - userId!: string | undefined; - userName!: string | undefined; - tenantName!: string | undefined; - clientId!: string | undefined; - correlationId!: string | undefined; - clientIpAddress!: string | undefined; - browserInfo!: string | undefined; - creationTime!: dayjs.Dayjs; - - constructor(data?: IPagingIdentitySecurityLogOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.tenantId = _data["tenantId"]; - this.applicationName = _data["applicationName"]; - this.identity = _data["identity"]; - this.action = _data["action"]; - this.userId = _data["userId"]; - this.userName = _data["userName"]; - this.tenantName = _data["tenantName"]; - this.clientId = _data["clientId"]; - this.correlationId = _data["correlationId"]; - this.clientIpAddress = _data["clientIpAddress"]; - this.browserInfo = _data["browserInfo"]; - this.creationTime = _data["creationTime"] ? dayjs(_data["creationTime"].toString()) : undefined; - } - } - - static fromJS(data: any): PagingIdentitySecurityLogOutput { - data = typeof data === 'object' ? data : {}; - let result = new PagingIdentitySecurityLogOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["tenantId"] = this.tenantId; - data["applicationName"] = this.applicationName; - data["identity"] = this.identity; - data["action"] = this.action; - data["userId"] = this.userId; - data["userName"] = this.userName; - data["tenantName"] = this.tenantName; - data["clientId"] = this.clientId; - data["correlationId"] = this.correlationId; - data["clientIpAddress"] = this.clientIpAddress; - data["browserInfo"] = this.browserInfo; - data["creationTime"] = this.creationTime ? this.creationTime.toLocaleString() : undefined; - return data; - } -} - -export interface IPagingIdentitySecurityLogOutput { - id: string; - tenantId: string | undefined; - applicationName: string | undefined; - identity: string | undefined; - action: string | undefined; - userId: string | undefined; - userName: string | undefined; - tenantName: string | undefined; - clientId: string | undefined; - correlationId: string | undefined; - clientIpAddress: string | undefined; - browserInfo: string | undefined; - creationTime: dayjs.Dayjs; -} - -export class PagingIdentitySecurityLogOutputPagedResultDto implements IPagingIdentitySecurityLogOutputPagedResultDto { - items!: PagingIdentitySecurityLogOutput[] | undefined; - totalCount!: number; - - constructor(data?: IPagingIdentitySecurityLogOutputPagedResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["items"])) { - this.items = [] as any; - for (let item of _data["items"]) - this.items!.push(PagingIdentitySecurityLogOutput.fromJS(item)); - } - this.totalCount = _data["totalCount"]; - } - } - - static fromJS(data: any): PagingIdentitySecurityLogOutputPagedResultDto { - data = typeof data === 'object' ? data : {}; - let result = new PagingIdentitySecurityLogOutputPagedResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.items)) { - data["items"] = []; - for (let item of this.items) - data["items"].push(item.toJSON()); - } - data["totalCount"] = this.totalCount; - return data; - } -} - -export interface IPagingIdentitySecurityLogOutputPagedResultDto { - items: PagingIdentitySecurityLogOutput[] | undefined; - totalCount: number; -} - -export class PagingNotificationListInput implements IPagingNotificationListInput { - /** 当前页面.默认从1开始 */ - pageIndex!: number; - /** 每页多少条.每页显示多少记录 */ - pageSize!: number; - /** 跳过多少条 */ - readonly skipCount!: number; - - constructor(data?: IPagingNotificationListInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.pageIndex = _data["pageIndex"]; - this.pageSize = _data["pageSize"]; - (this).skipCount = _data["skipCount"]; - } - } - - static fromJS(data: any): PagingNotificationListInput { - data = typeof data === 'object' ? data : {}; - let result = new PagingNotificationListInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["pageIndex"] = this.pageIndex; - data["pageSize"] = this.pageSize; - data["skipCount"] = this.skipCount; - return data; - } -} - -export interface IPagingNotificationListInput { - /** 当前页面.默认从1开始 */ - pageIndex: number; - /** 每页多少条.每页显示多少记录 */ - pageSize: number; - /** 跳过多少条 */ - skipCount: number; -} - -export class PagingNotificationListOutput implements IPagingNotificationListOutput { - id!: string; - /** 消息标题 */ - title!: string | undefined; - /** 消息内容 */ - content!: string | undefined; - messageType!: MessageType; - readonly messageTypeDescription!: string | undefined; - messageLevel!: MessageLevel; - readonly messageLevelDescription!: string | undefined; - /** 发送人 */ - senderId!: string; - /** 创建时间 */ - creationTime!: dayjs.Dayjs; - /** 是否已读 */ - read!: boolean; - - constructor(data?: IPagingNotificationListOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.title = _data["title"]; - this.content = _data["content"]; - this.messageType = _data["messageType"]; - (this).messageTypeDescription = _data["messageTypeDescription"]; - this.messageLevel = _data["messageLevel"]; - (this).messageLevelDescription = _data["messageLevelDescription"]; - this.senderId = _data["senderId"]; - this.creationTime = _data["creationTime"] ? dayjs(_data["creationTime"].toString()) : undefined; - this.read = _data["read"]; - } - } - - static fromJS(data: any): PagingNotificationListOutput { - data = typeof data === 'object' ? data : {}; - let result = new PagingNotificationListOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["title"] = this.title; - data["content"] = this.content; - data["messageType"] = this.messageType; - data["messageTypeDescription"] = this.messageTypeDescription; - data["messageLevel"] = this.messageLevel; - data["messageLevelDescription"] = this.messageLevelDescription; - data["senderId"] = this.senderId; - data["creationTime"] = this.creationTime ? this.creationTime.toLocaleString() : undefined; - data["read"] = this.read; - return data; - } -} - -export interface IPagingNotificationListOutput { - id: string; - /** 消息标题 */ - title: string | undefined; - /** 消息内容 */ - content: string | undefined; - messageType: MessageType; - messageTypeDescription: string | undefined; - messageLevel: MessageLevel; - messageLevelDescription: string | undefined; - /** 发送人 */ - senderId: string; - /** 创建时间 */ - creationTime: dayjs.Dayjs; - /** 是否已读 */ - read: boolean; -} - -export class PagingNotificationListOutputPagedResultDto implements IPagingNotificationListOutputPagedResultDto { - items!: PagingNotificationListOutput[] | undefined; - totalCount!: number; - - constructor(data?: IPagingNotificationListOutputPagedResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["items"])) { - this.items = [] as any; - for (let item of _data["items"]) - this.items!.push(PagingNotificationListOutput.fromJS(item)); - } - this.totalCount = _data["totalCount"]; - } - } - - static fromJS(data: any): PagingNotificationListOutputPagedResultDto { - data = typeof data === 'object' ? data : {}; - let result = new PagingNotificationListOutputPagedResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.items)) { - data["items"] = []; - for (let item of this.items) - data["items"].push(item.toJSON()); - } - data["totalCount"] = this.totalCount; - return data; - } -} - -export interface IPagingNotificationListOutputPagedResultDto { - items: PagingNotificationListOutput[] | undefined; - totalCount: number; -} - -export class PagingRoleListInput implements IPagingRoleListInput { - /** 当前页面.默认从1开始 */ - pageIndex!: number; - /** 每页多少条.每页显示多少记录 */ - pageSize!: number; - /** 跳过多少条 */ - readonly skipCount!: number; - filter!: string | undefined; - - constructor(data?: IPagingRoleListInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.pageIndex = _data["pageIndex"]; - this.pageSize = _data["pageSize"]; - (this).skipCount = _data["skipCount"]; - this.filter = _data["filter"]; - } - } - - static fromJS(data: any): PagingRoleListInput { - data = typeof data === 'object' ? data : {}; - let result = new PagingRoleListInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["pageIndex"] = this.pageIndex; - data["pageSize"] = this.pageSize; - data["skipCount"] = this.skipCount; - data["filter"] = this.filter; - return data; - } -} - -export interface IPagingRoleListInput { - /** 当前页面.默认从1开始 */ - pageIndex: number; - /** 每页多少条.每页显示多少记录 */ - pageSize: number; - /** 跳过多少条 */ - skipCount: number; - filter: string | undefined; -} - -export class PagingTenantInput implements IPagingTenantInput { - /** 当前页面.默认从1开始 */ - pageIndex!: number; - /** 每页多少条.每页显示多少记录 */ - pageSize!: number; - /** 跳过多少条 */ - readonly skipCount!: number; - filter!: string | undefined; - - constructor(data?: IPagingTenantInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.pageIndex = _data["pageIndex"]; - this.pageSize = _data["pageSize"]; - (this).skipCount = _data["skipCount"]; - this.filter = _data["filter"]; - } - } - - static fromJS(data: any): PagingTenantInput { - data = typeof data === 'object' ? data : {}; - let result = new PagingTenantInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["pageIndex"] = this.pageIndex; - data["pageSize"] = this.pageSize; - data["skipCount"] = this.skipCount; - data["filter"] = this.filter; - return data; - } -} - -export interface IPagingTenantInput { - /** 当前页面.默认从1开始 */ - pageIndex: number; - /** 每页多少条.每页显示多少记录 */ - pageSize: number; - /** 跳过多少条 */ - skipCount: number; - filter: string | undefined; -} - -export class PagingUserListInput implements IPagingUserListInput { - /** 当前页面.默认从1开始 */ - pageIndex!: number; - /** 每页多少条.每页显示多少记录 */ - pageSize!: number; - /** 跳过多少条 */ - readonly skipCount!: number; - /** 关键字 */ - filter!: string | undefined; - - constructor(data?: IPagingUserListInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.pageIndex = _data["pageIndex"]; - this.pageSize = _data["pageSize"]; - (this).skipCount = _data["skipCount"]; - this.filter = _data["filter"]; - } - } - - static fromJS(data: any): PagingUserListInput { - data = typeof data === 'object' ? data : {}; - let result = new PagingUserListInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["pageIndex"] = this.pageIndex; - data["pageSize"] = this.pageSize; - data["skipCount"] = this.skipCount; - data["filter"] = this.filter; - return data; - } -} - -export interface IPagingUserListInput { - /** 当前页面.默认从1开始 */ - pageIndex: number; - /** 每页多少条.每页显示多少记录 */ - pageSize: number; - /** 跳过多少条 */ - skipCount: number; - /** 关键字 */ - filter: string | undefined; -} - -export class ParameterApiDescriptionModel implements IParameterApiDescriptionModel { - nameOnMethod!: string | undefined; - name!: string | undefined; - jsonName!: string | undefined; - type!: string | undefined; - typeSimple!: string | undefined; - isOptional!: boolean; - defaultValue!: any | undefined; - constraintTypes!: string[] | undefined; - bindingSourceId!: string | undefined; - descriptorName!: string | undefined; - - constructor(data?: IParameterApiDescriptionModel) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.nameOnMethod = _data["nameOnMethod"]; - this.name = _data["name"]; - this.jsonName = _data["jsonName"]; - this.type = _data["type"]; - this.typeSimple = _data["typeSimple"]; - this.isOptional = _data["isOptional"]; - this.defaultValue = _data["defaultValue"]; - if (Array.isArray(_data["constraintTypes"])) { - this.constraintTypes = [] as any; - for (let item of _data["constraintTypes"]) - this.constraintTypes!.push(item); - } - this.bindingSourceId = _data["bindingSourceId"]; - this.descriptorName = _data["descriptorName"]; - } - } - - static fromJS(data: any): ParameterApiDescriptionModel { - data = typeof data === 'object' ? data : {}; - let result = new ParameterApiDescriptionModel(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["nameOnMethod"] = this.nameOnMethod; - data["name"] = this.name; - data["jsonName"] = this.jsonName; - data["type"] = this.type; - data["typeSimple"] = this.typeSimple; - data["isOptional"] = this.isOptional; - data["defaultValue"] = this.defaultValue; - if (Array.isArray(this.constraintTypes)) { - data["constraintTypes"] = []; - for (let item of this.constraintTypes) - data["constraintTypes"].push(item); - } - data["bindingSourceId"] = this.bindingSourceId; - data["descriptorName"] = this.descriptorName; - return data; - } -} - -export interface IParameterApiDescriptionModel { - nameOnMethod: string | undefined; - name: string | undefined; - jsonName: string | undefined; - type: string | undefined; - typeSimple: string | undefined; - isOptional: boolean; - defaultValue: any | undefined; - constraintTypes: string[] | undefined; - bindingSourceId: string | undefined; - descriptorName: string | undefined; -} - -export class PermissionOutput implements IPermissionOutput { - grants!: string[] | undefined; - allGrants!: string[] | undefined; - permissions!: PermissionTreeDto[] | undefined; - - constructor(data?: IPermissionOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["grants"])) { - this.grants = [] as any; - for (let item of _data["grants"]) - this.grants!.push(item); - } - if (Array.isArray(_data["allGrants"])) { - this.allGrants = [] as any; - for (let item of _data["allGrants"]) - this.allGrants!.push(item); - } - if (Array.isArray(_data["permissions"])) { - this.permissions = [] as any; - for (let item of _data["permissions"]) - this.permissions!.push(PermissionTreeDto.fromJS(item)); - } - } - } - - static fromJS(data: any): PermissionOutput { - data = typeof data === 'object' ? data : {}; - let result = new PermissionOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.grants)) { - data["grants"] = []; - for (let item of this.grants) - data["grants"].push(item); - } - if (Array.isArray(this.allGrants)) { - data["allGrants"] = []; - for (let item of this.allGrants) - data["allGrants"].push(item); - } - if (Array.isArray(this.permissions)) { - data["permissions"] = []; - for (let item of this.permissions) - data["permissions"].push(item.toJSON()); - } - return data; - } -} - -export interface IPermissionOutput { - grants: string[] | undefined; - allGrants: string[] | undefined; - permissions: PermissionTreeDto[] | undefined; -} - -export class PermissionTreeDto implements IPermissionTreeDto { - title!: string | undefined; - key!: string | undefined; - children!: PermissionTreeDto[] | undefined; - - constructor(data?: IPermissionTreeDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.title = _data["title"]; - this.key = _data["key"]; - if (Array.isArray(_data["children"])) { - this.children = [] as any; - for (let item of _data["children"]) - this.children!.push(PermissionTreeDto.fromJS(item)); - } - } - } - - static fromJS(data: any): PermissionTreeDto { - data = typeof data === 'object' ? data : {}; - let result = new PermissionTreeDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["title"] = this.title; - data["key"] = this.key; - if (Array.isArray(this.children)) { - data["children"] = []; - for (let item of this.children) - data["children"].push(item.toJSON()); - } - return data; - } -} - -export interface IPermissionTreeDto { - title: string | undefined; - key: string | undefined; - children: PermissionTreeDto[] | undefined; -} - -export class PropertyApiDescriptionModel implements IPropertyApiDescriptionModel { - name!: string | undefined; - jsonName!: string | undefined; - type!: string | undefined; - typeSimple!: string | undefined; - isRequired!: boolean; - minLength!: number | undefined; - maxLength!: number | undefined; - minimum!: string | undefined; - maximum!: string | undefined; - regex!: string | undefined; - - constructor(data?: IPropertyApiDescriptionModel) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.name = _data["name"]; - this.jsonName = _data["jsonName"]; - this.type = _data["type"]; - this.typeSimple = _data["typeSimple"]; - this.isRequired = _data["isRequired"]; - this.minLength = _data["minLength"]; - this.maxLength = _data["maxLength"]; - this.minimum = _data["minimum"]; - this.maximum = _data["maximum"]; - this.regex = _data["regex"]; - } - } - - static fromJS(data: any): PropertyApiDescriptionModel { - data = typeof data === 'object' ? data : {}; - let result = new PropertyApiDescriptionModel(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["name"] = this.name; - data["jsonName"] = this.jsonName; - data["type"] = this.type; - data["typeSimple"] = this.typeSimple; - data["isRequired"] = this.isRequired; - data["minLength"] = this.minLength; - data["maxLength"] = this.maxLength; - data["minimum"] = this.minimum; - data["maximum"] = this.maximum; - data["regex"] = this.regex; - return data; - } -} - -export interface IPropertyApiDescriptionModel { - name: string | undefined; - jsonName: string | undefined; - type: string | undefined; - typeSimple: string | undefined; - isRequired: boolean; - minLength: number | undefined; - maxLength: number | undefined; - minimum: string | undefined; - maximum: string | undefined; - regex: string | undefined; -} - -export class RemoteServiceErrorInfo implements IRemoteServiceErrorInfo { - code!: string | undefined; - message!: string | undefined; - details!: string | undefined; - data!: { [key: string]: any; } | undefined; - validationErrors!: RemoteServiceValidationErrorInfo[] | undefined; - - constructor(data?: IRemoteServiceErrorInfo) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.code = _data["code"]; - this.message = _data["message"]; - this.details = _data["details"]; - if (_data["data"]) { - this.data = {} as any; - for (let key in _data["data"]) { - if (_data["data"].hasOwnProperty(key)) - (this.data)![key] = _data["data"][key]; - } - } - if (Array.isArray(_data["validationErrors"])) { - this.validationErrors = [] as any; - for (let item of _data["validationErrors"]) - this.validationErrors!.push(RemoteServiceValidationErrorInfo.fromJS(item)); - } - } - } - - static fromJS(data: any): RemoteServiceErrorInfo { - data = typeof data === 'object' ? data : {}; - let result = new RemoteServiceErrorInfo(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["code"] = this.code; - data["message"] = this.message; - data["details"] = this.details; - if (this.data) { - data["data"] = {}; - for (let key in this.data) { - if (this.data.hasOwnProperty(key)) - (data["data"])[key] = (this.data)[key]; - } - } - if (Array.isArray(this.validationErrors)) { - data["validationErrors"] = []; - for (let item of this.validationErrors) - data["validationErrors"].push(item.toJSON()); - } - return data; - } -} - -export interface IRemoteServiceErrorInfo { - code: string | undefined; - message: string | undefined; - details: string | undefined; - data: { [key: string]: any; } | undefined; - validationErrors: RemoteServiceValidationErrorInfo[] | undefined; -} - -export class RemoteServiceErrorResponse implements IRemoteServiceErrorResponse { - error!: RemoteServiceErrorInfo; - - constructor(data?: IRemoteServiceErrorResponse) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.error = _data["error"] ? RemoteServiceErrorInfo.fromJS(_data["error"]) : undefined; - } - } - - static fromJS(data: any): RemoteServiceErrorResponse { - data = typeof data === 'object' ? data : {}; - let result = new RemoteServiceErrorResponse(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["error"] = this.error ? this.error.toJSON() : undefined; - return data; - } -} - -export interface IRemoteServiceErrorResponse { - error: RemoteServiceErrorInfo; -} - -export class RemoteServiceValidationErrorInfo implements IRemoteServiceValidationErrorInfo { - message!: string | undefined; - members!: string[] | undefined; - - constructor(data?: IRemoteServiceValidationErrorInfo) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.message = _data["message"]; - if (Array.isArray(_data["members"])) { - this.members = [] as any; - for (let item of _data["members"]) - this.members!.push(item); - } - } - } - - static fromJS(data: any): RemoteServiceValidationErrorInfo { - data = typeof data === 'object' ? data : {}; - let result = new RemoteServiceValidationErrorInfo(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["message"] = this.message; - if (Array.isArray(this.members)) { - data["members"] = []; - for (let item of this.members) - data["members"].push(item); - } - return data; - } -} - -export interface IRemoteServiceValidationErrorInfo { - message: string | undefined; - members: string[] | undefined; -} - -export class RemoveRoleToOrganizationUnitInput implements IRemoveRoleToOrganizationUnitInput { - roleId!: string; - organizationUnitId!: string; - - constructor(data?: IRemoveRoleToOrganizationUnitInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.roleId = _data["roleId"]; - this.organizationUnitId = _data["organizationUnitId"]; - } - } - - static fromJS(data: any): RemoveRoleToOrganizationUnitInput { - data = typeof data === 'object' ? data : {}; - let result = new RemoveRoleToOrganizationUnitInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["roleId"] = this.roleId; - data["organizationUnitId"] = this.organizationUnitId; - return data; - } -} - -export interface IRemoveRoleToOrganizationUnitInput { - roleId: string; - organizationUnitId: string; -} - -export class RemoveUserToOrganizationUnitInput implements IRemoveUserToOrganizationUnitInput { - userId!: string; - organizationUnitId!: string; - - constructor(data?: IRemoveUserToOrganizationUnitInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.userId = _data["userId"]; - this.organizationUnitId = _data["organizationUnitId"]; - } - } - - static fromJS(data: any): RemoveUserToOrganizationUnitInput { - data = typeof data === 'object' ? data : {}; - let result = new RemoveUserToOrganizationUnitInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["userId"] = this.userId; - data["organizationUnitId"] = this.organizationUnitId; - return data; - } -} - -export interface IRemoveUserToOrganizationUnitInput { - userId: string; - organizationUnitId: string; -} - -export class ReturnValueApiDescriptionModel implements IReturnValueApiDescriptionModel { - type!: string | undefined; - typeSimple!: string | undefined; - - constructor(data?: IReturnValueApiDescriptionModel) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.type = _data["type"]; - this.typeSimple = _data["typeSimple"]; - } - } - - static fromJS(data: any): ReturnValueApiDescriptionModel { - data = typeof data === 'object' ? data : {}; - let result = new ReturnValueApiDescriptionModel(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["type"] = this.type; - data["typeSimple"] = this.typeSimple; - return data; - } -} - -export interface IReturnValueApiDescriptionModel { - type: string | undefined; - typeSimple: string | undefined; -} - -export class SendBroadCastMessageInput implements ISendBroadCastMessageInput { - /** 消息标题 */ - title!: string | undefined; - /** 消息内容 */ - content!: string | undefined; - - constructor(data?: ISendBroadCastMessageInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.title = _data["title"]; - this.content = _data["content"]; - } - } - - static fromJS(data: any): SendBroadCastMessageInput { - data = typeof data === 'object' ? data : {}; - let result = new SendBroadCastMessageInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["title"] = this.title; - data["content"] = this.content; - return data; - } -} - -export interface ISendBroadCastMessageInput { - /** 消息标题 */ - title: string | undefined; - /** 消息内容 */ - content: string | undefined; -} - -export class SendCommonMessageInput implements ISendCommonMessageInput { - /** 消息标题 */ - title!: string | undefined; - /** 消息内容 */ - content!: string | undefined; - /** 发送人 */ - receiveIds!: string[] | undefined; - - constructor(data?: ISendCommonMessageInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.title = _data["title"]; - this.content = _data["content"]; - if (Array.isArray(_data["receiveIds"])) { - this.receiveIds = [] as any; - for (let item of _data["receiveIds"]) - this.receiveIds!.push(item); - } - } - } - - static fromJS(data: any): SendCommonMessageInput { - data = typeof data === 'object' ? data : {}; - let result = new SendCommonMessageInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["title"] = this.title; - data["content"] = this.content; - if (Array.isArray(this.receiveIds)) { - data["receiveIds"] = []; - for (let item of this.receiveIds) - data["receiveIds"].push(item); - } - return data; - } -} - -export interface ISendCommonMessageInput { - /** 消息标题 */ - title: string | undefined; - /** 消息内容 */ - content: string | undefined; - /** 发送人 */ - receiveIds: string[] | undefined; -} - -export class SetDataDictinaryDetailInput implements ISetDataDictinaryDetailInput { - dataDictionaryId!: string; - dataDictionayDetailId!: string; - isEnabled!: boolean; - - constructor(data?: ISetDataDictinaryDetailInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.dataDictionaryId = _data["dataDictionaryId"]; - this.dataDictionayDetailId = _data["dataDictionayDetailId"]; - this.isEnabled = _data["isEnabled"]; - } - } - - static fromJS(data: any): SetDataDictinaryDetailInput { - data = typeof data === 'object' ? data : {}; - let result = new SetDataDictinaryDetailInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["dataDictionaryId"] = this.dataDictionaryId; - data["dataDictionayDetailId"] = this.dataDictionayDetailId; - data["isEnabled"] = this.isEnabled; - return data; - } -} - -export interface ISetDataDictinaryDetailInput { - dataDictionaryId: string; - dataDictionayDetailId: string; - isEnabled: boolean; -} - -export class SetReadInput implements ISetReadInput { - id!: string; - - constructor(data?: ISetReadInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - } - } - - static fromJS(data: any): SetReadInput { - data = typeof data === 'object' ? data : {}; - let result = new SetReadInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - return data; - } -} - -export interface ISetReadInput { - id: string; -} - -export class SettingItemOutput implements ISettingItemOutput { - /** 名称 */ - name!: string | undefined; - /** 显示名称 */ - displayName!: string | undefined; - /** 描述 */ - description!: string | undefined; - /** 值 */ - value!: string | undefined; - /** 前端控件类型 */ - type!: string | undefined; - - constructor(data?: ISettingItemOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.name = _data["name"]; - this.displayName = _data["displayName"]; - this.description = _data["description"]; - this.value = _data["value"]; - this.type = _data["type"]; - } - } - - static fromJS(data: any): SettingItemOutput { - data = typeof data === 'object' ? data : {}; - let result = new SettingItemOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["name"] = this.name; - data["displayName"] = this.displayName; - data["description"] = this.description; - data["value"] = this.value; - data["type"] = this.type; - return data; - } -} - -export interface ISettingItemOutput { - /** 名称 */ - name: string | undefined; - /** 显示名称 */ - displayName: string | undefined; - /** 描述 */ - description: string | undefined; - /** 值 */ - value: string | undefined; - /** 前端控件类型 */ - type: string | undefined; -} - -export class SettingOutput implements ISettingOutput { - /** 分组 */ - group!: string | undefined; - /** 分组显示名称 */ - groupDisplayName!: string | undefined; - settingItemOutput!: SettingItemOutput[] | undefined; - - constructor(data?: ISettingOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.group = _data["group"]; - this.groupDisplayName = _data["groupDisplayName"]; - if (Array.isArray(_data["settingItemOutput"])) { - this.settingItemOutput = [] as any; - for (let item of _data["settingItemOutput"]) - this.settingItemOutput!.push(SettingItemOutput.fromJS(item)); - } - } - } - - static fromJS(data: any): SettingOutput { - data = typeof data === 'object' ? data : {}; - let result = new SettingOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["group"] = this.group; - data["groupDisplayName"] = this.groupDisplayName; - if (Array.isArray(this.settingItemOutput)) { - data["settingItemOutput"] = []; - for (let item of this.settingItemOutput) - data["settingItemOutput"].push(item.toJSON()); - } - return data; - } -} - -export interface ISettingOutput { - /** 分组 */ - group: string | undefined; - /** 分组显示名称 */ - groupDisplayName: string | undefined; - settingItemOutput: SettingItemOutput[] | undefined; -} - -export class StringStringFromSelector implements IStringStringFromSelector { - readonly value!: string | undefined; - readonly label!: string | undefined; - - constructor(data?: IStringStringFromSelector) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - (this).value = _data["value"]; - (this).label = _data["label"]; - } - } - - static fromJS(data: any): StringStringFromSelector { - data = typeof data === 'object' ? data : {}; - let result = new StringStringFromSelector(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["value"] = this.value; - data["label"] = this.label; - return data; - } -} - -export interface IStringStringFromSelector { - value: string | undefined; - label: string | undefined; -} - -export class TenantCreateDto implements ITenantCreateDto { - readonly extraProperties!: { [key: string]: any; } | undefined; - name!: string; - adminEmailAddress!: string; - adminPassword!: string; - - constructor(data?: ITenantCreateDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["extraProperties"]) { - (this).extraProperties = {} as any; - for (let key in _data["extraProperties"]) { - if (_data["extraProperties"].hasOwnProperty(key)) - ((this).extraProperties)![key] = _data["extraProperties"][key]; - } - } - this.name = _data["name"]; - this.adminEmailAddress = _data["adminEmailAddress"]; - this.adminPassword = _data["adminPassword"]; - } - } - - static fromJS(data: any): TenantCreateDto { - data = typeof data === 'object' ? data : {}; - let result = new TenantCreateDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.extraProperties) { - data["extraProperties"] = {}; - for (let key in this.extraProperties) { - if (this.extraProperties.hasOwnProperty(key)) - (data["extraProperties"])[key] = (this.extraProperties)[key]; - } - } - data["name"] = this.name; - data["adminEmailAddress"] = this.adminEmailAddress; - data["adminPassword"] = this.adminPassword; - return data; - } -} - -export interface ITenantCreateDto { - extraProperties: { [key: string]: any; } | undefined; - name: string; - adminEmailAddress: string; - adminPassword: string; -} - -export class TenantDto implements ITenantDto { - readonly extraProperties!: { [key: string]: any; } | undefined; - id!: string; - name!: string | undefined; - concurrencyStamp!: string | undefined; - - constructor(data?: ITenantDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["extraProperties"]) { - (this).extraProperties = {} as any; - for (let key in _data["extraProperties"]) { - if (_data["extraProperties"].hasOwnProperty(key)) - ((this).extraProperties)![key] = _data["extraProperties"][key]; - } - } - this.id = _data["id"]; - this.name = _data["name"]; - this.concurrencyStamp = _data["concurrencyStamp"]; - } - } - - static fromJS(data: any): TenantDto { - data = typeof data === 'object' ? data : {}; - let result = new TenantDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.extraProperties) { - data["extraProperties"] = {}; - for (let key in this.extraProperties) { - if (this.extraProperties.hasOwnProperty(key)) - (data["extraProperties"])[key] = (this.extraProperties)[key]; - } - } - data["id"] = this.id; - data["name"] = this.name; - data["concurrencyStamp"] = this.concurrencyStamp; - return data; - } -} - -export interface ITenantDto { - extraProperties: { [key: string]: any; } | undefined; - id: string; - name: string | undefined; - concurrencyStamp: string | undefined; -} - -export class TenantDtoPagedResultDto implements ITenantDtoPagedResultDto { - items!: TenantDto[] | undefined; - totalCount!: number; - - constructor(data?: ITenantDtoPagedResultDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["items"])) { - this.items = [] as any; - for (let item of _data["items"]) - this.items!.push(TenantDto.fromJS(item)); - } - this.totalCount = _data["totalCount"]; - } - } - - static fromJS(data: any): TenantDtoPagedResultDto { - data = typeof data === 'object' ? data : {}; - let result = new TenantDtoPagedResultDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.items)) { - data["items"] = []; - for (let item of this.items) - data["items"].push(item.toJSON()); - } - data["totalCount"] = this.totalCount; - return data; - } -} - -export interface ITenantDtoPagedResultDto { - items: TenantDto[] | undefined; - totalCount: number; -} - -export class TimeZone implements ITimeZone { - iana!: IanaTimeZone; - windows!: WindowsTimeZone; - - constructor(data?: ITimeZone) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.iana = _data["iana"] ? IanaTimeZone.fromJS(_data["iana"]) : undefined; - this.windows = _data["windows"] ? WindowsTimeZone.fromJS(_data["windows"]) : undefined; - } - } - - static fromJS(data: any): TimeZone { - data = typeof data === 'object' ? data : {}; - let result = new TimeZone(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["iana"] = this.iana ? this.iana.toJSON() : undefined; - data["windows"] = this.windows ? this.windows.toJSON() : undefined; - return data; - } -} - -export interface ITimeZone { - iana: IanaTimeZone; - windows: WindowsTimeZone; -} - -export class TimingDto implements ITimingDto { - timeZone!: TimeZone; - - constructor(data?: ITimingDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.timeZone = _data["timeZone"] ? TimeZone.fromJS(_data["timeZone"]) : undefined; - } - } - - static fromJS(data: any): TimingDto { - data = typeof data === 'object' ? data : {}; - let result = new TimingDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["timeZone"] = this.timeZone ? this.timeZone.toJSON() : undefined; - return data; - } -} - -export interface ITimingDto { - timeZone: TimeZone; -} - -export class TreeOutput implements ITreeOutput { - title!: string | undefined; - key!: string; - children!: TreeOutput[] | undefined; - - constructor(data?: ITreeOutput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.title = _data["title"]; - this.key = _data["key"]; - if (Array.isArray(_data["children"])) { - this.children = [] as any; - for (let item of _data["children"]) - this.children!.push(TreeOutput.fromJS(item)); - } - } - } - - static fromJS(data: any): TreeOutput { - data = typeof data === 'object' ? data : {}; - let result = new TreeOutput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["title"] = this.title; - data["key"] = this.key; - if (Array.isArray(this.children)) { - data["children"] = []; - for (let item of this.children) - data["children"].push(item.toJSON()); - } - return data; - } -} - -export interface ITreeOutput { - title: string | undefined; - key: string; - children: TreeOutput[] | undefined; -} - -export class TypeApiDescriptionModel implements ITypeApiDescriptionModel { - baseType!: string | undefined; - isEnum!: boolean; - enumNames!: string[] | undefined; - enumValues!: any[] | undefined; - genericArguments!: string[] | undefined; - properties!: PropertyApiDescriptionModel[] | undefined; - - constructor(data?: ITypeApiDescriptionModel) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.baseType = _data["baseType"]; - this.isEnum = _data["isEnum"]; - if (Array.isArray(_data["enumNames"])) { - this.enumNames = [] as any; - for (let item of _data["enumNames"]) - this.enumNames!.push(item); - } - if (Array.isArray(_data["enumValues"])) { - this.enumValues = [] as any; - for (let item of _data["enumValues"]) - this.enumValues!.push(item); - } - if (Array.isArray(_data["genericArguments"])) { - this.genericArguments = [] as any; - for (let item of _data["genericArguments"]) - this.genericArguments!.push(item); - } - if (Array.isArray(_data["properties"])) { - this.properties = [] as any; - for (let item of _data["properties"]) - this.properties!.push(PropertyApiDescriptionModel.fromJS(item)); - } - } - } - - static fromJS(data: any): TypeApiDescriptionModel { - data = typeof data === 'object' ? data : {}; - let result = new TypeApiDescriptionModel(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["baseType"] = this.baseType; - data["isEnum"] = this.isEnum; - if (Array.isArray(this.enumNames)) { - data["enumNames"] = []; - for (let item of this.enumNames) - data["enumNames"].push(item); - } - if (Array.isArray(this.enumValues)) { - data["enumValues"] = []; - for (let item of this.enumValues) - data["enumValues"].push(item); - } - if (Array.isArray(this.genericArguments)) { - data["genericArguments"] = []; - for (let item of this.genericArguments) - data["genericArguments"].push(item); - } - if (Array.isArray(this.properties)) { - data["properties"] = []; - for (let item of this.properties) - data["properties"].push(item.toJSON()); - } - return data; - } -} - -export interface ITypeApiDescriptionModel { - baseType: string | undefined; - isEnum: boolean; - enumNames: string[] | undefined; - enumValues: any[] | undefined; - genericArguments: string[] | undefined; - properties: PropertyApiDescriptionModel[] | undefined; -} - -export class UpdateConnectionStringInput implements IUpdateConnectionStringInput { - id!: string; - connectionString!: string | undefined; - - constructor(data?: IUpdateConnectionStringInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.connectionString = _data["connectionString"]; - } - } - - static fromJS(data: any): UpdateConnectionStringInput { - data = typeof data === 'object' ? data : {}; - let result = new UpdateConnectionStringInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["connectionString"] = this.connectionString; - return data; - } -} - -export interface IUpdateConnectionStringInput { - id: string; - connectionString: string | undefined; -} - -export class UpdateDataDictinaryInput implements IUpdateDataDictinaryInput { - id!: string; - code!: string | undefined; - displayText!: string | undefined; - description!: string | undefined; - - constructor(data?: IUpdateDataDictinaryInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.code = _data["code"]; - this.displayText = _data["displayText"]; - this.description = _data["description"]; - } - } - - static fromJS(data: any): UpdateDataDictinaryInput { - data = typeof data === 'object' ? data : {}; - let result = new UpdateDataDictinaryInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["code"] = this.code; - data["displayText"] = this.displayText; - data["description"] = this.description; - return data; - } -} - -export interface IUpdateDataDictinaryInput { - id: string; - code: string | undefined; - displayText: string | undefined; - description: string | undefined; -} - -export class UpdateDetailInput implements IUpdateDetailInput { - dataDictionaryId!: string; - id!: string; - displayText!: string | undefined; - description!: string | undefined; - order!: number; - - constructor(data?: IUpdateDetailInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.dataDictionaryId = _data["dataDictionaryId"]; - this.id = _data["id"]; - this.displayText = _data["displayText"]; - this.description = _data["description"]; - this.order = _data["order"]; - } - } - - static fromJS(data: any): UpdateDetailInput { - data = typeof data === 'object' ? data : {}; - let result = new UpdateDetailInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["dataDictionaryId"] = this.dataDictionaryId; - data["id"] = this.id; - data["displayText"] = this.displayText; - data["description"] = this.description; - data["order"] = this.order; - return data; - } -} - -export interface IUpdateDetailInput { - dataDictionaryId: string; - id: string; - displayText: string | undefined; - description: string | undefined; - order: number; -} - -/** 删除语言 */ -export class UpdateLanguageInput implements IUpdateLanguageInput { - /** 语言Id */ - id!: string; - /** 语言名称 */ - cultureName!: string | undefined; - /** Ui语言名称 */ - uiCultureName!: string | undefined; - /** 显示名称 */ - displayName!: string | undefined; - /** 图标 */ - flagIcon!: string | undefined; - /** 是否启用 */ - isEnabled!: boolean; - - constructor(data?: IUpdateLanguageInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.cultureName = _data["cultureName"]; - this.uiCultureName = _data["uiCultureName"]; - this.displayName = _data["displayName"]; - this.flagIcon = _data["flagIcon"]; - this.isEnabled = _data["isEnabled"]; - } - } - - static fromJS(data: any): UpdateLanguageInput { - data = typeof data === 'object' ? data : {}; - let result = new UpdateLanguageInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["cultureName"] = this.cultureName; - data["uiCultureName"] = this.uiCultureName; - data["displayName"] = this.displayName; - data["flagIcon"] = this.flagIcon; - data["isEnabled"] = this.isEnabled; - return data; - } -} - -/** 删除语言 */ -export interface IUpdateLanguageInput { - /** 语言Id */ - id: string; - /** 语言名称 */ - cultureName: string | undefined; - /** Ui语言名称 */ - uiCultureName: string | undefined; - /** 显示名称 */ - displayName: string | undefined; - /** 图标 */ - flagIcon: string | undefined; - /** 是否启用 */ - isEnabled: boolean; -} - -/** 删除语言文本 */ -export class UpdateLanguageTextInput implements IUpdateLanguageTextInput { - /** 资源名称 */ - resourceName!: string; - /** 语言名称 */ - cultureName!: string; - /** 名称 */ - name!: string; - /** 值 */ - value!: string; - - constructor(data?: IUpdateLanguageTextInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.resourceName = _data["resourceName"]; - this.cultureName = _data["cultureName"]; - this.name = _data["name"]; - this.value = _data["value"]; - } - } - - static fromJS(data: any): UpdateLanguageTextInput { - data = typeof data === 'object' ? data : {}; - let result = new UpdateLanguageTextInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["resourceName"] = this.resourceName; - data["cultureName"] = this.cultureName; - data["name"] = this.name; - data["value"] = this.value; - return data; - } -} - -/** 删除语言文本 */ -export interface IUpdateLanguageTextInput { - /** 资源名称 */ - resourceName: string; - /** 语言名称 */ - cultureName: string; - /** 名称 */ - name: string; - /** 值 */ - value: string; -} - -export class UpdateOrganizationUnitInput implements IUpdateOrganizationUnitInput { - displayName!: string | undefined; - id!: string; - - constructor(data?: IUpdateOrganizationUnitInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.displayName = _data["displayName"]; - this.id = _data["id"]; - } - } - - static fromJS(data: any): UpdateOrganizationUnitInput { - data = typeof data === 'object' ? data : {}; - let result = new UpdateOrganizationUnitInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["displayName"] = this.displayName; - data["id"] = this.id; - return data; - } -} - -export interface IUpdateOrganizationUnitInput { - displayName: string | undefined; - id: string; -} - -export class UpdatePermissionDto implements IUpdatePermissionDto { - name!: string | undefined; - isGranted!: boolean; - - constructor(data?: IUpdatePermissionDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.name = _data["name"]; - this.isGranted = _data["isGranted"]; - } - } - - static fromJS(data: any): UpdatePermissionDto { - data = typeof data === 'object' ? data : {}; - let result = new UpdatePermissionDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["name"] = this.name; - data["isGranted"] = this.isGranted; - return data; - } -} - -export interface IUpdatePermissionDto { - name: string | undefined; - isGranted: boolean; -} - -export class UpdatePermissionsDto implements IUpdatePermissionsDto { - permissions!: UpdatePermissionDto[] | undefined; - - constructor(data?: IUpdatePermissionsDto) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (Array.isArray(_data["permissions"])) { - this.permissions = [] as any; - for (let item of _data["permissions"]) - this.permissions!.push(UpdatePermissionDto.fromJS(item)); - } - } - } - - static fromJS(data: any): UpdatePermissionsDto { - data = typeof data === 'object' ? data : {}; - let result = new UpdatePermissionsDto(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (Array.isArray(this.permissions)) { - data["permissions"] = []; - for (let item of this.permissions) - data["permissions"].push(item.toJSON()); - } - return data; - } -} - -export interface IUpdatePermissionsDto { - permissions: UpdatePermissionDto[] | undefined; -} - -export class UpdateRoleInput implements IUpdateRoleInput { - roleId!: string; - roleInfo!: IdentityRoleUpdateDto; - - constructor(data?: IUpdateRoleInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.roleId = _data["roleId"]; - this.roleInfo = _data["roleInfo"] ? IdentityRoleUpdateDto.fromJS(_data["roleInfo"]) : undefined; - } - } - - static fromJS(data: any): UpdateRoleInput { - data = typeof data === 'object' ? data : {}; - let result = new UpdateRoleInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["roleId"] = this.roleId; - data["roleInfo"] = this.roleInfo ? this.roleInfo.toJSON() : undefined; - return data; - } -} - -export interface IUpdateRoleInput { - roleId: string; - roleInfo: IdentityRoleUpdateDto; -} - -export class UpdateRolePermissionsInput implements IUpdateRolePermissionsInput { - providerName!: string | undefined; - providerKey!: string | undefined; - updatePermissionsDto!: UpdatePermissionsDto; - - constructor(data?: IUpdateRolePermissionsInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.providerName = _data["providerName"]; - this.providerKey = _data["providerKey"]; - this.updatePermissionsDto = _data["updatePermissionsDto"] ? UpdatePermissionsDto.fromJS(_data["updatePermissionsDto"]) : undefined; - } - } - - static fromJS(data: any): UpdateRolePermissionsInput { - data = typeof data === 'object' ? data : {}; - let result = new UpdateRolePermissionsInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["providerName"] = this.providerName; - data["providerKey"] = this.providerKey; - data["updatePermissionsDto"] = this.updatePermissionsDto ? this.updatePermissionsDto.toJSON() : undefined; - return data; - } -} - -export interface IUpdateRolePermissionsInput { - providerName: string | undefined; - providerKey: string | undefined; - updatePermissionsDto: UpdatePermissionsDto; -} - -export class UpdateSettingInput implements IUpdateSettingInput { - values!: { [key: string]: string; } | undefined; - - constructor(data?: IUpdateSettingInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - if (_data["values"]) { - this.values = {} as any; - for (let key in _data["values"]) { - if (_data["values"].hasOwnProperty(key)) - (this.values)![key] = _data["values"][key]; - } - } - } - } - - static fromJS(data: any): UpdateSettingInput { - data = typeof data === 'object' ? data : {}; - let result = new UpdateSettingInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - if (this.values) { - data["values"] = {}; - for (let key in this.values) { - if (this.values.hasOwnProperty(key)) - (data["values"])[key] = (this.values)[key]; - } - } - return data; - } -} - -export interface IUpdateSettingInput { - values: { [key: string]: string; } | undefined; -} - -export class UpdateTenantInput implements IUpdateTenantInput { - id!: string; - name!: string | undefined; - - constructor(data?: IUpdateTenantInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.id = _data["id"]; - this.name = _data["name"]; - } - } - - static fromJS(data: any): UpdateTenantInput { - data = typeof data === 'object' ? data : {}; - let result = new UpdateTenantInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["id"] = this.id; - data["name"] = this.name; - return data; - } -} - -export interface IUpdateTenantInput { - id: string; - name: string | undefined; -} - -export class UpdateUserInput implements IUpdateUserInput { - userId!: string; - userInfo!: IdentityUserUpdateDto; - - constructor(data?: IUpdateUserInput) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.userId = _data["userId"]; - this.userInfo = _data["userInfo"] ? IdentityUserUpdateDto.fromJS(_data["userInfo"]) : undefined; - } - } - - static fromJS(data: any): UpdateUserInput { - data = typeof data === 'object' ? data : {}; - let result = new UpdateUserInput(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["userId"] = this.userId; - data["userInfo"] = this.userInfo ? this.userInfo.toJSON() : undefined; - return data; - } -} - -export interface IUpdateUserInput { - userId: string; - userInfo: IdentityUserUpdateDto; -} - -export class UserLoginInfo implements IUserLoginInfo { - userNameOrEmailAddress!: string; - password!: string; - rememberMe!: boolean; - - constructor(data?: IUserLoginInfo) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.userNameOrEmailAddress = _data["userNameOrEmailAddress"]; - this.password = _data["password"]; - this.rememberMe = _data["rememberMe"]; - } - } - - static fromJS(data: any): UserLoginInfo { - data = typeof data === 'object' ? data : {}; - let result = new UserLoginInfo(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["userNameOrEmailAddress"] = this.userNameOrEmailAddress; - data["password"] = this.password; - data["rememberMe"] = this.rememberMe; - return data; - } -} - -export interface IUserLoginInfo { - userNameOrEmailAddress: string; - password: string; - rememberMe: boolean; -} - -export class WindowsTimeZone implements IWindowsTimeZone { - timeZoneId!: string | undefined; - - constructor(data?: IWindowsTimeZone) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - this.timeZoneId = _data["timeZoneId"]; - } - } - - static fromJS(data: any): WindowsTimeZone { - data = typeof data === 'object' ? data : {}; - let result = new WindowsTimeZone(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - data["timeZoneId"] = this.timeZoneId; - return data; - } -} - -export interface IWindowsTimeZone { - timeZoneId: string | undefined; -} - -export interface FileResponse { - data: Blob; - status: number; - fileName?: string; - headers?: { [name: string]: any }; -} - -export class ApiException extends Error { - message: string; - status: number; - response: string; - headers: { [key: string]: any; }; - result: any; - - constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) { - super(); - - this.message = message; - this.status = status; - this.response = response; - this.headers = headers; - this.result = result; - } - - protected isApiException = true; - - static isApiException(obj: any): obj is ApiException { - return obj.isApiException === true; - } -} - -function throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): any { - if (result !== null && result !== undefined) - throw result; - else - throw new ApiException(message, status, response, headers, null); -} - -function isAxiosError(obj: any | undefined): obj is AxiosError { - return obj && obj.isAxiosError === true; -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/services/ServiceProxyBase.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/services/ServiceProxyBase.ts deleted file mode 100644 index 4f227cdbf..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/services/ServiceProxyBase.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { AxiosRequestConfig, AxiosResponse } from 'axios'; -import { message } from 'ant-design-vue'; -import { useUserStoreWithOut } from '/@/store/modules/user'; -import { router } from '/@/router'; -import { PageEnum } from '/@/enums/pageEnum'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { Modal } from 'ant-design-vue'; -import { useLocale } from '/@/locales/useLocale'; -export class ServiceProxyBase { - protected transformOptions(options: AxiosRequestConfig) { - options.baseURL = import.meta.env.VITE_API_URL as string; - const guard: boolean = this.urlGuard(options.url as string); - const userStore = useUserStoreWithOut(); - const { token, language } = this.buildRequestMessage(); - if (!guard) { - if (userStore.checkUserLoginExpire) { - router.replace(PageEnum.BASE_LOGIN); - } else { - // 添加header - options.headers = { - 'accept-language': language, - 'Content-Type': 'application/json', - Authorization: 'Bearer ' + token, - __tenant: userStore.tenantId, - }; - } - } else { - options.headers = { - 'Content-Type': 'application/json', - __tenant: userStore.tenantId, - 'accept-language': language, - }; - } - - return Promise.resolve(options); - } - protected transformResult( - _url: string, - response: AxiosResponse, - processor: (response: AxiosResponse) => Promise, - ): Promise { - const { t } = useI18n(); - - if (response.status == 401) { - message.error(t('common.authorityText')); - router.replace(PageEnum.BASE_LOGIN); - } else if (response.status == 403) { - message.error(t('common.permissionDenied')); - } else if (response.status == 400) { - Modal.error({ - title: t('common.parameterValidationFailure'), - content: response.data.error.validationErrors[0].message, - }); - } else if (response.status >= 500) { - Modal.error({ - title: t('common.systemErrorText'), - content: response.data.error.message, - }); - } - - return processor(response); - } - - //判决接口是否需要拦截 - private urlGuard(url: string): boolean { - if (url == '/Tenants/find') { - return true; - } - - if (url.startsWith('/api/app/account')) { - return true; - } - - return false; - } - - private buildRequestMessage(): any { - const userStore = useUserStoreWithOut(); - const token = userStore.getToken; - const { getLocale } = useLocale(); - const language = getLocale.value == 'en' ? getLocale.value : 'zh-Hans'; - return { - token, - language, - }; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/componentSetting.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/componentSetting.ts deleted file mode 100644 index ab66ab178..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/componentSetting.ts +++ /dev/null @@ -1,51 +0,0 @@ -// Used to configure the general configuration of some components without modifying the components - -import type { SorterResult } from '../components/Table'; - -export default { - // basic-table setting - table: { - // Form interface request general configuration - // support xxx.xxx.xxx - fetchSetting: { - // The field name of the current page passed to the background - pageField: 'pageIndex', - // The number field name of each page displayed in the background - sizeField: 'pageSize', - // Field name of the form data returned by the interface - listField: 'items', - // Total number of tables returned by the interface field name - totalField: 'totalCount', - }, - // Number of pages that can be selected - pageSizeOptions: ['10', '50', '80', '100'], - // Default display quantity on one page - defaultPageSize: 10, - // Default Size - defaultSize: 'middle', - // Custom general sort function - defaultSortFn: (sortInfo: SorterResult) => { - const { field, order } = sortInfo; - if (field && order) { - return { - // The sort field passed to the backend you - sorting: field + ' ' + order.replace('end', ''), - // Sorting method passed to the background asc/desc - //order, - }; - } else { - return {}; - } - }, - // Custom general filter function - defaultFilterFn: (data: Partial>) => { - return data; - }, - }, - // scrollbar setting - scrollbar: { - // Whether to use native scroll bar - // After opening, the menu, modal, drawer will change the pop-up scroll bar to native - native: false, - }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/designSetting.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/designSetting.ts deleted file mode 100644 index a81b5767b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/designSetting.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { ThemeEnum } from '../enums/appEnum'; - -export const prefixCls = 'vben'; - -export const darkMode = ThemeEnum.LIGHT; - -// app theme preset color -export const APP_PRESET_COLOR_LIST: string[] = [ - '#0960bd', - '#0084f4', - '#009688', - '#536dfe', - '#ff5c93', - '#ee4f12', - '#0096c7', - '#9c27b0', - '#ff9800', -]; - -// header preset color -export const HEADER_PRESET_BG_COLOR_LIST: string[] = [ - '#ffffff', - '#151515', - '#009688', - '#5172DC', - '#018ffb', - '#409eff', - '#e74c3c', - '#24292e', - '#394664', - '#001529', - '#383f45', -]; - -// sider preset color -export const SIDE_BAR_BG_COLOR_LIST: string[] = [ - '#001529', - '#212121', - '#273352', - '#ffffff', - '#191b24', - '#191a23', - '#304156', - '#001628', - '#28333E', - '#344058', - '#383f45', -]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/encryptionSetting.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/encryptionSetting.ts deleted file mode 100644 index 3d6177684..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/encryptionSetting.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { isDevMode } from '/@/utils/env'; - -// System default cache time, in seconds -export const DEFAULT_CACHE_TIME = 60 * 60 * 24 * 7; - -// aes encryption key -export const cacheCipher = { - key: '_11111000001111@', - iv: '@11111000001111_', -}; - -// Whether the system cache is encrypted using aes -export const enableStorageEncryption = !isDevMode(); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/localeSetting.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/localeSetting.ts deleted file mode 100644 index 5452568d4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/localeSetting.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { DropMenu } from '../components/Dropdown'; -import type { LocaleSetting, LocaleType } from '/#/config'; - -export const LOCALE: { [key: string]: LocaleType } = { - ZH_CN: 'zh_CN', - EN_US: 'en', -}; - -export const localeSetting: LocaleSetting = { - showPicker: true, - // Locale - locale: LOCALE.ZH_CN, - // Default locale - fallback: LOCALE.ZH_CN, - // available Locales - availableLocales: [LOCALE.ZH_CN, LOCALE.EN_US], -}; - -// locale list -export const localeList: DropMenu[] = [ - { - text: '简体中文', - event: LOCALE.ZH_CN, - }, - { - text: 'English', - event: LOCALE.EN_US, - }, -]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/projectSetting.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/projectSetting.ts deleted file mode 100644 index 6f8500e1a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/projectSetting.ts +++ /dev/null @@ -1,182 +0,0 @@ -import type { ProjectConfig } from '/#/config'; -import { MenuTypeEnum, MenuModeEnum, TriggerEnum, MixSidebarTriggerEnum } from '/@/enums/menuEnum'; -import { CacheTypeEnum } from '/@/enums/cacheEnum'; -import { - ContentEnum, - PermissionModeEnum, - ThemeEnum, - RouterTransitionEnum, - SettingButtonPositionEnum, - SessionTimeoutProcessingEnum, -} from '/@/enums/appEnum'; -import { SIDE_BAR_BG_COLOR_LIST, HEADER_PRESET_BG_COLOR_LIST } from './designSetting'; -import { primaryColor } from '../../build/config/themeConfig'; - -// ! You need to clear the browser cache after the change -const setting: ProjectConfig = { - // Whether to show the configuration button - showSettingButton: true, - - // Whether to show the theme switch button - showDarkModeToggle: true, - - // `Settings` button position - settingButtonPosition: SettingButtonPositionEnum.AUTO, - - // Permission mode - permissionMode: PermissionModeEnum.ROUTE_MAPPING, - - // Permission-related cache is stored in sessionStorage or localStorage - permissionCacheType: CacheTypeEnum.SESSION, - - // Session timeout processing - sessionTimeoutProcessing: SessionTimeoutProcessingEnum.ROUTE_JUMP, - - // color - themeColor: primaryColor, - - // Website gray mode, open for possible mourning dates - grayMode: false, - - // Color Weakness Mode - colorWeak: false, - - // Whether to cancel the menu, the top, the multi-tab page display, for possible embedded in other systems - fullContent: false, - - // content mode - contentMode: ContentEnum.FULL, - - // Whether to display the logo - showLogo: true, - - // Whether to show footer - showFooter: false, - - // Header configuration - headerSetting: { - // header bg color - bgColor: HEADER_PRESET_BG_COLOR_LIST[0], - // Fixed at the top - fixed: true, - // Whether to show top - show: true, - // theme - theme: ThemeEnum.LIGHT, - // Whether to enable the lock screen function - useLockPage: true, - // Whether to show the full screen button - showFullScreen: true, - // Whether to show the document button - showDoc: true, - // Whether to show the notification button - showNotice: true, - // Whether to display the menu search - showSearch: true, - }, - - // Menu configuration - menuSetting: { - // sidebar menu bg color - bgColor: SIDE_BAR_BG_COLOR_LIST[0], - // Whether to fix the left menu - fixed: true, - // Menu collapse - collapsed: false, - // When sider hide because of the responsive layout - siderHidden: false, - // Whether to display the menu name when folding the menu - collapsedShowTitle: false, - // Whether it can be dragged - // Only limited to the opening of the left menu, the mouse has a drag bar on the right side of the menu - canDrag: false, - // Whether to show no dom - show: true, - // Whether to show dom - hidden: false, - // Menu width - menuWidth: 210, - // Menu mode - mode: MenuModeEnum.INLINE, - // Menu type - type: MenuTypeEnum.SIDEBAR, - // Menu theme - theme: ThemeEnum.DARK, - // Split menu - split: false, - // Top menu layout - topMenuAlign: 'center', - // Fold trigger position - trigger: TriggerEnum.HEADER, - // Turn on accordion mode, only show a menu - accordion: true, - // Switch page to close menu - closeMixSidebarOnChange: false, - // Module opening method ‘click’ |'hover' - mixSideTrigger: MixSidebarTriggerEnum.CLICK, - // Fixed expanded menu - mixSideFixed: false, - }, - - // Multi-label - multiTabsSetting: { - cache: false, - // Turn on - show: true, - // Is it possible to drag and drop sorting tabs - canDrag: true, - // Turn on quick actions - showQuick: true, - // Whether to show the refresh button - showRedo: true, - // Whether to show the collapse button - showFold: true, - }, - - // Transition Setting - transitionSetting: { - // Whether to open the page switching animation - // The disabled state will also disable pageLoading - enable: true, - - // Route basic switching animation - basicTransition: RouterTransitionEnum.FADE_SIDE, - - // Whether to open page switching loading - // Only open when enable=true - openPageLoading: true, - - // Whether to open the top progress bar - openNProgress: false, - }, - - // Whether to enable KeepAlive cache is best to close during development, otherwise the cache needs to be cleared every time - openKeepAlive: true, - - // Automatic screen lock time, 0 does not lock the screen. Unit minute default 0 - lockTime: 0, - - // Whether to show breadcrumbs - showBreadCrumb: true, - - // Whether to show the breadcrumb icon - showBreadCrumbIcon: false, - - // Use error-handler-plugin - useErrorHandle: false, - - // Whether to open back to top - useOpenBackTop: true, - - // Is it possible to embed iframe pages - canEmbedIFramePage: true, - - // Whether to delete unclosed messages and notify when switching the interface - closeMessageOnSwitch: true, - - // Whether to cancel the http request that has been sent but not responded when switching the interface. - // If it is enabled, I want to overwrite a single interface. Can be set in a separate interface - removeAllHttpPending: false, -}; - -export default setting; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/siteSetting.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/siteSetting.ts deleted file mode 100644 index b6ed21182..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/settings/siteSetting.ts +++ /dev/null @@ -1,8 +0,0 @@ -// github repo url -export const GITHUB_URL = 'https://github.com/anncwb/vue-vben-admin'; - -// vue-vben-admin-next-doc -export const DOC_URL = 'https://vvbin.cn/doc-next/'; - -// site url -export const SITE_URL = 'https://vvbin.cn/next/'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/index.ts deleted file mode 100644 index efaf6c970..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { App } from 'vue'; -import { createPinia } from 'pinia'; - -const store = createPinia(); - -export function setupStore(app: App) { - app.use(store); -} - -export { store }; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/app.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/app.ts deleted file mode 100644 index 72f9bf6c3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/app.ts +++ /dev/null @@ -1,108 +0,0 @@ -import type { - ProjectConfig, - HeaderSetting, - MenuSetting, - TransitionSetting, - MultiTabsSetting, -} from '/#/config'; -import type { BeforeMiniState } from '/#/store'; - -import { defineStore } from 'pinia'; -import { store } from '/@/store'; - -import { ThemeEnum } from '/@/enums/appEnum'; -import { APP_DARK_MODE_KEY_, PROJ_CFG_KEY } from '/@/enums/cacheEnum'; -import { Persistent } from '/@/utils/cache/persistent'; -import { darkMode } from '/@/settings/designSetting'; -import { resetRouter } from '/@/router'; -import { deepMerge } from '/@/utils'; - -interface AppState { - darkMode?: ThemeEnum; - // Page loading status - pageLoading: boolean; - // project config - projectConfig: ProjectConfig | null; - // When the window shrinks, remember some states, and restore these states when the window is restored - beforeMiniInfo: BeforeMiniState; -} -let timeId: TimeoutHandle; -export const useAppStore = defineStore({ - id: 'app', - state: (): AppState => ({ - darkMode: undefined, - pageLoading: false, - projectConfig: Persistent.getLocal(PROJ_CFG_KEY), - beforeMiniInfo: {}, - }), - getters: { - getPageLoading(): boolean { - return this.pageLoading; - }, - getDarkMode(): 'light' | 'dark' | string { - return this.darkMode || localStorage.getItem(APP_DARK_MODE_KEY_) || darkMode; - }, - - getBeforeMiniInfo(): BeforeMiniState { - return this.beforeMiniInfo; - }, - - getProjectConfig(): ProjectConfig { - return this.projectConfig || ({} as ProjectConfig); - }, - - getHeaderSetting(): HeaderSetting { - return this.getProjectConfig.headerSetting; - }, - getMenuSetting(): MenuSetting { - return this.getProjectConfig.menuSetting; - }, - getTransitionSetting(): TransitionSetting { - return this.getProjectConfig.transitionSetting; - }, - getMultiTabsSetting(): MultiTabsSetting { - return this.getProjectConfig.multiTabsSetting; - }, - }, - actions: { - setPageLoading(loading: boolean): void { - this.pageLoading = loading; - }, - - setDarkMode(mode: ThemeEnum): void { - this.darkMode = mode; - localStorage.setItem(APP_DARK_MODE_KEY_, mode); - }, - - setBeforeMiniInfo(state: BeforeMiniState): void { - this.beforeMiniInfo = state; - }, - - setProjectConfig(config: DeepPartial): void { - this.projectConfig = deepMerge(this.projectConfig || {}, config); - Persistent.setLocal(PROJ_CFG_KEY, this.projectConfig); - }, - - async resetAllState() { - resetRouter(); - Persistent.clearAll(); - }, - async setPageLoadingAction(loading: boolean): Promise { - if (loading) { - clearTimeout(timeId); - // Prevent flicker - timeId = setTimeout(() => { - this.setPageLoading(loading); - }, 50); - } else { - this.setPageLoading(loading); - clearTimeout(timeId); - } - }, - }, -}); - -// Need to be used outside the setup -export function useAppStoreWithOut() { - return useAppStore(store); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/errorLog.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/errorLog.ts deleted file mode 100644 index a4b0b8c51..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/errorLog.ts +++ /dev/null @@ -1,77 +0,0 @@ -import type { ErrorLogInfo } from '/#/store'; - -import { defineStore } from 'pinia'; -import { store } from '/@/store'; - -import { formatToDateTime } from '/@/utils/dateUtil'; -import projectSetting from '/@/settings/projectSetting'; - -import { ErrorTypeEnum } from '/@/enums/exceptionEnum'; - -export interface ErrorLogState { - errorLogInfoList: Nullable; - errorLogListCount: number; -} - -export const useErrorLogStore = defineStore({ - id: 'app-error-log', - state: (): ErrorLogState => ({ - errorLogInfoList: null, - errorLogListCount: 0, - }), - getters: { - getErrorLogInfoList(): ErrorLogInfo[] { - return this.errorLogInfoList || []; - }, - getErrorLogListCount(): number { - return this.errorLogListCount; - }, - }, - actions: { - addErrorLogInfo(info: ErrorLogInfo) { - const item = { - ...info, - time: formatToDateTime(new Date()), - }; - this.errorLogInfoList = [item, ...(this.errorLogInfoList || [])]; - this.errorLogListCount += 1; - }, - - setErrorLogListCount(count: number): void { - this.errorLogListCount = count; - }, - - /** - * Triggered after ajax request error - * @param error - * @returns - */ - addAjaxErrorInfo(error) { - const { useErrorHandle } = projectSetting; - if (!useErrorHandle) { - return; - } - const errInfo: Partial = { - message: error.message, - type: ErrorTypeEnum.AJAX, - }; - if (error.response) { - const { - config: { url = '', data: params = '', method = 'get', headers = {} } = {}, - data = {}, - } = error.response; - errInfo.url = url; - errInfo.name = 'Ajax Error!'; - errInfo.file = '-'; - errInfo.stack = JSON.stringify(data); - errInfo.detail = JSON.stringify({ params, method, headers }); - } - this.addErrorLogInfo(errInfo as ErrorLogInfo); - }, - }, -}); - -// Need to be used outside the setup -export function useErrorLogStoreWithOut() { - return useErrorLogStore(store); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/locale.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/locale.ts deleted file mode 100644 index 8d72ffc79..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/locale.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { LocaleSetting, LocaleType } from '/#/config'; - -import { defineStore } from 'pinia'; -import { store } from '/@/store'; - -import { LOCALE_KEY } from '/@/enums/cacheEnum'; -import { createLocalStorage } from '/@/utils/cache'; -import { localeSetting } from '/@/settings/localeSetting'; - -const ls = createLocalStorage(); - -const lsLocaleSetting = (ls.get(LOCALE_KEY) || localeSetting) as LocaleSetting; - -interface LocaleState { - localInfo: LocaleSetting; -} - -export const useLocaleStore = defineStore({ - id: 'app-locale', - state: (): LocaleState => ({ - localInfo: lsLocaleSetting, - }), - getters: { - getShowPicker(): boolean { - return !!this.localInfo?.showPicker; - }, - getLocale(): LocaleType { - return this.localInfo?.locale ?? 'zh_CN'; - }, - }, - actions: { - /** - * Set up multilingual information and cache - * @param info multilingual info - */ - setLocaleInfo(info: Partial) { - this.localInfo = { ...this.localInfo, ...info }; - ls.set(LOCALE_KEY, this.localInfo); - }, - /** - * Initialize multilingual information and load the existing configuration from the local cache - */ - initLocale() { - this.setLocaleInfo({ - ...localeSetting, - ...this.localInfo, - }); - }, - }, -}); - -// Need to be used outside the setup -export function useLocaleStoreWithOut() { - return useLocaleStore(store); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/lock.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/lock.ts deleted file mode 100644 index 6c22dbd10..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/lock.ts +++ /dev/null @@ -1,59 +0,0 @@ -import type { LockInfo } from '/#/store'; - -import { defineStore } from 'pinia'; - -import { LOCK_INFO_KEY } from '/@/enums/cacheEnum'; -import { Persistent } from '/@/utils/cache/persistent'; -import { useUserStore } from './user'; - -interface LockState { - lockInfo: Nullable; -} - -export const useLockStore = defineStore({ - id: 'app-lock', - state: (): LockState => ({ - lockInfo: Persistent.getLocal(LOCK_INFO_KEY), - }), - getters: { - getLockInfo(): Nullable { - return this.lockInfo; - }, - }, - actions: { - setLockInfo(info: LockInfo) { - this.lockInfo = Object.assign({}, this.lockInfo, info); - Persistent.setLocal(LOCK_INFO_KEY, this.lockInfo, true); - }, - resetLockInfo() { - Persistent.removeLocal(LOCK_INFO_KEY, true); - this.lockInfo = null; - }, - // Unlock - async unLock(password?: string) { - const userStore = useUserStore(); - if (this.lockInfo?.pwd === password) { - this.resetLockInfo(); - return true; - } - const tryLogin = async () => { - try { - const username = userStore.getUserInfo?.username; - const res = await userStore.login({ - username, - password: password!, - goHome: false, - mode: 'none', - }); - if (res) { - this.resetLockInfo(); - } - return res; - } catch (error) { - return false; - } - }; - return await tryLogin(); - }, - }, -}); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/multipleTab.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/multipleTab.ts deleted file mode 100644 index 023e87665..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/multipleTab.ts +++ /dev/null @@ -1,359 +0,0 @@ -import type { RouteLocationNormalized, RouteLocationRaw, Router } from 'vue-router'; - -import { toRaw, unref } from 'vue'; -import { defineStore } from 'pinia'; -import { store } from '/@/store'; - -import { useGo, useRedo } from '/@/hooks/web/usePage'; -import { Persistent } from '/@/utils/cache/persistent'; - -import { PageEnum } from '/@/enums/pageEnum'; -import { PAGE_NOT_FOUND_ROUTE, REDIRECT_ROUTE } from '/@/router/routes/basic'; -import { getRawRoute } from '/@/utils'; -import { MULTIPLE_TABS_KEY } from '/@/enums/cacheEnum'; - -import projectSetting from '/@/settings/projectSetting'; -import { useUserStore } from '/@/store/modules/user'; - -export interface MultipleTabState { - cacheTabList: Set; - tabList: RouteLocationNormalized[]; - lastDragEndIndex: number; -} - -function handleGotoPage(router: Router) { - const go = useGo(router); - go(unref(router.currentRoute).path, true); -} - -const getToTarget = (tabItem: RouteLocationNormalized) => { - const { params, path, query } = tabItem; - return { - params: params || {}, - path, - query: query || {}, - }; -}; - -const cacheTab = projectSetting.multiTabsSetting.cache; - -export const useMultipleTabStore = defineStore({ - id: 'app-multiple-tab', - state: (): MultipleTabState => ({ - // Tabs that need to be cached - cacheTabList: new Set(), - // multiple tab list - tabList: cacheTab ? Persistent.getLocal(MULTIPLE_TABS_KEY) || [] : [], - // Index of the last moved tab - lastDragEndIndex: 0, - }), - getters: { - getTabList(): RouteLocationNormalized[] { - return this.tabList; - }, - getCachedTabList(): string[] { - return Array.from(this.cacheTabList); - }, - getLastDragEndIndex(): number { - return this.lastDragEndIndex; - }, - }, - actions: { - /** - * Update the cache according to the currently opened tabs - */ - async updateCacheTab() { - const cacheMap: Set = new Set(); - - for (const tab of this.tabList) { - const item = getRawRoute(tab); - // Ignore the cache - const needCache = !item.meta?.ignoreKeepAlive; - if (!needCache) { - continue; - } - const name = item.name as string; - cacheMap.add(name); - } - this.cacheTabList = cacheMap; - }, - - /** - * Refresh tabs - */ - async refreshPage(router: Router) { - const { currentRoute } = router; - const route = unref(currentRoute); - const name = route.name; - - const findTab = this.getCachedTabList.find((item) => item === name); - if (findTab) { - this.cacheTabList.delete(findTab); - } - const redo = useRedo(router); - await redo(); - }, - clearCacheTabs(): void { - this.cacheTabList = new Set(); - }, - resetState(): void { - this.tabList = []; - this.clearCacheTabs(); - }, - goToPage(router: Router) { - const go = useGo(router); - const len = this.tabList.length; - const { path } = unref(router.currentRoute); - - let toPath: PageEnum | string = PageEnum.BASE_HOME; - - if (len > 0) { - const page = this.tabList[len - 1]; - const p = page.fullPath || page.path; - if (p) { - toPath = p; - } - } - // Jump to the current page and report an error - path !== toPath && go(toPath as PageEnum, true); - }, - - async addTab(route: RouteLocationNormalized) { - const { path, name, fullPath, params, query, meta } = getRawRoute(route); - // 404 The page does not need to add a tab - if ( - path === PageEnum.ERROR_PAGE || - path === PageEnum.BASE_LOGIN || - !name || - [REDIRECT_ROUTE.name, PAGE_NOT_FOUND_ROUTE.name].includes(name as string) - ) { - return; - } - - let updateIndex = -1; - // Existing pages, do not add tabs repeatedly - const tabHasExits = this.tabList.some((tab, index) => { - updateIndex = index; - return (tab.fullPath || tab.path) === (fullPath || path); - }); - - // If the tab already exists, perform the update operation - if (tabHasExits) { - const curTab = toRaw(this.tabList)[updateIndex]; - if (!curTab) { - return; - } - curTab.params = params || curTab.params; - curTab.query = query || curTab.query; - curTab.fullPath = fullPath || curTab.fullPath; - this.tabList.splice(updateIndex, 1, curTab); - } else { - // Add tab - // 获取动态路由打开数,超过 0 即代表需要控制打开数 - const dynamicLevel = meta?.dynamicLevel ?? -1; - if (dynamicLevel > 0) { - // 如果动态路由层级大于 0 了,那么就要限制该路由的打开数限制了 - // 首先获取到真实的路由,使用配置方式减少计算开销. - // const realName: string = path.match(/(\S*)\//)![1]; - const realPath = meta?.realPath ?? ''; - // 获取到已经打开的动态路由数, 判断是否大于某一个值 - if ( - this.tabList.filter((e) => e.meta?.realPath ?? '' === realPath).length >= dynamicLevel - ) { - // 关闭第一个 - const index = this.tabList.findIndex((item) => item.meta.realPath === realPath); - index !== -1 && this.tabList.splice(index, 1); - } - } - this.tabList.push(route); - } - this.updateCacheTab(); - cacheTab && Persistent.setLocal(MULTIPLE_TABS_KEY, this.tabList); - }, - - async closeTab(tab: RouteLocationNormalized, router: Router) { - const close = (route: RouteLocationNormalized) => { - const { fullPath, meta: { affix } = {} } = route; - if (affix) { - return; - } - const index = this.tabList.findIndex((item) => item.fullPath === fullPath); - index !== -1 && this.tabList.splice(index, 1); - }; - - const { currentRoute, replace } = router; - - const { path } = unref(currentRoute); - if (path !== tab.path) { - // Closed is not the activation tab - close(tab); - return; - } - - // Closed is activated atb - let toTarget: RouteLocationRaw = {}; - - const index = this.tabList.findIndex((item) => item.path === path); - - // If the current is the leftmost tab - if (index === 0) { - // There is only one tab, then jump to the homepage, otherwise jump to the right tab - if (this.tabList.length === 1) { - const userStore = useUserStore(); - toTarget = userStore.getUserInfo.homePath || PageEnum.BASE_HOME; - } else { - // Jump to the right tab - const page = this.tabList[index + 1]; - toTarget = getToTarget(page); - } - } else { - // Close the current tab - const page = this.tabList[index - 1]; - toTarget = getToTarget(page); - } - close(currentRoute.value); - await replace(toTarget); - }, - - // Close according to key - async closeTabByKey(key: string, router: Router) { - const index = this.tabList.findIndex((item) => (item.fullPath || item.path) === key); - if (index !== -1) { - await this.closeTab(this.tabList[index], router); - const { currentRoute, replace } = router; - // 检查当前路由是否存在于tabList中 - const isActivated = this.tabList.findIndex((item) => { - return item.fullPath === currentRoute.value.fullPath; - }); - // 如果当前路由不存在于TabList中,尝试切换到其它路由 - if (isActivated === -1) { - let pageIndex; - if (index > 0) { - pageIndex = index - 1; - } else if (index < this.tabList.length - 1) { - pageIndex = index + 1; - } else { - pageIndex = -1; - } - if (pageIndex >= 0) { - const page = this.tabList[index - 1]; - const toTarget = getToTarget(page); - await replace(toTarget); - } - } - } - }, - - // Sort the tabs - async sortTabs(oldIndex: number, newIndex: number) { - const currentTab = this.tabList[oldIndex]; - this.tabList.splice(oldIndex, 1); - this.tabList.splice(newIndex, 0, currentTab); - this.lastDragEndIndex = this.lastDragEndIndex + 1; - }, - - // Close the tab on the right and jump - async closeLeftTabs(route: RouteLocationNormalized, router: Router) { - const index = this.tabList.findIndex((item) => item.path === route.path); - - if (index > 0) { - const leftTabs = this.tabList.slice(0, index); - const pathList: string[] = []; - for (const item of leftTabs) { - const affix = item?.meta?.affix ?? false; - if (!affix) { - pathList.push(item.fullPath); - } - } - this.bulkCloseTabs(pathList); - } - this.updateCacheTab(); - handleGotoPage(router); - }, - - // Close the tab on the left and jump - async closeRightTabs(route: RouteLocationNormalized, router: Router) { - const index = this.tabList.findIndex((item) => item.fullPath === route.fullPath); - - if (index >= 0 && index < this.tabList.length - 1) { - const rightTabs = this.tabList.slice(index + 1, this.tabList.length); - - const pathList: string[] = []; - for (const item of rightTabs) { - const affix = item?.meta?.affix ?? false; - if (!affix) { - pathList.push(item.fullPath); - } - } - this.bulkCloseTabs(pathList); - } - this.updateCacheTab(); - handleGotoPage(router); - }, - - async closeAllTab(router: Router) { - this.tabList = this.tabList.filter((item) => item?.meta?.affix ?? false); - this.clearCacheTabs(); - this.goToPage(router); - }, - - /** - * Close other tabs - */ - async closeOtherTabs(route: RouteLocationNormalized, router: Router) { - const closePathList = this.tabList.map((item) => item.fullPath); - - const pathList: string[] = []; - - for (const path of closePathList) { - if (path !== route.fullPath) { - const closeItem = this.tabList.find((item) => item.path === path); - if (!closeItem) { - continue; - } - const affix = closeItem?.meta?.affix ?? false; - if (!affix) { - pathList.push(closeItem.fullPath); - } - } - } - this.bulkCloseTabs(pathList); - this.updateCacheTab(); - handleGotoPage(router); - }, - - /** - * Close tabs in bulk - */ - async bulkCloseTabs(pathList: string[]) { - this.tabList = this.tabList.filter((item) => !pathList.includes(item.fullPath)); - }, - - /** - * Set tab's title - */ - async setTabTitle(title: string, route: RouteLocationNormalized) { - const findTab = this.getTabList.find((item) => item === route); - if (findTab) { - findTab.meta.title = title; - await this.updateCacheTab(); - } - }, - /** - * replace tab's path - * **/ - async updateTabPath(fullPath: string, route: RouteLocationNormalized) { - const findTab = this.getTabList.find((item) => item === route); - if (findTab) { - findTab.fullPath = fullPath; - findTab.path = fullPath; - await this.updateCacheTab(); - } - }, - }, -}); - -// Need to be used outside the setup -export function useMultipleTabWithOutStore() { - return useMultipleTabStore(store); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/permission.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/permission.ts deleted file mode 100644 index 400bd53d8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/permission.ts +++ /dev/null @@ -1,238 +0,0 @@ -import type { AppRouteRecordRaw, Menu } from '/@/router/types'; - -import { defineStore } from 'pinia'; -import { store } from '/@/store'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { useUserStore } from './user'; -import { useAppStoreWithOut } from './app'; -import { toRaw } from 'vue'; -import { transformObjToRoute, flatMultiLevelRoutes } from '/@/router/helper/routeHelper'; -import { transformRouteToMenu } from '/@/router/helper/menuHelper'; - -import projectSetting from '/@/settings/projectSetting'; - -import { PermissionModeEnum } from '/@/enums/appEnum'; -import { asyncRoutes } from '/@/router/routes'; -import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; -import { AUTH_KEY } from '/@/enums/cacheEnum'; -import { filter } from '/@/utils/helper/treeHelper'; -import { getAuthCache, setAuthCache } from '/@/utils/auth'; -import { getMenuList } from '/@/api/sys/menu'; - -import { useMessage } from '/@/hooks/web/useMessage'; -import { PageEnum } from '/@/enums/pageEnum'; - -interface PermissionState { - // Permission code list - permCodeList: string[]; - // Whether the route has been dynamically added - isDynamicAddedRoute: boolean; - // To trigger a menu update - lastBuildMenuTime: number; - // Backstage menu list - backMenuList: Menu[]; - frontMenuList: Menu[]; -} -export const usePermissionStore = defineStore({ - id: 'app-permission', - state: (): PermissionState => ({ - permCodeList: [], - // Whether the route has been dynamically added - isDynamicAddedRoute: false, - // To trigger a menu update - lastBuildMenuTime: 0, - // Backstage menu list - backMenuList: [], - // menu List - frontMenuList: [], - }), - getters: { - // getPermCodeList(): string[] | number[] { - // return this.permCodeList; - // }, - getPermCodeList(): string[] { - return this.permCodeList.length > 0 ? this.permCodeList : getAuthCache(AUTH_KEY); - }, - getBackMenuList(): Menu[] { - return this.backMenuList; - }, - getFrontMenuList(): Menu[] { - return this.frontMenuList; - }, - getLastBuildMenuTime(): number { - return this.lastBuildMenuTime; - }, - getIsDynamicAddedRoute(): boolean { - return this.isDynamicAddedRoute; - }, - }, - actions: { - setPermCodeList(codeList: string[]) { - this.permCodeList = codeList; - setAuthCache(AUTH_KEY, codeList); - }, - - setBackMenuList(list: Menu[]) { - this.backMenuList = list; - list?.length > 0 && this.setLastBuildMenuTime(); - }, - - setFrontMenuList(list: Menu[]) { - this.frontMenuList = list; - }, - - setLastBuildMenuTime() { - this.lastBuildMenuTime = new Date().getTime(); - }, - - setDynamicAddedRoute(added: boolean) { - this.isDynamicAddedRoute = added; - }, - resetState(): void { - this.isDynamicAddedRoute = false; - this.permCodeList = []; - this.backMenuList = []; - this.lastBuildMenuTime = 0; - }, - // async changePermissionCode() { - // const codeList = await getPermCode(); - // this.setPermCodeList(codeList); - // }, - // async changePermissionCode(userId: string) { - // const codeList = await getPermCodeByUserId({ userId }); - // this.setPermCodeList(codeList); - // }, - async buildRoutesAction(): Promise { - const { t } = useI18n(); - const userStore = useUserStore(); - const appStore = useAppStoreWithOut(); - - let routes: AppRouteRecordRaw[] = []; - const roleList = toRaw(userStore.getRoleList) || []; - const { permissionMode = projectSetting.permissionMode } = appStore.getProjectConfig; - - const routeFilter = (route: AppRouteRecordRaw) => { - const { meta } = route; - const { roles } = meta || {}; - if (!roles) return true; - return roleList.some((role) => roles.includes(role)); - }; - - const routeRemoveIgnoreFilter = (route: AppRouteRecordRaw) => { - const { meta } = route; - const { ignoreRoute } = meta || {}; - return !ignoreRoute; - }; - - /** - * @description 根据设置的首页path,修正routes中的affix标记(固定首页) - * */ - const patchHomeAffix = (routes: AppRouteRecordRaw[]) => { - if (!routes || routes.length === 0) return; - let homePath: string = userStore.getUserInfo.homePath || PageEnum.BASE_HOME; - function patcher(routes: AppRouteRecordRaw[], parentPath = '') { - if (parentPath) parentPath = parentPath + '/'; - routes.forEach((route: AppRouteRecordRaw) => { - const { path, children, redirect } = route; - const currentPath = path.startsWith('/') ? path : parentPath + path; - if (currentPath === homePath) { - if (redirect) { - homePath = route.redirect! as string; - } else { - route.meta = Object.assign({}, route.meta, { affix: true }); - throw new Error('end'); - } - } - children && children.length > 0 && patcher(children, currentPath); - }); - } - try { - patcher(routes); - } catch (e) { - // 已处理完毕跳出循环 - } - return; - }; - - switch (permissionMode) { - case PermissionModeEnum.ROLE: - routes = filter(asyncRoutes, routeFilter); - routes = routes.filter(routeFilter); - // Convert multi-level routing to level 2 routing - routes = flatMultiLevelRoutes(routes); - break; - - case PermissionModeEnum.ROUTE_MAPPING: - const permissions = this.getPermCodeList; - - const roleRouteFilter = (route: AppRouteRecordRaw) => { - const { meta } = route; - const { policy } = meta || {}; - if (!policy) return true; - return permissions == undefined || permissions.length <= 0 - ? true - : permissions.includes(policy as string); - }; - console.log(roleRouteFilter); - console.log(asyncRoutes); - routes = filter(asyncRoutes, roleRouteFilter); - routes = routes.filter(roleRouteFilter); - routes = routes.filter((e) => e.path.startsWith('/dashboard') || e.children?.length != 0); - - const menuList = transformRouteToMenu(routes, true); - routes = filter(routes, routeRemoveIgnoreFilter); - routes = routes.filter(routeRemoveIgnoreFilter); - menuList.sort((a, b) => { - return (a.meta?.orderNo || 0) - (b.meta?.orderNo || 0); - }); - - this.setFrontMenuList(menuList); - // Convert multi-level routing to level 2 routing - routes = flatMultiLevelRoutes(routes); - break; - - // If you are sure that you do not need to do background dynamic permissions, please comment the entire judgment below - case PermissionModeEnum.BACK: - const { createMessage } = useMessage(); - - createMessage.loading({ - content: t('sys.app.menuLoading'), - duration: 1, - }); - - // !Simulate to obtain permission codes from the background, - // this function may only need to be executed once, and the actual project can be put at the right time by itself - let routeList: AppRouteRecordRaw[] = []; - try { - - routeList = (await getMenuList()) as AppRouteRecordRaw[]; - } catch (error) { - console.error(error); - } - - // Dynamically introduce components - routeList = transformObjToRoute(routeList); - - // Background routing to menu structure - const backMenuList = transformRouteToMenu(routeList); - this.setBackMenuList(backMenuList); - - // remove meta.ignoreRoute item - routeList = filter(routeList, routeRemoveIgnoreFilter); - routeList = routeList.filter(routeRemoveIgnoreFilter); - - routeList = flatMultiLevelRoutes(routeList); - routes = [PAGE_NOT_FOUND_ROUTE, ...routeList]; - break; - } - - patchHomeAffix(routes); - return routes; - }, - }, -}); - -// Need to be used outside the setup -export function usePermissionStoreWithOut() { - return usePermissionStore(store); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/user.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/user.ts deleted file mode 100644 index 596ec090f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/store/modules/user.ts +++ /dev/null @@ -1,262 +0,0 @@ -import type { UserInfo } from '/#/store'; -import type { ErrorMessageMode } from '/#/axios'; -import { defineStore } from 'pinia'; -import { store } from '/@/store'; -import { RoleEnum } from '/@/enums/roleEnum'; -import { PageEnum } from '/@/enums/pageEnum'; -import { - ROLES_KEY, - TOKEN_KEY, - USER_INFO_KEY, - ABP_LOCALE_KEY, - ABP_TETANT_KEY, -} from '/@/enums/cacheEnum'; -import { getAuthCache, setAuthCache } from '/@/utils/auth'; -import { LoginParams } from '/@/api/sys/model/userModel'; -import { login, getAbpApplicationConfiguration, id4, github } from '/@/api/sys/user'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { useMessage } from '/@/hooks/web/useMessage'; -import { router } from '/@/router'; -import { usePermissionStore } from '/@/store/modules/permission'; -import { LoginInput } from '/@/services/ServiceProxies'; -import jwt_decode from 'jwt-decode'; -import { useSignalR } from '/@/hooks/web/useSignalR'; -import { useOidcLogout } from '/@/views/sys/login/useLogin'; -interface UserState { - userInfo: Nullable; - token?: string; - id_token?: string; - roleList: RoleEnum[]; - sessionTimeout?: boolean; - lastUpdateTime: number; - language: string; - tenantId: string; -} - -export const useUserStore = defineStore({ - id: 'app-user', - state: (): UserState => ({ - // user info - userInfo: null, - // token - token: undefined, - id_token: undefined, - // roleList - roleList: [], - // Whether the login expired - sessionTimeout: false, - // Last fetch time - lastUpdateTime: 0, - language: '', - tenantId: '', - }), - getters: { - getUserInfo(): UserInfo { - return this.userInfo || getAuthCache(USER_INFO_KEY) || {}; - }, - getToken(): string { - return this.token || getAuthCache(TOKEN_KEY); - }, - - getRoleList(): RoleEnum[] { - return this.roleList.length > 0 ? this.roleList : getAuthCache(ROLES_KEY); - }, - getSessionTimeout(): boolean { - return !!this.sessionTimeout; - }, - getLastUpdateTime(): number { - return this.lastUpdateTime; - }, - getLanguage(): string { - return this.language || getAuthCache(ABP_LOCALE_KEY); - }, - getTenant(): string { - return this.tenantId || getAuthCache(ABP_TETANT_KEY); - }, - checkUserLoginExpire(): boolean { - try { - const userStore = useUserStoreWithOut(); - const token = userStore.getToken; - if (!token) return true; - const decoded: any = jwt_decode(token); - // 获取当前时间戳 - let currentTimeStamp = new Date().getTime() / 1000; - if (currentTimeStamp >= decoded.exp) { - return true; - } else { - return false; - } - } catch (error) { - return true; - } - }, - }, - actions: { - setToken(info: string | undefined) { - this.token = info; - setAuthCache(TOKEN_KEY, info); - }, - - setRoleList(roleList: RoleEnum[]) { - this.roleList = roleList; - setAuthCache(ROLES_KEY, roleList); - }, - setUserInfo(info: UserInfo) { - this.userInfo = info; - this.lastUpdateTime = new Date().getTime(); - setAuthCache(USER_INFO_KEY, info); - }, - setTenant(tenantId: string) { - this.tenantId = tenantId; - setAuthCache(ABP_TETANT_KEY, tenantId); - }, - setSessionTimeout(flag: boolean) { - this.sessionTimeout = flag; - }, - resetState() { - this.userInfo = null; - this.roleList = []; - this.sessionTimeout = false; - this.tenantId = ''; - this.setToken(undefined); - }, - - async login( - params: LoginParams & { - goHome?: boolean; - mode?: ErrorMessageMode; - } - ) { - try { - const { goHome = true } = params; - const request = new LoginInput(); - request.name = params.username; - request.password = params.password; - const data = await login(request); - this.setToken(data.token as string); - this.setUserInfo({ - userId: data.id as string, - username: data.userName as string, - realName: data.name as string, - roles: data.roles as [], - avatar: '', - isSts: false, - idToken: '', - }); - - await this.getAbpApplicationConfigurationAsync(); - goHome && (await router.replace(PageEnum.BASE_HOME)); - return null; - } catch (error) { - router.replace(PageEnum.BASE_LOGIN); - return null; - } - }, - async getAbpApplicationConfigurationAsync() { - const application = await getAbpApplicationConfiguration(); - const permissionStore = usePermissionStore(); - - const grantPolicy = Object.keys(application.auth?.grantedPolicies as object); - if (grantPolicy.length == 0) { - router.replace(PageEnum.BASE_LOGIN); - return; - } - permissionStore.setPermCodeList(grantPolicy); - }, - - async id4Login(token: string, id_token: string) { - console.log(token, id_token); - // try { - // // 获取token中的租户信息 - // const decoded: any = jwt_decode(token); - // if (decoded.tenantid == undefined) { - // this.setTenant(''); - // } else { - // this.setTenant(decoded.tenantid); - // } - - // const data = await id4(token); - // this.setToken(data.token as string); - - // this.setUserInfo({ - // userId: decoded.sub as string, - // username: data.userName as string, - // realName: data.name as string, - // roles: data.roles as [], - // avatar: '', - // isSts: true, - // idToken: id_token, - // }); - // await this.getAbpApplicationConfigurationAsync(); - // await router.replace(PageEnum.BASE_HOME); - // } catch (error) { - // this.setTenant(''); - // router.replace(PageEnum.BASE_LOGIN); - // } - }, - - async githubLogin(code: string) { - // try { - // const data = await github(code); - // this.setToken(data.token as string); - // this.setTenant(''); - // this.setUserInfo({ - // userId: data.id as string, - // username: data.userName as string, - // realName: data.name as string, - // roles: data.roles as [], - // avatar: '', - // isSts: false, - // idToken: '', - // }); - // await this.getAbpApplicationConfigurationAsync(); - // await router.replace(PageEnum.BASE_HOME); - // } catch (error) { - // this.setTenant(''); - // router.replace(PageEnum.BASE_LOGIN); - // } - console.log(code); - }, - - - /** - * @description: logout - */ - async logout(goLogin = false) { - try { - debugger; - if (this.userInfo?.isSts) { - await useOidcLogout(); - } else { - this.resetState(); - goLogin && router.push(PageEnum.BASE_LOGIN); - } - } catch (ex) { - console.log(ex); - } - }, - - /** - * @description: Confirm before logging out - */ - confirmLoginOut() { - const { createConfirm } = useMessage(); - const { t } = useI18n(); - createConfirm({ - iconType: 'warning', - title: t('sys.app.logoutTip'), - content: t('sys.app.logoutMessage'), - onOk: async () => { - await this.logout(true); - const { closeConnect } = useSignalR(); - closeConnect(); - }, - }); - }, - }, -}); - -// Need to be used outside the setup -export function useUserStoreWithOut() { - return useUserStore(store); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/auth/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/auth/index.ts deleted file mode 100644 index fdec83621..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/auth/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Persistent, BasicKeys } from '/@/utils/cache/persistent'; -import { CacheTypeEnum } from '/@/enums/cacheEnum'; -import projectSetting from '/@/settings/projectSetting'; -import { TOKEN_KEY } from '/@/enums/cacheEnum'; - -const { permissionCacheType } = projectSetting; -const isLocal = permissionCacheType === CacheTypeEnum.LOCAL; - -export function getToken() { - return getAuthCache(TOKEN_KEY); -} - -export function getAuthCache(key: BasicKeys) { - const fn = isLocal ? Persistent.getLocal : Persistent.getSession; - return fn(key) as T; -} - -export function setAuthCache(key: BasicKeys, value) { - const fn = isLocal ? Persistent.setLocal : Persistent.setSession; - return fn(key, value, true); -} - -export function clearAuthCache(immediate = true) { - const fn = isLocal ? Persistent.clearLocal : Persistent.clearSession; - return fn(immediate); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/bem.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/bem.ts deleted file mode 100644 index 7dcadbc96..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/bem.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { prefixCls } from '/@/settings/designSetting'; - -type Mod = string | { [key: string]: any }; -type Mods = Mod | Mod[]; - -export type BEM = ReturnType; - -function genBem(name: string, mods?: Mods): string { - if (!mods) { - return ''; - } - - if (typeof mods === 'string') { - return ` ${name}--${mods}`; - } - - if (Array.isArray(mods)) { - return mods.reduce((ret, item) => ret + genBem(name, item), ''); - } - - return Object.keys(mods).reduce((ret, key) => ret + (mods[key] ? genBem(name, key) : ''), ''); -} - -/** - * bem helper - * b() // 'button' - * b('text') // 'button__text' - * b({ disabled }) // 'button button--disabled' - * b('text', { disabled }) // 'button__text button__text--disabled' - * b(['disabled', 'primary']) // 'button button--disabled button--primary' - */ -export function buildBEM(name: string) { - return (el?: Mods, mods?: Mods): Mods => { - if (el && typeof el !== 'string') { - mods = el; - el = ''; - } - - el = el ? `${name}__${el}` : name; - - return `${el}${genBem(el, mods)}`; - }; -} - -export function createBEM(name: string) { - return [buildBEM(`${prefixCls}-${name}`)]; -} - -export function createNamespace(name: string) { - const prefixedName = `${prefixCls}-${name}`; - return [prefixedName, buildBEM(prefixedName)] as const; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/index.ts deleted file mode 100644 index 2004c6639..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { getStorageShortName } from '/@/utils/env'; -import { createStorage as create, CreateStorageParams } from './storageCache'; -import { enableStorageEncryption } from '/@/settings/encryptionSetting'; -import { DEFAULT_CACHE_TIME } from '/@/settings/encryptionSetting'; - -export type Options = Partial; - -const createOptions = (storage: Storage, options: Options = {}): Options => { - return { - // No encryption in debug mode - hasEncrypt: enableStorageEncryption, - storage, - prefixKey: getStorageShortName(), - ...options, - }; -}; - -export const WebStorage = create(createOptions(sessionStorage)); - -export const createStorage = (storage: Storage = sessionStorage, options: Options = {}) => { - return create(createOptions(storage, options)); -}; - -export const createSessionStorage = (options: Options = {}) => { - return createStorage(sessionStorage, { ...options, timeout: DEFAULT_CACHE_TIME }); -}; - -export const createLocalStorage = (options: Options = {}) => { - return createStorage(localStorage, { ...options, timeout: DEFAULT_CACHE_TIME }); -}; - -export default WebStorage; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/memory.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/memory.ts deleted file mode 100644 index 08a0a6470..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/memory.ts +++ /dev/null @@ -1,107 +0,0 @@ -export interface Cache { - value?: V; - timeoutId?: ReturnType; - time?: number; - alive?: number; -} - -const NOT_ALIVE = 0; - -export class Memory { - private cache: { [key in keyof T]?: Cache } = {}; - private alive: number; - - constructor(alive = NOT_ALIVE) { - // Unit second - this.alive = alive * 1000; - } - - get getCache() { - return this.cache; - } - - setCache(cache) { - this.cache = cache; - } - - // get(key: K) { - // const item = this.getItem(key); - // const time = item?.time; - // if (!isNullOrUnDef(time) && time < new Date().getTime()) { - // this.remove(key); - // } - // return item?.value ?? undefined; - // } - - get(key: K) { - return this.cache[key]; - } - - set(key: K, value: V, expires?: number) { - let item = this.get(key); - - if (!expires || (expires as number) <= 0) { - expires = this.alive; - } - if (item) { - if (item.timeoutId) { - clearTimeout(item.timeoutId); - item.timeoutId = undefined; - } - item.value = value; - } else { - item = { value, alive: expires }; - this.cache[key] = item; - } - - if (!expires) { - return value; - } - const now = new Date().getTime(); - /** - * Prevent overflow of the setTimeout Maximum delay value - * Maximum delay value 2,147,483,647 ms - * https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value - */ - item.time = expires > now ? expires : now + expires; - item.timeoutId = setTimeout( - () => { - this.remove(key); - }, - expires > now ? expires - now : expires, - ); - - return value; - } - - remove(key: K) { - const item = this.get(key); - Reflect.deleteProperty(this.cache, key); - if (item) { - clearTimeout(item.timeoutId!); - return item.value; - } - } - - resetCache(cache: { [K in keyof T]: Cache }) { - Object.keys(cache).forEach((key) => { - const k = key as any as keyof T; - const item = cache[k]; - if (item && item.time) { - const now = new Date().getTime(); - const expire = item.time; - if (expire > now) { - this.set(k, item.value, expire); - } - } - }); - } - - clear() { - Object.keys(this.cache).forEach((key) => { - const item = this.cache[key]; - item.timeoutId && clearTimeout(item.timeoutId); - }); - this.cache = {}; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/persistent.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/persistent.ts deleted file mode 100644 index 47382462a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/persistent.ts +++ /dev/null @@ -1,139 +0,0 @@ -import type { LockInfo, UserInfo } from '/#/store'; -import type { ProjectConfig } from '/#/config'; -import type { RouteLocationNormalized } from 'vue-router'; - -import { createLocalStorage, createSessionStorage } from '/@/utils/cache'; -import { Memory } from './memory'; -import { - TOKEN_KEY, - USER_INFO_KEY, - ROLES_KEY, - LOCK_INFO_KEY, - PROJ_CFG_KEY, - APP_LOCAL_CACHE_KEY, - APP_SESSION_CACHE_KEY, - MULTIPLE_TABS_KEY, - AUTH_KEY, - ABP_LOCALE_KEY, - ABP_TETANT_KEY, -} from '/@/enums/cacheEnum'; -import { ApplicationAuthConfigurationDto } from '/@/services/ServiceProxies'; -import { DEFAULT_CACHE_TIME } from '/@/settings/encryptionSetting'; -import { toRaw } from 'vue'; -import { pick, omit } from 'lodash-es'; - -interface BasicStore { - [TOKEN_KEY]: string | number | null | undefined; - [USER_INFO_KEY]: UserInfo; - [ROLES_KEY]: string[]; - [LOCK_INFO_KEY]: LockInfo; - [PROJ_CFG_KEY]: ProjectConfig; - [MULTIPLE_TABS_KEY]: RouteLocationNormalized[]; - [AUTH_KEY]: ApplicationAuthConfigurationDto; - [ABP_LOCALE_KEY]: string; - [ABP_TETANT_KEY]: string; -} - -type LocalStore = BasicStore; - -type SessionStore = BasicStore; - -export type BasicKeys = keyof BasicStore; -type LocalKeys = keyof LocalStore; -type SessionKeys = keyof SessionStore; - -const ls = createLocalStorage(); -const ss = createSessionStorage(); - -const localMemory = new Memory(DEFAULT_CACHE_TIME); -const sessionMemory = new Memory(DEFAULT_CACHE_TIME); - -function initPersistentMemory() { - const localCache = ls.get(APP_LOCAL_CACHE_KEY); - const sessionCache = ss.get(APP_SESSION_CACHE_KEY); - localCache && localMemory.resetCache(localCache); - sessionCache && sessionMemory.resetCache(sessionCache); -} - -export class Persistent { - static getLocal(key: LocalKeys) { - return localMemory.get(key)?.value as Nullable; - } - - static setLocal(key: LocalKeys, value: LocalStore[LocalKeys], immediate = false): void { - localMemory.set(key, toRaw(value)); - immediate && ls.set(APP_LOCAL_CACHE_KEY, localMemory.getCache); - } - - static removeLocal(key: LocalKeys, immediate = false): void { - localMemory.remove(key); - immediate && ls.set(APP_LOCAL_CACHE_KEY, localMemory.getCache); - } - - static clearLocal(immediate = false): void { - localMemory.clear(); - immediate && ls.clear(); - } - - static getSession(key: SessionKeys) { - return sessionMemory.get(key)?.value as Nullable; - } - - static setSession(key: SessionKeys, value: SessionStore[SessionKeys], immediate = false): void { - sessionMemory.set(key, toRaw(value)); - immediate && ss.set(APP_SESSION_CACHE_KEY, sessionMemory.getCache); - } - - static removeSession(key: SessionKeys, immediate = false): void { - sessionMemory.remove(key); - immediate && ss.set(APP_SESSION_CACHE_KEY, sessionMemory.getCache); - } - static clearSession(immediate = false): void { - sessionMemory.clear(); - immediate && ss.clear(); - } - - static clearAll(immediate = false) { - sessionMemory.clear(); - localMemory.clear(); - if (immediate) { - ls.clear(); - ss.clear(); - } - } -} - -window.addEventListener('beforeunload', function () { - // TOKEN_KEY 在登录或注销时已经写入到storage了,此处为了解决同时打开多个窗口时token不同步的问题 - // LOCK_INFO_KEY 在锁屏和解锁时写入,此处也不应修改 - ls.set(APP_LOCAL_CACHE_KEY, { - ...omit(localMemory.getCache, LOCK_INFO_KEY), - ...pick(ls.get(APP_LOCAL_CACHE_KEY), [TOKEN_KEY, USER_INFO_KEY, LOCK_INFO_KEY]), - }); - ss.set(APP_SESSION_CACHE_KEY, { - ...omit(sessionMemory.getCache, LOCK_INFO_KEY), - ...pick(ss.get(APP_SESSION_CACHE_KEY), [TOKEN_KEY, USER_INFO_KEY, LOCK_INFO_KEY]), - }); -}); - -function storageChange(e: any) { - const { key, newValue, oldValue } = e; - - if (!key) { - Persistent.clearAll(); - return; - } - - if (!!newValue && !!oldValue) { - if (APP_LOCAL_CACHE_KEY === key) { - Persistent.clearLocal(); - } - if (APP_SESSION_CACHE_KEY === key) { - Persistent.clearSession(); - } - } -} - -window.addEventListener('storage', storageChange); - -initPersistentMemory(); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/storageCache.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/storageCache.ts deleted file mode 100644 index 84ba2aa3f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cache/storageCache.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { cacheCipher } from '/@/settings/encryptionSetting'; -import type { EncryptionParams } from '/@/utils/cipher'; -import { AesEncryption } from '/@/utils/cipher'; -import { isNullOrUnDef } from '/@/utils/is'; - -export interface CreateStorageParams extends EncryptionParams { - prefixKey: string; - storage: Storage; - hasEncrypt: boolean; - timeout?: Nullable; -} -export const createStorage = ({ - prefixKey = '', - storage = sessionStorage, - key = cacheCipher.key, - iv = cacheCipher.iv, - timeout = null, - hasEncrypt = true, -}: Partial = {}) => { - if (hasEncrypt && [key.length, iv.length].some((item) => item !== 16)) { - throw new Error('When hasEncrypt is true, the key or iv must be 16 bits!'); - } - - const encryption = new AesEncryption({ key, iv }); - - /** - * Cache class - * Construction parameters can be passed into sessionStorage, localStorage, - * @class Cache - * @example - */ - const WebStorage = class WebStorage { - private storage: Storage; - private prefixKey?: string; - private encryption: AesEncryption; - private hasEncrypt: boolean; - /** - * - * @param {*} storage - */ - constructor() { - this.storage = storage; - this.prefixKey = prefixKey; - this.encryption = encryption; - this.hasEncrypt = hasEncrypt; - } - - private getKey(key: string) { - return `${this.prefixKey}${key}`.toUpperCase(); - } - - /** - * Set cache - * @param {string} key - * @param {*} value - * @param {*} expire Expiration time in seconds - * @memberof Cache - */ - set(key: string, value: any, expire: number | null = timeout) { - const stringData = JSON.stringify({ - value, - time: Date.now(), - expire: !isNullOrUnDef(expire) ? new Date().getTime() + expire * 1000 : null, - }); - const stringifyValue = this.hasEncrypt - ? this.encryption.encryptByAES(stringData) - : stringData; - this.storage.setItem(this.getKey(key), stringifyValue); - } - - /** - * Read cache - * @param {string} key - * @param {*} def - * @memberof Cache - */ - get(key: string, def: any = null): any { - const val = this.storage.getItem(this.getKey(key)); - if (!val) return def; - - try { - const decVal = this.hasEncrypt ? this.encryption.decryptByAES(val) : val; - const data = JSON.parse(decVal); - const { value, expire } = data; - if (isNullOrUnDef(expire) || expire >= new Date().getTime()) { - return value; - } - this.remove(key); - } catch (e) { - return def; - } - } - - /** - * Delete cache based on key - * @param {string} key - * @memberof Cache - */ - remove(key: string) { - this.storage.removeItem(this.getKey(key)); - } - - /** - * Delete all caches of this instance - */ - clear(): void { - this.storage.clear(); - } - }; - return new WebStorage(); -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cipher.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cipher.ts deleted file mode 100644 index 9a8a89a91..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/cipher.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { encrypt, decrypt } from 'crypto-js/aes'; -import { parse } from 'crypto-js/enc-utf8'; -import pkcs7 from 'crypto-js/pad-pkcs7'; -import ECB from 'crypto-js/mode-ecb'; -import md5 from 'crypto-js/md5'; -import UTF8 from 'crypto-js/enc-utf8'; -import Base64 from 'crypto-js/enc-base64'; - -export interface EncryptionParams { - key: string; - iv: string; -} - -export class AesEncryption { - private key; - private iv; - - constructor(opt: Partial = {}) { - const { key, iv } = opt; - if (key) { - this.key = parse(key); - } - if (iv) { - this.iv = parse(iv); - } - } - - get getOptions() { - return { - mode: ECB, - padding: pkcs7, - iv: this.iv, - }; - } - - encryptByAES(cipherText: string) { - return encrypt(cipherText, this.key, this.getOptions).toString(); - } - - decryptByAES(cipherText: string) { - return decrypt(cipherText, this.key, this.getOptions).toString(UTF8); - } -} - -export function encryptByBase64(cipherText: string) { - return UTF8.parse(cipherText).toString(Base64); -} - -export function decodeByBase64(cipherText: string) { - return Base64.parse(cipherText).toString(UTF8); -} - -export function encryptByMd5(password: string) { - return md5(password).toString(); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/color.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/color.ts deleted file mode 100644 index 67a6b5624..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/color.ts +++ /dev/null @@ -1,151 +0,0 @@ -/** - * 判断是否 十六进制颜色值. - * 输入形式可为 #fff000 #f00 - * - * @param String color 十六进制颜色值 - * @return Boolean - */ -export function isHexColor(color: string) { - const reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-f]{6})$/; - return reg.test(color); -} - -/** - * RGB 颜色值转换为 十六进制颜色值. - * r, g, 和 b 需要在 [0, 255] 范围内 - * - * @return String 类似#ff00ff - * @param r - * @param g - * @param b - */ -export function rgbToHex(r: number, g: number, b: number) { - // tslint:disable-next-line:no-bitwise - const hex = ((r << 16) | (g << 8) | b).toString(16); - return '#' + new Array(Math.abs(hex.length - 7)).join('0') + hex; -} - -/** - * Transform a HEX color to its RGB representation - * @param {string} hex The color to transform - * @returns The RGB representation of the passed color - */ -export function hexToRGB(hex: string) { - let sHex = hex.toLowerCase(); - if (isHexColor(hex)) { - if (sHex.length === 4) { - let sColorNew = '#'; - for (let i = 1; i < 4; i += 1) { - sColorNew += sHex.slice(i, i + 1).concat(sHex.slice(i, i + 1)); - } - sHex = sColorNew; - } - const sColorChange: number[] = []; - for (let i = 1; i < 7; i += 2) { - sColorChange.push(parseInt('0x' + sHex.slice(i, i + 2))); - } - return 'RGB(' + sColorChange.join(',') + ')'; - } - return sHex; -} - -export function colorIsDark(color: string) { - if (!isHexColor(color)) return; - const [r, g, b] = hexToRGB(color) - .replace(/(?:\(|\)|rgb|RGB)*/g, '') - .split(',') - .map((item) => Number(item)); - return r * 0.299 + g * 0.578 + b * 0.114 < 192; -} - -/** - * Darkens a HEX color given the passed percentage - * @param {string} color The color to process - * @param {number} amount The amount to change the color by - * @returns {string} The HEX representation of the processed color - */ -export function darken(color: string, amount: number) { - color = color.indexOf('#') >= 0 ? color.substring(1, color.length) : color; - amount = Math.trunc((255 * amount) / 100); - return `#${subtractLight(color.substring(0, 2), amount)}${subtractLight( - color.substring(2, 4), - amount, - )}${subtractLight(color.substring(4, 6), amount)}`; -} - -/** - * Lightens a 6 char HEX color according to the passed percentage - * @param {string} color The color to change - * @param {number} amount The amount to change the color by - * @returns {string} The processed color represented as HEX - */ -export function lighten(color: string, amount: number) { - color = color.indexOf('#') >= 0 ? color.substring(1, color.length) : color; - amount = Math.trunc((255 * amount) / 100); - return `#${addLight(color.substring(0, 2), amount)}${addLight( - color.substring(2, 4), - amount, - )}${addLight(color.substring(4, 6), amount)}`; -} - -/* Suma el porcentaje indicado a un color (RR, GG o BB) hexadecimal para aclararlo */ -/** - * Sums the passed percentage to the R, G or B of a HEX color - * @param {string} color The color to change - * @param {number} amount The amount to change the color by - * @returns {string} The processed part of the color - */ -function addLight(color: string, amount: number) { - const cc = parseInt(color, 16) + amount; - const c = cc > 255 ? 255 : cc; - return c.toString(16).length > 1 ? c.toString(16) : `0${c.toString(16)}`; -} - -/** - * Calculates luminance of an rgb color - * @param {number} r red - * @param {number} g green - * @param {number} b blue - */ -function luminanace(r: number, g: number, b: number) { - const a = [r, g, b].map((v) => { - v /= 255; - return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4); - }); - return a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722; -} - -/** - * Calculates contrast between two rgb colors - * @param {string} rgb1 rgb color 1 - * @param {string} rgb2 rgb color 2 - */ -function contrast(rgb1: string[], rgb2: number[]) { - return ( - (luminanace(~~rgb1[0], ~~rgb1[1], ~~rgb1[2]) + 0.05) / - (luminanace(rgb2[0], rgb2[1], rgb2[2]) + 0.05) - ); -} - -/** - * Determines what the best text color is (black or white) based con the contrast with the background - * @param hexColor - Last selected color by the user - */ -export function calculateBestTextColor(hexColor: string) { - const rgbColor = hexToRGB(hexColor.substring(1)); - const contrastWithBlack = contrast(rgbColor.split(','), [0, 0, 0]); - - return contrastWithBlack >= 12 ? '#000000' : '#FFFFFF'; -} - -/** - * Subtracts the indicated percentage to the R, G or B of a HEX color - * @param {string} color The color to change - * @param {number} amount The amount to change the color by - * @returns {string} The processed part of the color - */ -function subtractLight(color: string, amount: number) { - const cc = parseInt(color, 16) - amount; - const c = cc < 0 ? 0 : cc; - return c.toString(16).length > 1 ? c.toString(16) : `0${c.toString(16)}`; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/dateUtil.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/dateUtil.ts deleted file mode 100644 index 7fb578771..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/dateUtil.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Independent time operation tool to facilitate subsequent switch to dayjs - */ -import dayjs from 'dayjs'; - -const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'; -const DATE_FORMAT = 'YYYY-MM-DD'; - -export function formatToDateTime( - date: dayjs.Dayjs | undefined = undefined, - format = DATE_TIME_FORMAT, -): string { - return dayjs(date).format(format); -} - -export function formatToDate( - date: dayjs.Dayjs | undefined = undefined, - format = DATE_FORMAT, -): string { - return dayjs(date).format(format); -} - -export const dateUtil = dayjs; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/domUtils.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/domUtils.ts deleted file mode 100644 index 7efe9cb88..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/domUtils.ts +++ /dev/null @@ -1,180 +0,0 @@ -import type { FunctionArgs } from '@vueuse/core'; -import { upperFirst } from 'lodash-es'; - -export interface ViewportOffsetResult { - left: number; - top: number; - right: number; - bottom: number; - rightIncludeBody: number; - bottomIncludeBody: number; -} - -export function getBoundingClientRect(element: Element): DOMRect | number { - if (!element || !element.getBoundingClientRect) { - return 0; - } - return element.getBoundingClientRect(); -} - -function trim(string: string) { - return (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, ''); -} - -/* istanbul ignore next */ -export function hasClass(el: Element, cls: string) { - if (!el || !cls) return false; - if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.'); - if (el.classList) { - return el.classList.contains(cls); - } else { - return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1; - } -} - -/* istanbul ignore next */ -export function addClass(el: Element, cls: string) { - if (!el) return; - let curClass = el.className; - const classes = (cls || '').split(' '); - - for (let i = 0, j = classes.length; i < j; i++) { - const clsName = classes[i]; - if (!clsName) continue; - - if (el.classList) { - el.classList.add(clsName); - } else if (!hasClass(el, clsName)) { - curClass += ' ' + clsName; - } - } - if (!el.classList) { - el.className = curClass; - } -} - -/* istanbul ignore next */ -export function removeClass(el: Element, cls: string) { - if (!el || !cls) return; - const classes = cls.split(' '); - let curClass = ' ' + el.className + ' '; - - for (let i = 0, j = classes.length; i < j; i++) { - const clsName = classes[i]; - if (!clsName) continue; - - if (el.classList) { - el.classList.remove(clsName); - } else if (hasClass(el, clsName)) { - curClass = curClass.replace(' ' + clsName + ' ', ' '); - } - } - if (!el.classList) { - el.className = trim(curClass); - } -} -/** - * Get the left and top offset of the current element - * left: the distance between the leftmost element and the left side of the document - * top: the distance from the top of the element to the top of the document - * right: the distance from the far right of the element to the right of the document - * bottom: the distance from the bottom of the element to the bottom of the document - * rightIncludeBody: the distance between the leftmost element and the right side of the document - * bottomIncludeBody: the distance from the bottom of the element to the bottom of the document - * - * @description: - */ -export function getViewportOffset(element: Element): ViewportOffsetResult { - const doc = document.documentElement; - - const docScrollLeft = doc.scrollLeft; - const docScrollTop = doc.scrollTop; - const docClientLeft = doc.clientLeft; - const docClientTop = doc.clientTop; - - const pageXOffset = window.pageXOffset; - const pageYOffset = window.pageYOffset; - - const box = getBoundingClientRect(element); - - const { left: retLeft, top: rectTop, width: rectWidth, height: rectHeight } = box as DOMRect; - - const scrollLeft = (pageXOffset || docScrollLeft) - (docClientLeft || 0); - const scrollTop = (pageYOffset || docScrollTop) - (docClientTop || 0); - const offsetLeft = retLeft + pageXOffset; - const offsetTop = rectTop + pageYOffset; - - const left = offsetLeft - scrollLeft; - const top = offsetTop - scrollTop; - - const clientWidth = window.document.documentElement.clientWidth; - const clientHeight = window.document.documentElement.clientHeight; - return { - left: left, - top: top, - right: clientWidth - rectWidth - left, - bottom: clientHeight - rectHeight - top, - rightIncludeBody: clientWidth - left, - bottomIncludeBody: clientHeight - top, - }; -} - -export function hackCss(attr: string, value: string) { - const prefix: string[] = ['webkit', 'Moz', 'ms', 'OT']; - - const styleObj: any = {}; - prefix.forEach((item) => { - styleObj[`${item}${upperFirst(attr)}`] = value; - }); - return { - ...styleObj, - [attr]: value, - }; -} - -/* istanbul ignore next */ -export function on( - element: Element | HTMLElement | Document | Window, - event: string, - handler: EventListenerOrEventListenerObject, -): void { - if (element && event && handler) { - element.addEventListener(event, handler, false); - } -} - -/* istanbul ignore next */ -export function off( - element: Element | HTMLElement | Document | Window, - event: string, - handler: Fn, -): void { - if (element && event && handler) { - element.removeEventListener(event, handler, false); - } -} - -/* istanbul ignore next */ -export function once(el: HTMLElement, event: string, fn: EventListener): void { - const listener = function (this: any, ...args: unknown[]) { - if (fn) { - fn.apply(this, args); - } - off(el, event, listener); - }; - on(el, event, listener); -} - -export function useRafThrottle(fn: T): T { - let locked = false; - // @ts-ignore - return function (...args: any[]) { - if (locked) return; - locked = true; - window.requestAnimationFrame(() => { - // @ts-ignore - fn.apply(this, args); - locked = false; - }); - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/env.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/env.ts deleted file mode 100644 index 408398a63..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/env.ts +++ /dev/null @@ -1,83 +0,0 @@ -import type { GlobEnvConfig } from '/#/config'; - -import { warn } from '/@/utils/log'; -import pkg from '../../package.json'; -import { getConfigFileName } from '../../build/getConfigFileName'; - -export function getCommonStoragePrefix() { - const { VITE_GLOB_APP_SHORT_NAME } = getAppEnvConfig(); - return `${VITE_GLOB_APP_SHORT_NAME}__${getEnv()}`.toUpperCase(); -} - -// Generate cache key according to version -export function getStorageShortName() { - return `${getCommonStoragePrefix()}${`__${pkg.version}`}__`.toUpperCase(); -} - -export function getAppEnvConfig() { - const ENV_NAME = getConfigFileName(import.meta.env); - - const ENV = (import.meta.env.DEV - ? // Get the global configuration (the configuration will be extracted independently when packaging) - (import.meta.env as unknown as GlobEnvConfig) - : window[ENV_NAME as any]) as unknown as GlobEnvConfig; - - const { - VITE_GLOB_APP_TITLE, - VITE_GLOB_API_URL, - VITE_GLOB_APP_SHORT_NAME, - VITE_GLOB_API_URL_PREFIX, - VITE_GLOB_UPLOAD_URL, - } = ENV; - - if (!/^[a-zA-Z\_]*$/.test(VITE_GLOB_APP_SHORT_NAME)) { - warn( - `VITE_GLOB_APP_SHORT_NAME Variables can only be characters/underscores, please modify in the environment variables and re-running.`, - ); - } - - return { - VITE_GLOB_APP_TITLE, - VITE_GLOB_API_URL, - VITE_GLOB_APP_SHORT_NAME, - VITE_GLOB_API_URL_PREFIX, - VITE_GLOB_UPLOAD_URL, - }; -} - -/** - * @description: Development mode - */ -export const devMode = 'development'; - -/** - * @description: Production mode - */ -export const prodMode = 'production'; - -/** - * @description: Get environment variables - * @returns: - * @example: - */ -export function getEnv(): string { - return import.meta.env.MODE; -} - -/** - * @description: Is it a development mode - * @returns: - * @example: - */ -export function isDevMode(): boolean { - return import.meta.env.DEV; -} - -/** - * @description: Is it a production mode - * @returns: - * @example: - */ -export function isProdMode(): boolean { - return import.meta.env.PROD; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/event/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/event/index.ts deleted file mode 100644 index 3a60d7cdc..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/event/index.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ResizeObserver from 'resize-observer-polyfill'; - -const isServer = typeof window === 'undefined'; - -/* istanbul ignore next */ -function resizeHandler(entries: any[]) { - for (const entry of entries) { - const listeners = entry.target.__resizeListeners__ || []; - if (listeners.length) { - listeners.forEach((fn: () => any) => { - fn(); - }); - } - } -} - -/* istanbul ignore next */ -export function addResizeListener(element: any, fn: () => any) { - if (isServer) return; - if (!element.__resizeListeners__) { - element.__resizeListeners__ = []; - element.__ro__ = new ResizeObserver(resizeHandler); - element.__ro__.observe(element); - } - element.__resizeListeners__.push(fn); -} - -/* istanbul ignore next */ -export function removeResizeListener(element: any, fn: () => any) { - if (!element || !element.__resizeListeners__) return; - element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1); - if (!element.__resizeListeners__.length) { - element.__ro__.disconnect(); - } -} - -export function triggerWindowResize() { - const event = document.createEvent('HTMLEvents'); - event.initEvent('resize', true, true); - (event as any).eventType = 'message'; - window.dispatchEvent(event); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/factory/createAsyncComponent.tsx b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/factory/createAsyncComponent.tsx deleted file mode 100644 index fc5e2a604..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/factory/createAsyncComponent.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { - defineAsyncComponent, - // FunctionalComponent, CSSProperties -} from 'vue'; -import { Spin } from 'ant-design-vue'; -import { noop } from '/@/utils'; - -// const Loading: FunctionalComponent<{ size: 'small' | 'default' | 'large' }> = (props) => { -// const style: CSSProperties = { -// position: 'absolute', -// display: 'flex', -// justifyContent: 'center', -// alignItems: 'center', -// }; -// return ( -//
-// -//
-// ); -// }; - -interface Options { - size?: 'default' | 'small' | 'large'; - delay?: number; - timeout?: number; - loading?: boolean; - retry?: boolean; -} - -export function createAsyncComponent(loader: Fn, options: Options = {}) { - const { size = 'small', delay = 100, timeout = 30000, loading = false, retry = true } = options; - return defineAsyncComponent({ - loader, - loadingComponent: loading ? : undefined, - // The error component will be displayed if a timeout is - // provided and exceeded. Default: Infinity. - // TODO - timeout, - // errorComponent - // Defining if component is suspensible. Default: true. - // suspensible: false, - delay, - /** - * - * @param {*} error Error message object - * @param {*} retry A function that indicating whether the async component should retry when the loader promise rejects - * @param {*} fail End of failure - * @param {*} attempts Maximum allowed retries number - */ - onError: !retry - ? noop - : (error, retry, fail, attempts) => { - if (error.message.match(/fetch/) && attempts <= 3) { - // retry on fetch errors, 3 max attempts - retry(); - } else { - // Note that retry/fail are like resolve/reject of a promise: - // one of them must be called for the error handling to continue. - fail(); - } - }, - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/file/base64Conver.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/file/base64Conver.ts deleted file mode 100644 index 6751d9777..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/file/base64Conver.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @description: base64 to blob - */ -export function dataURLtoBlob(base64Buf: string): Blob { - const arr = base64Buf.split(','); - const typeItem = arr[0]; - const mime = typeItem.match(/:(.*?);/)![1]; - const bstr = window.atob(arr[1]); - let n = bstr.length; - const u8arr = new Uint8Array(n); - while (n--) { - u8arr[n] = bstr.charCodeAt(n); - } - return new Blob([u8arr], { type: mime }); -} - -/** - * img url to base64 - * @param url - */ -export function urlToBase64(url: string, mineType?: string): Promise { - return new Promise((resolve, reject) => { - let canvas = document.createElement('CANVAS') as Nullable; - const ctx = canvas!.getContext('2d'); - - const img = new Image(); - img.crossOrigin = ''; - img.onload = function () { - if (!canvas || !ctx) { - return reject(); - } - canvas.height = img.height; - canvas.width = img.width; - ctx.drawImage(img, 0, 0); - const dataURL = canvas.toDataURL(mineType || 'image/png'); - canvas = null; - resolve(dataURL); - }; - img.src = url; - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/file/download.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/file/download.ts deleted file mode 100644 index 6af9ab461..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/file/download.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { openWindow } from '..'; -import { dataURLtoBlob, urlToBase64 } from './base64Conver'; - -/** - * Download online pictures - * @param url - * @param filename - * @param mime - * @param bom - */ -export function downloadByOnlineUrl(url: string, filename: string, mime?: string, bom?: BlobPart) { - urlToBase64(url).then((base64) => { - downloadByBase64(base64, filename, mime, bom); - }); -} - -/** - * Download pictures based on base64 - * @param buf - * @param filename - * @param mime - * @param bom - */ -export function downloadByBase64(buf: string, filename: string, mime?: string, bom?: BlobPart) { - const base64Buf = dataURLtoBlob(buf); - downloadByData(base64Buf, filename, mime, bom); -} - -/** - * Download according to the background interface file stream - * @param {*} data - * @param {*} filename - * @param {*} mime - * @param {*} bom - */ -export function downloadByData(data: BlobPart, filename: string, mime?: string, bom?: BlobPart) { - const blobData = typeof bom !== 'undefined' ? [bom, data] : [data]; - const blob = new Blob(blobData, { type: mime || 'application/octet-stream' }); - - const blobURL = window.URL.createObjectURL(blob); - const tempLink = document.createElement('a'); - tempLink.style.display = 'none'; - tempLink.href = blobURL; - tempLink.setAttribute('download', filename); - if (typeof tempLink.download === 'undefined') { - tempLink.setAttribute('target', '_blank'); - } - document.body.appendChild(tempLink); - tempLink.click(); - document.body.removeChild(tempLink); - window.URL.revokeObjectURL(blobURL); -} - -/** - * Download file according to file address - * @param {*} sUrl - */ -export function downloadByUrl({ - url, - target = '_blank', - fileName, -}: { - url: string; - target?: TargetContext; - fileName?: string; -}): boolean { - const isChrome = window.navigator.userAgent.toLowerCase().indexOf('chrome') > -1; - const isSafari = window.navigator.userAgent.toLowerCase().indexOf('safari') > -1; - - if (/(iP)/g.test(window.navigator.userAgent)) { - console.error('Your browser does not support download!'); - return false; - } - if (isChrome || isSafari) { - const link = document.createElement('a'); - link.href = url; - link.target = target; - - if (link.download !== undefined) { - link.download = fileName || url.substring(url.lastIndexOf('/') + 1, url.length); - } - - if (document.createEvent) { - const e = document.createEvent('MouseEvents'); - e.initEvent('click', true, true); - link.dispatchEvent(e); - return true; - } - } - if (url.indexOf('?') === -1) { - url += '?download'; - } - - openWindow(url, { target }); - return true; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/helper/treeHelper.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/helper/treeHelper.ts deleted file mode 100644 index 922a47310..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/helper/treeHelper.ts +++ /dev/null @@ -1,216 +0,0 @@ -interface TreeHelperConfig { - id: string; - children: string; - pid: string; -} - -// 默认配置 -const DEFAULT_CONFIG: TreeHelperConfig = { - id: 'id', - children: 'children', - pid: 'pid', -}; - -// 获取配置。 Object.assign 从一个或多个源对象复制到目标对象 -const getConfig = (config: Partial) => Object.assign({}, DEFAULT_CONFIG, config); - -// tree from list -// 列表中的树 -export function listToTree(list: any[], config: Partial = {}): T[] { - const conf = getConfig(config) as TreeHelperConfig; - const nodeMap = new Map(); - const result: T[] = []; - const { id, children, pid } = conf; - - for (const node of list) { - node[children] = node[children] || []; - nodeMap.set(node[id], node); - } - for (const node of list) { - const parent = nodeMap.get(node[pid]); - (parent ? parent[children] : result).push(node); - } - return result; -} - -export function treeToList(tree: any, config: Partial = {}): T { - config = getConfig(config); - const { children } = config; - const result: any = [...tree]; - for (let i = 0; i < result.length; i++) { - if (!result[i][children!]) continue; - result.splice(i + 1, 0, ...result[i][children!]); - } - return result; -} - -export function findNode( - tree: any, - func: Fn, - config: Partial = {}, -): T | null { - config = getConfig(config); - const { children } = config; - const list = [...tree]; - for (const node of list) { - if (func(node)) return node; - node[children!] && list.push(...node[children!]); - } - return null; -} - -export function findNodeAll( - tree: any, - func: Fn, - config: Partial = {}, -): T[] { - config = getConfig(config); - const { children } = config; - const list = [...tree]; - const result: T[] = []; - for (const node of list) { - func(node) && result.push(node); - node[children!] && list.push(...node[children!]); - } - return result; -} - -export function findPath( - tree: any, - func: Fn, - config: Partial = {}, -): T | T[] | null { - config = getConfig(config); - const path: T[] = []; - const list = [...tree]; - const visitedSet = new Set(); - const { children } = config; - while (list.length) { - const node = list[0]; - if (visitedSet.has(node)) { - path.pop(); - list.shift(); - } else { - visitedSet.add(node); - node[children!] && list.unshift(...node[children!]); - path.push(node); - if (func(node)) { - return path; - } - } - } - return null; -} - -export function findPathAll(tree: any, func: Fn, config: Partial = {}) { - config = getConfig(config); - const path: any[] = []; - const list = [...tree]; - const result: any[] = []; - const visitedSet = new Set(), - { children } = config; - while (list.length) { - const node = list[0]; - if (visitedSet.has(node)) { - path.pop(); - list.shift(); - } else { - visitedSet.add(node); - node[children!] && list.unshift(...node[children!]); - path.push(node); - func(node) && result.push([...path]); - } - } - return result; -} - -export function filter( - tree: T[], - func: (n: T) => boolean, - // Partial 将 T 中的所有属性设为可选 - config: Partial = {}, -): T[] { - // 获取配置 - config = getConfig(config); - const children = config.children as string; - - function listFilter(list: T[]) { - return list - .map((node: any) => ({ ...node })) - .filter((node) => { - // 递归调用 对含有children项 进行再次调用自身函数 listFilter - node[children] = node[children] && listFilter(node[children]); - // 执行传入的回调 func 进行过滤 - return func(node) || (node[children] && node[children].length); - }); - } - - return listFilter(tree); -} - -export function forEach( - tree: T[], - func: (n: T) => any, - config: Partial = {}, -): void { - config = getConfig(config); - const list: any[] = [...tree]; - const { children } = config; - for (let i = 0; i < list.length; i++) { - //func 返回true就终止遍历,避免大量节点场景下无意义循环,引起浏览器卡顿 - if (func(list[i])) { - return; - } - children && list[i][children] && list.splice(i + 1, 0, ...list[i][children]); - } -} - -/** - * @description: Extract tree specified structure - * @description: 提取树指定结构 - */ -export function treeMap(treeData: T[], opt: { children?: string; conversion: Fn }): T[] { - return treeData.map((item) => treeMapEach(item, opt)); -} - -/** - * @description: Extract tree specified structure - * @description: 提取树指定结构 - */ -export function treeMapEach( - data: any, - { children = 'children', conversion }: { children?: string; conversion: Fn }, -) { - const haveChildren = Array.isArray(data[children]) && data[children].length > 0; - const conversionData = conversion(data) || {}; - if (haveChildren) { - return { - ...conversionData, - [children]: data[children].map((i: number) => - treeMapEach(i, { - children, - conversion, - }), - ), - }; - } else { - return { - ...conversionData, - }; - } -} - -/** - * 递归遍历树结构 - * @param treeDatas 树 - * @param callBack 回调 - * @param parentNode 父节点 - */ -export function eachTree(treeDatas: any[], callBack: Fn, parentNode = {}) { - treeDatas.forEach((element) => { - const newNode = callBack(element, parentNode) || element; - if (element.children) { - eachTree(element.children, callBack, newNode); - } - }); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/helper/tsxHelper.tsx b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/helper/tsxHelper.tsx deleted file mode 100644 index 46e00012e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/helper/tsxHelper.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { Slots } from 'vue'; -import { isFunction } from '/@/utils/is'; - -/** - * @description: Get slot to prevent empty error - */ -export function getSlot(slots: Slots, slot = 'default', data?: any) { - if (!slots || !Reflect.has(slots, slot)) { - return null; - } - if (!isFunction(slots[slot])) { - console.error(`${slot} is not a function!`); - return null; - } - const slotFn = slots[slot]; - if (!slotFn) return null; - return slotFn(data); -} - -/** - * extends slots - * @param slots - * @param excludeKeys - */ -export function extendSlots(slots: Slots, excludeKeys: string[] = []) { - const slotKeys = Object.keys(slots); - const ret: any = {}; - slotKeys.map((key) => { - if (excludeKeys.includes(key)) { - return null; - } - ret[key] = () => getSlot(slots, key); - }); - return ret; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/Axios.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/Axios.ts deleted file mode 100644 index 60ff4bd2c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/Axios.ts +++ /dev/null @@ -1,237 +0,0 @@ -import type { AxiosRequestConfig, AxiosInstance, AxiosResponse, AxiosError } from 'axios'; -import type { RequestOptions, Result, UploadFileParams } from '/#/axios'; -import type { CreateAxiosOptions } from './axiosTransform'; -import axios from 'axios'; -import qs from 'qs'; -import { AxiosCanceler } from './axiosCancel'; -import { isFunction } from '/@/utils/is'; -import { cloneDeep } from 'lodash-es'; -import { ContentTypeEnum } from '/@/enums/httpEnum'; -import { RequestEnum } from '/@/enums/httpEnum'; - -export * from './axiosTransform'; - -/** - * @description: axios module - */ -export class VAxios { - private axiosInstance: AxiosInstance; - private readonly options: CreateAxiosOptions; - - constructor(options: CreateAxiosOptions) { - this.options = options; - this.axiosInstance = axios.create(options); - this.setupInterceptors(); - } - - /** - * @description: Create axios instance - */ - private createAxios(config: CreateAxiosOptions): void { - this.axiosInstance = axios.create(config); - } - - private getTransform() { - const { transform } = this.options; - return transform; - } - - getAxios(): AxiosInstance { - return this.axiosInstance; - } - - /** - * @description: Reconfigure axios - */ - configAxios(config: CreateAxiosOptions) { - if (!this.axiosInstance) { - return; - } - this.createAxios(config); - } - - /** - * @description: Set general header - */ - setHeader(headers: any): void { - if (!this.axiosInstance) { - return; - } - Object.assign(this.axiosInstance.defaults.headers, headers); - } - - /** - * @description: Interceptor configuration 拦截器配置 - */ - private setupInterceptors() { - const transform = this.getTransform(); - if (!transform) { - return; - } - const { - requestInterceptors, - requestInterceptorsCatch, - responseInterceptors, - responseInterceptorsCatch, - } = transform; - - const axiosCanceler = new AxiosCanceler(); - - // Request interceptor configuration processing - this.axiosInstance.interceptors.request.use((config: AxiosRequestConfig) => { - // If cancel repeat request is turned on, then cancel repeat request is prohibited - // @ts-ignore - const { ignoreCancelToken } = config.requestOptions; - const ignoreCancel = - ignoreCancelToken !== undefined - ? ignoreCancelToken - : this.options.requestOptions?.ignoreCancelToken; - - !ignoreCancel && axiosCanceler.addPending(config); - if (requestInterceptors && isFunction(requestInterceptors)) { - config = requestInterceptors(config, this.options); - } - return config; - }, undefined); - - // Request interceptor error capture - requestInterceptorsCatch && - isFunction(requestInterceptorsCatch) && - this.axiosInstance.interceptors.request.use(undefined, requestInterceptorsCatch); - - // Response result interceptor processing - this.axiosInstance.interceptors.response.use((res: AxiosResponse) => { - res && axiosCanceler.removePending(res.config); - if (responseInterceptors && isFunction(responseInterceptors)) { - res = responseInterceptors(res); - } - return res; - }, undefined); - - // Response result interceptor error capture - responseInterceptorsCatch && - isFunction(responseInterceptorsCatch) && - this.axiosInstance.interceptors.response.use(undefined, (error) => { - // @ts-ignore - return responseInterceptorsCatch(this.axiosInstance, error); - }); - } - - /** - * @description: File Upload - */ - uploadFile(config: AxiosRequestConfig, params: UploadFileParams) { - const formData = new window.FormData(); - const customFilename = params.name || 'file'; - - if (params.filename) { - formData.append(customFilename, params.file, params.filename); - } else { - formData.append(customFilename, params.file); - } - - if (params.data) { - Object.keys(params.data).forEach((key) => { - const value = params.data![key]; - if (Array.isArray(value)) { - value.forEach((item) => { - formData.append(`${key}[]`, item); - }); - return; - } - - formData.append(key, params.data![key]); - }); - } - - return this.axiosInstance.request({ - ...config, - method: 'POST', - data: formData, - headers: { - 'Content-type': ContentTypeEnum.FORM_DATA, - // @ts-ignore - ignoreCancelToken: true, - }, - }); - } - - // support form-data - supportFormData(config: AxiosRequestConfig) { - const headers = config.headers || this.options.headers; - const contentType = headers?.['Content-Type'] || headers?.['content-type']; - - if ( - contentType !== ContentTypeEnum.FORM_URLENCODED || - !Reflect.has(config, 'data') || - config.method?.toUpperCase() === RequestEnum.GET - ) { - return config; - } - - return { - ...config, - data: qs.stringify(config.data, { arrayFormat: 'brackets' }), - }; - } - - get(config: AxiosRequestConfig, options?: RequestOptions): Promise { - return this.request({ ...config, method: 'GET' }, options); - } - - post(config: AxiosRequestConfig, options?: RequestOptions): Promise { - return this.request({ ...config, method: 'POST' }, options); - } - - put(config: AxiosRequestConfig, options?: RequestOptions): Promise { - return this.request({ ...config, method: 'PUT' }, options); - } - - delete(config: AxiosRequestConfig, options?: RequestOptions): Promise { - return this.request({ ...config, method: 'DELETE' }, options); - } - - request(config: AxiosRequestConfig, options?: RequestOptions): Promise { - let conf: CreateAxiosOptions = cloneDeep(config); - const transform = this.getTransform(); - - const { requestOptions } = this.options; - - const opt: RequestOptions = Object.assign({}, requestOptions, options); - - const { beforeRequestHook, requestCatchHook, transformRequestHook } = transform || {}; - if (beforeRequestHook && isFunction(beforeRequestHook)) { - conf = beforeRequestHook(conf, opt); - } - conf.requestOptions = opt; - - conf = this.supportFormData(conf); - - return new Promise((resolve, reject) => { - this.axiosInstance - .request>(conf) - .then((res: AxiosResponse) => { - if (transformRequestHook && isFunction(transformRequestHook)) { - try { - const ret = transformRequestHook(res, opt); - resolve(ret); - } catch (err) { - reject(err || new Error('request error!')); - } - return; - } - resolve(res as unknown as Promise); - }) - .catch((e: Error | AxiosError) => { - if (requestCatchHook && isFunction(requestCatchHook)) { - reject(requestCatchHook(e, opt)); - return; - } - if (axios.isAxiosError(e)) { - // rewrite error message from axios in here - } - reject(e); - }); - }); - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/axiosCancel.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/axiosCancel.ts deleted file mode 100644 index 081233eaa..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/axiosCancel.ts +++ /dev/null @@ -1,60 +0,0 @@ -import type { AxiosRequestConfig, Canceler } from 'axios'; -import axios from 'axios'; -import { isFunction } from '/@/utils/is'; - -// Used to store the identification and cancellation function of each request -let pendingMap = new Map(); - -export const getPendingUrl = (config: AxiosRequestConfig) => [config.method, config.url].join('&'); - -export class AxiosCanceler { - /** - * Add request - * @param {Object} config - */ - addPending(config: AxiosRequestConfig) { - this.removePending(config); - const url = getPendingUrl(config); - config.cancelToken = - config.cancelToken || - new axios.CancelToken((cancel) => { - if (!pendingMap.has(url)) { - // If there is no current request in pending, add it - pendingMap.set(url, cancel); - } - }); - } - - /** - * @description: Clear all pending - */ - removeAllPending() { - pendingMap.forEach((cancel) => { - cancel && isFunction(cancel) && cancel(); - }); - pendingMap.clear(); - } - - /** - * Removal request - * @param {Object} config - */ - removePending(config: AxiosRequestConfig) { - const url = getPendingUrl(config); - - if (pendingMap.has(url)) { - // If there is a current request identifier in pending, - // the current request needs to be cancelled and removed - const cancel = pendingMap.get(url); - cancel && cancel(url); - pendingMap.delete(url); - } - } - - /** - * @description: reset - */ - reset(): void { - pendingMap = new Map(); - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/axiosRetry.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/axiosRetry.ts deleted file mode 100644 index d081b9676..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/axiosRetry.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { AxiosError, AxiosInstance } from 'axios'; -/** - * 请求重试机制 - */ - -export class AxiosRetry { - /** - * 重试 - */ - retry(AxiosInstance: AxiosInstance, error: AxiosError) { - // @ts-ignore - const { config } = error.response; - const { waitTime, count } = config?.requestOptions?.retryRequest; - config.__retryCount = config.__retryCount || 0; - if (config.__retryCount >= count) { - return Promise.reject(error); - } - config.__retryCount += 1; - return this.delay(waitTime).then(() => AxiosInstance(config)); - } - - /** - * 延迟 - */ - private delay(waitTime: number) { - return new Promise((resolve) => setTimeout(resolve, waitTime)); - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/axiosTransform.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/axiosTransform.ts deleted file mode 100644 index beeac6cb0..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/axiosTransform.ts +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Data processing class, can be configured according to the project - */ -import type { AxiosRequestConfig, AxiosResponse } from 'axios'; -import type { RequestOptions, Result } from '/#/axios'; - -export interface CreateAxiosOptions extends AxiosRequestConfig { - authenticationScheme?: string; - transform?: AxiosTransform; - requestOptions?: RequestOptions; -} - -export abstract class AxiosTransform { - /** - * @description: Process configuration before request - * @description: Process configuration before request - */ - beforeRequestHook?: (config: AxiosRequestConfig, options: RequestOptions) => AxiosRequestConfig; - - /** - * @description: Request successfully processed - */ - transformRequestHook?: (res: AxiosResponse, options: RequestOptions) => any; - - /** - * @description: 请求失败处理 - */ - requestCatchHook?: (e: Error, options: RequestOptions) => Promise; - - /** - * @description: 请求之前的拦截器 - */ - requestInterceptors?: ( - config: AxiosRequestConfig, - options: CreateAxiosOptions, - ) => AxiosRequestConfig; - - /** - * @description: 请求之后的拦截器 - */ - responseInterceptors?: (res: AxiosResponse) => AxiosResponse; - - /** - * @description: 请求之前的拦截器错误处理 - */ - requestInterceptorsCatch?: (error: Error) => void; - - /** - * @description: 请求之后的拦截器错误处理 - */ - responseInterceptorsCatch?: (axiosInstance: AxiosResponse, error: Error) => void; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/checkStatus.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/checkStatus.ts deleted file mode 100644 index acadffaa1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/checkStatus.ts +++ /dev/null @@ -1,80 +0,0 @@ -import type { ErrorMessageMode } from '/#/axios'; -import { useMessage } from '/@/hooks/web/useMessage'; -import { useI18n } from '/@/hooks/web/useI18n'; -// import router from '/@/router'; -// import { PageEnum } from '/@/enums/pageEnum'; -import { useUserStoreWithOut } from '/@/store/modules/user'; -import projectSetting from '/@/settings/projectSetting'; -import { SessionTimeoutProcessingEnum } from '/@/enums/appEnum'; - -const { createMessage, createErrorModal } = useMessage(); -const error = createMessage.error!; -const stp = projectSetting.sessionTimeoutProcessing; - -export function checkStatus( - status: number, - msg: string, - errorMessageMode: ErrorMessageMode = 'message', -): void { - const { t } = useI18n(); - const userStore = useUserStoreWithOut(); - let errMessage = ''; - - switch (status) { - case 400: - errMessage = `${msg}`; - break; - // 401: Not logged in - // Jump to the login page if not logged in, and carry the path of the current page - // Return to the current page after successful login. This step needs to be operated on the login page. - case 401: - userStore.setToken(undefined); - errMessage = msg || t('sys.api.errMsg401'); - if (stp === SessionTimeoutProcessingEnum.PAGE_COVERAGE) { - userStore.setSessionTimeout(true); - } else { - userStore.logout(true); - } - break; - case 403: - errMessage = t('sys.api.errMsg403'); - break; - // 404请求不存在 - case 404: - errMessage = t('sys.api.errMsg404'); - break; - case 405: - errMessage = t('sys.api.errMsg405'); - break; - case 408: - errMessage = t('sys.api.errMsg408'); - break; - case 500: - errMessage = t('sys.api.errMsg500'); - break; - case 501: - errMessage = t('sys.api.errMsg501'); - break; - case 502: - errMessage = t('sys.api.errMsg502'); - break; - case 503: - errMessage = t('sys.api.errMsg503'); - break; - case 504: - errMessage = t('sys.api.errMsg504'); - break; - case 505: - errMessage = t('sys.api.errMsg505'); - break; - default: - } - - if (errMessage) { - if (errorMessageMode === 'modal') { - createErrorModal({ title: t('sys.api.errorTip'), content: errMessage }); - } else if (errorMessageMode === 'message') { - error({ content: errMessage, key: `global_error_message_status_${status}` }); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/helper.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/helper.ts deleted file mode 100644 index 30cc2b080..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/helper.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { isObject, isString } from '/@/utils/is'; - -const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'; - -export function joinTimestamp( - join: boolean, - restful: T, -): T extends true ? string : object; - -export function joinTimestamp(join: boolean, restful = false): string | object { - if (!join) { - return restful ? '' : {}; - } - const now = new Date().getTime(); - if (restful) { - return `?_t=${now}`; - } - return { _t: now }; -} - -/** - * @description: Format request parameter time - */ -export function formatRequestDate(params: Recordable) { - if (Object.prototype.toString.call(params) !== '[object Object]') { - return; - } - - for (const key in params) { - const format = params[key]?.format ?? null; - if (format && typeof format === 'function') { - params[key] = params[key].format(DATE_TIME_FORMAT); - } - if (isString(key)) { - const value = params[key]; - if (value) { - try { - params[key] = isString(value) ? value.trim() : value; - } catch (error: any) { - throw new Error(error); - } - } - } - if (isObject(params[key])) { - formatRequestDate(params[key]); - } - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/index.ts deleted file mode 100644 index 5be1a9049..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/http/axios/index.ts +++ /dev/null @@ -1,266 +0,0 @@ -// axios配置 可自行根据项目进行更改,只需更改该文件即可,其他文件可以不动 -// The axios configuration can be changed according to the project, just change the file, other files can be left unchanged - -import type { AxiosResponse } from 'axios'; -import { clone } from 'lodash-es'; -import type { RequestOptions, Result } from '/#/axios'; -import type { AxiosTransform, CreateAxiosOptions } from './axiosTransform'; -import { VAxios } from './Axios'; -import { checkStatus } from './checkStatus'; -import { useGlobSetting } from '/@/hooks/setting'; -import { useMessage } from '/@/hooks/web/useMessage'; -import { RequestEnum, ResultEnum, ContentTypeEnum } from '/@/enums/httpEnum'; -import { isString } from '/@/utils/is'; -import { getToken } from '/@/utils/auth'; -import { setObjToUrlParams, deepMerge } from '/@/utils'; -import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { joinTimestamp, formatRequestDate } from './helper'; -import { useUserStoreWithOut } from '/@/store/modules/user'; -import { AxiosRetry } from '/@/utils/http/axios/axiosRetry'; - -const globSetting = useGlobSetting(); -const urlPrefix = globSetting.urlPrefix; -const { createMessage, createErrorModal } = useMessage(); - -/** - * @description: 数据处理,方便区分多种处理方式 - */ -const transform: AxiosTransform = { - /** - * @description: 处理请求数据。如果数据不是预期格式,可直接抛出错误 - */ - transformRequestHook: (res: AxiosResponse, options: RequestOptions) => { - const { t } = useI18n(); - const { isTransformResponse, isReturnNativeResponse } = options; - // 是否返回原生响应头 比如:需要获取响应头时使用该属性 - if (isReturnNativeResponse) { - return res; - } - // 不进行任何处理,直接返回 - // 用于页面代码可能需要直接获取code,data,message这些信息时开启 - if (!isTransformResponse) { - return res.data; - } - // 错误的时候返回 - - const { data } = res; - if (!data) { - // return '[HTTP] Request has no return value'; - throw new Error(t('sys.api.apiRequestFailed')); - } - // 这里 code,result,message为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式 - const { code, result, message } = data; - - // 这里逻辑可以根据项目进行修改 - const hasSuccess = data && Reflect.has(data, 'code') && code === ResultEnum.SUCCESS; - if (hasSuccess) { - return result; - } - - // 在此处根据自己项目的实际情况对不同的code执行不同的操作 - // 如果不希望中断当前请求,请return数据,否则直接抛出异常即可 - let timeoutMsg = ''; - switch (code) { - case ResultEnum.TIMEOUT: - timeoutMsg = t('sys.api.timeoutMessage'); - const userStore = useUserStoreWithOut(); - userStore.setToken(undefined); - userStore.logout(true); - break; - default: - if (message) { - timeoutMsg = message; - } - } - - // errorMessageMode=‘modal’的时候会显示modal错误弹窗,而不是消息提示,用于一些比较重要的错误 - // errorMessageMode='none' 一般是调用时明确表示不希望自动弹出错误提示 - if (options.errorMessageMode === 'modal') { - createErrorModal({ title: t('sys.api.errorTip'), content: timeoutMsg }); - } else if (options.errorMessageMode === 'message') { - createMessage.error(timeoutMsg); - } - - throw new Error(timeoutMsg || t('sys.api.apiRequestFailed')); - }, - - // 请求之前处理config - beforeRequestHook: (config, options) => { - const { apiUrl, joinPrefix, joinParamsToUrl, formatDate, joinTime = true, urlPrefix } = options; - - if (joinPrefix) { - config.url = `${urlPrefix}${config.url}`; - } - - if (apiUrl && isString(apiUrl)) { - config.url = `${apiUrl}${config.url}`; - } - const params = config.params || {}; - const data = config.data || false; - formatDate && data && !isString(data) && formatRequestDate(data); - if (config.method?.toUpperCase() === RequestEnum.GET) { - if (!isString(params)) { - // 给 get 请求加上时间戳参数,避免从缓存中拿数据。 - config.params = Object.assign(params || {}, joinTimestamp(joinTime, false)); - } else { - // 兼容restful风格 - config.url = config.url + params + `${joinTimestamp(joinTime, true)}`; - config.params = undefined; - } - } else { - if (!isString(params)) { - formatDate && formatRequestDate(params); - if (Reflect.has(config, 'data') && config.data && Object.keys(config.data).length > 0) { - config.data = data; - config.params = params; - } else { - // 非GET请求如果没有提供data,则将params视为data - config.data = params; - config.params = undefined; - } - if (joinParamsToUrl) { - config.url = setObjToUrlParams( - config.url as string, - Object.assign({}, config.params, config.data), - ); - } - } else { - // 兼容restful风格 - config.url = config.url + params; - config.params = undefined; - } - } - return config; - }, - - /** - * @description: 请求拦截器处理 - */ - requestInterceptors: (config, options) => { - // 请求之前处理config - const token = getToken(); - if (token && (config as Recordable)?.requestOptions?.withToken !== false) { - // jwt token - (config as Recordable).headers.Authorization = options.authenticationScheme - ? `${options.authenticationScheme} ${token}` - : token; - } - return config; - }, - - /** - * @description: 响应拦截器处理 - */ - responseInterceptors: (res: AxiosResponse) => { - return res; - }, - - /** - * @description: 响应错误处理 - */ - responseInterceptorsCatch: (axiosInstance: AxiosResponse, error: any) => { - const { t } = useI18n(); - const errorLogStore = useErrorLogStoreWithOut(); - errorLogStore.addAjaxErrorInfo(error); - const { response, code, message, config } = error || {}; - const errorMessageMode = config?.requestOptions?.errorMessageMode || 'none'; - const msg: string = response?.data?.error?.message ?? ''; - const err: string = error?.toString?.() ?? ''; - let errMessage = ''; - - try { - if (code === 'ECONNABORTED' && message.indexOf('timeout') !== -1) { - errMessage = t('sys.api.apiTimeoutMessage'); - } - if (err?.includes('Network Error')) { - errMessage = t('sys.api.networkExceptionMsg'); - } - - if (errMessage) { - if (errorMessageMode === 'modal') { - createErrorModal({ title: t('sys.api.errorTip'), content: errMessage }); - } else if (errorMessageMode === 'message') { - createMessage.error(errMessage); - } - return Promise.reject(error); - } - } catch (error) { - throw new Error(error as unknown as string); - } - - checkStatus(error?.response?.status, msg, errorMessageMode); - - // 添加自动重试机制 保险起见 只针对GET请求 - const retryRequest = new AxiosRetry(); - const { isOpenRetry } = config.requestOptions.retryRequest; - config.method?.toUpperCase() === RequestEnum.GET && - isOpenRetry && - // @ts-ignore - retryRequest.retry(axiosInstance, error); - return Promise.reject(error); - }, -}; - -function createAxios(opt?: Partial) { - return new VAxios( - // 深度合并 - deepMerge( - { - // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#authentication_schemes - // authentication schemes,e.g: Bearer - // authenticationScheme: 'Bearer', - authenticationScheme: '', - timeout: 10 * 1000, - // 基础接口地址 - // baseURL: globSetting.apiUrl, - - headers: { 'Content-Type': ContentTypeEnum.JSON }, - // 如果是form-data格式 - // headers: { 'Content-Type': ContentTypeEnum.FORM_URLENCODED }, - // 数据处理方式 - transform: clone(transform), - // 配置项,下面的选项都可以在独立的接口请求中覆盖 - requestOptions: { - // 默认将prefix 添加到url - joinPrefix: true, - // 是否返回原生响应头 比如:需要获取响应头时使用该属性 - isReturnNativeResponse: false, - // 需要对返回数据进行处理 - isTransformResponse: true, - // post请求的时候添加参数到url - joinParamsToUrl: false, - // 格式化提交参数时间 - formatDate: true, - // 消息提示类型 - errorMessageMode: 'message', - // 接口地址 - apiUrl: globSetting.apiUrl, - // 接口拼接地址 - urlPrefix: urlPrefix, - // 是否加入时间戳 - joinTime: true, - // 忽略重复请求 - ignoreCancelToken: true, - // 是否携带token - withToken: true, - retryRequest: { - isOpenRetry: true, - count: 5, - waitTime: 100, - }, - }, - }, - opt || {}, - ), - ); -} -export const defHttp = createAxios(); - -// other api url -// export const otherHttp = createAxios({ -// requestOptions: { -// apiUrl: 'xxx', -// urlPrefix: 'xxx', -// }, -// }); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/index.ts deleted file mode 100644 index 78022c6ab..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/index.ts +++ /dev/null @@ -1,92 +0,0 @@ -import type { RouteLocationNormalized, RouteRecordNormalized } from 'vue-router'; -import type { App, Plugin } from 'vue'; - -import { unref } from 'vue'; -import { isObject } from '/@/utils/is'; - -export const noop = () => {}; - -/** - * @description: Set ui mount node - */ -export function getPopupContainer(node?: HTMLElement): HTMLElement { - return (node?.parentNode as HTMLElement) ?? document.body; -} - -/** - * Add the object as a parameter to the URL - * @param baseUrl url - * @param obj - * @returns {string} - * eg: - * let obj = {a: '3', b: '4'} - * setObjToUrlParams('www.baidu.com', obj) - * ==>www.baidu.com?a=3&b=4 - */ -export function setObjToUrlParams(baseUrl: string, obj: any): string { - let parameters = ''; - for (const key in obj) { - parameters += key + '=' + encodeURIComponent(obj[key]) + '&'; - } - parameters = parameters.replace(/&$/, ''); - return /\?$/.test(baseUrl) ? baseUrl + parameters : baseUrl.replace(/\/?$/, '?') + parameters; -} - -// 深度合并 -export function deepMerge(src: any = {}, target: any = {}): T { - let key: string; - for (key in target) { - src[key] = isObject(src[key]) ? deepMerge(src[key], target[key]) : (src[key] = target[key]); - } - return src; -} - -export function openWindow( - url: string, - opt?: { target?: TargetContext | string; noopener?: boolean; noreferrer?: boolean }, -) { - const { target = '__blank', noopener = true, noreferrer = true } = opt || {}; - const feature: string[] = []; - - noopener && feature.push('noopener=yes'); - noreferrer && feature.push('noreferrer=yes'); - - window.open(url, target, feature.join(',')); -} - -// dynamic use hook props -export function getDynamicProps(props: T): Partial { - const ret: Recordable = {}; - - Object.keys(props).map((key) => { - ret[key] = unref((props as Recordable)[key]); - }); - - return ret as Partial; -} - -export function getRawRoute(route: RouteLocationNormalized): RouteLocationNormalized { - if (!route) return route; - const { matched, ...opt } = route; - return { - ...opt, - matched: (matched - ? matched.map((item) => ({ - meta: item.meta, - name: item.name, - path: item.path, - })) - : undefined) as RouteRecordNormalized[], - }; -} - -export const withInstall = (component: T, alias?: string) => { - const comp = component as any; - comp.install = (app: App) => { - app.component(comp.name || comp.displayName, component); - if (alias) { - app.config.globalProperties[alias] = component; - } - }; - return component as T & Plugin; -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/is.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/is.ts deleted file mode 100644 index d71fd9b65..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/is.ts +++ /dev/null @@ -1,99 +0,0 @@ -const toString = Object.prototype.toString; - -export function is(val: unknown, type: string) { - return toString.call(val) === `[object ${type}]`; -} - -export function isDef(val?: T): val is T { - return typeof val !== 'undefined'; -} - -export function isUnDef(val?: T): val is T { - return !isDef(val); -} - -export function isObject(val: any): val is Record { - return val !== null && is(val, 'Object'); -} - -export function isEmpty(val: T): val is T { - if (isArray(val) || isString(val)) { - return val.length === 0; - } - - if (val instanceof Map || val instanceof Set) { - return val.size === 0; - } - - if (isObject(val)) { - return Object.keys(val).length === 0; - } - - return false; -} - -export function isDate(val: unknown): val is Date { - return is(val, 'Date'); -} - -export function isNull(val: unknown): val is null { - return val === null; -} - -export function isNullAndUnDef(val: unknown): val is null | undefined { - return isUnDef(val) && isNull(val); -} - -export function isNullOrUnDef(val: unknown): val is null | undefined { - return isUnDef(val) || isNull(val); -} - -export function isNumber(val: unknown): val is number { - return is(val, 'Number'); -} - -export function isPromise(val: unknown): val is Promise { - return is(val, 'Promise') && isObject(val) && isFunction(val.then) && isFunction(val.catch); -} - -export function isString(val: unknown): val is string { - return is(val, 'String'); -} - -export function isFunction(val: unknown): val is Function { - return typeof val === 'function'; -} - -export function isBoolean(val: unknown): val is boolean { - return is(val, 'Boolean'); -} - -export function isRegExp(val: unknown): val is RegExp { - return is(val, 'RegExp'); -} - -export function isArray(val: any): val is Array { - return val && Array.isArray(val); -} - -export function isWindow(val: any): val is Window { - return typeof window !== 'undefined' && is(val, 'Window'); -} - -export function isElement(val: unknown): val is Element { - return isObject(val) && !!val.tagName; -} - -export function isMap(val: unknown): val is Map { - return is(val, 'Map'); -} - -export const isServer = typeof window === 'undefined'; - -export const isClient = !isServer; - -export function isUrl(path: string): boolean { - const reg = - /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/; - return reg.test(path); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/lib/echarts.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/lib/echarts.ts deleted file mode 100644 index e1f95cd38..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/lib/echarts.ts +++ /dev/null @@ -1,57 +0,0 @@ -import * as echarts from 'echarts/core'; - -import { - BarChart, - LineChart, - PieChart, - MapChart, - PictorialBarChart, - RadarChart, - ScatterChart, -} from 'echarts/charts'; - -import { - TitleComponent, - TooltipComponent, - GridComponent, - PolarComponent, - AriaComponent, - ParallelComponent, - LegendComponent, - RadarComponent, - ToolboxComponent, - DataZoomComponent, - VisualMapComponent, - TimelineComponent, - CalendarComponent, - GraphicComponent, -} from 'echarts/components'; - -import { SVGRenderer } from 'echarts/renderers'; - -echarts.use([ - LegendComponent, - TitleComponent, - TooltipComponent, - GridComponent, - PolarComponent, - AriaComponent, - ParallelComponent, - BarChart, - LineChart, - PieChart, - MapChart, - RadarChart, - SVGRenderer, - PictorialBarChart, - RadarComponent, - ToolboxComponent, - DataZoomComponent, - VisualMapComponent, - TimelineComponent, - CalendarComponent, - GraphicComponent, - ScatterChart, -]); - -export default echarts; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/log.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/log.ts deleted file mode 100644 index 8f7980012..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/log.ts +++ /dev/null @@ -1,9 +0,0 @@ -const projectName = import.meta.env.VITE_GLOB_APP_TITLE; - -export function warn(message: string) { - console.warn(`[${projectName} warn]:${message}`); -} - -export function error(message: string) { - throw new Error(`[${projectName} error]:${message}`); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/mitt.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/mitt.ts deleted file mode 100644 index 4b15bbabe..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/mitt.ts +++ /dev/null @@ -1,101 +0,0 @@ -/** - * copy to https://github.com/developit/mitt - * Expand clear method - */ - -export type EventType = string | symbol; - -// An event handler can take an optional event argument -// and should not return a value -export type Handler = (event?: T) => void; -export type WildcardHandler = (type: EventType, event?: any) => void; - -// An array of all currently registered event handlers for a type -export type EventHandlerList = Array; -export type WildCardEventHandlerList = Array; - -// A map of event types and their corresponding event handlers. -export type EventHandlerMap = Map; - -export interface Emitter { - all: EventHandlerMap; - - on(type: EventType, handler: Handler): void; - on(type: '*', handler: WildcardHandler): void; - - off(type: EventType, handler: Handler): void; - off(type: '*', handler: WildcardHandler): void; - - emit(type: EventType, event?: T): void; - emit(type: '*', event?: any): void; - clear(): void; -} - -/** - * Mitt: Tiny (~200b) functional event emitter / pubsub. - * @name mitt - * @returns {Mitt} - */ -export default function mitt(all?: EventHandlerMap): Emitter { - all = all || new Map(); - - return { - /** - * A Map of event names to registered handler functions. - */ - all, - - /** - * Register an event handler for the given type. - * @param {string|symbol} type Type of event to listen for, or `"*"` for all events - * @param {Function} handler Function to call in response to given event - * @memberOf mitt - */ - on(type: EventType, handler: Handler) { - const handlers = all?.get(type); - const added = handlers && handlers.push(handler); - if (!added) { - all?.set(type, [handler]); - } - }, - - /** - * Remove an event handler for the given type. - * @param {string|symbol} type Type of event to unregister `handler` from, or `"*"` - * @param {Function} handler Handler function to remove - * @memberOf mitt - */ - off(type: EventType, handler: Handler) { - const handlers = all?.get(type); - if (handlers) { - handlers.splice(handlers.indexOf(handler) >>> 0, 1); - } - }, - - /** - * Invoke all handlers for the given type. - * If present, `"*"` handlers are invoked after type-matched handlers. - * - * Note: Manually firing "*" handlers is not supported. - * - * @param {string|symbol} type The event type to invoke - * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler - * @memberOf mitt - */ - emit(type: EventType, evt: T) { - ((all?.get(type) || []) as EventHandlerList).slice().map((handler) => { - handler(evt); - }); - ((all?.get('*') || []) as WildCardEventHandlerList).slice().map((handler) => { - handler(type, evt); - }); - }, - - /** - * Clear all - */ - clear() { - this.all.clear(); - }, - }; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/propTypes.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/propTypes.ts deleted file mode 100644 index a5b0a47a4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/propTypes.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { CSSProperties, VNodeChild } from 'vue'; -import { createTypes, VueTypeValidableDef, VueTypesInterface } from 'vue-types'; - -export type VueNode = VNodeChild | JSX.Element; - -type PropTypes = VueTypesInterface & { - readonly style: VueTypeValidableDef; - readonly VNodeChild: VueTypeValidableDef; - // readonly trueBool: VueTypeValidableDef; -}; - -const propTypes = createTypes({ - func: undefined, - bool: undefined, - string: undefined, - number: undefined, - object: undefined, - integer: undefined, -}) as PropTypes; - -propTypes.extend([ - { - name: 'style', - getter: true, - type: [String, Object], - default: undefined, - }, - { - name: 'VNodeChild', - getter: true, - type: undefined, - }, -]); -export { propTypes }; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/props.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/props.ts deleted file mode 100644 index 729c9ef40..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/props.ts +++ /dev/null @@ -1,185 +0,0 @@ -// copy from element-plus - -import { warn } from 'vue'; -import { isObject } from '@vue/shared'; -import { fromPairs } from 'lodash-es'; -import type { ExtractPropTypes, PropType } from '@vue/runtime-core'; -import type { Mutable } from './types'; - -const wrapperKey = Symbol(); -export type PropWrapper = { [wrapperKey]: T }; - -export const propKey = Symbol(); - -type ResolveProp = ExtractPropTypes<{ - key: { type: T; required: true }; -}>['key']; -type ResolvePropType = ResolveProp extends { type: infer V } ? V : ResolveProp; -type ResolvePropTypeWithReadonly = Readonly extends Readonly> - ? ResolvePropType - : ResolvePropType; - -type IfUnknown = [unknown] extends [T] ? V : T; - -export type BuildPropOption, R, V, C> = { - type?: T; - values?: readonly V[]; - required?: R; - default?: R extends true - ? never - : D extends Record | Array - ? () => D - : (() => D) | D; - validator?: ((val: any) => val is C) | ((val: any) => boolean); -}; - -type _BuildPropType = - | (T extends PropWrapper - ? T[typeof wrapperKey] - : [V] extends [never] - ? ResolvePropTypeWithReadonly - : never) - | V - | C; -export type BuildPropType = _BuildPropType< - IfUnknown, - IfUnknown, - IfUnknown ->; - -type _BuildPropDefault = [T] extends [ - // eslint-disable-next-line @typescript-eslint/ban-types - Record | Array | Function, -] - ? D - : D extends () => T - ? ReturnType - : D; - -export type BuildPropDefault = R extends true - ? { readonly default?: undefined } - : { - readonly default: Exclude extends never - ? undefined - : Exclude<_BuildPropDefault, undefined>; - }; -export type BuildPropReturn = { - readonly type: PropType>; - readonly required: IfUnknown; - readonly validator: ((val: unknown) => boolean) | undefined; - [propKey]: true; -} & BuildPropDefault, IfUnknown, IfUnknown>; - -/** - * @description Build prop. It can better optimize prop types - * @description 生成 prop,能更好地优化类型 - * @example - // limited options - // the type will be PropType<'light' | 'dark'> - buildProp({ - type: String, - values: ['light', 'dark'], - } as const) - * @example - // limited options and other types - // the type will be PropType<'small' | 'medium' | number> - buildProp({ - type: [String, Number], - values: ['small', 'medium'], - validator: (val: unknown): val is number => typeof val === 'number', - } as const) - @link see more: https://github.com/element-plus/element-plus/pull/3341 - */ -export function buildProp< - T = never, - D extends BuildPropType = never, - R extends boolean = false, - V = never, - C = never, ->(option: BuildPropOption, key?: string): BuildPropReturn { - // filter native prop type and nested prop, e.g `null`, `undefined` (from `buildProps`) - if (!isObject(option) || !!option[propKey]) return option as any; - - const { values, required, default: defaultValue, type, validator } = option; - - const _validator = - values || validator - ? (val: unknown) => { - let valid = false; - let allowedValues: unknown[] = []; - - if (values) { - allowedValues = [...values, defaultValue]; - valid ||= allowedValues.includes(val); - } - if (validator) valid ||= validator(val); - - if (!valid && allowedValues.length > 0) { - const allowValuesText = [...new Set(allowedValues)] - .map((value) => JSON.stringify(value)) - .join(', '); - warn( - `Invalid prop: validation failed${ - key ? ` for prop "${key}"` : '' - }. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`, - ); - } - return valid; - } - : undefined; - - return { - type: - typeof type === 'object' && Object.getOwnPropertySymbols(type).includes(wrapperKey) - ? type[wrapperKey] - : type, - required: !!required, - default: defaultValue, - validator: _validator, - [propKey]: true, - } as unknown as BuildPropReturn; -} - -type NativePropType = [((...args: any) => any) | { new (...args: any): any } | undefined | null]; - -export const buildProps = < - O extends { - [K in keyof O]: O[K] extends BuildPropReturn - ? O[K] - : [O[K]] extends NativePropType - ? O[K] - : O[K] extends BuildPropOption - ? D extends BuildPropType - ? BuildPropOption - : never - : never; - }, ->( - props: O, -) => - fromPairs( - Object.entries(props).map(([key, option]) => [key, buildProp(option as any, key)]), - ) as unknown as { - [K in keyof O]: O[K] extends { [propKey]: boolean } - ? O[K] - : [O[K]] extends NativePropType - ? O[K] - : O[K] extends BuildPropOption< - infer T, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - infer _D, - infer R, - infer V, - infer C - > - ? BuildPropReturn - : never; - }; - -export const definePropType = (val: any) => ({ [wrapperKey]: val } as PropWrapper); - -export const keyOf = (arr: T) => Object.keys(arr) as Array; -export const mutable = >(val: T) => - val as Mutable; - -export const componentSize = ['large', 'medium', 'small', 'mini'] as const; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/types.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/types.ts deleted file mode 100644 index 4453ec4ab..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/types.ts +++ /dev/null @@ -1,42 +0,0 @@ -// copy from element-plus - -import type { CSSProperties, Plugin } from 'vue'; - -type OptionalKeys> = { - [K in keyof T]: T extends Record ? never : K; -}[keyof T]; - -type RequiredKeys> = Exclude>; - -type MonoArgEmitter = (evt: K, arg?: T[K]) => void; - -type BiArgEmitter = (evt: K, arg: T[K]) => void; - -export type EventEmitter> = MonoArgEmitter> & - BiArgEmitter>; - -export type AnyFunction = (...args: any[]) => T; - -export type PartialReturnType unknown> = Partial>; - -export type SFCWithInstall = T & Plugin; - -export type Nullable = T | null; - -export type RefElement = Nullable; - -export type CustomizedHTMLElement = HTMLElement & T; - -export type Indexable = { - [key: string]: T; -}; - -export type Hash = Indexable; - -export type TimeoutHandle = ReturnType; - -export type ComponentSize = 'large' | 'medium' | 'small' | 'mini'; - -export type StyleValue = string | CSSProperties | Array; - -export type Mutable = { -readonly [P in keyof T]: T[P] }; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/uuid.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/uuid.ts deleted file mode 100644 index 548bcf398..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/utils/uuid.ts +++ /dev/null @@ -1,28 +0,0 @@ -const hexList: string[] = []; -for (let i = 0; i <= 15; i++) { - hexList[i] = i.toString(16); -} - -export function buildUUID(): string { - let uuid = ''; - for (let i = 1; i <= 36; i++) { - if (i === 9 || i === 14 || i === 19 || i === 24) { - uuid += '-'; - } else if (i === 15) { - uuid += 4; - } else if (i === 20) { - uuid += hexList[(Math.random() * 4) | 8]; - } else { - uuid += hexList[(Math.random() * 16) | 0]; - } - } - return uuid.replace(/-/g, ''); -} - -let unique = 0; -export function buildShortUUID(prefix = ''): string { - const time = Date.now(); - const random = Math.floor(Math.random() * 1000000000); - unique++; - return prefix + '_' + random + unique + String(time); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/auditLog/AuditLog.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/auditLog/AuditLog.ts deleted file mode 100644 index 50640e4f3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/auditLog/AuditLog.ts +++ /dev/null @@ -1,155 +0,0 @@ -import { FormSchema } from '/@/components/Table'; -import { BasicColumn } from '/@/components/Table'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { formatToDateTime, dateUtil } from '/@/utils/dateUtil'; -const { t } = useI18n(); -import { AuditLogsServiceProxy, PagingAuditLogInput } from '/@/services/ServiceProxies'; - -export const searchFormSchema: FormSchema[] = [ - { - field: 'userName', - label: t('routes.admin.userManagement_userName'), - component: 'Input', - colProps: { span: 3 }, - }, - { - field: 'time', - component: 'RangePicker', - label: t('routes.admin.audit_executeTime'), - colProps: { - span: 4, - }, - defaultValue: [dateUtil().subtract(7, 'days'), dateUtil().add(1, 'days')], - }, - { - field: 'hasException', - label: t('routes.admin.audit_hasException'), - component: 'Select', - colProps: { span: 2 }, - componentProps: () => { - return { - options: [ - { label: t('routes.admin.audit_hasException_all'), value: null }, - { label: t('routes.admin.audit_hasException_yes'), value: true }, - { label: t('routes.admin.audit_hasException_no'), value: false }, - ], - }; - }, - }, - { - field: 'correlationId', - label: 'CorrelationId', - labelWidth: 95, - component: 'Input', - colProps: { span: 4 }, - }, - { - field: 'url', - label: 'Url', - component: 'Input', - colProps: { span: 4 }, - }, -]; - -export const tableColumns: BasicColumn[] = [ - { - title: 'Url', - dataIndex: 'url', - width: 350, - align: 'left', - }, - { - title: t('routes.admin.tenant'), - dataIndex: 'tenantName', - width: 100, - }, - { - title: t('routes.admin.userManagement_userName'), - dataIndex: 'userName', - width: 100, - }, - { - title: t('routes.admin.executionTime'), - dataIndex: 'executionTime', - customRender: ({ text }) => { - return formatToDateTime(text); - }, - width: 150, - sorter: true, - }, - { - title: t('routes.admin.executionDuration'), - dataIndex: 'executionDuration', - width: 120, - }, - { - title: t('routes.admin.audit_ipAddress'), - dataIndex: 'clientIpAddress', - width: 150, - }, - { - title: 'CorrelationId', - dataIndex: 'correlationId', - width: 280, - }, - { - title: t('routes.admin.executionMessage'), - dataIndex: 'exceptions', - customRender: ({ text }) => { - if (text) { - return text.toString().substring(0, 300); - } - }, - }, -]; - -/** - * 分页列表 - * @param params - * @returns - */ -export async function getTableListAsync(params: PagingAuditLogInput) { - const _auditLogsServiceProxy = new AuditLogsServiceProxy(); - return _auditLogsServiceProxy.page(params); -} - -export function httpStatusCodeColor(statusCode?: number) { - if (!statusCode) { - return ''; - } - if (statusCode >= 200 && statusCode < 300) { - return '#87d068'; - } - if (statusCode >= 300 && statusCode < 400) { - return '#108ee9'; - } - if (statusCode >= 400 && statusCode < 500) { - return 'orange'; - } - if (statusCode >= 500) { - return 'red'; - } - return 'cyan'; -} - -export function httpMethodColor(method?: string) { - if (method == 'GET') { - return 'blue'; - } - if (method == 'POST') { - return 'blue'; - } - if (method == 'PUT') { - return 'orange'; - } - if (method == 'DELETE') { - return 'red'; - } - if (method == 'OPTIONS') { - return 'cyan'; - } - if (method == 'PATCH') { - return 'pink'; - } - return 'cyan'; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/auditLog/AuditLog.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/auditLog/AuditLog.vue deleted file mode 100644 index 59e5e8770..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/auditLog/AuditLog.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/auditLog/AuditLogDetail.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/auditLog/AuditLogDetail.vue deleted file mode 100644 index 49da72617..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/auditLog/AuditLogDetail.vue +++ /dev/null @@ -1,23 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/AbpDictionary.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/AbpDictionary.ts deleted file mode 100644 index c39f7abdb..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/AbpDictionary.ts +++ /dev/null @@ -1,418 +0,0 @@ -import { FormSchema } from '/@/components/Table'; -import { BasicColumn } from '/@/components/Table'; -import { message } from 'ant-design-vue'; -import { useI18n } from '/@/hooks/web/useI18n'; -import { - PagingDataDictionaryInput, - DataDictionaryServiceProxy, - SetDataDictinaryDetailInput, - DeleteDataDictionaryDetailInput, - IdInput, -} from '/@/services/ServiceProxies'; -import { h } from 'vue'; -import { Switch } from 'ant-design-vue'; - -const { t } = useI18n(); -export const tableColumns: BasicColumn[] = [ - { - title: t('routes.admin.dictionaryCode'), - dataIndex: 'code', - }, - { - title: t('routes.admin.dictionaryDisplayText'), - dataIndex: 'displayText', - }, - { - title: t('routes.admin.dictionaryOrder'), - dataIndex: 'order', - }, - { - title: t('common.status'), - dataIndex: 'isEnabled', - customRender: ({ record }) => { - return h(Switch, { - checked: record.isEnabled, - checkedChildren: '是', - unCheckedChildren: '否', - onChange(checked: boolean) { - const request = new SetDataDictinaryDetailInput(); - request.dataDictionaryId = record.dataDictionaryId; - request.dataDictionayDetailId = record.id; - request.isEnabled = checked; - enableDictionaryAsync(request) - .then(() => { - record.isEnabled = checked; - message.success(t('common.operationSuccess')); - }) - .catch(() => { - message.error(t('common.operationFail')); - }); - }, - }); - }, - }, - { - dataIndex: 'description', - title: t('routes.admin.dictionaryDescription'), - }, -]; -//字典类型表格 -export const dictionaryTypeTableColumns: BasicColumn[] = [ - { - title: t('routes.admin.dictionaryCode') + '|' + t('routes.admin.dictionaryDisplayText'), - dataIndex: 'text', - align: 'left', - }, -]; -//字典项查询 -export const searchFormSchema: FormSchema[] = [ - { - field: 'filter', - label: '', - component: 'Input', - colProps: { - span: 6, - }, - }, -]; - -//字典类型查询 -export const searchDictionaryFormSchema: FormSchema[] = [ - { - field: 'filter', - label: '', - component: 'Input', - colProps: { - span: 18, - }, - }, -]; - -//新增字典项 -export const createFormSchema: FormSchema[] = [ - { - field: 'id', - label: '', - ifShow: false, - component: 'Input', - colProps: { - span: 18, - }, - }, - { - field: 'typeDisplayText', - label: t('routes.admin.dictionaryTypeName'), - component: 'Input', - colProps: { - span: 18, - }, - componentProps: { - disabled: true, - }, - }, - { - field: 'code', - label: t('routes.admin.dictionaryCode'), - required: true, - component: 'Input', - colProps: { - span: 18, - }, - }, - { - field: 'displayText', - label: t('routes.admin.dictionaryDisplayText'), - component: 'Input', - required: true, - colProps: { - span: 18, - }, - }, - { - field: 'order', - label: t('routes.admin.dictionaryOrder'), - required: true, - component: 'InputNumber', - colProps: { - span: 18, - }, - dynamicRules: () => { - return [ - { - required: true, - validator: (_, value) => { - const regNull = /^[1-9]\d*$/; - if (regNull.test(value)) { - return Promise.resolve(); - } - return Promise.reject(t('routes.admin.nonZeroMessage')); - }, - }, - ]; - }, - }, - { - field: 'description', - label: t('routes.admin.dictionaryDescription'), - component: 'InputTextArea', - colProps: { - span: 18, - }, - }, -]; -//编辑字典项 -export const editFormSchema: FormSchema[] = [ - { - field: 'dataDictionaryId', - label: '', - ifShow: false, - component: 'Input', - colProps: { - span: 18, - }, - }, - { - field: 'id', - label: '', - ifShow: false, - component: 'Input', - colProps: { - span: 18, - }, - }, - { - field: 'code', - label: t('routes.admin.dictionaryCode'), - required: true, - component: 'Input', - colProps: { - span: 18, - }, - componentProps: { - disabled: true, - }, - }, - { - field: 'displayText', - label: t('routes.admin.dictionaryDisplayText'), - component: 'Input', - required: true, - colProps: { - span: 18, - }, - }, - { - field: 'order', - label: t('routes.admin.dictionaryOrder'), - required: true, - component: 'InputNumber', - colProps: { - span: 18, - }, - dynamicRules: () => { - return [ - { - required: true, - validator: (_, value) => { - const regNull = /^[1-9]\d*$/; - if (regNull.test(value)) { - return Promise.resolve(); - } - return Promise.reject(t('routes.admin.nonZeroMessage')); - }, - }, - ]; - }, - }, - { - field: 'description', - label: t('routes.admin.dictionaryDescription'), - component: 'InputTextArea', - colProps: { - span: 18, - }, - }, -]; -//新增字典类型 -export const createDictionaryTypeFormSchema: FormSchema[] = [ - { - field: 'code', - label: t('routes.admin.dictionaryCode'), - component: 'Input', - required: true, - colProps: { - span: 22, - }, - }, - { - field: 'displayText', - label: t('routes.admin.dictionaryDisplayText'), - component: 'Input', - required: true, - colProps: { - span: 22, - }, - }, - { - field: 'description', - label: t('routes.admin.dictionaryDescription'), - component: 'InputTextArea', - colProps: { - span: 22, - }, - }, -]; -//编辑字典类型 -export const editDictionaryTypeFormSchema: FormSchema[] = [ - { - field: 'code', - label: t('routes.admin.dictionaryCode'), - component: 'Input', - required: true, - colProps: { - span: 22, - }, - componentProps: { - disabled: true, - }, - }, - { - field: 'displayText', - label: t('routes.admin.dictionaryDisplayText'), - component: 'Input', - required: true, - colProps: { - span: 22, - }, - }, - { - field: 'description', - label: t('routes.admin.dictionaryDescription'), - component: 'InputTextArea', - colProps: { - span: 22, - }, - }, - { - field: 'key', - label: '', - ifShow: false, - component: 'Input', - colProps: { - span: 18, - }, - }, - { - field: 'id', - label: '', - ifShow: false, - component: 'Input', - colProps: { - span: 18, - }, - }, -]; - -/** - *获取字典类型表格 - * - * @export - * @return {*} - */ -export async function getDictionaryTypeAsync(params: PagingDataDictionaryInput) { - const _dataDictionaryServiceProxy = new DataDictionaryServiceProxy(); - return await _dataDictionaryServiceProxy.page(params); -} - -//新建字典类型 -export async function createDictionaryTypeAsync({ - request, - changeOkLoading, - closeModal, - validate, - resetFields, -}) { - changeOkLoading(true); - await validate(); - const _dataDictionaryServiceProxy = new DataDictionaryServiceProxy(); - await _dataDictionaryServiceProxy.create(request); - message.success(t('common.operationSuccess')); - resetFields(); - changeOkLoading(false); - closeModal(); -} - -//编辑数据字典类型 -export async function editDictionaryTypeAsync({ request, changeOkLoading, validate, closeModal }) { - changeOkLoading(true); - await validate(); - const _dataDictionaryServiceProxy = new DataDictionaryServiceProxy(); - await _dataDictionaryServiceProxy.update(request); - message.success(t('common.operationSuccess')); - changeOkLoading(false); - closeModal(); -} - -//启用|禁用详情字典 -export async function enableDictionaryAsync(input: SetDataDictinaryDetailInput) { - const _dataDictionaryServiceProxy = new DataDictionaryServiceProxy(); - await _dataDictionaryServiceProxy.status(input); -} - -//创建数据详情字典 -export async function createDetailsDictionaryAsync({ - request, - changeOkLoading, - validate, - resetFields, - closeModal, -}) { - changeOkLoading(true); - await validate(); - const _dataDictionaryServiceProxy = new DataDictionaryServiceProxy(); - await _dataDictionaryServiceProxy.createDetail(request); - message.success(t('common.operationSuccess')); - resetFields(); - changeOkLoading(false); - closeModal(); -} - -//分页获取数据字典详情 -export async function getDictionaryDetailsAsync({ params }) { - const _dataDictionaryServiceProxy = new DataDictionaryServiceProxy(); - - return await _dataDictionaryServiceProxy.pageDetail(params); -} - -//编辑数据字典 -export async function editDetailsDictionaryAsync({ - request, - changeOkLoading, - validate, - closeModal, -}) { - changeOkLoading(true); - await validate(); - const _dataDictionaryServiceProxy = new DataDictionaryServiceProxy(); - await _dataDictionaryServiceProxy.updateDetail(request); - message.success(t('common.operationSuccess')); - changeOkLoading(false); - closeModal(); -} - -export async function deleteDetailAsync({ dataDictionaryId, dataDictionaryDetailId, reload }) { - const _dataDictionaryServiceProxy = new DataDictionaryServiceProxy(); - const request = new DeleteDataDictionaryDetailInput(); - request.dataDictionaryId = dataDictionaryId; - request.dataDictionayDetailId = dataDictionaryDetailId; - await _dataDictionaryServiceProxy.delete(request); - reload(); -} - -export async function deleteDictionaryTypeAsync({ id, reloadType }) { - const _dataDictionaryServiceProxy = new DataDictionaryServiceProxy(); - const request = new IdInput(); - request.id = id; - await _dataDictionaryServiceProxy.deleteDataDictionaryType(request); - reloadType(); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/AbpDictionary.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/AbpDictionary.vue deleted file mode 100644 index 195ad2043..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/AbpDictionary.vue +++ /dev/null @@ -1,272 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/CreateAbpDictionary.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/CreateAbpDictionary.vue deleted file mode 100644 index 6c1b963a8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/CreateAbpDictionary.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/CreateAbpDictionaryType.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/CreateAbpDictionaryType.vue deleted file mode 100644 index 4375d7f27..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/CreateAbpDictionaryType.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/EditAbpDictionary.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/EditAbpDictionary.vue deleted file mode 100644 index 6f183fd65..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/EditAbpDictionary.vue +++ /dev/null @@ -1,74 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/EditAbpDictionaryType.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/EditAbpDictionaryType.vue deleted file mode 100644 index 1a5c4c854..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/dictionary/EditAbpDictionaryType.vue +++ /dev/null @@ -1,73 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/identitySecurityLog/Index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/identitySecurityLog/Index.ts deleted file mode 100644 index 19b72d1af..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/identitySecurityLog/Index.ts +++ /dev/null @@ -1,80 +0,0 @@ -import {FormSchema} from '/src/components/Table'; -import {BasicColumn} from '/src/components/Table'; -import {useI18n} from '/src/hooks/web/useI18n'; -import { formatToDateTime, dateUtil } from '/src/utils/dateUtil'; -const {t} = useI18n(); -import { - IdentitySecurityLogsServiceProxy, - PageIdentitySecurityLogInput, -} from '/src/services/ServiceProxies'; - -// 分页表格登录日志 BasicColumn -export const tableColumns: BasicColumn[] = [ - { - title: t('routes.admin.identitySecurityLog_ApplicationName'), - dataIndex: 'applicationName', - }, - { - title: t('routes.admin.identitySecurityLog_Identity'), - dataIndex: 'identity', - }, - { - title: t('routes.admin.identitySecurityLog_Action'), - dataIndex: 'action', - }, - { - title: t('routes.admin.identitySecurityLog_UserName'), - dataIndex: 'userName', - }, - { - title: t('routes.admin.identitySecurityLog_CorrelationId'), - dataIndex: 'correlationId', - }, - { - title: t('routes.admin.identitySecurityLog_ClientIpAddress'), - dataIndex: 'clientIpAddress', - }, - { - title: t('routes.admin.identitySecurityLog_CreationTime'), - dataIndex: 'creationTime', - customRender: ({ text }) => { - return formatToDateTime(text); - }, - }, -]; - -// 分页查询登录日志 FormSchema -export const searchFormSchema: FormSchema[] = [ - { - field: 'time', - component: 'RangePicker', - label: t('routes.admin.audit_executeTime'), - colProps: { - span: 4, - }, - defaultValue: [dateUtil().subtract(7, 'days'), dateUtil().add(1, 'days')], - }, - { - field: 'userName', - label: t('routes.admin.identitySecurityLog_UserName'), - component: 'Input', - colProps: { span: 3 }, - }, - { - field: 'correlationId', - label: 'CorrelationId', - labelWidth: 95, - component: 'Input', - colProps: { span: 4 }, - } -]; - - -/** - * 分页查询登录日志 - */ -export async function pageAsync(params: PageIdentitySecurityLogInput, -) { - const identitySecurityLogServiceProxy = new IdentitySecurityLogsServiceProxy(); - return identitySecurityLogServiceProxy.page(params); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/identitySecurityLog/Index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/identitySecurityLog/Index.vue deleted file mode 100644 index b069f8a6e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/identitySecurityLog/Index.vue +++ /dev/null @@ -1,46 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/CreateLanguage.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/CreateLanguage.vue deleted file mode 100644 index 1114c4e66..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/CreateLanguage.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/Index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/Index.ts deleted file mode 100644 index 4e6bfd229..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/Index.ts +++ /dev/null @@ -1,160 +0,0 @@ -import { FormSchema } from '/@/components/Table'; -import { BasicColumn } from '/@/components/Table'; -import { - LanguagesServiceProxy, - DeleteLanguageInput, - PageLanguageInput, -} from '/@/services/ServiceProxies'; -import { useI18n } from '/@/hooks/web/useI18n'; - -const { t } = useI18n(); -// 分页表格语言 BasicColumn -export const tableColumns: BasicColumn[] = [ - { - title: t('routes.admin.language_cultureName'), - dataIndex: 'cultureName', - }, - { - title: t('routes.admin.language_uiCultureName'), - dataIndex: 'uiCultureName', - }, - { - title: t('routes.admin.language_displayName'), - dataIndex: 'displayName', - }, - { - title: t('routes.admin.language_flagIcon'), - dataIndex: 'flagIcon', - }, - { - title: t('common.isEnabled'), - dataIndex: 'isEnabled', - }, -]; - -// 分页查询语言 FormSchema -export const searchFormSchema: FormSchema[] = [ - { - field: 'filter', - label: t('common.key'), - component: 'Input', - colProps: { span: 8 }, - }, -]; - -// 创建语言 FormSchema -export const createFormSchema: FormSchema[] = [ - { - field: 'cultureName', - label: t('routes.admin.language_cultureName'), - component: 'Input', - required: true, - colProps: { span: 18 }, - }, - { - field: 'uiCultureName', - label: t('routes.admin.language_uiCultureName'), - component: 'Input', - required: true, - colProps: { span: 18 }, - }, - { - field: 'displayName', - label: t('routes.admin.language_displayName'), - component: 'Input', - required: true, - colProps: { span: 18 }, - }, - { - field: 'isEnabled', - label: t('common.isEnabled'), - component: 'Switch', - colProps: { span: 18 }, - }, - { - field: 'flagIcon', - label: t('routes.admin.language_flagIcon'), - component: 'Input', - required: false, - colProps: { span: 18 }, - }, -]; - -// 编辑语言 FormSchema -export const updateFormSchema: FormSchema[] = [ - { - field: 'id', - label: 'Id', - component: 'Input', - ifShow: false, - colProps: { span: 18 }, - }, - { - field: 'cultureName', - label: t('routes.admin.language_cultureName'), - component: 'Input', - required: true, - colProps: { span: 18 }, - }, - { - field: 'uiCultureName', - label: t('routes.admin.language_uiCultureName'), - component: 'Input', - required: true, - colProps: { span: 18 }, - }, - { - field: 'displayName', - label: t('routes.admin.language_displayName'), - component: 'Input', - required: true, - colProps: { span: 18 }, - }, - { - field: 'isEnabled', - label: t('common.isEnabled'), - component: 'Switch', - colProps: { span: 18 }, - }, - { - field: 'flagIcon', - label: t('routes.admin.language_flagIcon'), - component: 'Input', - required: false, - colProps: { span: 18 }, - }, -]; - -/** - * 分页查询语言 - */ -export async function pageAsync(params: PageLanguageInput) { - const languageServiceProxy = new LanguagesServiceProxy(); - return languageServiceProxy.page(params); -} - -/** - * 创建语言 - */ -export async function createAsync({ params }) { - const languageServiceProxy = new LanguagesServiceProxy(); - await languageServiceProxy.create(params); -} - -/** - * 更新语言 - */ -export async function updateAsync({ params }) { - const languageServiceProxy = new LanguagesServiceProxy(); - await languageServiceProxy.update(params); -} - -/** - * 删除语言 - */ -export async function deleteAsync({ id }) { - const languageServiceProxy = new LanguagesServiceProxy(); - const request = new DeleteLanguageInput(); - request.id = id; - await languageServiceProxy.delete(request); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/Index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/Index.vue deleted file mode 100644 index 37f8c7c8e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/Index.vue +++ /dev/null @@ -1,132 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/UpdateLanguage.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/UpdateLanguage.vue deleted file mode 100644 index c90ab1f7e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/language/UpdateLanguage.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/CreateLanguageText.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/CreateLanguageText.vue deleted file mode 100644 index d9069c80d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/CreateLanguageText.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/Index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/Index.ts deleted file mode 100644 index eb83b16a7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/Index.ts +++ /dev/null @@ -1,201 +0,0 @@ -import { FormSchema } from '/@/components/Table'; -import { BasicColumn } from '/@/components/Table'; -import { - LanguageTextsServiceProxy, - PageLanguageTextInput, - LanguagesServiceProxy, -} from '/@/services/ServiceProxies'; -import { useI18n } from '/@/hooks/web/useI18n'; -const { t } = useI18n(); -// 分页表格语言文本 BasicColumn -export const tableColumns: BasicColumn[] = [ - { - title: t('common.name'), - dataIndex: 'name', - }, - { - title: t('common.value'), - dataIndex: 'value', - }, - { - title: t('routes.admin.languageTexts_resourceName'), - dataIndex: 'resourceName', - }, -]; - -// 分页查询语言文本 FormSchema -export const searchFormSchema: FormSchema[] = [ - { - field: 'cultureName', - label: t('routes.admin.language_cultureName'), - labelWidth: 120, - component: 'ApiSelect', - defaultValue: 'zh-Hans', - colProps: { span: 4 }, - componentProps: () => { - return { - api: getLanguageAsync, - labelField: 'displayName', - valueField: 'cultureName', - showSearch: true, - optionFilterProp: 'label', - }; - }, - }, - { - field: 'resourceName', - label: t('routes.admin.languageTexts_resourceName'), - labelWidth: 120, - component: 'ApiSelect', - colProps: { span: 4 }, - componentProps: () => { - return { - api: getResourceAsync, - showSearch: true, - optionFilterProp: 'label', - }; - }, - }, - { - field: 'filter', - label: t('common.key'), - component: 'Input', - colProps: { span: 6 }, - }, -]; - -// 创建语言文本 FormSchema -export const createFormSchema: FormSchema[] = [ - { - field: 'cultureName', - label: t('routes.admin.language_cultureName'), - component: 'ApiSelect', - required: true, - colProps: { span: 18 }, - componentProps: () => { - return { - api: getLanguageAsync, - labelField: 'displayName', - valueField: 'cultureName', - showSearch: true, - optionFilterProp: 'label', - }; - }, - }, - { - field: 'resourceName', - label: t('routes.admin.languageTexts_resourceName'), - component: 'ApiSelect', - required: true, - colProps: { span: 18 }, - componentProps: () => { - return { - api: getResourceAsync, - showSearch: true, - optionFilterProp: 'label', - }; - }, - }, - { - field: 'name', - label: t('common.name'), - component: 'Input', - required: true, - colProps: { span: 18 }, - }, - { - field: 'value', - label: t('common.value'), - component: 'Input', - required: true, - colProps: { span: 18 }, - }, -]; - -// 编辑语言文本 FormSchema -export const updateFormSchema: FormSchema[] = [ - { - field: 'cultureName', - label: t('routes.admin.language_cultureName'), - component: 'ApiSelect', - required: true, - colProps: { span: 18 }, - componentProps: () => { - return { - api: getLanguageAsync, - labelField: 'displayName', - valueField: 'cultureName', - showSearch: true, - optionFilterProp: 'label', - }; - }, - }, - { - field: 'resourceName', - label: t('routes.admin.languageTexts_resourceName'), - component: 'ApiSelect', - required: true, - colProps: { span: 18 }, - componentProps: () => { - return { - api: getResourceAsync, - showSearch: true, - optionFilterProp: 'label', - }; - }, - }, - { - field: 'name', - label: t('common.name'), - component: 'Input', - required: true, - colProps: { span: 18 }, - }, - { - field: 'value', - label: t('common.value'), - component: 'Input', - required: true, - colProps: { span: 18 }, - }, -]; - -/** - * 查询语言 - */ -export async function getLanguageAsync() { - const languagesServiceProxy = new LanguagesServiceProxy(); - return languagesServiceProxy.all(); -} - -/** - * 查询资源 - */ -export async function getResourceAsync() { - const languageTextServiceProxy = new LanguageTextsServiceProxy(); - return languageTextServiceProxy.allResource(); -} - -/** - * 分页查询语言文本 - */ -export async function pageAsync(params: PageLanguageTextInput) { - const languageTextServiceProxy = new LanguageTextsServiceProxy(); - return languageTextServiceProxy.page(params); -} - -/** - * 创建语言文本 - */ -export async function createAsync({ params }) { - const languageTextServiceProxy = new LanguageTextsServiceProxy(); - await languageTextServiceProxy.create(params); -} - -/** - * 更新语言文本 - */ -export async function updateAsync({ params }) { - const languageTextServiceProxy = new LanguageTextsServiceProxy(); - await languageTextServiceProxy.update(params); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/Index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/Index.vue deleted file mode 100644 index 7a0ccecad..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/Index.vue +++ /dev/null @@ -1,106 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/UpdateLanguageText.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/UpdateLanguageText.vue deleted file mode 100644 index bee8a4724..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/languageText/UpdateLanguageText.vue +++ /dev/null @@ -1,63 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/AddRoleToOrganizationUnit.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/AddRoleToOrganizationUnit.vue deleted file mode 100644 index 4611f3d86..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/AddRoleToOrganizationUnit.vue +++ /dev/null @@ -1,103 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/AddUserToOrganizationUnit.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/AddUserToOrganizationUnit.vue deleted file mode 100644 index f1a3dac8e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/AddUserToOrganizationUnit.vue +++ /dev/null @@ -1,110 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/CreateOrganizationUnit.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/CreateOrganizationUnit.vue deleted file mode 100644 index 11998c077..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/CreateOrganizationUnit.vue +++ /dev/null @@ -1,89 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/EditOrganizationUnit.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/EditOrganizationUnit.vue deleted file mode 100644 index e90d8e66c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/EditOrganizationUnit.vue +++ /dev/null @@ -1,75 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/OrganizationUnit.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/OrganizationUnit.ts deleted file mode 100644 index 07755a204..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/OrganizationUnit.ts +++ /dev/null @@ -1,236 +0,0 @@ -import { - OrganizationUnitsServiceProxy, - IdInput, - GetOrganizationUnitUserInput, - GetOrganizationUnitRoleInput, - RemoveUserToOrganizationUnitInput, - RemoveRoleToOrganizationUnitInput, - AddRoleToOrganizationUnitInput, - AddUserToOrganizationUnitInput, - GetUnAddRoleInput, - GetUnAddUserInput -} from "/@/services/ServiceProxies"; -import { FormSchema } from "/@/components/Table"; -import { BasicColumn } from "/@/components/Table"; -import { useI18n } from "/@/hooks/web/useI18n"; - -const { t } = useI18n(); - -export const createOrganizationUnitFormSchema: FormSchema[] = [ - { - field: "parentDisplayName", - label: t("routes.admin.parentOrganizationUnitName"), - component: "Input", - componentProps: { - disabled: true - }, - colProps: { - span: 18 - } - }, - { - field: "displayName", - label: t("routes.admin.organizationUnitName"), - component: "Input", - colProps: { - span: 18 - } - }, - { - field: "parentId", - label: "", - component: "Input", - colProps: { - span: 18 - }, - ifShow: false - } -]; - -export const editOrganizationUnitFormSchema: FormSchema[] = [ - { - field: "displayName", - label: t("routes.admin.organizationUnitName"), - component: "Input", - colProps: { - span: 18 - } - }, - { - field: "id", - label: "", - component: "Input", - colProps: { - span: 18 - }, - ifShow: false - } -]; -export const addRoleToOrganizationUnitFormSchema: FormSchema[] = [ - { - field: "displayName", - label: t("routes.admin.organizationUnitName"), - component: "Input", - colProps: { - span: 18 - } - }, - { - field: "organizationUnitId", - label: "", - component: "Input", - colProps: { - span: 18 - }, - ifShow: false - } -]; -export const userTableColumns: BasicColumn[] = [ - { - title: t("routes.admin.userManagement_userName"), - dataIndex: "userName" - }, - { - title: t("routes.admin.userManagement_email"), - dataIndex: "email" - } -]; - -export const addUserTableColumns: BasicColumn[] = [ - { - title: t("routes.admin.userManagement_userName"), - dataIndex: "userName" - }, - { - title: t("routes.admin.userManagement_email"), - dataIndex: "email" - } -]; - -export const roleTableColumns: BasicColumn[] = [ - { - title: t("routes.admin.userManagement_roleName"), - dataIndex: "name" - } -]; -export const addRoleTableColumns: BasicColumn[] = [ - { - title: t("routes.admin.userManagement_roleName"), - dataIndex: "name" - } -]; -export const searchAddRoleFormSchema: FormSchema[] = [ - { - field: "filter", - label: t("routes.admin.userManagement_roleName"), - component: "Input", - colProps: { span: 8 } - }, - { - field: "organizationUnitId", - label: "", - component: "Input", - ifShow: false, - colProps: { span: 8 } - } -]; - -export const searchUserFormSchema: FormSchema[] = [ - { - field: "filter", - label: t("routes.admin.userManagement_userName"), - component: "Input", - colProps: { span: 10 } - }, - { - field: "organizationUnitId", - label: "", - component: "Input", - ifShow: false, - colProps: { span: 8 } - } -]; - -export async function getTreeAsync() { - const _organizationUnitsServiceProxy = new OrganizationUnitsServiceProxy(); - return await _organizationUnitsServiceProxy.tree(); -} - -export async function deleteTreeNodeAsync({ id }) { - const _organizationUnitsServiceProxy = new OrganizationUnitsServiceProxy(); - const request = new IdInput(); - request.id = id; - return await _organizationUnitsServiceProxy.delete(request); -} - -export async function createOrganizationUnitAsync({ - request, - changeOkLoading, - closeModal, - validate, - resetFields -}) { - changeOkLoading(true); - await validate(); - const _organizationUnitsServiceProxy = new OrganizationUnitsServiceProxy(); - await _organizationUnitsServiceProxy.create(request); - resetFields(); - changeOkLoading(false); - closeModal(); -} - -export async function editOrganizationUnitAsync({ - request, - changeOkLoading, - closeModal, - validate -}) { - changeOkLoading(true); - await validate(); - const _organizationUnitsServiceProxy = new OrganizationUnitsServiceProxy(); - await _organizationUnitsServiceProxy.update(request); - changeOkLoading(false); - closeModal(); -} - -export async function getUserTableListAsync(params: GetOrganizationUnitUserInput) { - const _organizationUnitsServiceProxy = new OrganizationUnitsServiceProxy(); - return _organizationUnitsServiceProxy.getUsers(params); -} - -export async function getRoleTableListAsync(params: GetOrganizationUnitRoleInput) { - const _organizationUnitsServiceProxy = new OrganizationUnitsServiceProxy(); - return _organizationUnitsServiceProxy.getRoles(params); -} - - -export async function removeUserFromOrganizationUnitAsync(params: RemoveUserToOrganizationUnitInput) { - const _organizationUnitsServiceProxy = new OrganizationUnitsServiceProxy(); - return _organizationUnitsServiceProxy.removeUserFromOrganizationUnit(params); -} - -export async function removeRoleFromOrganizationUnitAsync(params: RemoveRoleToOrganizationUnitInput) { - const _organizationUnitsServiceProxy = new OrganizationUnitsServiceProxy(); - return _organizationUnitsServiceProxy.removeRoleFromOrganizationUnit(params); -} - -export async function addRoleToOrganizationUnitAsync(params: AddRoleToOrganizationUnitInput) { - const _organizationUnitsServiceProxy = new OrganizationUnitsServiceProxy(); - return _organizationUnitsServiceProxy.addRoleToOrganizationUnit(params); -} - -export async function addUserToOrganizationUnitAsync(params: AddUserToOrganizationUnitInput) { - const _organizationUnitsServiceProxy = new OrganizationUnitsServiceProxy(); - return _organizationUnitsServiceProxy.addUserToOrganizationUnit(params); -} - -export async function GetUnAddUserAsync(params: GetUnAddUserInput) { - const _organizationUnitsServiceProxy = new OrganizationUnitsServiceProxy(); - return _organizationUnitsServiceProxy.getUnAddUsers(params); -} - - -export async function getUnAddRolesAsync(params: GetUnAddRoleInput) { - const _organizationUnitsServiceProxy = new OrganizationUnitsServiceProxy(); - return _organizationUnitsServiceProxy.getUnAddRoles(params); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/OrganizationUnit.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/OrganizationUnit.vue deleted file mode 100644 index cd6f06233..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/organizationUnits/OrganizationUnit.vue +++ /dev/null @@ -1,363 +0,0 @@ - - - - \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/AbpRole.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/AbpRole.ts deleted file mode 100644 index a901ae149..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/AbpRole.ts +++ /dev/null @@ -1,188 +0,0 @@ -import { FormSchema } from "/@/components/Table"; -import { BasicColumn } from "/@/components/Table"; -import { - RolesServiceProxy, - PagingRoleListInput, - IdentityRoleDtoPagedResultDto, - IdentityRoleCreateDto, - PermissionsServiceProxy, - IdInput, - GetPermissionInput -} from "/@/services/ServiceProxies"; -import { message } from "ant-design-vue"; -import { useLoading } from "/@/components/Loading"; - -import { useI18n } from "/@/hooks/web/useI18n"; - -const { t } = useI18n(); -const [openFullLoading, closeFullLoading] = useLoading({ - tip: "Loading..." -}); -export const tableColumns: BasicColumn[] = [ - { - title: t("routes.admin.userManagement_roleName"), - dataIndex: "name" - }, - { - title: t("routes.admin.roleManagement_default"), - dataIndex: "isDefault" - } -]; - -export const searchFormSchema: FormSchema[] = [ - { - field: "filter", - label: t("routes.admin.userManagement_roleName"), - component: "Input", - colProps: { span: 8 } - } -]; - -export const createFormSchema: FormSchema[] = [ - { - field: "name", - label: t("routes.admin.userManagement_roleName"), - component: "Input", - required: true, - colProps: { span: 18 } - }, - { - field: "isDefault", - component: "RadioGroup", - label: t("routes.admin.roleManagement_default"), - required: true, - colProps: { - span: 18 - }, - defaultValue: "0", - componentProps: { - options: [ - { - label: t("common.true"), - value: "1" - }, - { - label: t("common.false"), - value: "0" - } - ] - } - } -]; - -export const editFormSchema: FormSchema[] = [ - { - field: "name", - label: t("routes.admin.userManagement_roleName"), - component: "Input", - required: true, - colProps: { span: 18 } - }, - { - field: "isDefault", - component: "RadioGroup", - label: t("routes.admin.roleManagement_default"), - required: true, - colProps: { - span: 18 - }, - componentProps: { - options: [ - { - label: t("common.true"), - value: "1" - }, - { - label: t("common.false"), - value: "0" - } - ] - } - } -]; - -/** - * 分页列表 - * @param params - * @returns - */ -export async function getTableListAsync(params: PagingRoleListInput): Promise { - const _roleServiceProxy = new RolesServiceProxy(); - return _roleServiceProxy.page(params); -} - -/** - * 删除角色 - * @param param0 - */ -export async function deleteRoleAsync({ roleId, reload }) { - try { - const _roleServiceProxy = new RolesServiceProxy(); - openFullLoading(); - const request = new IdInput(); - request.id = roleId; - await _roleServiceProxy.delete(request); - closeFullLoading(); - message.success(t("common.operationSuccess")); - reload(); - } catch (error) { - closeFullLoading(); - } -} - -/** - * 创建角色 - * @param param0 - */ -export async function createRoleAsync({ request, changeOkLoading, validate, closeModal }) { - changeOkLoading(true); - await validate(); - let requestBody: IdentityRoleCreateDto = new IdentityRoleCreateDto(); - requestBody.name = request.name; - request.isDefault == "1" ? (requestBody.isDefault = true) : (requestBody.isDefault = false); - const _roleServiceProxy = new RolesServiceProxy(); - await _roleServiceProxy.create(requestBody); - changeOkLoading(false); - message.success(t("common.operationSuccess")); - closeModal(); -} - -/** - * 获取角色权限 - * @param roleName - * @returns - */ -export async function getRolePermissionAsync(roleName: string) { - const _permissionsServiceProxy = new PermissionsServiceProxy(); - const request = new GetPermissionInput(); - request.providerName = "R"; - request.providerKey = roleName; - return await _permissionsServiceProxy.tree(request); -} - -/** - * 编辑角色权限 - * @param param0 - */ -export async function updateRolePermissionAsync({ request, closeDrawer, setDrawerProps }) { - setDrawerProps({ loading: true }); - const _permissionsServiceProxy = new PermissionsServiceProxy(); - await _permissionsServiceProxy.update(request); - setDrawerProps({ loading: false }); - //message.success(t('common.operationSuccess')); - closeDrawer(); -} - -/** - * 编辑角色 - * @param param0 - */ -export async function updateRoleAsync({ request, changeOkLoading, validate, closeModal }) { - await validate(); - changeOkLoading(true); - const _roleServiceProxy = new RolesServiceProxy(); - await _roleServiceProxy.update(request); - changeOkLoading(false); - closeModal(); -} - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/AbpRole.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/AbpRole.vue deleted file mode 100644 index 963b9f735..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/AbpRole.vue +++ /dev/null @@ -1,167 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/CreateAbpRole.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/CreateAbpRole.vue deleted file mode 100644 index a29cb405e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/CreateAbpRole.vue +++ /dev/null @@ -1,68 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/EditAbpRole.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/EditAbpRole.vue deleted file mode 100644 index 4ac782cc3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/EditAbpRole.vue +++ /dev/null @@ -1,79 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/PermissionAbpRole.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/PermissionAbpRole.vue deleted file mode 100644 index 17c89c1a6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/roles/PermissionAbpRole.vue +++ /dev/null @@ -1,144 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/settings/Setting.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/settings/Setting.ts deleted file mode 100644 index 2238f9091..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/settings/Setting.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { SettingsServiceProxy } from "/@/services/ServiceProxies"; - -/** - * 获取所有settings - * @returns - */ -export async function getAllSettingsAsync() { - const _settingsServiceProxy = new SettingsServiceProxy(); - return _settingsServiceProxy.all(); -} - -export async function updateSettingsAsync({ request }) { - const _settingsServiceProxy = new SettingsServiceProxy(); - - return _settingsServiceProxy.update(request); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/settings/Setting.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/settings/Setting.vue deleted file mode 100644 index d87d24776..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/settings/Setting.vue +++ /dev/null @@ -1,116 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/AbpUser.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/AbpUser.ts deleted file mode 100644 index fadfebf7d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/AbpUser.ts +++ /dev/null @@ -1,331 +0,0 @@ -import { FormSchema } from "/@/components/Table"; -import { BasicColumn } from "/@/components/Table"; -import { dateUtil } from '/@/utils/dateUtil'; -import { - PagingUserListInput, - UsersServiceProxy, - IdentityUserDtoPagedResultDto, - IdentityRoleDtoListResultDto, - RolesServiceProxy, - LockUserInput, - IdInput -} from "/@/services/ServiceProxies"; -import { message } from "ant-design-vue"; -import { useLoading } from "/@/components/Loading"; - -import { useI18n } from "/@/hooks/web/useI18n"; - -const { t } = useI18n(); -const [openFullLoading, closeFullLoading] = useLoading({ - tip: "Loading..." -}); - -export const tableColumns: BasicColumn[] = [ - { - title: t("routes.admin.userManagement_userName"), - dataIndex: "userName" - }, - { - title: t("routes.admin.userManagement_name"), - dataIndex: "name" - }, - - { - title: t("routes.admin.userManagement_email"), - dataIndex: "email" - }, - { - title: t("routes.admin.userManagement_phone"), - dataIndex: "phoneNumber" - }, - { - title: t("common.status"), - dataIndex: "isActive" - }, - { - title: t("routes.admin.userManagement_createTime"), - dataIndex: "creationTime", - customRender: ({ text }) => { - return dateUtil(text).format("YYYY-MM-DD HH:mm:ss"); - } - } -]; - -export const searchFormSchema: FormSchema[] = [ - { - field: "filter", - label: t("routes.admin.userManagement_userName"), - component: "Input", - colProps: { span: 8 } - } -]; - -export const createFormSchema: FormSchema[] = [ - { - field: "userName", - component: "Input", - label: t("routes.admin.userManagement_userName"), - labelWidth: 85, - required: true, - colProps: { - span: 12 - }, - componentProps: { - autocomplete: "off" - } - }, - { - field: "name", - component: "Input", - label: t("routes.admin.roleManagement_name"), - labelWidth: 130, - required: true, - colProps: { - span: 12 - }, - componentProps: { - autocomplete: "off" - } - }, - { - field: "email", - component: "Input", - label: t("routes.admin.userManagement_email"), - required: true, - labelWidth: 85, - colProps: { - span: 12 - } - }, - { - field: "phoneNumber", - component: "Input", - label: t("routes.admin.userManagement_phone"), - required: false, - labelWidth: 130, - colProps: { - span: 12 - } - }, - { - field: "password", - component: "InputPassword", - label: t("routes.admin.userManagement_password"), - required: true, - labelWidth: 85, - colProps: { - span: 12 - }, - componentProps: { - autocomplete: "off" - } - }, - { - field: "confirmPassword", - component: "InputPassword", - componentProps: { - autocomplete: "off" - }, - label: t("routes.admin.userManagement_confirm_password"), - required: true, - labelWidth: 130, - colProps: { - span: 12 - } - } -]; - -export const editFormSchema: FormSchema[] = [ - { - field: "userName", - component: "Input", - label: t("routes.admin.userManagement_userName"), - labelWidth: 85, - required: true, - colProps: { - span: 12 - }, - componentProps: { - autocomplete: "off", - disabled: true - } - }, - { - field: "name", - component: "Input", - label: t("routes.admin.userManagement_name"), - labelWidth: 130, - required: true, - colProps: { - span: 12 - } - }, - { - field: "email", - component: "Input", - label: t("routes.admin.userManagement_email"), - required: true, - labelWidth: 85, - colProps: { - span: 12 - } - }, - { - field: "phoneNumber", - component: "Input", - label: t("routes.admin.userManagement_phone"), - required: false, - labelWidth: 130, - colProps: { - span: 12 - } - }, - { - field: "password", - component: "InputPassword", - label: t("routes.admin.userManagement_password"), - required: false, - labelWidth: 85, - colProps: { - span: 12 - } - }, - { - field: "confirmPassword", - component: "InputPassword", - label: t("routes.admin.userManagement_confirm_password"), - required: false, - labelWidth: 130, - colProps: { - span: 12 - } - } -]; - -/** - * 分页列表 - * @param params - * @returns - */ -export async function getTableListAsync( - params: PagingUserListInput -): Promise { - const _userServiceProxy = new UsersServiceProxy(); - return _userServiceProxy.page(params); -} - -/** - * 导出列表 - * @param params - * @returns - */ -export function exportAsync({ request }) { - openFullLoading(); - const _userServiceProxy = new UsersServiceProxy(); - _userServiceProxy.export(request).then(res => { - const a = document.createElement("a"); - a.href = URL.createObjectURL(res.data); - a.download = "用户列表导出.xlsx"; - a.click(); - closeFullLoading(); - }); -} - -/** - * 获取用户角色 - * @param userId - * @returns - */ -export async function getRolesByUserIdAsync(userId: string): Promise { - const request = new IdInput(); - request.id = userId; - const _userServiceProxy = new UsersServiceProxy(); - return _userServiceProxy.role(request); -} - -/** - * 获取所有角色 - * @returns - */ -export async function getAllRoleAsync(): Promise { - const _roleServiceProxy = new RolesServiceProxy(); - return _roleServiceProxy.all(); -} - -/** - * 创建用户 - * @param param0 - */ -export async function createUserAsync({ - request, - changeOkLoading, - validate, - closeModal, - resetFields -}) { - changeOkLoading(true); - await validate(); - if (request.password != request.confirmPassword) { - message.error("两次密码输入不一致"); - throw new Error("两次密码输入不一致"); - } - const _userServiceProxy = new UsersServiceProxy(); - await _userServiceProxy.create(request); - changeOkLoading(false); - message.success(t("common.operationSuccess")); - resetFields(); - closeModal(); -} - -/** - * 删除用户 - * @param param0 - */ -export async function deleteUserAsync({ userId, reload }) { - try { - const _userServiceProxy = new UsersServiceProxy(); - openFullLoading(); - const request = new IdInput(); - request.id = userId; - await _userServiceProxy.delete(request); - closeFullLoading(); - message.success(t("common.operationSuccess")); - reload(); - } catch (error) { - closeFullLoading(); - } -} - -/** - * 编辑用户 - * @param param0 - */ -export async function updateUserAsync({ - request, - changeOkLoading, - validate, - closeModal, - resetFields -}) { - changeOkLoading(true); - await validate(); - - const _userServiceProxy = new UsersServiceProxy(); - await _userServiceProxy.update(request); - changeOkLoading(false); - resetFields(); - message.success(t("common.operationSuccess")); - closeModal(); -} - -/** - * 启用或者禁用用户 - * @param request - * @returns - */ -export async function lockUserAsync(request: LockUserInput): Promise { - const _userServiceProxy = new UsersServiceProxy(); - return _userServiceProxy.lock(request); -} - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/AbpUser.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/AbpUser.vue deleted file mode 100644 index 3a79dc651..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/AbpUser.vue +++ /dev/null @@ -1,181 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/CreateAbpUser.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/CreateAbpUser.vue deleted file mode 100644 index a0e4949b7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/CreateAbpUser.vue +++ /dev/null @@ -1,124 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/EditAbpUser.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/EditAbpUser.vue deleted file mode 100644 index c9a733ea0..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/admin/users/EditAbpUser.vue +++ /dev/null @@ -1,167 +0,0 @@ - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/GrowCard.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/GrowCard.vue deleted file mode 100644 index 9bc2ed904..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/GrowCard.vue +++ /dev/null @@ -1,34 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/SalesProductPie.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/SalesProductPie.vue deleted file mode 100644 index 6dc41fb5c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/SalesProductPie.vue +++ /dev/null @@ -1,63 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/SiteAnalysis.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/SiteAnalysis.vue deleted file mode 100644 index de0ebcf98..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/SiteAnalysis.vue +++ /dev/null @@ -1,38 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitAnalysis.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitAnalysis.vue deleted file mode 100644 index 142916672..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitAnalysis.vue +++ /dev/null @@ -1,106 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitAnalysisBar.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitAnalysisBar.vue deleted file mode 100644 index 4883d8785..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitAnalysisBar.vue +++ /dev/null @@ -1,58 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitRadar.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitRadar.vue deleted file mode 100644 index 4f3528774..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitRadar.vue +++ /dev/null @@ -1,100 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitSource.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitSource.vue deleted file mode 100644 index 7b8e32abd..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/VisitSource.vue +++ /dev/null @@ -1,80 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/props.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/props.ts deleted file mode 100644 index 86436506c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/components/props.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { PropType } from 'vue'; - -export interface BasicProps { - width: string; - height: string; -} -export const basicProps = { - width: { - type: String as PropType, - default: '100%', - }, - height: { - type: String as PropType, - default: '280px', - }, -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/data.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/data.ts deleted file mode 100644 index c5c28dd5f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/data.ts +++ /dev/null @@ -1,43 +0,0 @@ -export interface GrowCardItem { - icon: string; - title: string; - value: number; - total: number; - color: string; - action: string; -} - -export const growCardList: GrowCardItem[] = [ - { - title: '访问数', - icon: 'visit-count|svg', - value: 2000, - total: 120000, - color: 'green', - action: '月', - }, - { - title: '成交额', - icon: 'total-sales|svg', - value: 20000, - total: 500000, - color: 'blue', - action: '月', - }, - { - title: '下载数', - icon: 'download-count|svg', - value: 8000, - total: 120000, - color: 'orange', - action: '周', - }, - { - title: '成交数', - icon: 'transaction|svg', - value: 5000, - total: 50000, - color: 'purple', - action: '年', - }, -]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/index.vue deleted file mode 100644 index c35fa6903..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/analysis/index.vue +++ /dev/null @@ -1,25 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/DynamicInfo.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/DynamicInfo.vue deleted file mode 100644 index 4be8f1ff8..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/DynamicInfo.vue +++ /dev/null @@ -1,31 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/ProjectCard.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/ProjectCard.vue deleted file mode 100644 index 0957031e2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/ProjectCard.vue +++ /dev/null @@ -1,34 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/QuickNav.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/QuickNav.vue deleted file mode 100644 index 4e004d177..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/QuickNav.vue +++ /dev/null @@ -1,19 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/SaleRadar.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/SaleRadar.vue deleted file mode 100644 index 99965a70c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/SaleRadar.vue +++ /dev/null @@ -1,100 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/WorkbenchHeader.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/WorkbenchHeader.vue deleted file mode 100644 index ef4d90d79..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/WorkbenchHeader.vue +++ /dev/null @@ -1,33 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/data.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/data.ts deleted file mode 100644 index c7172c3cc..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/components/data.ts +++ /dev/null @@ -1,156 +0,0 @@ -interface GroupItem { - title: string; - icon: string; - color: string; - desc: string; - date: string; - group: string; -} - -interface NavItem { - title: string; - icon: string; - color: string; -} - -interface DynamicInfoItem { - avatar: string; - name: string; - date: string; - desc: string; -} - -export const navItems: NavItem[] = [ - { - title: '首页', - icon: 'ion:home-outline', - color: '#1fdaca', - }, - { - title: '仪表盘', - icon: 'ion:grid-outline', - color: '#bf0c2c', - }, - { - title: '组件', - icon: 'ion:layers-outline', - color: '#e18525', - }, - { - title: '系统管理', - icon: 'ion:settings-outline', - color: '#3fb27f', - }, - { - title: '权限管理', - icon: 'ion:key-outline', - color: '#4daf1bc9', - }, - { - title: '图表', - icon: 'ion:bar-chart-outline', - color: '#00d8ff', - }, -]; - -export const dynamicInfoItems: DynamicInfoItem[] = [ - { - avatar: 'dynamic-avatar-1|svg', - name: '威廉', - date: '刚刚', - desc: `在
开源组 创建了项目 Vue`, - }, - { - avatar: 'dynamic-avatar-2|svg', - name: '艾文', - date: '1个小时前', - desc: `关注了 威廉 `, - }, - { - avatar: 'dynamic-avatar-3|svg', - name: '克里斯', - date: '1天前', - desc: `发布了 个人动态 `, - }, - { - avatar: 'dynamic-avatar-4|svg', - name: 'Vben', - date: '2天前', - desc: `发表文章 如何编写一个Vite插件 `, - }, - { - avatar: 'dynamic-avatar-5|svg', - name: '皮特', - date: '3天前', - desc: `回复了 杰克 的问题 如何进行项目优化?`, - }, - { - avatar: 'dynamic-avatar-6|svg', - name: '杰克', - date: '1周前', - desc: `关闭了问题 如何运行项目 `, - }, - { - avatar: 'dynamic-avatar-1|svg', - name: '威廉', - date: '1周前', - desc: `发布了 个人动态 `, - }, - { - avatar: 'dynamic-avatar-1|svg', - name: '威廉', - date: '2021-04-01 20:00', - desc: `推送了代码到 Github`, - }, -]; - -export const groupItems: GroupItem[] = [ - { - title: 'Github', - icon: 'carbon:logo-github', - color: '', - desc: '不要等待机会,而要创造机会。', - group: '开源组', - date: '2021-04-01', - }, - { - title: 'Vue', - icon: 'ion:logo-vue', - color: '#3fb27f', - desc: '现在的你决定将来的你。', - group: '算法组', - date: '2021-04-01', - }, - { - title: 'Html5', - icon: 'ion:logo-html5', - color: '#e18525', - desc: '没有什么才能比努力更重要。', - group: '上班摸鱼', - date: '2021-04-01', - }, - { - title: 'Angular', - icon: 'ion:logo-angular', - color: '#bf0c2c', - desc: '热情和欲望可以突破一切难关。', - group: 'UI', - date: '2021-04-01', - }, - { - title: 'React', - icon: 'bx:bxl-react', - color: '#00d8ff', - desc: '健康的身体是实目标的基石。', - group: '技术牛', - date: '2021-04-01', - }, - { - title: 'Js', - icon: 'ion:logo-javascript', - color: '#4daf1bc9', - desc: '路是走出来的,而不是空想出来的。', - group: '架构组', - date: '2021-04-01', - }, -]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/index.vue deleted file mode 100644 index 5ee292e22..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/dashboard/workbench/index.vue +++ /dev/null @@ -1,36 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/about/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/about/index.vue deleted file mode 100644 index 1b2cf3725..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/about/index.vue +++ /dev/null @@ -1,98 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/exception/Exception.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/exception/Exception.vue deleted file mode 100644 index 6e56f086d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/exception/Exception.vue +++ /dev/null @@ -1,148 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/exception/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/exception/index.ts deleted file mode 100644 index 5002c4acb..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/exception/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Exception } from './Exception.vue'; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/iframe/FrameBlank.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/iframe/FrameBlank.vue deleted file mode 100644 index a8a61f50e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/iframe/FrameBlank.vue +++ /dev/null @@ -1,9 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/iframe/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/iframe/index.vue deleted file mode 100644 index fea0e7eea..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/iframe/index.vue +++ /dev/null @@ -1,90 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/lock/LockPage.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/lock/LockPage.vue deleted file mode 100644 index a2c7787a5..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/lock/LockPage.vue +++ /dev/null @@ -1,250 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/lock/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/lock/index.vue deleted file mode 100644 index e8c4d5525..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/lock/index.vue +++ /dev/null @@ -1,13 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/lock/useNow.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/lock/useNow.ts deleted file mode 100644 index e42a805b7..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/lock/useNow.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { dateUtil } from '/@/utils/dateUtil'; -import { reactive, toRefs } from 'vue'; -import { tryOnMounted, tryOnUnmounted } from '@vueuse/core'; - -export function useNow(immediate = true) { - let timer: IntervalHandle; - - const state = reactive({ - year: 0, - month: 0, - week: '', - day: 0, - hour: '', - minute: '', - second: 0, - meridiem: '', - }); - - const update = () => { - const now = dateUtil(); - - const h = now.format('HH'); - const m = now.format('mm'); - const s = now.get('s'); - - state.year = now.get('y'); - state.month = now.get('M') + 1; - state.week = '星期' + ['日', '一', '二', '三', '四', '五', '六'][now.day()]; - state.day = now.get('date'); - state.hour = h; - state.minute = m; - state.second = s; - - state.meridiem = now.format('A'); - }; - - function start() { - update(); - clearInterval(timer); - timer = setInterval(() => update(), 1000); - } - - function stop() { - clearInterval(timer); - } - - tryOnMounted(() => { - immediate && start(); - }); - - tryOnUnmounted(() => { - stop(); - }); - - return { - ...toRefs(state), - start, - stop, - }; -} \ No newline at end of file diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/ForgetPasswordForm.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/ForgetPasswordForm.vue deleted file mode 100644 index aca24aa41..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/ForgetPasswordForm.vue +++ /dev/null @@ -1,64 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/GithubOidcSignIn.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/GithubOidcSignIn.vue deleted file mode 100644 index 79a6507e2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/GithubOidcSignIn.vue +++ /dev/null @@ -1,46 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/Login.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/Login.vue deleted file mode 100644 index d6073ddae..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/Login.vue +++ /dev/null @@ -1,233 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/LoginForm.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/LoginForm.vue deleted file mode 100644 index 52cec8081..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/LoginForm.vue +++ /dev/null @@ -1,130 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/LoginFormTitle.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/LoginFormTitle.vue deleted file mode 100644 index 3a70c84b1..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/LoginFormTitle.vue +++ /dev/null @@ -1,26 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/MobileForm.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/MobileForm.vue deleted file mode 100644 index 27325bae2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/MobileForm.vue +++ /dev/null @@ -1,71 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/OidcSignIn.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/OidcSignIn.vue deleted file mode 100644 index a92efaf47..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/OidcSignIn.vue +++ /dev/null @@ -1,47 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/OidcSignOut.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/OidcSignOut.vue deleted file mode 100644 index 3dc5af77b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/OidcSignOut.vue +++ /dev/null @@ -1,39 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/QrCodeForm.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/QrCodeForm.vue deleted file mode 100644 index 680c07caf..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/QrCodeForm.vue +++ /dev/null @@ -1,31 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/RegisterForm.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/RegisterForm.vue deleted file mode 100644 index e70917e48..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/RegisterForm.vue +++ /dev/null @@ -1,104 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/SessionTimeoutLogin.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/SessionTimeoutLogin.vue deleted file mode 100644 index 871afc3fe..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/SessionTimeoutLogin.vue +++ /dev/null @@ -1,52 +0,0 @@ - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/TenantLoginForm.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/TenantLoginForm.vue deleted file mode 100644 index 54102b158..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/TenantLoginForm.vue +++ /dev/null @@ -1,106 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/useLogin.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/useLogin.ts deleted file mode 100644 index 8c1e20fe3..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/login/useLogin.ts +++ /dev/null @@ -1,157 +0,0 @@ -import type { ValidationRule } from 'ant-design-vue/lib/form/Form'; -import type { RuleObject } from 'ant-design-vue/lib/form/interface'; -import { ref, computed, unref, Ref } from 'vue'; -import { useI18n } from '/@/hooks/web/useI18n'; -import Oidc from 'oidc-client'; -import { useUserStore } from '/@/store/modules/user'; -export enum LoginStateEnum { - LOGIN, - REGISTER, - RESET_PASSWORD, - MOBILE, - QR_CODE, - TENANT, -} - -const currentState = ref(LoginStateEnum.LOGIN); - -export function useLoginState() { - function setLoginState(state: LoginStateEnum) { - currentState.value = state; - } - - const getLoginState = computed(() => currentState.value); - - function handleBackLogin() { - setLoginState(LoginStateEnum.LOGIN); - } - - return { setLoginState, getLoginState, handleBackLogin }; -} - -export function useFormValid(formRef: Ref) { - async function validForm() { - const form = unref(formRef); - if (!form) return; - const data = await form.validate(); - return data as T; - } - - return { validForm }; -} - -export function useFormRules(formData?: Recordable) { - const { t } = useI18n(); - - const getAccountFormRule = computed(() => createRule(t('sys.login.accountPlaceholder'))); - const getPasswordFormRule = computed(() => createRule(t('sys.login.passwordPlaceholder'))); - const getSmsFormRule = computed(() => createRule(t('sys.login.smsPlaceholder'))); - const getMobileFormRule = computed(() => createRule(t('sys.login.mobilePlaceholder'))); - const getTenantFormRule = computed(() => createRule(t('sys.login.tenantPlaceholder'))); - const validatePolicy = async (_: RuleObject, value: boolean) => { - return !value ? Promise.reject(t('sys.login.policyPlaceholder')) : Promise.resolve(); - }; - - const validateConfirmPassword = (password: string) => { - return async (_: RuleObject, value: string) => { - if (!value) { - return Promise.reject(t('sys.login.passwordPlaceholder')); - } - if (value !== password) { - return Promise.reject(t('sys.login.diffPwd')); - } - return Promise.resolve(); - }; - }; - - const getFormRules = computed((): { [k: string]: ValidationRule | ValidationRule[] } => { - const accountFormRule = unref(getAccountFormRule); - const passwordFormRule = unref(getPasswordFormRule); - const smsFormRule = unref(getSmsFormRule); - const mobileFormRule = unref(getMobileFormRule); - const tenantFormRule = unref(getTenantFormRule); - - const mobileRule = { - sms: smsFormRule, - mobile: mobileFormRule, - }; - - switch (unref(currentState)) { - // register form rules - case LoginStateEnum.REGISTER: - return { - account: accountFormRule, - password: passwordFormRule, - confirmPassword: [ - { validator: validateConfirmPassword(formData?.password), trigger: 'change' }, - ], - policy: [{ validator: validatePolicy, trigger: 'change' }], - ...mobileRule, - }; - - // reset password form rules - case LoginStateEnum.RESET_PASSWORD: - return { - account: accountFormRule, - ...mobileRule, - }; - - // mobile form rules - case LoginStateEnum.MOBILE: - return mobileRule; - case LoginStateEnum.TENANT: - return { - account: accountFormRule, - password: passwordFormRule, - tenant: tenantFormRule, - }; - // login form rules - default: - return { - account: accountFormRule, - password: passwordFormRule, - }; - } - }); - return { getFormRules }; -} - -function getOidcSettings() { - const { protocol, hostname, port } = window.location; - let currentHost = `${protocol}//${hostname}${port ? `:${port}` : ''}`; - const settings: any = { - authority: import.meta.env.VITE_AUTH_URL, - client_id: 'Vue3', - redirect_uri: currentHost + '/oidcSignIn', - post_logout_redirect_uri: currentHost + '/oidcSignOut', - response_type: `id_token token`, - scope: 'openid email profile', - //silent_redirect_uri: currentHost + '/oidc-silent-renew', - automaticSilentRenew: true, // If true oidc-client will try to renew your token when it is about to expire - automaticSilentSignin: true, // If true vuex-oidc will try to silently signin unauthenticated users on public routes. Defaults to true - }; - return settings; -} - -export function useOidcLogin() { - const settings = getOidcSettings(); - const mgr = new Oidc.UserManager(settings); - mgr.signinRedirect(); -} - -export async function useOidcLogout() { - const settings = getOidcSettings(); - const mgr = new Oidc.UserManager(settings); - const userStore = useUserStore(); - await mgr.signoutRedirect({ id_token_hint: userStore.userInfo?.idToken }); -} - -function createRule(message: string) { - return [ - { - required: true, - message, - trigger: 'change', - }, - ]; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/redirect/index.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/redirect/index.vue deleted file mode 100644 index 7aa54635f..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/sys/redirect/index.vue +++ /dev/null @@ -1,30 +0,0 @@ - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/CreateTenant.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/CreateTenant.vue deleted file mode 100644 index b0f244936..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/CreateTenant.vue +++ /dev/null @@ -1,63 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/EditConnectionString.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/EditConnectionString.vue deleted file mode 100644 index 3189a0333..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/EditConnectionString.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/EditTenant.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/EditTenant.vue deleted file mode 100644 index 6db3e009e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/EditTenant.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/Tenant.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/Tenant.ts deleted file mode 100644 index 24207d18e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/Tenant.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { FormSchema } from '/@/components/Table'; -import { BasicColumn } from '/@/components/Table'; -import { useI18n } from '/@/hooks/web/useI18n'; -const { t } = useI18n(); -import { TenantsServiceProxy, PagingTenantInput, IdInput } from '/@/services/ServiceProxies'; -export const searchFormSchema: FormSchema[] = [ - { - field: 'filter', - component: 'Input', - label: t('common.key'), - labelWidth: 80, - colProps: { - span: 6, - }, - }, -]; -export const tableColumns: BasicColumn[] = [ - { - title: t('routes.tenant.name'), - dataIndex: 'name', - }, -]; - -export const createFormSchema: FormSchema[] = [ - { - field: 'name', - label: t('routes.tenant.name'), - component: 'Input', - required: true, - labelWidth: 150, - colProps: { span: 20 }, - }, - { - field: 'adminEmailAddress', - label: t('routes.tenant.adminEmailAddress'), - component: 'Input', - required: true, - labelWidth: 150, - colProps: { span: 20 }, - }, - { - field: 'adminPassword', - label: t('routes.tenant.adminPassword'), - component: 'InputPassword', - required: true, - labelWidth: 150, - colProps: { span: 20 }, - }, -]; -export const editFormSchema: FormSchema[] = [ - { - field: 'id', - label: 'Id', - component: 'Input', - required: true, - labelWidth: 150, - show: false, - colProps: { span: 20 }, - }, - { - field: 'name', - label: t('routes.tenant.name'), - component: 'Input', - required: true, - labelWidth: 150, - colProps: { span: 20 }, - }, -]; -export const updateConnectionStringFormSchema: FormSchema[] = [ - { - field: 'id', - label: 'Id', - component: 'Input', - required: true, - labelWidth: 150, - show: false, - colProps: { span: 20 }, - }, - { - field: 'connectionString', - label: t('routes.tenant.connectionString'), - component: 'Input', - labelWidth: 150, - colProps: { span: 20 }, - }, -]; -export async function getTenantListAsync(request: PagingTenantInput) { - const _tenantsServiceProxy = new TenantsServiceProxy(); - return await _tenantsServiceProxy.page(request); -} -export async function createTenantAsync({ request, changeOkLoading, validate, closeModal }) { - changeOkLoading(true); - await validate(); - const _tenantsServiceProxy = new TenantsServiceProxy(); - await _tenantsServiceProxy.create(request); - changeOkLoading(false); - closeModal(); -} - -export async function updateTenantAsync({ request, changeOkLoading, validate, closeModal }) { - changeOkLoading(true); - await validate(); - const _tenantsServiceProxy = new TenantsServiceProxy(); - await _tenantsServiceProxy.update(request); - changeOkLoading(false); - closeModal(); -} - -export async function deleteTenantAsync({ id }) { - const _tenantsServiceProxy = new TenantsServiceProxy(); - let request = new IdInput(); - request.id = id; - await _tenantsServiceProxy.delete(request); -} -export async function getConnectionStringAsync({ id }) { - const _tenantsServiceProxy = new TenantsServiceProxy(); - let request = new IdInput(); - request.id = id; - return await _tenantsServiceProxy.getConnectionString(request); -} -export async function updateConnectionStringAsync({ request }) { - const _tenantsServiceProxy = new TenantsServiceProxy(); - return await _tenantsServiceProxy.updateConnectionString(request); -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/Tenant.vue b/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/Tenant.vue deleted file mode 100644 index 1d6a619fe..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/src/views/tenants/Tenant.vue +++ /dev/null @@ -1,153 +0,0 @@ - - - - - diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/stylelint.config.js b/templates/abp-vnext-pro-nuget-simplify/vben28/stylelint.config.js deleted file mode 100644 index 4b3501d84..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/stylelint.config.js +++ /dev/null @@ -1,100 +0,0 @@ -module.exports = { - root: true, - plugins: ['stylelint-order'], - extends: ['stylelint-config-standard', 'stylelint-config-prettier'], - customSyntax: 'postcss-html', - rules: { - 'function-no-unknown': null, - 'selector-class-pattern': null, - 'selector-pseudo-class-no-unknown': [ - true, - { - ignorePseudoClasses: ['global'], - }, - ], - 'selector-pseudo-element-no-unknown': [ - true, - { - ignorePseudoElements: ['v-deep'], - }, - ], - 'at-rule-no-unknown': [ - true, - { - ignoreAtRules: [ - 'tailwind', - 'apply', - 'variants', - 'responsive', - 'screen', - 'function', - 'if', - 'each', - 'include', - 'mixin', - ], - }, - ], - 'no-empty-source': null, - 'string-quotes': null, - 'named-grid-areas-no-invalid': null, - 'unicode-bom': 'never', - 'no-descending-specificity': null, - 'font-family-no-missing-generic-family-keyword': null, - 'declaration-colon-space-after': 'always-single-line', - 'declaration-colon-space-before': 'never', - // 'declaration-block-trailing-semicolon': 'always', - 'rule-empty-line-before': [ - 'always', - { - ignore: ['after-comment', 'first-nested'], - }, - ], - 'unit-no-unknown': [true, { ignoreUnits: ['rpx'] }], - 'order/order': [ - [ - 'dollar-variables', - 'custom-properties', - 'at-rules', - 'declarations', - { - type: 'at-rule', - name: 'supports', - }, - { - type: 'at-rule', - name: 'media', - }, - 'rules', - ], - { severity: 'warning' }, - ], - }, - ignoreFiles: ['**/*.js', '**/*.jsx', '**/*.tsx', '**/*.ts'], - overrides: [ - { - files: ['*.vue', '**/*.vue', '*.html', '**/*.html'], - extends: ['stylelint-config-recommended'], - rules: { - 'keyframes-name-pattern': null, - 'selector-pseudo-class-no-unknown': [ - true, - { - ignorePseudoClasses: ['deep', 'global'], - }, - ], - 'selector-pseudo-element-no-unknown': [ - true, - { - ignorePseudoElements: ['v-deep', 'v-global', 'v-slotted'], - }, - ], - }, - }, - { - files: ['*.less', '**/*.less'], - customSyntax: 'postcss-less', - extends: ['stylelint-config-standard', 'stylelint-config-recommended-vue'], - }, - ], -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/README.md b/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/README.md deleted file mode 100644 index 14298dfc4..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Test Server - -It is used to start the test interface service, which can test the upload, websocket, login and other interfaces. - -## Usage - -```bash - -cd ./test/server - -pnpm install - -pnpm run start - -``` diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/controller/FileController.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/controller/FileController.ts deleted file mode 100644 index cf6d90d5b..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/controller/FileController.ts +++ /dev/null @@ -1,18 +0,0 @@ -import FileService from '../service/FileService'; - -class FileController { - private service: FileService = new FileService(); - - upload = async (ctx) => { - const files = ctx.request.files.file; - console.log(files); - - if (files.length === undefined) { - this.service.upload(ctx, files, false); - } else { - this.service.upload(ctx, files, true); - } - }; -} - -export default new FileController(); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/controller/UserController.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/controller/UserController.ts deleted file mode 100644 index db815c2f2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/controller/UserController.ts +++ /dev/null @@ -1,15 +0,0 @@ -import UserService from '../service/UserService'; - -class UserController { - private service: UserService = new UserService(); - - login = async (ctx) => { - ctx.body = await this.service.login(); - }; - - getUserInfoById = async (ctx) => { - ctx.body = await this.service.getUserInfoById(); - }; -} - -export default new UserController(); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/ecosystem.config.js b/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/ecosystem.config.js deleted file mode 100644 index a31e457e6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/ecosystem.config.js +++ /dev/null @@ -1,18 +0,0 @@ -const { name } = require('./package.json'); -const path = require('path'); - -module.exports = { - apps: [ - { - name, - script: path.resolve(__dirname, './dist/index.js'), - instances: require('os').cpus().length, - autorestart: true, - watch: true, - env_production: { - NODE_ENV: 'production', - PORT: 8080, - }, - }, - ], -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/index.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/index.ts deleted file mode 100644 index 6c92d7666..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/index.ts +++ /dev/null @@ -1,63 +0,0 @@ -import Koa from 'koa'; -import path from 'path'; -import Router from 'koa-router'; -import body from 'koa-body'; -import cors from 'koa2-cors'; -import koaStatic from 'koa-static'; -import websockify from 'koa-websocket'; -import route from 'koa-route'; - -import AppRoutes from './routes'; - -const PORT = 3300; - -const app = websockify(new Koa()); - -app.ws.use(function (ctx, next) { - ctx.websocket.send('connection succeeded!'); - return next(ctx); -}); - -app.ws.use( - route.all('/test', function (ctx) { - // ctx.websocket.send('Hello World'); - ctx.websocket.on('message', function (message) { - // do something with the message from client - - if (message !== 'ping') { - const data = JSON.stringify({ - id: Math.ceil(Math.random() * 1000), - time: new Date().getTime(), - res: `${message}`, - }); - ctx.websocket.send(data); - } - console.log(message); - }); - }), -); - -const router = new Router(); - -// router -AppRoutes.forEach((route) => router[route.method](route.path, route.action)); - -app.use(cors()); -app.use( - body({ - encoding: 'gzip', - multipart: true, - formidable: { - // uploadDir: path.join(__dirname, '/upload/'), // 设置文件上传目录 - keepExtensions: true, - maxFieldsSize: 20 * 1024 * 1024, - }, - }), -); -app.use(router.routes()); -app.use(router.allowedMethods()); -app.use(koaStatic(path.join(__dirname))); - -app.listen(PORT, () => { - console.log(`Application started successfully: http://localhost:${PORT}`); -}); diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/nodemon.json b/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/nodemon.json deleted file mode 100644 index 59fa5afb0..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/nodemon.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "watch": ["src"], - "ext": "ts", - "exec": "ts-node -r tsconfig-paths/register index.ts", - "events": { - "restart": "clear" - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/package.json b/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/package.json deleted file mode 100644 index cce2442d2..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "server", - "version": "1.0.0", - "license": "MIT", - "scripts": { - "start": "nodemon", - "build": "rimraf ./dist && tsup ./index.ts --dts --format cjs,esm ", - "prod": "npx pm2 start ecosystem.config.js --env production", - "restart": "pm2 restart ecosystem.config.js --env production", - "stop": "npx pm2 stop ecosystem.config.js" - }, - "dependencies": { - "fs-extra": "^10.0.1", - "koa": "^2.13.4", - "koa-body": "^4.2.0", - "koa-bodyparser": "^4.3.0", - "koa-route": "^3.2.0", - "koa-router": "^10.1.1", - "koa-static": "^5.0.0", - "koa-websocket": "^6.0.0", - "koa2-cors": "^2.0.6" - }, - "devDependencies": { - "@types/koa": "^2.13.4", - "@types/koa-bodyparser": "^5.0.2", - "@types/koa-router": "^7.4.4", - "@types/node": "^17.0.21", - "nodemon": "^2.0.15", - "pm2": "^5.2.0", - "rimraf": "^3.0.2", - "ts-node": "^10.7.0", - "tsconfig-paths": "^3.14.0", - "tsup": "^5.12.1", - "typescript": "^4.6.2" - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/routes.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/routes.ts deleted file mode 100644 index 7fe647598..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/routes.ts +++ /dev/null @@ -1,23 +0,0 @@ -import UserController from './controller/UserController'; -import FileController from './controller/FileController'; - -export default [ - // user - { - path: '/login', - method: 'post', - action: UserController.login, - }, - { - path: '/getUserInfoById', - method: 'get', - action: UserController.getUserInfoById, - }, - - // file - { - path: '/upload', - method: 'post', - action: FileController.upload, - }, -]; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/service/FileService.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/service/FileService.ts deleted file mode 100644 index dfd378f77..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/service/FileService.ts +++ /dev/null @@ -1,54 +0,0 @@ -import path from 'path'; -import fs from 'fs-extra'; - -const uploadUrl = 'http://localhost:3300/static/upload'; -const filePath = path.join(__dirname, '../static/upload/'); - -fs.ensureDir(filePath); -export default class UserService { - async upload(ctx, files, isMultiple) { - let fileReader, fileResource, writeStream; - - const fileFunc = function (file) { - fileReader = fs.createReadStream(file.path); - fileResource = filePath + `/${file.name}`; - console.log(fileResource); - - writeStream = fs.createWriteStream(fileResource); - fileReader.pipe(writeStream); - }; - - const returnFunc = function (flag) { - if (flag) { - let url = ''; - for (let i = 0; i < files.length; i++) { - url += uploadUrl + `/${files[i].name},`; - } - url = url.replace(/,$/gi, ''); - ctx.body = { - url: url, - code: 0, - message: 'upload Success!', - }; - } else { - ctx.body = { - url: uploadUrl + `/${files.name}`, - code: 0, - message: 'upload Success!', - }; - } - }; - console.log(isMultiple, files.length); - - if (isMultiple) { - for (let i = 0; i < files.length; i++) { - const f1 = files[i]; - fileFunc(f1); - } - } else { - fileFunc(files); - } - fs.ensureDir(filePath); - returnFunc(isMultiple); - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/service/UserService.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/service/UserService.ts deleted file mode 100644 index 0c395e52e..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/service/UserService.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Result } from '../utils'; - -const fakeUserInfo = { - userId: '1', - username: 'vben', - realName: 'Vben Admin', - desc: 'manager', - password: '123456', - token: 'fakeToken1', - roles: [ - { - roleName: 'Super Admin', - value: 'super', - }, - ], -}; -export default class UserService { - async login() { - return Result.success(fakeUserInfo); - } - - async getUserInfoById() { - return Result.success(fakeUserInfo); - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/tsconfig.json b/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/tsconfig.json deleted file mode 100644 index 76203ed7d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "declaration": false, - "removeComments": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "target": "es6", - "sourceMap": false, - "esModuleInterop": true, - "outDir": "./dist", - "baseUrl": "./" - }, - "exclude": ["node_modules"] -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/utils.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/utils.ts deleted file mode 100644 index 7fd0b3fad..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/utils.ts +++ /dev/null @@ -1,9 +0,0 @@ -export class Result { - static success(data: any) { - return { - code: 0, - success: true, - result: data, - }; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/yarn.lock b/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/yarn.lock deleted file mode 100644 index 9c6df7f44..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/tests/server/yarn.lock +++ /dev/null @@ -1,2955 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== - dependencies: - "@babel/highlight" "^7.12.13" - -"@babel/helper-validator-identifier@^7.14.0": - version "7.14.0" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" - integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== - -"@babel/highlight@^7.12.13": - version "7.14.0" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" - integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.0" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.7" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2" - integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@opencensus/core@0.0.9": - version "0.0.9" - resolved "https://registry.npmjs.org/@opencensus/core/-/core-0.0.9.tgz#b16f775435ee309433e4126af194d37313fc93b3" - integrity sha512-31Q4VWtbzXpVUd2m9JS6HEaPjlKvNMOiF7lWKNmXF84yUcgfAFL5re7/hjDmdyQbOp32oGc+RFV78jXIldVz6Q== - dependencies: - continuation-local-storage "^3.2.1" - log-driver "^1.2.7" - semver "^5.5.0" - shimmer "^1.2.0" - uuid "^3.2.1" - -"@opencensus/core@^0.0.8": - version "0.0.8" - resolved "https://registry.npmjs.org/@opencensus/core/-/core-0.0.8.tgz#df01f200c2d2fbfe14dae129a1a86fb87286db92" - integrity sha512-yUFT59SFhGMYQgX0PhoTR0LBff2BEhPrD9io1jWfF/VDbakRfs6Pq60rjv0Z7iaTav5gQlttJCX2+VPxFWCuoQ== - dependencies: - continuation-local-storage "^3.2.1" - log-driver "^1.2.7" - semver "^5.5.0" - shimmer "^1.2.0" - uuid "^3.2.1" - -"@opencensus/propagation-b3@0.0.8": - version "0.0.8" - resolved "https://registry.npmjs.org/@opencensus/propagation-b3/-/propagation-b3-0.0.8.tgz#0751e6fd75f09400d9d3c419001e9e15a0df68e9" - integrity sha512-PffXX2AL8Sh0VHQ52jJC4u3T0H6wDK6N/4bg7xh4ngMYOIi13aR1kzVvX1sVDBgfGwDOkMbl4c54Xm3tlPx/+A== - dependencies: - "@opencensus/core" "^0.0.8" - uuid "^3.2.1" - -"@pm2/agent@~1.0.8": - version "1.0.8" - resolved "https://registry.npmjs.org/@pm2/agent/-/agent-1.0.8.tgz#cd15d84dbfc95427e6fccce72bc165b79f1d8579" - integrity sha512-r8mud8BhBz+a2yjlgtk+PBXUR5EQ9UKSJCs232OxfCmuBr1MZw0Mo+Kfog6WJ8OmVk99r1so9yTUK4IyrgGcMQ== - dependencies: - async "~3.2.0" - chalk "~3.0.0" - dayjs "~1.8.24" - debug "~4.3.1" - eventemitter2 "~5.0.1" - fclone "~1.0.11" - nssocket "0.6.0" - pm2-axon "~4.0.1" - pm2-axon-rpc "~0.7.0" - proxy-agent "~4.0.1" - semver "~7.2.0" - ws "~7.2.0" - -"@pm2/io@~5.0.0": - version "5.0.0" - resolved "https://registry.npmjs.org/@pm2/io/-/io-5.0.0.tgz#623cbcaf6fe39375f20ac2e75497477a1b1ec5c5" - integrity sha512-3rToDVJaRoob5Lq8+7Q2TZFruoEkdORxwzFpZaqF4bmH6Bkd7kAbdPrI/z8X6k1Meq5rTtScM7MmDgppH6aLlw== - dependencies: - "@opencensus/core" "0.0.9" - "@opencensus/propagation-b3" "0.0.8" - async "~2.6.1" - debug "~4.3.1" - eventemitter2 "^6.3.1" - require-in-the-middle "^5.0.0" - semver "6.3.0" - shimmer "^1.2.0" - signal-exit "^3.0.3" - tslib "1.9.3" - -"@pm2/js-api@~0.6.7": - version "0.6.7" - resolved "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.6.7.tgz#ed28c3b7b6d26f03f826318754fdc5468afa589f" - integrity sha512-jiJUhbdsK+5C4zhPZNnyA3wRI01dEc6a2GhcQ9qI38DyIk+S+C8iC3fGjcjUbt/viLYKPjlAaE+hcT2/JMQPXw== - dependencies: - async "^2.6.3" - axios "^0.21.0" - debug "~4.3.1" - eventemitter2 "^6.3.1" - ws "^7.0.0" - -"@pm2/pm2-version-check@latest": - version "1.0.4" - resolved "https://registry.npmjs.org/@pm2/pm2-version-check/-/pm2-version-check-1.0.4.tgz#cf97fbb14b0eca95430ca05eedccbd2683806e43" - integrity sha512-SXsM27SGH3yTWKc2fKR4SYNxsmnvuBQ9dd6QHtEWmiZ/VqaOYPAIlS8+vMcn27YLtAEBGvNRSh3TPNvtjZgfqA== - dependencies: - debug "^4.3.1" - -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@tsconfig/node10@^1.0.7": - version "1.0.7" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.7.tgz#1eb1de36c73478a2479cc661ef5af1c16d86d606" - integrity sha512-aBvUmXLQbayM4w3A8TrjwrXs4DZ8iduJnuJLLRGdkWlyakCf1q6uHZJBzXoRA/huAEknG5tcUyQxN3A+In5euQ== - -"@tsconfig/node12@^1.0.7": - version "1.0.7" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.7.tgz#677bd9117e8164dc319987dd6ff5fc1ba6fbf18b" - integrity sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A== - -"@tsconfig/node14@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.0.tgz#5bd046e508b1ee90bc091766758838741fdefd6e" - integrity sha512-RKkL8eTdPv6t5EHgFKIVQgsDapugbuOptNd9OOunN/HAkzmmTnZELx1kNCK0rSdUYGmiFMM3rRQMAWiyp023LQ== - -"@tsconfig/node16@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz#a6ca6a9a0ff366af433f42f5f0e124794ff6b8f1" - integrity sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA== - -"@types/accepts@*": - version "1.3.5" - resolved "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" - integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== - dependencies: - "@types/node" "*" - -"@types/body-parser@*": - version "1.19.0" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" - integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.34" - resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" - integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ== - dependencies: - "@types/node" "*" - -"@types/content-disposition@*": - version "0.5.3" - resolved "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.3.tgz#0aa116701955c2faa0717fc69cd1596095e49d96" - integrity sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg== - -"@types/cookies@*": - version "0.7.6" - resolved "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.6.tgz#71212c5391a976d3bae57d4b09fac20fc6bda504" - integrity sha512-FK4U5Qyn7/Sc5ih233OuHO0qAkOpEcD/eG6584yEiLKizTFRny86qHLe/rej3HFQrkBuUjF4whFliAdODbVN/w== - dependencies: - "@types/connect" "*" - "@types/express" "*" - "@types/keygrip" "*" - "@types/node" "*" - -"@types/express-serve-static-core@^4.17.18": - version "4.17.21" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.21.tgz#a427278e106bca77b83ad85221eae709a3414d42" - integrity sha512-gwCiEZqW6f7EoR8TTEfalyEhb1zA5jQJnRngr97+3pzMaO1RKoI1w2bw07TK72renMUVWcWS5mLI6rk1NqN0nA== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - -"@types/express@*": - version "4.17.12" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.12.tgz#4bc1bf3cd0cfe6d3f6f2853648b40db7d54de350" - integrity sha512-pTYas6FrP15B1Oa0bkN5tQMNqOcVXa9j4FTFtO8DWI9kppKib+6NJtfTOOLcwxuuYvcX2+dVG6et1SxW/Kc17Q== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.18" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/formidable@^1.0.31": - version "1.2.2" - resolved "https://registry.npmjs.org/@types/formidable/-/formidable-1.2.2.tgz#e690d60732ee9d3f0a441bc572c17409785b283c" - integrity sha512-8RDAMnMHOh7QrY1xuQ7s6/Xre9pMvJ2zT2VgATiz5cIE71Q/6N3+P8sr3z/dNWNmvX5/aX9x8uJlG0MZiMZXoA== - dependencies: - "@types/node" "*" - -"@types/http-assert@*": - version "1.5.1" - resolved "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.1.tgz#d775e93630c2469c2f980fc27e3143240335db3b" - integrity sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ== - -"@types/http-errors@*": - version "1.8.0" - resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.0.tgz#682477dbbbd07cd032731cb3b0e7eaee3d026b69" - integrity sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= - -"@types/keygrip@*": - version "1.0.2" - resolved "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72" - integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw== - -"@types/koa-bodyparser@^4.2.2": - version "4.3.1" - resolved "https://registry.npmjs.org/@types/koa-bodyparser/-/koa-bodyparser-4.3.1.tgz#ec2e06f6f50cfddba035d33a3cfe75a8f0cd7fa4" - integrity sha512-N1cw6UpYYW01rGanfC0guqkyqKKavXygGBeSgsJOe7EkkSlRH7BNRjzyqv1TzJ3Au69aNeagpzzqAzTo6I08ow== - dependencies: - "@types/koa" "*" - -"@types/koa-compose@*": - version "3.2.5" - resolved "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz#85eb2e80ac50be95f37ccf8c407c09bbe3468e9d" - integrity sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ== - dependencies: - "@types/koa" "*" - -"@types/koa-router@^7.0.40": - version "7.4.2" - resolved "https://registry.npmjs.org/@types/koa-router/-/koa-router-7.4.2.tgz#b12d7095e844f4d0081b32742691a4d2e5a8046a" - integrity sha512-A9fTLdSHeLQpmtAPUKvvmG+xHHH5Yclqhlmz1bd5BTfdvNo37H8hzNaNpO2mgUri8Wk8fRH9NLpFRHW0wqraAw== - dependencies: - "@types/koa" "*" - -"@types/koa@*", "@types/koa@^2.0.48": - version "2.13.3" - resolved "https://registry.npmjs.org/@types/koa/-/koa-2.13.3.tgz#5b44c0956d7f7bf41f74ccfb530fec60fbed45ca" - integrity sha512-TaujBV+Dhe/FvmSMZJtCFBms+bqQacgUebk/M2C2tq8iGmHE/DDf4DcW2Hc7NqusVZmy5xzrWOjtdPKNP+fTfw== - dependencies: - "@types/accepts" "*" - "@types/content-disposition" "*" - "@types/cookies" "*" - "@types/http-assert" "*" - "@types/http-errors" "*" - "@types/keygrip" "*" - "@types/koa-compose" "*" - "@types/node" "*" - -"@types/mime@^1": - version "1.3.2" - resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== - -"@types/node@*", "@types/node@^15.12.1": - version "15.12.1" - resolved "https://registry.npmjs.org/@types/node/-/node-15.12.1.tgz#9b60797dee1895383a725f828a869c86c6caa5c2" - integrity sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/qs@*": - version "6.9.6" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1" - integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA== - -"@types/range-parser@*": - version "1.2.3" - resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" - integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== - -"@types/serve-static@*": - version "1.13.9" - resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz#aacf28a85a05ee29a11fb7c3ead935ac56f33e4e" - integrity sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@^1.3.5: - version "1.3.7" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -agent-base@6, agent-base@^6.0.0: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -amp-message@~0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/amp-message/-/amp-message-0.1.2.tgz#a78f1c98995087ad36192a41298e4db49e3dfc45" - integrity sha1-p48cmJlQh602GSpBKY5NtJ49/EU= - dependencies: - amp "0.3.1" - -amp@0.3.1, amp@~0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/amp/-/amp-0.3.1.tgz#6adf8d58a74f361e82c1fa8d389c079e139fc47d" - integrity sha1-at+NWKdPNh6CwfqNOJwHnhOfxH0= - -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== - dependencies: - string-width "^3.0.0" - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -any-promise@^1.0.0, any-promise@^1.1.0: - version "1.3.0" - resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - -anymatch@~3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -ast-types@^0.13.2: - version "0.13.4" - resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" - integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== - dependencies: - tslib "^2.0.1" - -async-listener@^0.6.0: - version "0.6.10" - resolved "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz#a7c97abe570ba602d782273c0de60a51e3e17cbc" - integrity sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw== - dependencies: - semver "^5.3.0" - shimmer "^1.1.0" - -async@^2.6.3, async@~2.6.1: - version "2.6.3" - resolved "https://registry.npmjs.org/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - -async@~3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" - integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== - -axios@^0.21.0: - version "0.21.1" - resolved "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== - dependencies: - follow-redirects "^1.10.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -blessed@0.1.81: - version "0.1.81" - resolved "https://registry.npmjs.org/blessed/-/blessed-0.1.81.tgz#f962d687ec2c369570ae71af843256e6d0ca1129" - integrity sha1-+WLWh+wsNpVwrnGvhDJW5tDKESk= - -bodec@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/bodec/-/bodec-0.1.0.tgz#bc851555430f23c9f7650a75ef64c6a94c3418cc" - integrity sha1-vIUVVUMPI8n3ZQp172TGqUw0GMw= - -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cac@^6.7.2: - version "6.7.3" - resolved "https://registry.npmjs.org/cac/-/cac-6.7.3.tgz#10410b8611677990cc2e3c8b576d471c1d71b768" - integrity sha512-ECVqVZh74qgSuZG9YOt2OJPI3wGcf+EwwuF/XIOYqZBD0KZYLtgPWqFPxmDPQ6joxI1nOlvVgRV6VT53Ooyocg== - -cache-content-type@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" - integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA== - dependencies: - mime-types "^2.1.18" - ylru "^1.2.0" - -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -chalk@3.0.0, chalk@^3.0.0, chalk@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -charm@~0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz#06c21eed1a1b06aeb67553cdc53e23274bac2296" - integrity sha1-BsIe7RobBq62dVPNxT4jJ0usIpY= - -chokidar@^3.2.2, chokidar@^3.5.1: - version "3.5.1" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.3.1" - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cli-boxes@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - -cli-tableau@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/cli-tableau/-/cli-tableau-2.0.1.tgz#baa78d83e08a2d7ab79b7dad9406f0254977053f" - integrity sha512-he+WTicka9cl0Fg/y+YyxcN6/bfQ/1O3QmgxRXDhABKqLzvoOSM4fMzp39uMyLBulAFuywD2N7UaoQE7WaADxQ== - dependencies: - chalk "3.0.0" - -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - -co-body@^5.1.1: - version "5.2.0" - resolved "https://registry.npmjs.org/co-body/-/co-body-5.2.0.tgz#5a0a658c46029131e0e3a306f67647302f71c124" - integrity sha512-sX/LQ7LqUhgyaxzbe7IqwPeTr2yfpfUIQ/dgpKo6ZI4y4lpQA0YxAomWIY+7I7rHWcG02PG+OuPREzMW/5tszQ== - dependencies: - inflation "^2.0.0" - qs "^6.4.0" - raw-body "^2.2.0" - type-is "^1.6.14" - -co-body@^6.0.0: - version "6.1.0" - resolved "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz#d87a8efc3564f9bfe3aced8ef5cd04c7a8766547" - integrity sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ== - dependencies: - inflation "^2.0.0" - qs "^6.5.2" - raw-body "^2.3.3" - type-is "^1.6.16" - -co@^4.4.0, co@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -commander@2.15.1: - version "2.15.1" - resolved "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" - integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== - -commander@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - -content-disposition@~0.5.2: - version "0.5.3" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -continuation-local-storage@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz#11f613f74e914fe9b34c92ad2d28fe6ae1db7ffb" - integrity sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA== - dependencies: - async-listener "^0.6.0" - emitter-listener "^1.1.1" - -cookies@~0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90" - integrity sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow== - dependencies: - depd "~2.0.0" - keygrip "~1.1.0" - -copy-to@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" - integrity sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU= - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" - integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cron@1.8.2: - version "1.8.2" - resolved "https://registry.npmjs.org/cron/-/cron-1.8.2.tgz#4ac5e3c55ba8c163d84f3407bde94632da8370ce" - integrity sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg== - dependencies: - moment-timezone "^0.5.x" - -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -culvert@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/culvert/-/culvert-0.1.2.tgz#9502f5f0154a2d5a22a023e79f71cc936fa6ef6f" - integrity sha1-lQL18BVKLVoioCPnn3HMk2+m728= - -data-uri-to-buffer@3: - version "3.0.1" - resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" - integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== - -dayjs@~1.8.24, dayjs@~1.8.25: - version "1.8.36" - resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz#be36e248467afabf8f5a86bae0de0cdceecced50" - integrity sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw== - -debug@*, debug@4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@~4.3.1: - version "4.3.1" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -debug@^2.2.0: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0, debug@^3.2.6: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - -deep-equal@~1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -degenerator@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254" - integrity sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg== - dependencies: - ast-types "^0.13.2" - escodegen "^1.8.1" - esprima "^4.0.0" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -depd@^2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -destroy@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -emitter-listener@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz#56b140e8f6992375b3d7cb2cab1cc7432d9632e8" - integrity sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ== - dependencies: - shimmer "^1.2.0" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encodeurl@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enquirer@2.3.6: - version "2.3.6" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -esbuild@^0.11.12: - version "0.11.23" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.11.23.tgz#c42534f632e165120671d64db67883634333b4b8" - integrity sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q== - -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - -escape-html@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escodegen@^1.8.1: - version "1.14.3" - resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -eventemitter2@5.0.1, eventemitter2@~5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452" - integrity sha1-YZegldX7a1folC9v1+qtY6CclFI= - -eventemitter2@^6.3.1: - version "6.4.4" - resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.4.tgz#aa96e8275c4dbeb017a5d0e03780c65612a1202b" - integrity sha512-HLU3NDY6wARrLCEwyGKRBvuWYyvW6mHYv72SJJAH3iJN3a6eVUvkjFkcxah1bcTgGVBBrFdIopBJPhCQFMLyXw== - -eventemitter2@~0.4.14: - version "0.4.14" - resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" - integrity sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas= - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -fast-glob@^3.1.1: - version "3.2.5" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" - merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.11.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" - integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== - dependencies: - reusify "^1.0.4" - -fclone@1.0.11, fclone@~1.0.11: - version "1.0.11" - resolved "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz#10e85da38bfea7fc599341c296ee1d77266ee640" - integrity sha1-EOhdo4v+p/xZk0HClu4ddyZu5kA= - -file-uri-to-path@2: - version "2.0.0" - resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" - integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -follow-redirects@^1.10.0: - version "1.14.1" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== - -formidable@^1.1.1: - version "1.2.2" - resolved "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" - integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== - -fresh@~0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -fs-extra@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" - integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.1: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -ftp@^0.3.10: - version "0.3.10" - resolved "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= - dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -get-intrinsic@^1.0.2: - version "1.1.1" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-uri@3: - version "3.0.2" - resolved "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" - integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg== - dependencies: - "@tootallnate/once" "1" - data-uri-to-buffer "3" - debug "4" - file-uri-to-path "2" - fs-extra "^8.1.0" - ftp "^0.3.10" - -git-node-fs@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/git-node-fs/-/git-node-fs-1.0.0.tgz#49b215e242ebe43aa4c7561bbba499521752080f" - integrity sha1-SbIV4kLr5Dqkx1Ybu6SZUhdSCA8= - -git-sha1@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/git-sha1/-/git-sha1-0.1.2.tgz#599ac192b71875825e13a445f3a6e05118c2f745" - integrity sha1-WZrBkrcYdYJeE6RF86bgURjC90U= - -glob-parent@^5.1.0, glob-parent@~5.1.0: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@7.1.6: - version "7.1.6" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - 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" - -glob@^7.0.5, glob@^7.1.3: - version "7.1.7" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - 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" - -global-dirs@^2.0.1: - version "2.1.0" - resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" - integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== - dependencies: - ini "1.3.7" - -globby@^11.0.3: - version "11.0.3" - resolved "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" - integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.6" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -http-assert@^1.3.0: - version "1.4.1" - resolved "https://registry.npmjs.org/http-assert/-/http-assert-1.4.1.tgz#c5f725d677aa7e873ef736199b89686cceb37878" - integrity sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw== - dependencies: - deep-equal "~1.0.1" - http-errors "~1.7.2" - -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-errors@1.7.3, http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@^1.6.3, http-errors@^1.7.3: - version "1.8.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507" - integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -https-proxy-agent@5, https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24, iconv-lite@^0.4.4: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= - -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -import-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" - integrity sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg== - dependencies: - import-from "^3.0.0" - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" - integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== - dependencies: - resolve-from "^5.0.0" - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -inflation@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f" - integrity sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@~2.0.1: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@1.3.7: - version "1.3.7" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== - -ini@^1.3.5, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -ip@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.2.0: - version "2.4.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" - integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== - dependencies: - has "^1.0.3" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-function@^1.0.7: - version "1.0.9" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz#e5f82c2323673e7fcad3d12858c83c4039f6399c" - integrity sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.3.1: - version "0.3.2" - resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" - integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== - dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" - -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.1: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -joycon@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/joycon/-/joycon-3.0.1.tgz#9074c9b08ccf37a6726ff74a18485f85efcaddaf" - integrity sha512-SJcJNBg32dGgxhPtM0wQqxqV0ax9k/9TaUskGDSJkSFSQOEWWvQ3zzWdGQRIUry2j1zA5+ReH13t0Mf3StuVZA== - -js-git@^0.7.8: - version "0.7.8" - resolved "https://registry.npmjs.org/js-git/-/js-git-0.7.8.tgz#52fa655ab61877d6f1079efc6534b554f31e5444" - integrity sha1-UvplWrYYd9bxB578ZTS1VPMeVEQ= - dependencies: - bodec "^0.1.0" - culvert "^0.1.2" - git-sha1 "^0.1.2" - pako "^0.2.5" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -keygrip@~1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226" - integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ== - dependencies: - tsscmp "1.0.6" - -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - -koa-body@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/koa-body/-/koa-body-4.2.0.tgz#37229208b820761aca5822d14c5fc55cee31b26f" - integrity sha512-wdGu7b9amk4Fnk/ytH8GuWwfs4fsB5iNkY8kZPpgQVb04QZSv85T0M8reb+cJmvLE8cjPYvBzRikD3s6qz8OoA== - dependencies: - "@types/formidable" "^1.0.31" - co-body "^5.1.1" - formidable "^1.1.1" - -koa-bodyparser@^4.2.1: - version "4.3.0" - resolved "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz#274c778555ff48fa221ee7f36a9fbdbace22759a" - integrity sha512-uyV8G29KAGwZc4q/0WUAjH+Tsmuv9ImfBUF2oZVyZtaeo0husInagyn/JH85xMSxM0hEk/mbCII5ubLDuqW/Rw== - dependencies: - co-body "^6.0.0" - copy-to "^2.0.1" - -koa-compose@^3.0.0: - version "3.2.1" - resolved "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" - integrity sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec= - dependencies: - any-promise "^1.1.0" - -koa-compose@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" - integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== - -koa-convert@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" - integrity sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA= - dependencies: - co "^4.6.0" - koa-compose "^3.0.0" - -koa-route@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/koa-route/-/koa-route-3.2.0.tgz#76298b99a6bcfa9e38cab6fe5c79a8733e758bce" - integrity sha1-dimLmaa8+p44yrb+XHmocz51i84= - dependencies: - debug "*" - methods "~1.1.0" - path-to-regexp "^1.2.0" - -koa-router@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/koa-router/-/koa-router-10.0.0.tgz#7bc76a031085731e61fc92c1683687b2f44de6a4" - integrity sha512-gAE5J1gBQTvfR8rMMtMUkE26+1MbO3DGpGmvfmM2pR9Z7w2VIb2Ecqeal98yVO7+4ltffby7gWOzpCmdNOQe0w== - dependencies: - debug "^4.1.1" - http-errors "^1.7.3" - koa-compose "^4.1.0" - methods "^1.1.2" - path-to-regexp "^6.1.0" - -koa-send@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz#39dceebfafb395d0d60beaffba3a70b4f543fe79" - integrity sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ== - dependencies: - debug "^4.1.1" - http-errors "^1.7.3" - resolve-path "^1.4.0" - -koa-static@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943" - integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ== - dependencies: - debug "^3.1.0" - koa-send "^5.0.0" - -koa-websocket@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/koa-websocket/-/koa-websocket-6.0.0.tgz#7fb7698a7004c07aac663b15e84bf4bc99901352" - integrity sha512-pGTaB+aXILD/q+bQNh+Ejrg8zSxf6QRpiUQoh2TFQSmUZo2hrt6KGk4qlyxfHxFH40bVtyKeo4x1u0kKgJDOWA== - dependencies: - co "^4.4.0" - debug "^4.0.1" - koa-compose "^4.1.0" - ws "^7.0.1" - -koa2-cors@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/koa2-cors/-/koa2-cors-2.0.6.tgz#9ad23df3a0b9bb84530b46f5944f3fb576086554" - integrity sha512-JRCcSM4lamM+8kvKGDKlesYk2ASrmSTczDtGUnIadqMgnHU4Ct5Gw7Bxt3w3m6d6dy3WN0PU4oMP43HbddDEWg== - -koa@^2.7.0: - version "2.13.1" - resolved "https://registry.npmjs.org/koa/-/koa-2.13.1.tgz#6275172875b27bcfe1d454356a5b6b9f5a9b1051" - integrity sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w== - dependencies: - accepts "^1.3.5" - cache-content-type "^1.0.0" - content-disposition "~0.5.2" - content-type "^1.0.4" - cookies "~0.8.0" - debug "~3.1.0" - delegates "^1.0.0" - depd "^2.0.0" - destroy "^1.0.4" - encodeurl "^1.0.2" - escape-html "^1.0.3" - fresh "~0.5.2" - http-assert "^1.3.0" - http-errors "^1.6.3" - is-generator-function "^1.0.7" - koa-compose "^4.1.0" - koa-convert "^1.2.0" - on-finished "^2.3.0" - only "~0.0.2" - parseurl "^1.3.2" - statuses "^1.5.0" - type-is "^1.6.16" - vary "^1.1.2" - -latest-version@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - -lazy@~1.0.11: - version "1.0.11" - resolved "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz#daa068206282542c088288e975c297c1ae77b690" - integrity sha1-2qBoIGKCVCwIgojpdcKXwa53tpA= - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -lodash@^4.17.14: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-driver@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" - integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== - -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@^1.1.2, methods@~1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -micromatch@^4.0.2: - version "4.0.4" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -mime-db@1.48.0: - version "1.48.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" - integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== - -mime-types@^2.1.18, mime-types@~2.1.24: - version "2.1.31" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" - integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== - dependencies: - mime-db "1.48.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0: - version "1.2.5" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mkdirp@1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -module-details-from-path@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" - integrity sha1-EUyUlnPiqKNenTV4hSeqN7Z52is= - -moment-timezone@^0.5.x: - version "0.5.33" - resolved "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz#b252fd6bb57f341c9b59a5ab61a8e51a73bbd22c" - integrity sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w== - dependencies: - moment ">= 2.9.0" - -"moment@>= 2.9.0": - version "2.29.1" - resolved "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" - integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -needle@2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -netmask@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" - integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -nodemon@^2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" - integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== - dependencies: - chokidar "^3.2.2" - debug "^3.2.6" - ignore-by-default "^1.0.1" - minimatch "^3.0.4" - pstree.remy "^1.1.7" - semver "^5.7.1" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.3" - update-notifier "^4.1.0" - -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= - dependencies: - abbrev "1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nssocket@0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/nssocket/-/nssocket-0.6.0.tgz#59f96f6ff321566f33c70f7dbeeecdfdc07154fa" - integrity sha1-Wflvb/MhVm8zxw99vu7N/cBxVPo= - dependencies: - eventemitter2 "~0.4.14" - lazy "~1.0.11" - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-inspect@^1.9.0: - version "1.10.3" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" - integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== - -on-finished@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -only@~0.0.2: - version "0.0.2" - resolved "https://registry.npmjs.org/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" - integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q= - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - 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" - -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -pac-proxy-agent@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb" - integrity sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - get-uri "3" - http-proxy-agent "^4.0.1" - https-proxy-agent "5" - pac-resolver "^4.1.0" - raw-body "^2.2.0" - socks-proxy-agent "5" - -pac-resolver@^4.1.0: - version "4.2.0" - resolved "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz#b82bcb9992d48166920bc83c7542abb454bd9bdd" - integrity sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ== - dependencies: - degenerator "^2.2.0" - ip "^1.1.5" - netmask "^2.0.1" - -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - -pako@^0.2.5: - version "0.2.9" - resolved "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" - integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU= - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - 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" - -parseurl@^1.3.2: - version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-is-absolute@1.0.1, path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@^1.2.0: - version "1.8.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - -path-to-regexp@^6.1.0: - version "6.2.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz#f7b3803336104c346889adece614669230645f38" - integrity sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -pidusage@2.0.21: - version "2.0.21" - resolved "https://registry.npmjs.org/pidusage/-/pidusage-2.0.21.tgz#7068967b3d952baea73e57668c98b9eaa876894e" - integrity sha512-cv3xAQos+pugVX+BfXpHsbyz/dLzX+lr44zNMsYiGxUw+kV5sgQCIcLd1z+0vq+KyC7dJ+/ts2PsfgWfSC3WXA== - dependencies: - safe-buffer "^5.2.1" - -pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pm2-axon-rpc@~0.7.0: - version "0.7.1" - resolved "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.7.1.tgz#2daec5383a63135b3f18babb70266dacdcbc429a" - integrity sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw== - dependencies: - debug "^4.3.1" - -pm2-axon@~4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/pm2-axon/-/pm2-axon-4.0.1.tgz#a7b4bb586e9aeb35b1042b488cde15b60cabafd2" - integrity sha512-kES/PeSLS8orT8dR5jMlNl+Yu4Ty3nbvZRmaAtROuVm9nYYGiaoXqqKQqQYzWQzMYWUKHMQTvBlirjE5GIIxqg== - dependencies: - amp "~0.3.1" - amp-message "~0.1.1" - debug "^4.3.1" - escape-string-regexp "^4.0.0" - -pm2-deploy@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/pm2-deploy/-/pm2-deploy-1.0.2.tgz#98d8385553a3a4dca11c7b3116deb519bc5961a7" - integrity sha512-YJx6RXKrVrWaphEYf++EdOOx9EH18vM8RSZN/P1Y+NokTKqYAca/ejXwVLyiEpNju4HPZEk3Y2uZouwMqUlcgg== - dependencies: - run-series "^1.1.8" - tv4 "^1.3.0" - -pm2-multimeter@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz#1a1e55153d41a05534cea23cfe860abaa0eb4ace" - integrity sha1-Gh5VFT1BoFU0zqI8/oYKuqDrSs4= - dependencies: - charm "~0.1.1" - -pm2@^4.5.6: - version "4.5.6" - resolved "https://registry.npmjs.org/pm2/-/pm2-4.5.6.tgz#2f477a158957860e440f1e71e88dc82627fcff99" - integrity sha512-4J5q704Xl6VmpmQhXFGMJL4kXyyQw3AZM1FE9vRxhS3LiDI/+WVBtOM6pqJ4g/RKW+AUjEkc23i/DCC4BVenDA== - dependencies: - "@pm2/agent" "~1.0.8" - "@pm2/io" "~5.0.0" - "@pm2/js-api" "~0.6.7" - "@pm2/pm2-version-check" latest - async "~3.2.0" - blessed "0.1.81" - chalk "3.0.0" - chokidar "^3.5.1" - cli-tableau "^2.0.0" - commander "2.15.1" - cron "1.8.2" - dayjs "~1.8.25" - debug "^4.3.1" - enquirer "2.3.6" - eventemitter2 "5.0.1" - fclone "1.0.11" - mkdirp "1.0.4" - needle "2.4.0" - pidusage "2.0.21" - pm2-axon "~4.0.1" - pm2-axon-rpc "~0.7.0" - pm2-deploy "~1.0.2" - pm2-multimeter "^0.1.2" - promptly "^2" - ps-list "6.3.0" - semver "^7.2" - source-map-support "0.5.19" - sprintf-js "1.1.2" - vizion "2.2.1" - yamljs "0.3.0" - -postcss-load-config@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.1.tgz#d214bf9cfec1608ffaf0f4161b3ba20664ab64b9" - integrity sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ== - dependencies: - cosmiconfig "^7.0.0" - import-cwd "^3.0.0" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - -promptly@^2: - version "2.2.0" - resolved "https://registry.npmjs.org/promptly/-/promptly-2.2.0.tgz#2a13fa063688a2a5983b161fff0108a07d26fc74" - integrity sha1-KhP6BjaIoqWYOxYf/wEIoH0m/HQ= - dependencies: - read "^1.0.4" - -proxy-agent@~4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz#326c3250776c7044cd19655ccbfadf2e065a045c" - integrity sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA== - dependencies: - agent-base "^6.0.0" - debug "4" - http-proxy-agent "^4.0.0" - https-proxy-agent "^5.0.0" - lru-cache "^5.1.1" - pac-proxy-agent "^4.1.0" - proxy-from-env "^1.0.0" - socks-proxy-agent "^5.0.0" - -proxy-from-env@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -ps-list@6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/ps-list/-/ps-list-6.3.0.tgz#a2b775c2db7d547a28fbaa3a05e4c281771259be" - integrity sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA== - -pstree.remy@^1.1.7: - version "1.1.8" - resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pupa@^2.0.1: - version "2.1.1" - resolved "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" - -qs@^6.4.0, qs@^6.5.2: - version "6.10.1" - resolved "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" - integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== - dependencies: - side-channel "^1.0.4" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -raw-body@^2.2.0, raw-body@^2.3.3: - version "2.4.1" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" - integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== - dependencies: - bytes "3.1.0" - http-errors "1.7.3" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read@^1.0.4: - version "1.0.7" - resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= - dependencies: - mute-stream "~0.0.4" - -readable-stream@1.1.x: - version "1.1.14" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== - dependencies: - picomatch "^2.2.1" - -registry-auth-token@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== - dependencies: - rc "^1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - -require-in-the-middle@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.1.0.tgz#b768f800377b47526d026bbf5a7f727f16eb412f" - integrity sha512-M2rLKVupQfJ5lf9OvqFGIT+9iVLnTmjgbOmpil12hiSQNn5zJTKGPoIisETNjfK+09vP3rpm1zJajmErpr2sEQ== - dependencies: - debug "^4.1.1" - module-details-from-path "^1.0.3" - resolve "^1.12.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-path@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" - integrity sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc= - dependencies: - http-errors "~1.6.2" - path-is-absolute "1.0.1" - -resolve@^1.12.0: - version "1.20.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup@^2.45.2: - version "2.50.6" - resolved "https://registry.npmjs.org/rollup/-/rollup-2.50.6.tgz#24e2211caf9031081656e98a5e5e94d3b5e786e2" - integrity sha512-6c5CJPLVgo0iNaZWWliNu1Kl43tjP9LZcp6D/tkf2eLH2a9/WeHxg9vfTFl8QV/2SOyaJX37CEm9XuGM0rviUg== - optionalDependencies: - fsevents "~2.3.1" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -run-series@^1.1.8: - version "1.1.9" - resolved "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz#15ba9cb90e6a6c054e67c98e1dc063df0ecc113a" - integrity sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g== - -safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@^5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - -semver@6.3.0, semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^5.3.0, semver@^5.5.0, semver@^5.7.1: - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^7.2: - version "7.3.5" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -semver@~7.2.0: - version "7.2.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.2.3.tgz#3641217233c6382173c76bf2c7ecd1e1c16b0d8a" - integrity sha512-utbW9Z7ZxVvwiIWkdOMLOR9G/NFXh2aRucghkVrEMJWuC++r3lCkBC3LwqBinyHzGMAJxY5tn6VakZGHObq5ig== - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shimmer@^1.1.0, shimmer@^1.2.0: - version "1.2.1" - resolved "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" - integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -smart-buffer@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" - integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== - -socks-proxy-agent@5, socks-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" - integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== - dependencies: - agent-base "6" - debug "4" - socks "^2.3.3" - -socks@^2.3.3: - version "2.6.1" - resolved "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e" - integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA== - dependencies: - ip "^1.1.5" - smart-buffer "^4.1.0" - -source-map-support@0.5.19, source-map-support@^0.5.17: - version "0.5.19" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sprintf-js@1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.0.0, string-width@^4.1.0: - version "4.2.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -sucrase@^3.18.1: - version "3.18.1" - resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.18.1.tgz#7c699d5148734b1105542ca4ea2aa69bcab7f728" - integrity sha512-TRyO38wwOPhLLlM8QLOG3TgMj0FKk+arlTrS9pRAanF8cAcHvgRPKIYWGO25mPSp/Rj87zMMTjFfkqIZGI6ZdA== - dependencies: - commander "^4.0.0" - glob "7.1.6" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - ts-interface-checker "^0.1.9" - -supports-color@^5.3.0, supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -term-size@^2.1.0: - version "2.2.1" - resolved "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -touch@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== - -ts-node@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.0.0.tgz#05f10b9a716b0b624129ad44f0ea05dac84ba3be" - integrity sha512-ROWeOIUvfFbPZkoDis0L/55Fk+6gFQNZwwKPLinacRl6tsxstTF1DbAcLKkovwnpKMVvOMHP1TIbnwXwtLg1gg== - dependencies: - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.17" - yn "3.1.1" - -tsconfig-paths@^3.8.0: - version "3.9.0" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" - integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.0" - strip-bom "^3.0.0" - -tslib@1.9.3: - version "1.9.3" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== - -tslib@^2.0.1: - version "2.2.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" - integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== - -tsscmp@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" - integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== - -tsup@^4.11.2: - version "4.11.2" - resolved "https://registry.npmjs.org/tsup/-/tsup-4.11.2.tgz#135c69ff1b0ef9357d5e0076d1d6c29118904b43" - integrity sha512-cp+gy0TGzFm/3PkPNeiZ2Fvi4MKI8jj6Xq6gVpSQ+Og+6GPqfws2K4zYo11OJoccuk2LnlJIJt8xwnoYCVGpSA== - dependencies: - cac "^6.7.2" - chalk "^4.1.0" - chokidar "^3.5.1" - debug "^4.3.1" - esbuild "^0.11.12" - execa "^5.0.0" - globby "^11.0.3" - joycon "^3.0.1" - postcss-load-config "^3.0.1" - resolve-from "^5.0.0" - rollup "^2.45.2" - sucrase "^3.18.1" - tree-kill "^1.2.2" - -tv4@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz#d020c846fadd50c855abb25ebaecc68fc10f7963" - integrity sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@^1.6.14, type-is@^1.6.16: - version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@^4.2.5: - version "4.3.2" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz#399ab18aac45802d6f2498de5054fcbbe716a805" - integrity sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw== - -undefsafe@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" - integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== - dependencies: - debug "^2.2.0" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -update-notifier@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" - integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== - dependencies: - boxen "^4.2.0" - chalk "^3.0.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - -uuid@^3.2.1: - version "3.4.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -vary@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vizion@2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/vizion/-/vizion-2.2.1.tgz#04201ea45ffd145d5b5210e385a8f35170387fb2" - integrity sha512-sfAcO2yeSU0CSPFI/DmZp3FsFE9T+8913nv1xWBOyzODv13fwkn6Vl7HqxGpkr9F608M+8SuFId3s+BlZqfXww== - dependencies: - async "^2.6.3" - git-node-fs "^1.0.0" - ini "^1.3.5" - js-git "^0.7.8" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.0.0, ws@^7.0.1: - version "7.4.6" - resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -ws@~7.2.0: - version "7.2.5" - resolved "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz#abb1370d4626a5a9cd79d8de404aa18b3465d10d" - integrity sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA== - -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yamljs@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b" - integrity sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ== - dependencies: - argparse "^1.0.7" - glob "^7.0.5" - -ylru@^1.2.0: - version "1.2.1" - resolved "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" - integrity sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ== - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/tsconfig.json b/templates/abp-vnext-pro-nuget-simplify/vben28/tsconfig.json deleted file mode 100644 index 76e91f264..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/tsconfig.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "compilerOptions": { - "target": "esnext", - "module": "esnext", - "moduleResolution": "node", - "strict": true, - "noLib": false, - "forceConsistentCasingInFileNames": true, - "allowSyntheticDefaultImports": true, - "strictFunctionTypes": false, - "jsx": "preserve", - "baseUrl": ".", - "allowJs": true, - "sourceMap": true, - "esModuleInterop": true, - "resolveJsonModule": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "experimentalDecorators": true, - "lib": ["dom", "esnext"], - "noImplicitAny": false, - "skipLibCheck": true, - "types": ["vite/client"], - "removeComments": true, - "paths": { - "/@/*": ["src/*"], - "/#/*": ["types/*"] - } - }, - "include": [ - "tests/**/*.ts", - "src/**/*.ts", - "src/**/*.d.ts", - "src/**/*.tsx", - "src/**/*.vue", - "types/**/*.d.ts", - "types/**/*.ts", - "build/**/*.ts", - "build/**/*.d.ts", - "mock/**/*.ts", - "vite.config.ts" - ], - "exclude": ["node_modules", "tests/server/**/*.ts", "dist", "**/*.js"] -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/types/axios.d.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/types/axios.d.ts deleted file mode 100644 index b18af05af..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/types/axios.d.ts +++ /dev/null @@ -1,53 +0,0 @@ -export type ErrorMessageMode = 'none' | 'modal' | 'message' | undefined; - -export interface RequestOptions { - // Splicing request parameters to url - joinParamsToUrl?: boolean; - // Format request parameter time - formatDate?: boolean; - // Whether to process the request result - isTransformResponse?: boolean; - // Whether to return native response headers - // For example: use this attribute when you need to get the response headers - isReturnNativeResponse?: boolean; - // Whether to join url - joinPrefix?: boolean; - // Interface address, use the default apiUrl if you leave it blank - apiUrl?: string; - // 请求拼接路径 - urlPrefix?: string; - // Error message prompt type - errorMessageMode?: ErrorMessageMode; - // Whether to add a timestamp - joinTime?: boolean; - ignoreCancelToken?: boolean; - // Whether to send token in header - withToken?: boolean; - // 请求重试机制 - retryRequest?: RetryRequest; -} - -export interface RetryRequest { - isOpenRetry: boolean; - count: number; - waitTime: number; -} -export interface Result { - code: number; - type: 'success' | 'error' | 'warning'; - message: string; - result: T; -} - -// multipart/form-data: upload file -export interface UploadFileParams { - // Other parameters - data?: Recordable; - // File parameter interface field name - name?: string; - // file name - file: File | Blob; - // file name - filename?: string; - [key: string]: any; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/types/config.d.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/types/config.d.ts deleted file mode 100644 index 8041e503d..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/types/config.d.ts +++ /dev/null @@ -1,162 +0,0 @@ -import { MenuTypeEnum, MenuModeEnum, TriggerEnum, MixSidebarTriggerEnum } from '/@/enums/menuEnum'; -import { - ContentEnum, - PermissionModeEnum, - ThemeEnum, - RouterTransitionEnum, - SettingButtonPositionEnum, - SessionTimeoutProcessingEnum, -} from '/@/enums/appEnum'; - -import { CacheTypeEnum } from '/@/enums/cacheEnum'; - -export type LocaleType = 'zh_CN' | 'en' | 'ru' | 'ja' | 'ko'; - -export interface MenuSetting { - bgColor: string; - fixed: boolean; - collapsed: boolean; - siderHidden: boolean; - canDrag: boolean; - show: boolean; - hidden: boolean; - split: boolean; - menuWidth: number; - mode: MenuModeEnum; - type: MenuTypeEnum; - theme: ThemeEnum; - topMenuAlign: 'start' | 'center' | 'end'; - trigger: TriggerEnum; - accordion: boolean; - closeMixSidebarOnChange: boolean; - collapsedShowTitle: boolean; - mixSideTrigger: MixSidebarTriggerEnum; - mixSideFixed: boolean; -} - -export interface MultiTabsSetting { - cache: boolean; - show: boolean; - showQuick: boolean; - canDrag: boolean; - showRedo: boolean; - showFold: boolean; -} - -export interface HeaderSetting { - bgColor: string; - fixed: boolean; - show: boolean; - theme: ThemeEnum; - // Turn on full screen - showFullScreen: boolean; - // Whether to show the lock screen - useLockPage: boolean; - // Show document button - showDoc: boolean; - // Show message center button - showNotice: boolean; - showSearch: boolean; -} - -export interface LocaleSetting { - showPicker: boolean; - // Current language - locale: LocaleType; - // default language - fallback: LocaleType; - // available Locales - availableLocales: LocaleType[]; -} - -export interface TransitionSetting { - // Whether to open the page switching animation - enable: boolean; - // Route basic switching animation - basicTransition: RouterTransitionEnum; - // Whether to open page switching loading - openPageLoading: boolean; - // Whether to open the top progress bar - openNProgress: boolean; -} - -export interface ProjectConfig { - // Storage location of permission related information - permissionCacheType: CacheTypeEnum; - // Whether to show the configuration button - showSettingButton: boolean; - // Whether to show the theme switch button - showDarkModeToggle: boolean; - // Configure where the button is displayed - settingButtonPosition: SettingButtonPositionEnum; - // Permission mode - permissionMode: PermissionModeEnum; - // Session timeout processing - sessionTimeoutProcessing: SessionTimeoutProcessingEnum; - // Website gray mode, open for possible mourning dates - grayMode: boolean; - // Whether to turn on the color weak mode - colorWeak: boolean; - // Theme color - themeColor: string; - - // The main interface is displayed in full screen, the menu is not displayed, and the top - fullContent: boolean; - // content width - contentMode: ContentEnum; - // Whether to display the logo - showLogo: boolean; - // Whether to show the global footer - showFooter: boolean; - // menuType: MenuTypeEnum; - headerSetting: HeaderSetting; - // menuSetting - menuSetting: MenuSetting; - // Multi-tab settings - multiTabsSetting: MultiTabsSetting; - // Animation configuration - transitionSetting: TransitionSetting; - // pageLayout whether to enable keep-alive - openKeepAlive: boolean; - // Lock screen time - lockTime: number; - // Show breadcrumbs - showBreadCrumb: boolean; - // Show breadcrumb icon - showBreadCrumbIcon: boolean; - // Use error-handler-plugin - useErrorHandle: boolean; - // Whether to open back to top - useOpenBackTop: boolean; - // Is it possible to embed iframe pages - canEmbedIFramePage: boolean; - // Whether to delete unclosed messages and notify when switching the interface - closeMessageOnSwitch: boolean; - // Whether to cancel the http request that has been sent but not responded when switching the interface. - removeAllHttpPending: boolean; -} - -export interface GlobConfig { - // Site title - title: string; - // Service interface url - apiUrl: string; - // Upload url - uploadUrl?: string; - // Service interface url prefix - urlPrefix?: string; - // Project abbreviation - shortName: string; -} -export interface GlobEnvConfig { - // Site title - VITE_GLOB_APP_TITLE: string; - // Service interface url - VITE_GLOB_API_URL: string; - // Service interface url prefix - VITE_GLOB_API_URL_PREFIX?: string; - // Project abbreviation - VITE_GLOB_APP_SHORT_NAME: string; - // Upload url - VITE_GLOB_UPLOAD_URL?: string; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/types/global.d.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/types/global.d.ts deleted file mode 100644 index 049ef55af..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/types/global.d.ts +++ /dev/null @@ -1,101 +0,0 @@ -import type { - ComponentRenderProxy, - VNode, - VNodeChild, - ComponentPublicInstance, - FunctionalComponent, - PropType as VuePropType, -} from 'vue'; - -declare global { - const __APP_INFO__: { - pkg: { - name: string; - version: string; - dependencies: Recordable; - devDependencies: Recordable; - }; - lastBuildTime: string; - }; - // declare interface Window { - // // Global vue app instance - // __APP__: App; - // } - - // vue - declare type PropType = VuePropType; - declare type VueNode = VNodeChild | JSX.Element; - - export type Writable = { - -readonly [P in keyof T]: T[P]; - }; - - declare type Nullable = T | null; - declare type NonNullable = T extends null | undefined ? never : T; - declare type Recordable = Record; - declare type ReadonlyRecordable = { - readonly [key: string]: T; - }; - declare type Indexable = { - [key: string]: T; - }; - declare type DeepPartial = { - [P in keyof T]?: DeepPartial; - }; - declare type TimeoutHandle = ReturnType; - declare type IntervalHandle = ReturnType; - - declare interface ChangeEvent extends Event { - target: HTMLInputElement; - } - - declare interface WheelEvent { - path?: EventTarget[]; - } - interface ImportMetaEnv extends ViteEnv { - __: unknown; - } - - declare interface ViteEnv { - VITE_PORT: number; - VITE_USE_MOCK: boolean; - VITE_USE_PWA: boolean; - VITE_PUBLIC_PATH: string; - VITE_PROXY: [string, string][]; - VITE_GLOB_APP_TITLE: string; - VITE_GLOB_APP_SHORT_NAME: string; - VITE_USE_CDN: boolean; - VITE_DROP_CONSOLE: boolean; - VITE_BUILD_COMPRESS: 'gzip' | 'brotli' | 'none'; - VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE: boolean; - VITE_LEGACY: boolean; - VITE_USE_IMAGEMIN: boolean; - VITE_GENERATE_UI: string; - } - - declare function parseInt(s: string | number, radix?: number): number; - - declare function parseFloat(string: string | number): number; - - namespace JSX { - // tslint:disable no-empty-interface - type Element = VNode; - // tslint:disable no-empty-interface - type ElementClass = ComponentRenderProxy; - interface ElementAttributesProperty { - $props: any; - } - interface IntrinsicElements { - [elem: string]: any; - } - interface IntrinsicAttributes { - [elem: string]: any; - } - } -} - -declare module 'vue' { - export type JSXComponent = - | { new (): ComponentPublicInstance } - | FunctionalComponent; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/types/index.d.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/types/index.d.ts deleted file mode 100644 index b279c0a60..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/types/index.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -declare interface Fn { - (...arg: T[]): R; -} - -declare interface PromiseFn { - (...arg: T[]): Promise; -} - -declare type RefType = T | null; - -declare type LabelValueOptions = { - label: string; - value: any; - [key: string]: string | number | boolean; -}[]; - -declare type EmitType = (event: string, ...args: any[]) => void; - -declare type TargetContext = '_self' | '_blank'; - -declare interface ComponentElRef { - $el: T; -} - -declare type ComponentRef = ComponentElRef | null; - -declare type ElRef = Nullable; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/types/module.d.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/types/module.d.ts deleted file mode 100644 index 96152061a..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/types/module.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -declare module '*.vue' { - import { DefineComponent } from 'vue'; - const Component: DefineComponent<{}, {}, any>; - export default Component; -} - -declare module 'ant-design-vue/es/locale/*' { - import { Locale } from 'ant-design-vue/types/locale-provider'; - const locale: Locale & ReadonlyRecordable; - export default locale as Locale & ReadonlyRecordable; -} - -declare module 'virtual:*' { - const result: any; - export default result; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/types/store.d.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/types/store.d.ts deleted file mode 100644 index 398a7bf25..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/types/store.d.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { ErrorTypeEnum } from '/@/enums/exceptionEnum'; -import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum'; -import { RoleInfo } from '/@/api/sys/model/userModel'; - -// Lock screen information -export interface LockInfo { - // Password required - pwd?: string | undefined; - // Is it locked? - isLock?: boolean; -} - -// Error-log information -export interface ErrorLogInfo { - // Type of error - type: ErrorTypeEnum; - // Error file - file: string; - // Error name - name?: string; - // Error message - message: string; - // Error stack - stack?: string; - // Error detail - detail: string; - // Error url - url: string; - // Error time - time?: string; -} - -export interface UserInfo { - userId: string | number; - username: string; - realName: string; - avatar: string; - desc?: string; - homePath?: string; - roles: RoleInfo[]; - isSts: boolean; // 是否通过IdentityServer4登录 - idToken: string; -} - -export interface BeforeMiniState { - menuCollapsed?: boolean; - menuSplit?: boolean; - menuMode?: MenuModeEnum; - menuType?: MenuTypeEnum; -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/types/utils.d.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/types/utils.d.ts deleted file mode 100644 index 6500d4472..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/types/utils.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { ComputedRef, Ref } from 'vue'; - -export type DynamicProps = { - [P in keyof T]: Ref | T[P] | ComputedRef; -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/types/vue-router.d.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/types/vue-router.d.ts deleted file mode 100644 index 41f1a4857..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/types/vue-router.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -export {}; - -declare module 'vue-router' { - interface RouteMeta extends Record { - orderNo?: number; - // title - title: string; - // dynamic router level. - dynamicLevel?: number; - // dynamic router real route path (For performance). - realPath?: string; - // Whether to ignore permissions - ignoreAuth?: boolean; - // role info - roles?: RoleEnum[]; - // Whether not to cache - ignoreKeepAlive?: boolean; - // Is it fixed on tab - affix?: boolean; - // icon on tab - icon?: string; - frameSrc?: string; - // current page transition - transitionName?: string; - // Whether the route has been dynamically added - hideBreadcrumb?: boolean; - // Hide submenu - hideChildrenInMenu?: boolean; - // Carrying parameters - carryParam?: boolean; - // Used internally to mark single-level menus - single?: boolean; - // Currently active menu - currentActiveMenu?: string; - // Never show in tab - hideTab?: boolean; - // Never show in menu - hideMenu?: boolean; - isLink?: boolean; - // only build for Menu - ignoreRoute?: boolean; - // Hide path for children - hidePathForChildren?: boolean; - - policy?: string; - } -} diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/vite.config.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/vite.config.ts deleted file mode 100644 index d315597c6..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/vite.config.ts +++ /dev/null @@ -1,115 +0,0 @@ -import type { UserConfig, ConfigEnv } from 'vite'; -import pkg from './package.json'; -import dayjs from 'dayjs'; -import { loadEnv } from 'vite'; -import { resolve } from 'path'; -import { generateModifyVars } from './build/generate/generateModifyVars'; -import { createProxy } from './build/vite/proxy'; -import { wrapperEnv } from './build/utils'; -import { createVitePlugins } from './build/vite/plugin'; -import { OUTPUT_DIR } from './build/constant'; - -function pathResolve(dir: string) { - return resolve(process.cwd(), '.', dir); -} - -const { dependencies, devDependencies, name, version } = pkg; -const __APP_INFO__ = { - pkg: { dependencies, devDependencies, name, version }, - lastBuildTime: dayjs().format('YYYY-MM-DD HH:mm:ss'), -}; - -export default ({ command, mode }: ConfigEnv): UserConfig => { - const root = process.cwd(); - - const env = loadEnv(mode, root); - - // The boolean type read by loadEnv is a string. This function can be converted to boolean type - const viteEnv = wrapperEnv(env); - - const { VITE_PORT, VITE_PUBLIC_PATH, VITE_PROXY, VITE_DROP_CONSOLE } = viteEnv; - - const isBuild = command === 'build'; - - return { - base: VITE_PUBLIC_PATH, - root, - resolve: { - alias: [ - { - find: 'vue-i18n', - replacement: 'vue-i18n/dist/vue-i18n.cjs.js', - }, - // /@/xxxx => src/xxxx - { - find: /\/@\//, - replacement: pathResolve('src') + '/', - }, - // /#/xxxx => types/xxxx - { - find: /\/#\//, - replacement: pathResolve('types') + '/', - }, - ], - }, - server: { - https: false, - // Listening on all local IPs - host: true, - port: VITE_PORT, - // Load proxy configuration from .env - proxy: createProxy(VITE_PROXY), - }, - esbuild: { - pure: VITE_DROP_CONSOLE ? ['console.log', 'debugger'] : [], - }, - build: { - target: 'es2015', - cssTarget: 'chrome80', - outDir: OUTPUT_DIR, - // minify: 'terser', - /** - * 当 minify=“minify:'terser'” 解开注释 - * Uncomment when minify="minify:'terser'" - */ - // terserOptions: { - // compress: { - // keep_infinity: true, - // drop_console: VITE_DROP_CONSOLE, - // }, - // }, - // Turning off brotliSize display can slightly reduce packaging time - brotliSize: false, - chunkSizeWarningLimit: 2000, - }, - define: { - // setting vue-i18-next - // Suppress warning - __INTLIFY_PROD_DEVTOOLS__: false, - __APP_INFO__: JSON.stringify(__APP_INFO__), - }, - - css: { - preprocessorOptions: { - less: { - modifyVars: generateModifyVars(), - javascriptEnabled: true, - }, - }, - }, - - // The vite plugin used by the project. The quantity is large, so it is separately extracted and managed - plugins: createVitePlugins(viteEnv, isBuild), - - optimizeDeps: { - // @iconify/iconify: The dependency is dynamically and virtually loaded by @purge-icons/generated, so it needs to be specified explicitly - include: [ - '@vue/runtime-core', - '@vue/shared', - '@iconify/iconify', - 'ant-design-vue/es/locale/zh_CN', - 'ant-design-vue/es/locale/en_US', - ], - }, - }; -}; diff --git a/templates/abp-vnext-pro-nuget-simplify/vben28/windi.config.ts b/templates/abp-vnext-pro-nuget-simplify/vben28/windi.config.ts deleted file mode 100644 index 0f3d1f23c..000000000 --- a/templates/abp-vnext-pro-nuget-simplify/vben28/windi.config.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { defineConfig } from 'vite-plugin-windicss'; -import { primaryColor } from './build/config/themeConfig'; - -export default defineConfig({ - darkMode: 'class', - plugins: [createEnterPlugin()], - theme: { - extend: { - zIndex: { - '-1': '-1', - }, - colors: { - primary: primaryColor, - }, - screens: { - sm: '576px', - md: '768px', - lg: '992px', - xl: '1200px', - '2xl': '1600px', - }, - }, - }, -}); - -/** - * Used for animation when the element is displayed. - * @param maxOutput The larger the maxOutput output, the larger the generated css volume. - */ -function createEnterPlugin(maxOutput = 6) { - const createCss = (index: number, d = 'x') => { - const upd = d.toUpperCase(); - return { - [`*> .enter-${d}:nth-child(${index})`]: { - transform: `translate${upd}(50px)`, - }, - [`*> .-enter-${d}:nth-child(${index})`]: { - transform: `translate${upd}(-50px)`, - }, - [`* > .enter-${d}:nth-child(${index}),* > .-enter-${d}:nth-child(${index})`]: { - 'z-index': `${10 - index}`, - opacity: '0', - animation: `enter-${d}-animation 0.4s ease-in-out 0.3s`, - 'animation-fill-mode': 'forwards', - 'animation-delay': `${(index * 1) / 10}s`, - }, - }; - }; - const handler = ({ addBase }) => { - const addRawCss = {}; - for (let index = 1; index < maxOutput; index++) { - Object.assign(addRawCss, { - ...createCss(index, 'x'), - ...createCss(index, 'y'), - }); - } - addBase({ - ...addRawCss, - [`@keyframes enter-x-animation`]: { - to: { - opacity: '1', - transform: 'translateX(0)', - }, - }, - [`@keyframes enter-y-animation`]: { - to: { - opacity: '1', - transform: 'translateY(0)', - }, - }, - }); - }; - return { handler }; -}