diff --git a/Directory.Build.props b/Directory.Build.props index 2cd061c5..d2892df0 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -10,8 +10,8 @@ nsnail $(SolutionDir)/dist/backend/$(MSBuildProjectName)/obj $(SolutionDir)/dist/backend/$(MSBuildProjectName)/bin - © 2006-2023 nsnail - 通用后台权限管理系统、快速开发框架(基于C#12/.NET9、Vue3/Vite、Element Plus等现代技术构建,具有十分整洁、优雅的编码规范) + © 2006-2024 nsnail + 通用后台权限管理系统、快速开发框架(基于C#13/.NET9、Vue3/Vite、ElementPlus等现代技术构建,具有十分整洁、优雅的编码规范) false true enable diff --git a/README.md b/README.md index 0851439a..e23fbc4e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # NetAdmin -通用后台权限管理系统、快速开发框架(基于C#12/.NET9、Vue3/Vite、Element Plus等现代技术构建,具有十分整洁、优雅的编码规范) +通用后台权限管理系统、快速开发框架(基于C#13/.NET9、Vue3/Vite、ElementPlus等现代技术构建,具有十分整洁、优雅的编码规范) [![.NET](https://github.com/nsnail/NetAdmin/actions/workflows/nightly-build.yml/badge.svg)](https://github.com/nsnail/NetAdmin/actions/workflows/nightly-build.yml) [![MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/nsnail/NetAdmin/blob/main/LICENSE) @@ -110,7 +110,7 @@ biz-infra-->infra | C# | 自动化版本管理 | [MinVer](https://github.com/adamralph/minver) | | TypeScript | SPA基础框架 | [Vue](https://github.com/vuejs/core) | | TypeScript | 前端构建工具 | [Vite](https://github.com/vitejs/vite) | -| TypeScript | UI控件库 | [Element Plus](https://github.com/element-plus/element-plus) | +| TypeScript | UI控件库 | [ElementPlus](https://github.com/element-plus/element-plus) | | TypeScript | CSS解析器 | [Sass](https://github.com/sass/sass) | | TypeScript | 图表和数据可视化 | [ECharts](https://github.com/apache/echarts) | | JavaScript | 后台管理界面 | [SCUI](https://gitee.com/lolicode/scui) | diff --git a/assets/seed-data/Sys_SiteMsg.json b/assets/seed-data/Sys_SiteMsg.json index 755b8a97..68276b7c 100644 --- a/assets/seed-data/Sys_SiteMsg.json +++ b/assets/seed-data/Sys_SiteMsg.json @@ -1,10 +1,10 @@ [ { - "Content": "

尊敬的用户:

\n

欢迎您使用 NetAdmin 后台管理系统!NetAdmin 是一款通用后台权限管理系统和快速开发框架,它基于 C#12/.NET9、Vue3/Vite、Element Plus 等现代技术构建,具有十分整洁、优雅的编码规范。

\n

NetAdmin 致力于为企业提供高效、安全、易用的解决方案,帮助您快速构建出符合业务需求的应用程序。系统提供了丰富的功能模块,包括用户管理、权限管理、日志管理、文件上传等,可以满足您日常管理的需求。

\n

在使用 NetAdmin 的过程中,我们真诚地希望您能够遵守以下规定:

\n

1. 不得利用 NetAdmin 进行非法活动或者侵犯他人权益;

\n

2. 不得对 NetAdmin 系统进行恶意攻击或者破坏;

\n

3. 不得将 NetAdmin 系统的任何部分用于商业目的或者未经授权的访问。

\n

4. 为了更好地为您提供服务,NetAdmin 将不断进行优化和升级,同时也欢迎您提出宝贵的意见和建议。如果您在使用过程中遇到任何问题,可以通过官方网站或者技术支持团队进行咨询和解决。

\n

再次感谢您对 NetAdmin 的信任和支持!我们相信,在您的使用过程中,NetAdmin 一定会成为您的得力助手,为您的事业发展提供强有力的支持!

\n

NetAdmin 开发团队

", + "Content": "

尊敬的用户:

\n

欢迎您使用 NetAdmin 后台管理系统!NetAdmin 是一款通用后台权限管理系统和快速开发框架,它基于 C#13/.NET9、Vue3/Vite、ElementPlus 等现代技术构建,具有十分整洁、优雅的编码规范。

\n

NetAdmin 致力于为企业提供高效、安全、易用的解决方案,帮助您快速构建出符合业务需求的应用程序。系统提供了丰富的功能模块,包括用户管理、权限管理、日志管理、文件上传等,可以满足您日常管理的需求。

\n

在使用 NetAdmin 的过程中,我们真诚地希望您能够遵守以下规定:

\n

1. 不得利用 NetAdmin 进行非法活动或者侵犯他人权益;

\n

2. 不得对 NetAdmin 系统进行恶意攻击或者破坏;

\n

3. 不得将 NetAdmin 系统的任何部分用于商业目的或者未经授权的访问。

\n

4. 为了更好地为您提供服务,NetAdmin 将不断进行优化和升级,同时也欢迎您提出宝贵的意见和建议。如果您在使用过程中遇到任何问题,可以通过官方网站或者技术支持团队进行咨询和解决。

\n

再次感谢您对 NetAdmin 的信任和支持!我们相信,在您的使用过程中,NetAdmin 一定会成为您的得力助手,为您的事业发展提供强有力的支持!

\n

NetAdmin 开发团队

", "CreatedUserId": 370942943322181, "CreatedUserName": "root", "MsgType": 2, - "Summary": "尊敬的用户:\n欢迎您使用 NetAdmin 后台管理系统!NetAdmin 是一款通用后台权限管理系统和快速开发框架,它基于 C#12/.NET9、Vue3/Vite、Element Plus 等现代", + "Summary": "尊敬的用户:\n欢迎您使用 NetAdmin 后台管理系统!NetAdmin 是一款通用后台权限管理系统和快速开发框架,它基于 C#13/.NET9、Vue3/Vite、ElementPlus 等现代", "Title": "欢迎使用 NetAdmin 后台管理系统", } ] \ No newline at end of file diff --git a/package.json b/package.json index f8e36dc0..6aa73167 100644 --- a/package.json +++ b/package.json @@ -11,4 +11,4 @@ "path": "node_modules/cz-git" } } -} +} \ No newline at end of file diff --git a/scripts/5.git.update.submodule.ps1 b/scripts/5.git.update.submodule.ps1 new file mode 100644 index 00000000..b07399a8 --- /dev/null +++ b/scripts/5.git.update.submodule.ps1 @@ -0,0 +1,3 @@ +git submodule update --progress --init --recursive --force --remote -- "../refs/Gurion" +git submodule update --progress --init --recursive --force --remote -- "../refs/NetAdmin.FreeSql" +git submodule update --progress --init --recursive --force --remote -- "../refs/ns-ext" \ No newline at end of file diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/ISelectExtensions.cs b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/ISelectExtensions.cs index bacc02cf..0917b2fb 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/ISelectExtensions.cs +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/Extensions/ISelectExtensions.cs @@ -1,4 +1,4 @@ -namespace NetAdmin.Infrastructure.Extensions; +namespace NetAdmin.Infrastructure.Extensions; /// /// ISelect 扩展方法 diff --git a/src/backend/NetAdmin/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj b/src/backend/NetAdmin/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj index f507faa4..4b61a84c 100644 --- a/src/backend/NetAdmin/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj +++ b/src/backend/NetAdmin/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj @@ -10,7 +10,6 @@ - diff --git a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RequestLogCache.cs b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RequestLogCache.cs index 3ed1dc15..8ba12863 100644 --- a/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RequestLogCache.cs +++ b/src/backend/NetAdmin/NetAdmin.SysComponent.Cache/Sys/RequestLogCache.cs @@ -18,7 +18,7 @@ public sealed class RequestLogCache(IDistributedCache cache, IRequestLogService public async Task CountAsync(QueryReq req) #else public Task CountAsync(QueryReq req) - #endif + #endif { #if !DEBUG var ret = await GetOrCreateAsync( // diff --git a/src/backend/UnitTests/Sys/DocTests.cs b/src/backend/UnitTests/Sys/DocTests.cs new file mode 100644 index 00000000..f885a15d --- /dev/null +++ b/src/backend/UnitTests/Sys/DocTests.cs @@ -0,0 +1,183 @@ +using NetAdmin.Domain.Dto.Sys.Doc.Catalog; +using NetAdmin.Domain.Dto.Sys.Doc.Content; + +namespace UnitTests.Sys; + +/// +/// 文档测试 +/// +[SuppressMessage("Usage", "xUnit1026:Theory methods should use all of their parameters")] +[SuppressMessage("Usage", "xUnit1028:Test method must have valid return type")] +public class DocTests(WebTestApplicationFactory factory, ITestOutputHelper testOutputHelper) + : WebApiTestBase(factory, testOutputHelper), IDocModule +{ + /// + [InlineData(default)] + [Theory] + public async Task BulkDeleteCatalogAsync(BulkReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task BulkDeleteContentAsync(BulkReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task CreateCatalogAsync(CreateDocCatalogReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task CreateContentAsync(CreateDocContentReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task DeleteCatalogAsync(DelReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task DeleteContentAsync(DelReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task EditCatalogAsync(EditDocCatalogReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task EditContentAsync(EditDocContentReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task ExportContentAsync(QueryReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task GetCatalogAsync(QueryDocCatalogReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task GetContentAsync(QueryDocContentReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task> PagedQueryCatalogAsync(PagedQueryReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task> PagedQueryContentAsync(PagedQueryReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task> QueryCatalogAsync(QueryReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task> QueryContentAsync(QueryReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task SetEnabledAsync(SetDocContentEnabledReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } + + /// + [InlineData(default)] + [Theory] + public async Task ViewContentAsync(QueryDocContentReq req) + { + var rsp = await PostJsonAsync(typeof(DocController), req); + Assert.True(rsp.IsSuccessStatusCode); + return default; + } +} \ No newline at end of file diff --git a/src/backend/YourSolution.AdmServer.Application/YourSolution.AdmServer.Application.csproj b/src/backend/YourSolution.AdmServer.Application/YourSolution.AdmServer.Application.csproj index 2fe4f666..3aa4c463 100644 --- a/src/backend/YourSolution.AdmServer.Application/YourSolution.AdmServer.Application.csproj +++ b/src/backend/YourSolution.AdmServer.Application/YourSolution.AdmServer.Application.csproj @@ -4,7 +4,4 @@ - - - \ No newline at end of file diff --git a/src/frontend/admin/src/components/naColUser/index.vue b/src/frontend/admin/src/components/naColUser/index.vue index db8e15dd..ccac418b 100644 --- a/src/frontend/admin/src/components/naColUser/index.vue +++ b/src/frontend/admin/src/components/naColUser/index.vue @@ -11,7 +11,7 @@

{{ $TOOL.getNestedProperty(row, $attrs.nestProp2) }}

- + diff --git a/src/frontend/admin/src/components/scCron/index.vue b/src/frontend/admin/src/components/scCron/index.vue index 3b527449..bbe62b28 100644 --- a/src/frontend/admin/src/components/scCron/index.vue +++ b/src/frontend/admin/src/components/scCron/index.vue @@ -293,7 +293,7 @@ diff --git a/src/frontend/admin/src/components/scIconSelect/index.vue b/src/frontend/admin/src/components/scIconSelect/index.vue index ba111c17..a487dfe3 100644 --- a/src/frontend/admin/src/components/scIconSelect/index.vue +++ b/src/frontend/admin/src/components/scIconSelect/index.vue @@ -49,7 +49,7 @@ diff --git a/src/frontend/admin/src/components/scTable/fieldFilter.vue b/src/frontend/admin/src/components/scTable/fieldFilter.vue index 455b29f9..18590055 100644 --- a/src/frontend/admin/src/components/scTable/fieldFilter.vue +++ b/src/frontend/admin/src/components/scTable/fieldFilter.vue @@ -13,7 +13,7 @@ diff --git a/src/frontend/admin/src/components/scTable/index.vue b/src/frontend/admin/src/components/scTable/index.vue index c04f30fc..f373d50b 100644 --- a/src/frontend/admin/src/components/scTable/index.vue +++ b/src/frontend/admin/src/components/scTable/index.vue @@ -90,8 +90,8 @@ :hide-after="0" :title="$t('列设置')" :width="500" - @after-leave="(customColumnShow = false)" - @show="(customColumnShow = true)" + @after-leave="customColumnShow = false" + @show="customColumnShow = true" placement="top" trigger="click">