43 Commits

Author SHA1 Message Date
tk
81ea13fa9d chore(release): 2.2.1 2024-12-04 16:36:12 +08:00
tk
4eecc0b4ce fix: 🐛 version lock
[skip ci]
2024-12-04 16:35:20 +08:00
tk
01058ba728 fix: 🐛 version 条件重复指定 2024-12-03 11:05:27 +08:00
a6f6a8f0a3 perf: nuget update 2024-11-29 22:42:47 +08:00
4f12b5064d Update README.md 2024-11-29 22:21:30 +08:00
2acf88cad1 style: 💄 code format 2024-11-29 22:13:01 +08:00
tk
180119019c chore: 🔨 sys_Menu.json
[skip ci]
2024-11-29 18:22:07 +08:00
tk
f5203782aa chore: 🔨 iSelect 扩展方法增强
[skip ci]
2024-11-29 17:44:13 +08:00
tk
4874a58eee perf: nuget update 2024-11-29 17:40:19 +08:00
tk
b4ca6d5626 style: 💄 解决方案文件段落整理
[skip ci]
2024-11-29 11:16:26 +08:00
tk
63d7a3ed4a refactor: ♻️ iSelect 扩展方法
[skip ci]
2024-11-29 11:08:37 +08:00
ef2a0c3280 fix: 🐛 editUser 2024-11-29 09:28:05 +08:00
c69655e353 build: 📦 refs update
[skip ci]
2024-11-29 00:35:42 +08:00
f0e1155ee8 build: 📦 修复项目引用路径问题
[skip ci]
2024-11-29 00:30:10 +08:00
03745ff767 build: 📦 更新子模块
[skip ci]
2024-11-28 23:24:03 +08:00
ee94d47551 refactor: ♻️ freeSql 重编译版本
[skip ci]
2024-11-28 23:18:25 +08:00
155deedd15 refactor: ♻️ 减少一些条件编译语句 (#229)
[skip ci]

Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-28 15:51:09 +08:00
a0a04590c9 build: 📦 rename.csx (#228)
[skip ci]

Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-28 10:27:47 +08:00
c88c8d293d fix: 🐛 按钮文字提示 (#227)
Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-27 18:38:52 +08:00
7501138e31 chore: 🔨 界面优化 (#226)
Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-27 17:58:38 +08:00
cb75d19202 Merge pull request #225 from nsnail/release
chore(release): 2.2.0
2024-11-27 16:54:46 +08:00
tk
e8a2d27c00 chore(release): 2.2.0 2024-11-27 16:54:27 +08:00
440c7ffcb9 chore: 🔨 分享文档链接按钮 (#224)
Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-27 16:54:15 +08:00
e8b568426b chore: 🔨 增加一个图标 (#223)
Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-27 16:20:17 +08:00
37b45c9f36 perf: npm update (#222)
Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-27 16:04:12 +08:00
7ed30406c9 feat: 文档管理 (#221)
Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-27 15:52:23 +08:00
71bfdaafa8 fix: 🐛 用户选择器报错 (#220)
Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-26 10:10:25 +08:00
cec96390a5 refactor: ♻️ 精简前端组件 (#219) 2024-11-25 22:30:45 +08:00
0e412db6ce perf: nuget update (#218)
Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-25 17:57:19 +08:00
4d857f1861 feat: select-filter badge icon (#217)
[skip ci]

Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-25 10:53:57 +08:00
d74a7e13ef perf: npm update (#216)
Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-22 18:13:17 +08:00
2f16efd291 refactor: ♻️ 样式优化 (#215)
[skip ci]

Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-22 18:12:03 +08:00
81d9b0b3bb feat: 菜单复制 (#214)
Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-22 14:04:33 +08:00
ef2f0de095 fix: 🐛 导出界面报错 (#213)
[skip ci]

Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-22 13:23:32 +08:00
6d87d8e9cd chore: 🔨 用户管理-角色排序 (#212)
[skip ci]

Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-22 12:11:10 +08:00
69dc407002 chore: 🔨 userbar下拉菜单弹出方式 (#211)
[skip ci]

Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-22 11:52:55 +08:00
6c71c74a27 fix: 🐛 请求日志批量插入,漏写了登录日志 (#210)
Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-22 11:16:18 +08:00
4e9f605ea2 fix: 🐛 idd (#208) 2024-11-16 14:40:21 +08:00
d28d7e9a18 chore: 🔨 导出文件时,如勾选,只导出勾选项 (#207) 2024-11-16 12:44:32 +08:00
a6018edb87 style: 💄 code format (#206)
[skip ci]

Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-15 19:22:06 +08:00
841a4195e7 fix: 🐛 导出文件的responseType (#205)
Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-15 18:34:45 +08:00
5e9b67bca8 refactor: ♻️ 精简框架分层 (#204)
[skip ci]

Co-authored-by: tk <fiyne1a@dingtalk.com>
2024-11-15 18:27:21 +08:00
76e5fdcd94 Merge pull request #203 from nsnail/release
chore(release): 2.1.0

[skip ci]
2024-11-15 16:48:47 +08:00
453 changed files with 4306 additions and 3077 deletions

View File

@ -0,0 +1 @@
drone workflows

1
.gitignore vendored
View File

@ -397,7 +397,6 @@ FodyWeavers.xsd
# JetBrains Rider
*.sln.iml
.idea/
!src/backend/CloudCode.DataGrip/.idea
# User Define
dist/

6
.gitmodules vendored
View File

@ -4,6 +4,6 @@
[submodule "refs/ns-ext"]
path = refs/ns-ext
url = https://github.com/nsnail/ns-ext.git
[submodule "refs/FreeSql"]
path = refs/FreeSql
url = https://github.com/nsnail/FreeSql.git
[submodule "refs/NetAdmin.FreeSql"]
path = refs/NetAdmin.FreeSql
url = https://github.com/nsnail/NetAdmin.FreeSql.git

View File

@ -2,6 +2,46 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [2.2.1](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.2.1) (2024-12-04)
### Features
* ✨ 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c))
* ✨ 文档管理 ([#221](https://github.com/nsnail/NetAdmin/issues/221)) ([7ed3040](https://github.com/nsnail/NetAdmin/commit/7ed30406c9f721a12f0b756ec8884a1882242b93))
* ✨ select-filter badge icon ([#217](https://github.com/nsnail/NetAdmin/issues/217)) ([4d857f1](https://github.com/nsnail/NetAdmin/commit/4d857f1861b1256980e7cc59e2ab6a5f7d966da2))
### Bug Fixes
* 🐛 按钮文字提示 ([#227](https://github.com/nsnail/NetAdmin/issues/227)) ([c88c8d2](https://github.com/nsnail/NetAdmin/commit/c88c8d293d44f2707f3b5232e6a40a141af9981c))
* 🐛 导出界面报错 ([#213](https://github.com/nsnail/NetAdmin/issues/213)) ([ef2f0de](https://github.com/nsnail/NetAdmin/commit/ef2f0de095e314f34bec21c0a2ccdb51423a163b))
* 🐛 导出文件的responseType ([#205](https://github.com/nsnail/NetAdmin/issues/205)) ([841a419](https://github.com/nsnail/NetAdmin/commit/841a4195e77aa96e3c6c72626c1add3f71a310aa))
* 🐛 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec))
* 🐛 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71))
* 🐛 editUser ([ef2a0c3](https://github.com/nsnail/NetAdmin/commit/ef2a0c3280532ac24889279e4780a1b1a2561a6b))
* 🐛 idd ([#208](https://github.com/nsnail/NetAdmin/issues/208)) ([4e9f605](https://github.com/nsnail/NetAdmin/commit/4e9f605ea2cc6fe394068cfea5638e51920b9096))
* 🐛 version 条件重复指定 ([01058ba](https://github.com/nsnail/NetAdmin/commit/01058ba7288bcc645f66de2f78e1d659d55333cf))
* 🐛 version lock ([4eecc0b](https://github.com/nsnail/NetAdmin/commit/4eecc0b4ce09f620f83109949e4c2b67b7f8ba90))
## [2.2.0](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.2.0) (2024-11-27)
### Features
* ✨ 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c))
* ✨ 文档管理 ([#221](https://github.com/nsnail/NetAdmin/issues/221)) ([7ed3040](https://github.com/nsnail/NetAdmin/commit/7ed30406c9f721a12f0b756ec8884a1882242b93))
* ✨ select-filter badge icon ([#217](https://github.com/nsnail/NetAdmin/issues/217)) ([4d857f1](https://github.com/nsnail/NetAdmin/commit/4d857f1861b1256980e7cc59e2ab6a5f7d966da2))
### Bug Fixes
* 🐛 导出界面报错 ([#213](https://github.com/nsnail/NetAdmin/issues/213)) ([ef2f0de](https://github.com/nsnail/NetAdmin/commit/ef2f0de095e314f34bec21c0a2ccdb51423a163b))
* 🐛 导出文件的responseType ([#205](https://github.com/nsnail/NetAdmin/issues/205)) ([841a419](https://github.com/nsnail/NetAdmin/commit/841a4195e77aa96e3c6c72626c1add3f71a310aa))
* 🐛 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec))
* 🐛 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71))
* 🐛 idd ([#208](https://github.com/nsnail/NetAdmin/issues/208)) ([4e9f605](https://github.com/nsnail/NetAdmin/commit/4e9f605ea2cc6fe394068cfea5638e51920b9096))
## [2.1.0](https://github.com/nsnail/NetAdmin/compare/v2.0.0...v2.1.0) (2024-11-15)

View File

@ -10,8 +10,8 @@
<Authors>nsnail</Authors>
<BaseIntermediateOutputPath>$(SolutionDir)/dist/backend/$(MSBuildProjectName)/obj</BaseIntermediateOutputPath>
<BaseOutputPath>$(SolutionDir)/dist/backend/$(MSBuildProjectName)/bin</BaseOutputPath>
<Copyright>© 2006-2023 nsnail</Copyright>
<Description>通用后台权限管理系统、快速开发框架基于C#12/.NET9、Vue3/Vite、Element Plus等现代技术构建具有十分整洁、优雅的编码规范</Description>
<Copyright>© 2006-2024 nsnail</Copyright>
<Description>通用后台权限管理系统、快速开发框架基于C#13/.NET9、Vue3/Vite、ElementPlus等现代技术构建具有十分整洁、优雅的编码规范</Description>
<EnableBaseIntermediateOutputPathMismatchWarning>false</EnableBaseIntermediateOutputPathMismatchWarning>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<ImplicitUsings>enable</ImplicitUsings>

View File

@ -1,12 +1,42 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{C84EB5A0-37AD-4B17-A51E-E36888C4441E}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".drone", ".drone", "{3E408077-E73E-45CE-A53A-EF5F9DAE4B46}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "backend", "backend", "{4DAF9366-855F-46BB-AE4C-660C92FA0697}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{BB5BB244-E7D2-4368-8C18-C1C0ED1E12D1}"
ProjectSection(SolutionItems) = preProject
README.md = .drone/workflows/README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{1129FE25-466B-4F4F-85FC-3752664245E1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{3C6F049E-3EE8-4D66-9AFF-E8A369032487}"
ProjectSection(SolutionItems) = preProject
nightly-build.yml = .github/workflows/nightly-build.yml
README.md = .github/workflows/README.md
release.yml = .github/workflows/release.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{8E4C93BA-9493-4892-80C4-5E174C504829}"
ProjectSection(SolutionItems) = preProject
code.quality.props = build/code.quality.props
copy.pkg.xml.comment.files.targets = build/copy.pkg.xml.comment.files.targets
minver.targets = build/minver.targets
prebuild.targets = build/prebuild.targets
stylecop.analyzers.ruleset = build/stylecop.analyzers.ruleset
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{E80A1018-C354-4A26-9029-8847BB9DA864}"
ProjectSection(SolutionItems) = preProject
README.md = docker/README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{5198A03D-0CAC-4828-A807-34A693F73859}"
ProjectSection(SolutionItems) = preProject
.commitlintrc.js = .commitlintrc.js
@ -26,12 +56,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{5198A03D-0
README.md = README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B25C9-0901-4923-913F-00F9A6B352A5}"
ProjectSection(SolutionItems) = preProject
1.git.pull.request.ps1 = scripts/1.git.pull.request.ps1
2.git.release.ps1 = scripts/2.git.release.ps1
3.git.recreate.branch.ps1 = scripts/3.git.recreate.branch.ps1
4.git.del.obsolete.tags.ps1 = scripts/4.git.del.obsolete.tags.ps1
5.git.update.submodule.ps1 = scripts/5.git.update.submodule.ps1
clean.ln.csx = scripts/clean.ln.csx
code.clean.csx = scripts/code.clean.csx
code.clean.ps1 = scripts/code.clean.ps1
@ -49,23 +81,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B
wait.server.stop.sh = scripts/wait.server.stop.sh
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{1129FE25-466B-4F4F-85FC-3752664245E1}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{C84EB5A0-37AD-4B17-A51E-E36888C4441E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{3C6F049E-3EE8-4D66-9AFF-E8A369032487}"
ProjectSection(SolutionItems) = preProject
nightly-build.yml = .github/workflows/nightly-build.yml
README.md = .github/workflows/README.md
release.yml = .github/workflows/release.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{8E4C93BA-9493-4892-80C4-5E174C504829}"
ProjectSection(SolutionItems) = preProject
code.quality.props = build/code.quality.props
copy.pkg.xml.comment.files.targets = build/copy.pkg.xml.comment.files.targets
minver.targets = build/minver.targets
prebuild.targets = build/prebuild.targets
stylecop.analyzers.ruleset = build/stylecop.analyzers.ruleset
EndProjectSection
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "backend", "backend", "{4DAF9366-855F-46BB-AE4C-660C92FA0697}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Infrastructure", "src\backend\NetAdmin\NetAdmin.Infrastructure\NetAdmin.Infrastructure.csproj", "{1E62C322-EE42-4699-A6F1-791C53EFA62D}"
EndProject
@ -103,27 +122,19 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "src\backend\Un
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Tests", "src\backend\NetAdmin\NetAdmin.Tests\NetAdmin.Tests.csproj", "{00604162-C444-478B-B773-3AB23C856CA7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{E80A1018-C354-4A26-9029-8847BB9DA864}"
ProjectSection(SolutionItems) = preProject
README.md = docker/README.md
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Domain", "src\backend\NetAdmin\NetAdmin.SysComponent.Domain\NetAdmin.SysComponent.Domain.csproj", "{51D6E603-0749-4A11-A78C-9E5BB127E03A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YourSolution.AdmServer.Domain", "src\backend\YourSolution.AdmServer.Domain\YourSolution.AdmServer.Domain.csproj", "{932520DF-D312-415A-A128-1117F8221D68}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YourSolution.AdmServer.Infrastructure", "src\backend\YourSolution.AdmServer.Infrastructure\YourSolution.AdmServer.Infrastructure.csproj", "{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Infrastructure", "src\backend\NetAdmin\NetAdmin.SysComponent.Infrastructure\NetAdmin.SysComponent.Infrastructure.csproj", "{48EE6FC4-B64A-40D3-B889-36837E067880}"
EndProject
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gurion", "refs\Gurion\src\Gurion\Gurion.csproj", "{CCD098FE-4F95-4FA4-8CC0-9A6DE921FBAE}"#refs
##EndProject#refs
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql", "refs\FreeSql\FreeSql\FreeSql.csproj", "{3C65DA42-877D-46FF-B754-C12214302A29}"#refs
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql", "refs\NetAdmin.FreeSql\src\FreeSql\FreeSql.csproj", "{3C65DA42-877D-46FF-B754-C12214302A29}"#refs
##EndProject#refs
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.Provider.Sqlite", "refs\FreeSql\Providers\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj", "{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}"#refs
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.Provider.Sqlite", "refs\NetAdmin.FreeSql\src\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj", "{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}"#refs
##EndProject#refs
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.DbContext", "refs\FreeSql\FreeSql.DbContext\FreeSql.DbContext.csproj", "{FE03DF27-EC56-48DB-81B0-F99947259A7C}"#refs
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.DbContext", "refs\NetAdmin.FreeSql\src\FreeSql.DbContext\FreeSql.DbContext.csproj", "{FE03DF27-EC56-48DB-81B0-F99947259A7C}"#refs
##EndProject#refs
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -185,10 +196,6 @@ Global
{00604162-C444-478B-B773-3AB23C856CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Release|Any CPU.Build.0 = Release|Any CPU
{51D6E603-0749-4A11-A78C-9E5BB127E03A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{51D6E603-0749-4A11-A78C-9E5BB127E03A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{51D6E603-0749-4A11-A78C-9E5BB127E03A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{51D6E603-0749-4A11-A78C-9E5BB127E03A}.Release|Any CPU.Build.0 = Release|Any CPU
{932520DF-D312-415A-A128-1117F8221D68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{932520DF-D312-415A-A128-1117F8221D68}.Debug|Any CPU.Build.0 = Debug|Any CPU
{932520DF-D312-415A-A128-1117F8221D68}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -197,10 +204,6 @@ Global
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Release|Any CPU.Build.0 = Release|Any CPU
{48EE6FC4-B64A-40D3-B889-36837E067880}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{48EE6FC4-B64A-40D3-B889-36837E067880}.Debug|Any CPU.Build.0 = Debug|Any CPU
{48EE6FC4-B64A-40D3-B889-36837E067880}.Release|Any CPU.ActiveCfg = Release|Any CPU
{48EE6FC4-B64A-40D3-B889-36837E067880}.Release|Any CPU.Build.0 = Release|Any CPU
##{CCD098FE-4F95-4FA4-8CC0-9A6DE921FBAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
##{CCD098FE-4F95-4FA4-8CC0-9A6DE921FBAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
##{CCD098FE-4F95-4FA4-8CC0-9A6DE921FBAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -238,10 +241,9 @@ Global
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{79409163-5006-405D-AC96-406FA0AD77B7} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{51D6E603-0749-4A11-A78C-9E5BB127E03A} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{932520DF-D312-415A-A128-1117F8221D68} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{48EE6FC4-B64A-40D3-B889-36837E067880} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{3C6F049E-3EE8-4D66-9AFF-E8A369032487} = {1129FE25-466B-4F4F-85FC-3752664245E1}
{BB5BB244-E7D2-4368-8C18-C1C0ED1E12D1} = {3E408077-E73E-45CE-A53A-EF5F9DAE4B46}
EndGlobalSection
EndGlobal

View File

@ -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)
@ -28,15 +28,14 @@ dotnet --list-sdks
git clone https://github.com/nsnail/NetAdmin.git && cd ./NetAdmin
# 3. 确认本机 redis 处于运行状态
redis-server # 启动
redis-server # 启动服务器
redis-cli # 连接测试
# 下载 redis for windowshttps://github.com/redis-windows/redis-windows/releases
# 下载 redis for linux/machttps://redis.io/download
# 4. 运行后端 WebApi
dotnet run --project ./src/backend/YourSolution.AdmServer.Host/YourSolution.AdmServer.Host.csproj --urls http://[::]:5010 -is
# -i 插入种子数据
# -s 同步数据库结构
# -i 插入种子数据-s 同步数据库结构
# 浏览器访问 http://localhost:5010 将看到SwaggerKnife4jUI界面
# 5. 检查 nodejs 版本 >=20
@ -70,29 +69,27 @@ npm run dev
```mermaid
flowchart TD
sys-host["NetAdmin.SysComponent.Host\n系统组件:主机层"]
sys-cache["NetAdmin.SysComponent.Cache\n系统组件:缓存层"]
sys-app["NetAdmin.SysComponent.Application\n系统组件:应用层"]
sys-domain["NetAdmin.SysComponent.Domain\n系统组件数据实体层"]
sys-infra["NetAdmin.SysComponent.Infrastructure\n系统组件基础设施层"]
host["NetAdmin.Host\n框架主机层\n.Net自托管主机程序\n输入输出格式化\n数据校验、鉴权\n...所有HTTP管道过滤器中间件"]
cache["NetAdmin.Cache\n框架缓存层\n基于Redis或MemoryCache的缓存策略实现"]
app["NetAdmin.Application\n框架业务应用层\n内部服务增删改查\n外部服务增删改查\n...所有业务用例的计算与组合逻辑的模块化"]
domain["NetAdmin.Domain\n框架数据实体层\n数据库关系实体映射\nDTO数据传输对象\n...所有数据模型的抽象与封装)"]
infra["NetAdmin.Infrastructure\n框架基础设施层\n第三方组件和Nuget包引用\n公共构建和程序运行配置\n公共常量枚举异常定义\n全球化化和多语言\n...所有公共Utility工具"]
biz-host["YourSolution.XXX.Host\n业务实例:主机层)"]
biz-cache["YourSolution.XXX.Cache\n业务实例:缓存层)"]
biz-app["YourSolution.XXX.Application\n业务实例:应用层)"]
biz-domain["YourSolution.XXX.Domain\n业务实例数据实体层"]
biz-infra["YourSolution.XXX.Infrastructure\n业务实例基础设施层"]
sys-host["NetAdmin.SysComponent.Host\n系统组件主机层"]
sys-cache["NetAdmin.SysComponent.Cache\n系统组件缓存层"]
sys-app["NetAdmin.SysComponent.Application\n系统组件应用层"]
host["<b>NetAdmin.Host</b>\n框架主机层\n.Net自托管主机程序\n输入输出格式化\n数据校验、鉴权\n...所有HTTP管道过滤器中间件"]
cache["<b>NetAdmin.Cache</b>\n框架缓存层\n基于Redis或MemoryCache的缓存策略实现"]
app["<b>NetAdmin.Application</b>\n框架业务应用层\n内部服务增删改查\n外部服务增删改查\n...所有业务用例的计算与组合逻辑的模块化"]
domain["<b>NetAdmin.Domain</b>\n框架数据实体层\n数据库关系实体映射\nDTO数据传输对象\n...所有数据模型的抽象与封装"]
infra["<b>NetAdmin.Infrastructure</b>\n框架基础设施层\n第三方组件和Nuget包引用\n公共构建和程序运行配置\n公共常量枚举异常定义\n全球化化和多语言\n...所有公共Utility工具"]
biz-host["YourSolution.XXX.Host\n业务实例主机层"]
biz-cache["YourSolution.XXX.Cache\n业务实例缓存层"]
biz-app["YourSolution.XXX.Application\n业务实例应用层"]
biz-domain["YourSolution.XXX.Domain\n业务实例数据实体层"]
biz-infra["YourSolution.XXX.Infrastructure\n业务实例基础设施层"]
biz-host-->biz-cache-->biz-app-->biz-domain-->biz-infra
sys-host-->sys-cache-->sys-app-->sys-domain-->sys-infra
sys-host-->sys-cache-->sys-app-->domain-->infra
host-->cache-->app-->domain-->infra
biz-host-->sys-host-->host
biz-cache-->sys-cache-->cache
biz-app-->sys-app-->app
biz-domain-->sys-domain-->domain
biz-infra-->sys-infra-->infra
biz-domain-->domain
biz-infra-->infra
```
## 特别鸣谢
@ -112,7 +109,7 @@ biz-infra-->sys-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) |

View File

@ -1,3 +1,7 @@
上次执行时间
上次执行状态
上次执行耗时
下次执行时间
不为其中之一
不以什么开始
不以什么结束
@ -8,63 +12,138 @@
中专
中共党员
为其中之一
人工审核
以什么开始
以什么结束
保密
作业名称
作业状态
保密
信息
倒序排序
全部数据
公告
共青团员
出生证
创建时间
初中
删除
包含
博士
博士后
发送失败
同步数据库结构
响应体
响应状态码
唯一编码
备注
外国人居留证
外部错误
大专
大于
大于等于
字典内容导出
宕机
客户端IP
小于
小于等于
小学
已发送
已婚
已校验
已读
并且
成功
或者
所属角色
所属部门
手机
手机号
执行耗时
执行计划
护照
指定部门数据
按钮
排序
接口名称
接口导出
接口描述
接口路径
插入种子数据
操作系统
数据范围
文档内容
文档内容导出
文档标题
无效操作
无效输入
无限权限
日期范围
是否启用
显示仪表板
最后登录时间
未处理异常
未婚
未读
本人数据
本科
本部门和下级部门数据
本部门数据
框架
比较数据库结构
注册
消息主题
消息摘要
消息类型
港澳台通行证
用户代理
用户名
用户导出
电子邮箱
登录
登录名
登录日志导出
硕士
示例导出
离异
空闲
站内信导出
等于
等于
待发送
管理模块
系统模块
绑定手机号码
结果非预期
群众
自定义
范围
菜单
角色名称
角色导出
解绑手机号码
警告
计划作业导出
计划作业执行记录导出
请求方式
请求日志导出
调试
跟踪
跟踪标识
身份证
运行
通知
邮箱号
部门名称
部门导出
配置导出
重设密码
链接
错误
随机排序
项值
项名
顺序排序
高中
默认角色
默认部门

View File

@ -1,23 +1,121 @@
1分钟内只能发送1次
6位数字
8位以上数字字母组合
XML注释文件不存在
中文姓名
事务已回滚
事务已提交
人机校验请求不能为空
人机验证未通过
作业名称不能为空
允许的文件大小
允许的文件格式
区号电话号码分机号
参数格式不正确
唯一编码不能为空
图标代码不能为空
图标名称不能为空
婚姻状况不正确
字典名称不能为空
字典目录不存在
字典目录编号不能为空
字典编码不能为空
学历不正确
完全公开
密码不能为空
已处理完毕
并发冲突_请稍后重试
开始事务
性别不正确
手机号码不正确
手机号码不能为空
接口编码不存在
支付宝账号
政治面貌不正确
数据库同步开始
数据库服务器时钟偏移
数据库结构同步完成
文件不能为空
文档内容不能为空
文档分类不存在
文档分类名称不能为空
文档分类编号不能为空
文档分类编码不能为空
文档标题不能为空
新密码不能为空
新手机号码验证码不正确
无效端口号
无效证件号码
旧密码不正确
旧密码不能为空
旧手机号码不正确
旧手机号码验证码不正确
时间表达式
时间计划不能为空
未指定部门
未获取到待执行任务
档案可见性不正确
模块名称不能为空
模块类型不能为空
模块说明不能为空
此节点已下线
民族不正确
消息主题不能为空
消息内容不能为空
父节点不存在
用户不存在
用户名不能为空
用户名不能是手机号码
用户名或密码错误
用户名长度4位以上
用户头像不能为空
用户编号不存在
登录用户
目标设备不能为空
短信验证请求不能为空
种子数据插入完成
站内信不存在
站内信状态不正确
站内信类型不正确
缓存键不能为空
网络地址不正确
自己可见
菜单名称不能为空
菜单标题不能为空
菜单类型不正确
菜单编号不能为空
角色不存在
角色名称不能为空
角色数据范围不正确
角色编号不能为空
角色编号列表不能为空
记录已存在
设备类型不能为空
证件类型不正确
该角色下存在用户
该部门下存在子部门
该部门下存在用户
请求地址不能为空
请求对象不能为空
请求方法不正确
请稍后重试
请联系管理员激活账号
读取用户令牌出错
账号不能为空
邀请码不正确
邮箱验证码不正确
部门不存在
部门可见
部门名称不能为空
配置文件初始化完毕
键值不能为空
键名称不能为空
随机延时结束时间不正确
随机延时起始时间不正确
非JSON字符串
验证数据不能为空
验证码不正确
验证码不能为空
验证码目标设备类型不正确
验证码类型不正确
验证码类型不能为空

View File

@ -1,81 +0,0 @@
上次执行时间
上次执行状态
上次执行耗时
下次执行时间
人工审核
作业名称
作业状态
全部数据
公告
创建时间
删除
发送失败
响应体
响应状态码
唯一编码
备注
字典内容导出
客户端IP
已发送
已校验
已读
所属角色
所属部门
手机
手机号
执行耗时
执行计划
指定部门数据
按钮
排序
接口名称
接口导出
接口描述
接口路径
操作系统
数据范围
无限权限
是否启用
显示仪表板
最后登录时间
未读
本人数据
本部门和下级部门数据
本部门数据
框架
注册
消息主题
消息摘要
消息类型
用户代理
用户名
用户导出
电子邮箱
登录
登录名
登录日志导出
空闲
站内信导出
等待发送
绑定手机号码
菜单
角色名称
角色导出
解绑手机号码
计划作业导出
计划作业执行记录导出
请求方式
请求日志导出
跟踪标识
运行
通知
邮箱号
部门名称
部门导出
配置导出
重设密码
链接
项值
项名
默认角色
默认部门

View File

@ -1,102 +0,0 @@
1分钟内只能发送1次
人机校验请求不能为空
人机验证未通过
作业名称不能为空
允许的文件大小
允许的文件格式
唯一编码不能为空
图标代码不能为空
图标名称不能为空
婚姻状况不正确
字典名称不能为空
字典目录不存在
字典目录编号不能为空
字典目录编号不能为空
字典编码不能为空
学历不正确
密码不能为空
密码不能为空
密码不能为空
密码不能为空
已处理完毕
已处理完毕
已处理完毕
并发冲突_请稍后重试
性别不正确
手机号码不正确
手机号码不能为空
接口编码不存在
政治面貌不正确
数据库服务器时钟偏移
文件不能为空
新密码不能为空
新手机号码验证码不正确
旧密码不正确
旧密码不能为空
旧手机号码不正确
旧手机号码验证码不正确
时间计划不能为空
未指定部门
未获取到待执行任务
模块名称不能为空
模块类型不能为空
模块说明不能为空
此节点已下线
此节点已下线
民族不正确
消息主题不能为空
消息内容不能为空
父节点不存在
用户不存在
用户名不能为空
用户名不能为空
用户名不能为空
用户名或密码错误
用户头像不能为空
用户编号不存在
目标设备不能为空
目标设备不能为空
短信验证请求不能为空
短信验证请求不能为空
短信验证请求不能为空
站内信不存在
站内信状态不正确
站内信类型不正确
缓存键不能为空
网络地址不正确
网络地址不正确
网络地址不正确
菜单名称不能为空
菜单标题不能为空
菜单类型不正确
菜单编号不能为空
角色不存在
角色名称不能为空
角色数据范围不正确
角色编号不能为空
角色编号列表不能为空
设备类型不能为空
证件类型不正确
该角色下存在用户
该部门下存在子部门
该部门下存在用户
请求地址不能为空
请求方法不正确
请稍后重试
请联系管理员激活账号
读取用户令牌出错
账号不能为空
邮箱验证码不正确
部门不存在
部门名称不能为空
键值不能为空
键名称不能为空
键名称不能为空
随机延时结束时间不正确
随机延时起始时间不正确
验证数据不能为空
验证码不正确
验证码不能为空
验证码目标设备类型不正确
验证码类型不正确
验证码类型不能为空

View File

@ -140,13 +140,34 @@
"Title": "缓存管理",
"Type": 1
},
// ------------------------------ 档案管理 ------------------------------
{
"Icon": "sc-icon-Archive",
"Id": 616214756757512,
"Name": "archive",
"Path": "/archive",
"Sort": 98,
"Title": "档案管理",
"Type": 1
},
{
"Component": "sys/doc",
"Icon": "el-icon-document",
"Id": 616214756757516,
"Name": "archive/doc",
"ParentId": 616214756757512,
"Path": "/archive/doc",
"Sort": 100,
"Title": "文档管理",
"Type": 1
},
// ------------------------------ 日志管理 ------------------------------
{
"Icon": "el-icon-tickets",
"Id": 374792687640581,
"Name": "log",
"Path": "/log",
"Sort": 98,
"Sort": 97,
"Title": "日志管理",
"Type": 1
},
@ -178,7 +199,7 @@
"Id": 373838105399301,
"Name": "dev",
"Path": "/dev",
"Sort": 97,
"Sort": 96,
"Title": "开发管理",
"Type": 1
},
@ -198,7 +219,7 @@
"ParentId": 373838105399301,
"Icon": "el-icon-eleme-filled",
"Name": "dev/element",
"Path": "http://element-plus.org/zh-CN/component/overview.html",
"Path": "https://element-plus.org/zh-CN/component/overview.html",
"Sort": 99,
"Title": "Element",
"Type": 3,

View File

@ -1,10 +1,10 @@
[
{
"Content": "<p>尊敬的用户:</p>\n<p style=\"padding-left: 40px;\">欢迎您使用 NetAdmin 后台管理系统NetAdmin 是一款通用后台权限管理系统和快速开发框架,它基于 C#12/.NET9、Vue3/Vite、Element Plus 等现代技术构建,具有十分整洁、优雅的编码规范。</p>\n<p style=\"padding-left: 40px;\">NetAdmin 致力于为企业提供高效、安全、易用的解决方案,帮助您快速构建出符合业务需求的应用程序。系统提供了丰富的功能模块,包括用户管理、权限管理、日志管理、文件上传等,可以满足您日常管理的需求。</p>\n<p style=\"padding-left: 40px;\">在使用 NetAdmin 的过程中,我们真诚地希望您能够遵守以下规定:</p>\n<p style=\"padding-left: 80px;\">1. 不得利用 NetAdmin 进行非法活动或者侵犯他人权益;</p>\n<p style=\"padding-left: 80px;\">2. 不得对 NetAdmin 系统进行恶意攻击或者破坏;</p>\n<p style=\"padding-left: 80px;\">3. 不得将 NetAdmin 系统的任何部分用于商业目的或者未经授权的访问。</p>\n<p style=\"padding-left: 80px;\">4. 为了更好地为您提供服务NetAdmin 将不断进行优化和升级,同时也欢迎您提出宝贵的意见和建议。如果您在使用过程中遇到任何问题,可以通过官方网站或者技术支持团队进行咨询和解决。</p>\n<p style=\"padding-left: 40px;\">再次感谢您对 NetAdmin 的信任和支持我们相信在您的使用过程中NetAdmin 一定会成为您的得力助手,为您的事业发展提供强有力的支持!</p>\n<p style=\"text-align: right;\">NetAdmin 开发团队</p>",
"Content": "<p>尊敬的用户:</p>\n<p style=\"padding-left: 40px;\">欢迎您使用 NetAdmin 后台管理系统NetAdmin 是一款通用后台权限管理系统和快速开发框架,它基于 C#13/.NET9、Vue3/Vite、ElementPlus 等现代技术构建,具有十分整洁、优雅的编码规范。</p>\n<p style=\"padding-left: 40px;\">NetAdmin 致力于为企业提供高效、安全、易用的解决方案,帮助您快速构建出符合业务需求的应用程序。系统提供了丰富的功能模块,包括用户管理、权限管理、日志管理、文件上传等,可以满足您日常管理的需求。</p>\n<p style=\"padding-left: 40px;\">在使用 NetAdmin 的过程中,我们真诚地希望您能够遵守以下规定:</p>\n<p style=\"padding-left: 80px;\">1. 不得利用 NetAdmin 进行非法活动或者侵犯他人权益;</p>\n<p style=\"padding-left: 80px;\">2. 不得对 NetAdmin 系统进行恶意攻击或者破坏;</p>\n<p style=\"padding-left: 80px;\">3. 不得将 NetAdmin 系统的任何部分用于商业目的或者未经授权的访问。</p>\n<p style=\"padding-left: 80px;\">4. 为了更好地为您提供服务NetAdmin 将不断进行优化和升级,同时也欢迎您提出宝贵的意见和建议。如果您在使用过程中遇到任何问题,可以通过官方网站或者技术支持团队进行咨询和解决。</p>\n<p style=\"padding-left: 40px;\">再次感谢您对 NetAdmin 的信任和支持我们相信在您的使用过程中NetAdmin 一定会成为您的得力助手,为您的事业发展提供强有力的支持!</p>\n<p style=\"text-align: right;\">NetAdmin 开发团队</p>",
"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 后台管理系统",
}
]

View File

@ -23,7 +23,7 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="SonarAnalyzer.CSharp" Version="9.32.0.97167">
<PackageReference Include="SonarAnalyzer.CSharp" Version="10.3.0.106239">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

View File

@ -1,9 +1,9 @@
{
"version": "2.1.0",
"version": "2.2.1",
"devDependencies": {
"cz-git": "^1.11.0",
"commitizen": "^4.3.1",
"prettier": "^3.3.3",
"prettier": "^3.4.1",
"standard-version": "^9.5.0"
},
"config": {

Submodule refs/FreeSql deleted from 013f35e296

1
refs/NetAdmin.FreeSql Submodule

Submodule refs/NetAdmin.FreeSql added at c851ae3da2

View File

@ -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"

View File

@ -1,12 +1,11 @@
#r "nuget: NSExt, 2.2.0"
#r "nuget: NSExt, 2.3.2"
using NSExt.Extensions;
Console.WriteLine("请输入原始名称NetAdmin");
var oldName = Console.ReadLine().NullOrEmpty("NetAdmin");
Console.WriteLine("请输入替换名称:");
var newName = Console.ReadLine();
foreach (var path in Directory.EnumerateDirectories("../", $"*{oldName}*",
SearchOption.AllDirectories))
foreach (var path in Directory.EnumerateDirectories("../", $"*{oldName}*", SearchOption.AllDirectories).Where(x => !x.Contains(".git")))
{
Console.Write($"{path} --> ");
var newPath = path.Replace(oldName, newName);
@ -16,7 +15,7 @@ foreach (var path in Directory.EnumerateDirectories("../", $"*{oldName}*",
Console.WriteLine();
foreach (var path in Directory.EnumerateFiles("../", $"*.*", SearchOption.AllDirectories))
foreach (var path in Directory.EnumerateFiles("../", $"*.*", SearchOption.AllDirectories).Where(x => !x.Contains(".git")))
{
File.WriteAllText(path, File.ReadAllText(path).Replace(oldName, newName));
var newPath = path.Replace(oldName, newName);

View File

@ -45,6 +45,20 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{
"""
);
content = Regex.Replace(
content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"workflows\", \"workflows\", \"{BB5BB244-E7D2-4368-8C18-C1C0ED1E12D1}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{BB5BB244-E7D2-4368-8C18-C1C0ED1E12D1}"
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../.drone/workflows", "*")
.Select(x=>$" {Path.GetFileName(x)} = .drone/workflows/{Path.GetFileName(x)}")
)}}
EndProject
"""
);
content = Regex.Replace(
content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"scripts\", \"scripts\", \"{BB0B25C9-0901-4923-913F-00F9A6B352A5}\"(?:.|\n)*?EndProject",

View File

@ -8,7 +8,7 @@ public static class UnitOfWorkManagerExtensions
/// <summary>
/// 事务操作
/// </summary>
public static async Task AtomicOperateAsync(this UnitOfWorkManager me, Func<Task> handle)
public static async Task AtomicOperateAsync(this UnitOfWorkManager me, Func<Task> handle, Func<Task> onErrorHandle = null)
{
var logger = LogHelper.Get<UnitOfWorkManager>();
using var unitOfWork = me.Begin();
@ -25,6 +25,11 @@ public static class UnitOfWorkManagerExtensions
logger?.Warn(ex);
unitOfWork.Rollback();
logger?.Warn($"{Ln.事务已回滚}: {hashCode}");
if (onErrorHandle != null) {
await onErrorHandle().ConfigureAwait(false);
}
throw;
}
}

View File

@ -50,11 +50,7 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
Func<QueryReq<TQuery>, ISelect<TEntity>> selector, QueryReq<TQuery> query, string fileName, Expression<Func<TEntity, object>> listExp = null)
where TQuery : DataAbstraction, new()
{
var select = selector(query)
#if DBTYPE_SQLSERVER
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
#endif
.Take(Numbers.MAX_LIMIT_EXPORT);
var select = selector(query).WithNoLockNoWait().Take(Numbers.MAX_LIMIT_EXPORT);
object list = listExp == null ? await select.ToListAsync().ConfigureAwait(false) : await select.ToListAsync(listExp).ConfigureAwait(false);
@ -73,8 +69,8 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
/// <returns>更新行数</returns>
protected Task<int> UpdateAsync( //
TEntity newValue //
, IEnumerable<string> includeFields //
, string[] excludeFields = null //
, List<string> includeFields = null //
, List<string> excludeFields = null //
, Expression<Func<TEntity, bool>> whereExp = null //
, string whereSql = null //
, bool ignoreVersion = false)
@ -98,8 +94,8 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
/// <returns>更新后的实体列表</returns>
protected Task<List<TEntity>> UpdateReturnListAsync( //
TEntity newValue //
, IEnumerable<string> includeFields //
, string[] excludeFields = null //
, List<string> includeFields = null //
, List<string> excludeFields = null //
, Expression<Func<TEntity, bool>> whereExp = null //
, string whereSql = null //
, bool ignoreVersion = false)
@ -136,22 +132,22 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM);
}
private IUpdate<TEntity> BuildUpdate( //
TEntity entity //
, IEnumerable<string> includeFields //
, string[] excludeFields = null //
, bool ignoreVersion = false)
private IUpdate<TEntity> BuildUpdate(TEntity entity, List<string> includeFields, List<string> excludeFields, bool ignoreVersion)
{
var updateExp = includeFields == null
? Rpo.UpdateDiy.SetSource(entity)
: Rpo.UpdateDiy.SetDto(includeFields!.ToDictionary(
x => x, x => typeof(TEntity).GetProperty(x, BindingFlags.Public | BindingFlags.Instance)!.GetValue(entity)));
if (excludeFields != null) {
updateExp = updateExp.IgnoreColumns(excludeFields);
IUpdate<TEntity> updateExp;
if (includeFields.NullOrEmpty()) {
updateExp = Rpo.UpdateDiy.SetSource(entity);
if (!excludeFields.NullOrEmpty()) {
updateExp = updateExp.IgnoreColumns(excludeFields.ToArray());
}
}
if (!ignoreVersion && entity is IFieldVersion ver) {
updateExp = updateExp.Where($"{nameof(IFieldVersion.Version)} = @version", new { version = ver.Version });
else {
updateExp = Rpo.UpdateDiy.SetDto(includeFields!.ToDictionary(
x => x
, x => typeof(TEntity).GetProperty(x, BindingFlags.Public | BindingFlags.Instance)!.GetValue(entity)));
if (!ignoreVersion && entity is IFieldVersion ver) {
updateExp = updateExp.Where($"{nameof(IFieldVersion.Version)} = {ver.Version}");
}
}
return updateExp;

View File

@ -28,11 +28,7 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
public Task<long> CountAsync(QueryReq<QueryExampleReq> req)
{
req.ThrowIfInvalid();
return QueryInternal(req)
#if DBTYPE_SQLSERVER
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
#endif
.CountAsync();
return QueryInternal(req).WithNoLockNoWait().CountAsync();
}
/// <inheritdoc />
@ -54,11 +50,7 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
public Task<bool> ExistAsync(QueryReq<QueryExampleReq> req)
{
req.ThrowIfInvalid();
return QueryInternal(req)
#if DBTYPE_SQLSERVER
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
#endif
.AnyAsync();
return QueryInternal(req).WithNoLockNoWait().AnyAsync();
}
/// <inheritdoc />
@ -80,14 +72,7 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
public async Task<PagedQueryRsp<QueryExampleRsp>> PagedQueryAsync(PagedQueryReq<QueryExampleReq> req)
{
req.ThrowIfInvalid();
var list = await QueryInternal(req)
.Page(req.Page, req.PageSize)
#if DBTYPE_SQLSERVER
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
#endif
.Count(out var total)
.ToListAsync()
.ConfigureAwait(false);
var list = await QueryInternal(req).Page(req.Page, req.PageSize).WithNoLockNoWait().Count(out var total).ToListAsync().ConfigureAwait(false);
return new PagedQueryRsp<QueryExampleRsp>(req.Page, req.PageSize, total, list.Adapt<IEnumerable<QueryExampleRsp>>());
}
@ -96,13 +81,7 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
public async Task<IEnumerable<QueryExampleRsp>> QueryAsync(QueryReq<QueryExampleReq> req)
{
req.ThrowIfInvalid();
var ret = await QueryInternal(req)
#if DBTYPE_SQLSERVER
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
#endif
.Take(req.Count)
.ToListAsync()
.ConfigureAwait(false);
var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync().ConfigureAwait(false);
return ret.Adapt<IEnumerable<QueryExampleRsp>>();
}

View File

@ -1,6 +1,6 @@
using NetAdmin.SysComponent.Domain.Dto.Sys.Api;
using NetAdmin.Domain.Dto.Sys.Api;
namespace NetAdmin.SysComponent.Domain.Attributes.DataValidation;
namespace NetAdmin.Domain.Attributes.DataValidation;
/// <summary>
/// 接口编码验证器

View File

@ -1,6 +1,7 @@
using NetAdmin.SysComponent.Domain.Dto.Sys.Role;
using NetAdmin.Domain.Dto.Sys.Role;
using NetAdmin.Domain.Enums.Sys;
namespace NetAdmin.SysComponent.Domain.Attributes.DataValidation;
namespace NetAdmin.Domain.Attributes.DataValidation;
/// <summary>
/// 数据范围为特定部门的验证器

View File

@ -1,6 +1,6 @@
using NetAdmin.SysComponent.Domain.Dto.Sys.User;
using NetAdmin.Domain.Dto.Sys.User;
namespace NetAdmin.SysComponent.Domain.Attributes.DataValidation;
namespace NetAdmin.Domain.Attributes.DataValidation;
/// <summary>
/// 用户编号验证器

View File

@ -1,6 +1,6 @@
using NetAdmin.SysComponent.Domain.Dto.Sys.User;
using NetAdmin.Domain.Dto.Sys.User;
namespace NetAdmin.SysComponent.Domain.Contexts;
namespace NetAdmin.Domain.Contexts;
/// <summary>
/// 上下文用户信息

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// Api接口表

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 配置表

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 部门表

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 字典目录表
@ -16,7 +16,7 @@ public record Sys_DicCatalog : VersionEntity
public IEnumerable<Sys_DicCatalog> Children { get; init; }
/// <summary>
/// 字典编码
/// 字典目录编码
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)]
[CsvIgnore]
@ -32,7 +32,7 @@ public record Sys_DicCatalog : VersionEntity
public ICollection<Sys_DicContent> Contents { get; init; }
/// <summary>
/// 字典名称
/// 字典目录名称
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)]
[CsvIgnore]

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 字典内容表

View File

@ -0,0 +1,73 @@
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 文档分类表
/// </summary>
[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Code), nameof(Code), true)]
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_DocCatalog))]
public record Sys_DocCatalog : VersionEntity, IFieldOwner
{
/// <summary>
/// 子节点
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(ParentId))]
public IEnumerable<Sys_DocCatalog> Children { get; init; }
/// <summary>
/// 文档分类编码
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)]
[CsvIgnore]
[JsonIgnore]
public virtual string Code { get; init; }
/// <summary>
/// 文档内容集合
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(Sys_DocContent.CatalogId))]
public ICollection<Sys_DocContent> Contents { get; init; }
/// <summary>
/// 文档分类名称
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)]
[CsvIgnore]
[JsonIgnore]
public virtual string Name { get; init; }
/// <summary>
/// 拥有者
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(OwnerId))]
public Sys_User Owner { get; init; }
/// <summary>
/// 拥有者部门编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 拥有者用户编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerId { get; init; }
/// <summary>
/// 父编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long ParentId { get; init; }
}

View File

@ -0,0 +1,82 @@
using NetAdmin.Domain.Enums.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 文档内容表
/// </summary>
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_DocContent))]
public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner
{
/// <summary>
/// 文档正文
/// </summary>
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string Body { get; init; }
/// <summary>
/// 文档分类
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(CatalogId))]
public Sys_DocCatalog Catalog { get; init; }
/// <summary>
/// 文档分类编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long CatalogId { get; init; }
/// <summary>
/// 是否启用
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual bool Enabled { get; init; }
/// <summary>
/// 拥有者
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(OwnerId))]
public Sys_User Owner { get; init; }
/// <summary>
/// 拥有者部门编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 拥有者用户编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerId { get; init; }
/// <summary>
/// 文档标题
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
[CsvIgnore]
[JsonIgnore]
public virtual string Title { get; init; }
/// <summary>
/// 可见性
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual ArchiveVisibilities Visibility { get; init; }
}

View File

@ -1,4 +1,6 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
using NetAdmin.Domain.Enums.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 计划作业表
@ -57,10 +59,10 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary
/// <summary>
/// 上次执行状态
/// </summary>
[Column]
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_SMALL_INT)]
[CsvIgnore]
[JsonIgnore]
public HttpStatusCode? LastStatusCode { get; init; }
public int? LastStatusCode { get; init; }
/// <summary>
/// 下次执行时间
@ -97,11 +99,7 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary
/// <summary>
/// 请求体
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string RequestBody { get; init; }
@ -109,11 +107,7 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary
/// <summary>
/// 请求头
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string RequestHeader { get; init; }
@ -121,11 +115,7 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary
/// <summary>
/// 请求的网络地址
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string RequestUrl { get; init; }
@ -141,11 +131,7 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary
/// <summary>
/// 备注
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore]
[JsonIgnore]
public virtual string Summary { get; init; }

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 计划作业执行记录表
@ -53,11 +53,7 @@ public record Sys_JobRecord : LiteImmutableEntity
/// <summary>
/// 请求体
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string RequestBody { get; init; }
@ -65,11 +61,7 @@ public record Sys_JobRecord : LiteImmutableEntity
/// <summary>
/// 请求头
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string RequestHeader { get; init; }
@ -85,11 +77,7 @@ public record Sys_JobRecord : LiteImmutableEntity
/// <summary>
/// 响应体
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string ResponseBody { get; init; }
@ -97,11 +85,7 @@ public record Sys_JobRecord : LiteImmutableEntity
/// <summary>
/// 响应头
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string ResponseHeader { get; init; }

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 登录日志表
@ -28,11 +28,7 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
/// <summary>
/// 创建者客户端用户代理
/// </summary>
#if DBTYPE_SQLSERVER
[Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_1022)]
#else
[Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore]
[JsonIgnore]
public virtual string CreatedUserAgent { get; init; }
@ -96,11 +92,7 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
/// <summary>
/// 请求内容
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string RequestBody { get; protected init; }
@ -108,11 +100,7 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
/// <summary>
/// 请求头信息
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string RequestHeaders { get; protected init; }
@ -128,11 +116,7 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
/// <summary>
/// 响应内容
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string ResponseBody { get; protected init; }
@ -140,11 +124,7 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
/// <summary>
/// 响应头
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string ResponseHeaders { get; protected init; }

View File

@ -1,4 +1,6 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
using NetAdmin.Domain.Enums.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 菜单表

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 请求日志表

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 请求日志明细表
@ -18,11 +18,7 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea
/// <summary>
/// 创建者客户端用户代理
/// </summary>
#if DBTYPE_SQLSERVER
[Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_1022)]
#else
[Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore]
[JsonIgnore]
public virtual string CreatedUserAgent { get; init; }
@ -38,11 +34,7 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea
/// <summary>
/// 异常信息
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string Exception { get; init; }
@ -50,11 +42,7 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea
/// <summary>
/// 请求内容
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string RequestBody { get; init; }
@ -70,11 +58,7 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea
/// <summary>
/// 请求头信息
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string RequestHeaders { get; init; }
@ -90,11 +74,7 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea
/// <summary>
/// 响应内容
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string ResponseBody { get; init; }
@ -110,11 +90,7 @@ public record Sys_RequestLogDetail : SimpleEntity, IFieldCreatedTime, IFieldCrea
/// <summary>
/// 响应头
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string ResponseHeaders { get; init; }

View File

@ -1,6 +1,7 @@
using NetAdmin.SysComponent.Domain.Dto.Sys.Role;
using NetAdmin.Domain.Dto.Sys.Role;
using NetAdmin.Domain.Enums.Sys;
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 角色表
@ -20,11 +21,7 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary
/// <summary>
/// 仪表板布局
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string DashboardLayout { get; set; }
@ -120,13 +117,18 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary
/// <inheritdoc />
public virtual void Register(TypeAdapterConfig config)
{
// ReSharper disable InvokeAsExtensionMethod
#pragma warning disable RCS1196
_ = config.ForType<CreateRoleReq, Sys_Role>()
.Map( //
d => d.Depts, s => s.DeptIds.NullOrEmpty() ? Array.Empty<Sys_Dept>() : s.DeptIds.Select(x => new Sys_Dept { Id = x }))
d => d.Depts
, s => s.DeptIds.NullOrEmpty() ? Array.Empty<Sys_Dept>() : Enumerable.Select(s.DeptIds, x => new Sys_Dept { Id = x }))
.Map( //
d => d.Menus, s => s.MenuIds.NullOrEmpty() ? Array.Empty<Sys_Menu>() : s.MenuIds.Select(x => new Sys_Menu { Id = x }))
d => d.Menus
, s => s.MenuIds.NullOrEmpty() ? Array.Empty<Sys_Menu>() : Enumerable.Select(s.MenuIds, x => new Sys_Menu { Id = x }))
.Map( //
d => d.Apis, s => s.ApiIds.NullOrEmpty() ? Array.Empty<Sys_Api>() : s.ApiIds.Select(x => new Sys_Api { Id = x }))
d => d.Apis, s => s.ApiIds.NullOrEmpty() ? Array.Empty<Sys_Api>() : Enumerable.Select(s.ApiIds, x => new Sys_Api { Id = x }))
//
;

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 角色-接口映射表

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 角色-部门映射表

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 角色-菜单映射表

View File

@ -1,6 +1,7 @@
using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsg;
using NetAdmin.Domain.Dto.Sys.SiteMsg;
using NetAdmin.Domain.Enums.Sys;
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 站内信表
@ -11,11 +12,7 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary
/// <summary>
/// 消息内容
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string Content { get; init; }
@ -86,17 +83,26 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary
/// <inheritdoc />
public void Register(TypeAdapterConfig config)
{
#pragma warning disable RCS1196
// ReSharper disable InvokeAsExtensionMethod
_ = config.ForType<CreateSiteMsgReq, Sys_SiteMsg>()
.Map( //
d => d.Summary, s => s.Content.RemoveHtmlTag().HtmlDe().Sub(0, 100))
.Map( //
d => d.Roles, s => s.RoleIds.NullOrEmpty() ? Array.Empty<Sys_Role>() : s.RoleIds.Select(x => new Sys_Role { Id = x }))
d => d.Roles
, s => s.RoleIds.NullOrEmpty() ? Array.Empty<Sys_Role>() : Enumerable.Select(s.RoleIds, x => new Sys_Role { Id = x }))
.Map( //
d => d.Users, s => s.UserIds.NullOrEmpty() ? Array.Empty<Sys_User>() : s.UserIds.Select(x => new Sys_User { Id = x }))
d => d.Users
, s => s.UserIds.NullOrEmpty() ? Array.Empty<Sys_User>() : Enumerable.Select(s.UserIds, x => new Sys_User { Id = x }))
.Map( //
d => d.Depts, s => s.DeptIds.NullOrEmpty() ? Array.Empty<Sys_Dept>() : s.DeptIds.Select(x => new Sys_Dept { Id = x }))
d => d.Depts
, s => s.DeptIds.NullOrEmpty() ? Array.Empty<Sys_Dept>() : Enumerable.Select(s.DeptIds, x => new Sys_Dept { Id = x }))
//
;
// ReSharper restore InvokeAsExtensionMethod
#pragma warning restore RCS1196
}
}

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 站内信-部门映射表

View File

@ -1,4 +1,6 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
using NetAdmin.Domain.Enums.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 站内信标记表

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 站内信-角色映射表

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 站内信-用户映射表

View File

@ -1,6 +1,6 @@
using NetAdmin.SysComponent.Domain.Dto.Sys.User;
using NetAdmin.Domain.Dto.Sys.User;
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 用户基本信息表
@ -126,16 +126,24 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister
/// <inheritdoc />
public virtual void Register(TypeAdapterConfig config)
{
#pragma warning disable RCS1196
// ReSharper disable InvokeAsExtensionMethod
_ = config.ForType<CreateUserReq, Sys_User>()
.Map(d => d.Password, s => s.PasswordText.Pwd().Guid())
.Map(d => d.Token, _ => Guid.NewGuid())
.Map( //
d => d.Roles, s => s.RoleIds.NullOrEmpty() ? Array.Empty<Sys_Role>() : s.RoleIds.Select(x => new Sys_Role { Id = x }));
d => d.Roles
, s => s.RoleIds.NullOrEmpty() ? Array.Empty<Sys_Role>() : Enumerable.Select(s.RoleIds, x => new Sys_Role { Id = x }));
_ = config.ForType<EditUserReq, Sys_User>()
.Map( //
d => d.Password, s => s.PasswordText.NullOrEmpty() ? Guid.Empty : s.PasswordText.Pwd().Guid())
.Map( //
d => d.Roles, s => s.RoleIds.NullOrEmpty() ? Array.Empty<Sys_Role>() : s.RoleIds.Select(x => new Sys_Role { Id = x }));
d => d.Roles
, s => s.RoleIds.NullOrEmpty() ? Array.Empty<Sys_Role>() : Enumerable.Select(s.RoleIds, x => new Sys_Role { Id = x }));
// ReSharper restore InvokeAsExtensionMethod
#pragma warning restore RCS1196
}
}

View File

@ -1,6 +1,6 @@
using NetAdmin.SysComponent.Domain.Dto.Sys.UserProfile;
using NetAdmin.Domain.Dto.Sys.UserProfile;
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 用户档案表
@ -11,11 +11,7 @@ public record Sys_UserProfile : VersionEntity, IRegister
/// <summary>
/// 应用配置
/// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)]
[CsvIgnore]
[JsonIgnore]
public virtual string AppConfig { get; set; }

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 用户-角色映射表

View File

@ -1,4 +1,6 @@
namespace NetAdmin.SysComponent.Domain.DbMaps.Sys;
using NetAdmin.Domain.Enums.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 验证码表

View File

@ -1,4 +1,6 @@
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Api;
using NetAdmin.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.Dto.Sys.Api;
/// <summary>
/// 请求:创建接口

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Api;
namespace NetAdmin.Domain.Dto.Sys.Api;
/// <summary>
/// 响应:导出接口

View File

@ -1,4 +1,6 @@
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Api;
using NetAdmin.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.Dto.Sys.Api;
/// <summary>
/// 请求:查询接口

View File

@ -1,4 +1,6 @@
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Api;
using NetAdmin.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.Dto.Sys.Api;
/// <summary>
/// 响应:查询接口

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Cache;
namespace NetAdmin.Domain.Dto.Sys.Cache;
/// <summary>
/// 响应:缓存统计

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Cache;
namespace NetAdmin.Domain.Dto.Sys.Cache;
/// <summary>
/// 请求:删除缓存项

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Cache;
namespace NetAdmin.Domain.Dto.Sys.Cache;
/// <summary>
/// 请求:获取所有缓存项

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Cache;
namespace NetAdmin.Domain.Dto.Sys.Cache;
/// <summary>
/// 请求:获取缓存项

View File

@ -1,6 +1,6 @@
using StackExchange.Redis;
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Cache;
namespace NetAdmin.Domain.Dto.Sys.Cache;
/// <summary>
/// 响应:获取所有缓存项

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Captcha;
namespace NetAdmin.Domain.Dto.Sys.Captcha;
/// <summary>
/// 响应:获取人机校验图

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Captcha;
namespace NetAdmin.Domain.Dto.Sys.Captcha;
/// <summary>
/// 请求:完成人机验证

View File

@ -1,4 +1,6 @@
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Config;
using NetAdmin.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.Dto.Sys.Config;
/// <summary>
/// 请求:创建配置

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Config;
namespace NetAdmin.Domain.Dto.Sys.Config;
/// <summary>
/// 请求:编辑配置

View File

@ -1,7 +1,8 @@
using NetAdmin.SysComponent.Domain.Dto.Sys.Dept;
using NetAdmin.SysComponent.Domain.Dto.Sys.Role;
using NetAdmin.Domain.DbMaps.Sys;
using NetAdmin.Domain.Dto.Sys.Dept;
using NetAdmin.Domain.Dto.Sys.Role;
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Config;
namespace NetAdmin.Domain.Dto.Sys.Config;
/// <summary>
/// 响应:导出配置

View File

@ -1,4 +1,6 @@
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Config;
using NetAdmin.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.Dto.Sys.Config;
/// <summary>
/// 请求:查询配置

View File

@ -1,7 +1,8 @@
using NetAdmin.SysComponent.Domain.Dto.Sys.Dept;
using NetAdmin.SysComponent.Domain.Dto.Sys.Role;
using NetAdmin.Domain.DbMaps.Sys;
using NetAdmin.Domain.Dto.Sys.Dept;
using NetAdmin.Domain.Dto.Sys.Role;
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Config;
namespace NetAdmin.Domain.Dto.Sys.Config;
/// <summary>
/// 响应:查询配置

View File

@ -1,4 +1,6 @@
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Config;
using NetAdmin.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.Dto.Sys.Config;
/// <summary>
/// 请求:启用/禁用配置

View File

@ -1,6 +1,6 @@
using NetAdmin.SysComponent.Infrastructure.Constant;
using NetAdmin.Domain.DbMaps.Sys;
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Dept;
namespace NetAdmin.Domain.Dto.Sys.Dept;
/// <summary>
/// 请求:创建部门
@ -22,7 +22,7 @@ public record CreateDeptReq : Sys_Dept
/// <inheritdoc cref="IFieldSort.Sort" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Sort { get; init; } = SysNumbers.DEF_SORT_VAL;
public override long Sort { get; init; } = Numbers.DEF_SORT_VAL;
/// <inheritdoc cref="IFieldSummary.Summary" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]

View File

@ -1,4 +1,4 @@
namespace NetAdmin.SysComponent.Domain.Dto.Sys.Dept;
namespace NetAdmin.Domain.Dto.Sys.Dept;
/// <summary>
/// 请求:编辑部门

Some files were not shown because too many files have changed in this diff Show More