mirror of
https://github.com/nsnail/NetAdmin.git
synced 2025-08-02 18:17:31 +08:00
Compare commits
38 Commits
Author | SHA1 | Date | |
---|---|---|---|
661640d441 | |||
440c7ffcb9 | |||
e8b568426b | |||
37b45c9f36 | |||
7ed30406c9 | |||
71bfdaafa8 | |||
cec96390a5 | |||
0e412db6ce | |||
4d857f1861 | |||
d74a7e13ef | |||
2f16efd291 | |||
81d9b0b3bb | |||
ef2f0de095 | |||
6d87d8e9cd | |||
69dc407002 | |||
6c71c74a27 | |||
4e9f605ea2 | |||
d28d7e9a18 | |||
a6018edb87 | |||
841a4195e7 | |||
5e9b67bca8 | |||
76e5fdcd94 | |||
c68f695555 | |||
587b22014d | |||
2f300285aa | |||
1743f4ff28 | |||
7fc5fca5d9 | |||
d8dbb28cfc | |||
27aafacd54 | |||
e6ce5afd99 | |||
d1503a859b | |||
26e3698f57 | |||
3069b8fbc4 | |||
4d63bd6bf5 | |||
f00046265a | |||
0848c8b7e5 | |||
8479f69bdc | |||
a454f2ab2d |
4
.github/workflows/nightly-build.yml
vendored
4
.github/workflows/nightly-build.yml
vendored
@ -37,8 +37,8 @@ jobs:
|
||||
path: ~/.nuget/packages
|
||||
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
|
||||
restore-keys: ${{ runner.os }}-nuget
|
||||
- working-directory: ./src/backend/NetAdmin.AdmServer.Host
|
||||
run: dotnet publish NetAdmin.AdmServer.Host.csproj -c Release
|
||||
- working-directory: ./src/backend/YourSolution.AdmServer.Host
|
||||
run: dotnet publish YourSolution.AdmServer.Host.csproj -c Release
|
||||
- run: docker build -t nsnail/netadmin:nightly .
|
||||
- uses: docker/login-action@v3
|
||||
with:
|
||||
|
4
.github/workflows/release.yml
vendored
4
.github/workflows/release.yml
vendored
@ -37,8 +37,8 @@ jobs:
|
||||
path: ~/.nuget/packages
|
||||
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
|
||||
restore-keys: ${{ runner.os }}-nuget
|
||||
- working-directory: ./src/backend/NetAdmin.AdmServer.Host
|
||||
run: dotnet publish NetAdmin.AdmServer.Host.csproj -c Release
|
||||
- working-directory: ./src/backend/YourSolution.AdmServer.Host
|
||||
run: dotnet publish YourSolution.AdmServer.Host.csproj -c Release
|
||||
- uses: actions/create-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -397,7 +397,6 @@ FodyWeavers.xsd
|
||||
# JetBrains Rider
|
||||
*.sln.iml
|
||||
.idea/
|
||||
!src/backend/CloudCode.DataGrip/.idea
|
||||
|
||||
# User Define
|
||||
dist/
|
||||
|
33
CHANGELOG.md
33
CHANGELOG.md
@ -2,6 +2,39 @@
|
||||
|
||||
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.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)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* ✨ 首页仪表板自定义布局 ([#201](https://github.com/nsnail/NetAdmin/issues/201)) ([2f30028](https://github.com/nsnail/NetAdmin/commit/2f300285aa2afbfaea1fd9ffe299cc2badf98e0f))
|
||||
* ✨ 用户选择器 ([#189](https://github.com/nsnail/NetAdmin/issues/189)) ([8479f69](https://github.com/nsnail/NetAdmin/commit/8479f69bdccac93a497e039dd01e18333ec2bbdc))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 🐛 --el-color-primary 变量有闪烁现象 ([#194](https://github.com/nsnail/NetAdmin/issues/194)) ([26e3698](https://github.com/nsnail/NetAdmin/commit/26e3698f57a2986f3b727fa38f293ca40c89f3ab))
|
||||
* 🐛 404 ([#198](https://github.com/nsnail/NetAdmin/issues/198)) ([d8dbb28](https://github.com/nsnail/NetAdmin/commit/d8dbb28cfc8ad427062eb8d81be67cc25ded6fb6))
|
||||
* 🐛 module name ([#193](https://github.com/nsnail/NetAdmin/issues/193)) ([3069b8f](https://github.com/nsnail/NetAdmin/commit/3069b8fbc451c4c257becf0523ab6ea6cc9af7e2))
|
||||
|
||||
## [2.0.0](https://github.com/nsnail/NetAdmin/compare/v1.6.0...v2.0.0) (2024-11-04)
|
||||
|
||||
|
||||
|
@ -32,6 +32,6 @@
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="../GlobalUsings.cs" Link="GlobalUsings.cs" />
|
||||
<Compile Include="$(SolutionDir)/src/backend/GlobalUsings.cs" Link="GlobalUsings.cs" />
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -3,5 +3,5 @@ WORKDIR /app
|
||||
EXPOSE 8080
|
||||
RUN apt update
|
||||
RUN apt install -y redis
|
||||
COPY ./dist/backend/NetAdmin.AdmServer.Host/bin/Release/net9.0/publish .
|
||||
ENTRYPOINT redis-server --daemonize yes && dotnet NetAdmin.AdmServer.Host.dll -is
|
||||
COPY ./dist/backend/YourSolution.AdmServer.Host/bin/Release/net9.0/publish .
|
||||
ENTRYPOINT redis-server --daemonize yes && dotnet YourSolution.AdmServer.Host.dll -is
|
71
NetAdmin.sln
71
NetAdmin.sln
@ -44,10 +44,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B
|
||||
install.as.tpl.ps1 = scripts/install.as.tpl.ps1
|
||||
rename.csx = scripts/rename.csx
|
||||
resharper.full.ps1 = scripts/resharper.full.ps1
|
||||
switcher.freesql.json = scripts/switcher.freesql.json
|
||||
switcher.gurion.json = scripts/switcher.gurion.json
|
||||
switcher.nsext.json = scripts/switcher.nsext.json
|
||||
switcher.ps1 = scripts/switcher.ps1
|
||||
switch.nuget.or.project.csx = scripts/switch.nuget.or.project.csx
|
||||
sync.sln.files.csx = scripts/sync.sln.files.csx
|
||||
wait.server.stop.sh = scripts/wait.server.stop.sh
|
||||
EndProjectSection
|
||||
@ -70,29 +67,29 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{8E4C93BA
|
||||
stylecop.analyzers.ruleset = build/stylecop.analyzers.ruleset
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Infrastructure", "src\backend\NetAdmin.Infrastructure\NetAdmin.Infrastructure.csproj", "{1E62C322-EE42-4699-A6F1-791C53EFA62D}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Infrastructure", "src\backend\NetAdmin\NetAdmin.Infrastructure\NetAdmin.Infrastructure.csproj", "{1E62C322-EE42-4699-A6F1-791C53EFA62D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.AdmServer.Application", "src\backend\NetAdmin.AdmServer.Application\NetAdmin.AdmServer.Application.csproj", "{E38B2EB4-D7A5-4777-9236-3B348919DF23}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YourSolution.AdmServer.Application", "src\backend\YourSolution.AdmServer.Application\YourSolution.AdmServer.Application.csproj", "{E38B2EB4-D7A5-4777-9236-3B348919DF23}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.AdmServer.Host", "src\backend\NetAdmin.AdmServer.Host\NetAdmin.AdmServer.Host.csproj", "{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YourSolution.AdmServer.Host", "src\backend\YourSolution.AdmServer.Host\YourSolution.AdmServer.Host.csproj", "{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "03.hosted-servers", "03.hosted-servers", "{12AE5B4B-CB1A-498E-83B8-04E201E31D86}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Domain", "src\backend\NetAdmin.Domain\NetAdmin.Domain.csproj", "{58509C57-09FA-4E3C-BC07-78E786A2A326}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Domain", "src\backend\NetAdmin\NetAdmin.Domain\NetAdmin.Domain.csproj", "{58509C57-09FA-4E3C-BC07-78E786A2A326}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Application", "src\backend\NetAdmin.Application\NetAdmin.Application.csproj", "{70C54E1B-2083-4196-AB68-34CAF0075D82}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Application", "src\backend\NetAdmin\NetAdmin.Application\NetAdmin.Application.csproj", "{70C54E1B-2083-4196-AB68-34CAF0075D82}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Host", "src\backend\NetAdmin.Host\NetAdmin.Host.csproj", "{91839A15-D08F-4848-A301-F793412BC688}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Host", "src\backend\NetAdmin\NetAdmin.Host\NetAdmin.Host.csproj", "{91839A15-D08F-4848-A301-F793412BC688}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Cache", "src\backend\NetAdmin.Cache\NetAdmin.Cache.csproj", "{91452C22-4B57-4F16-9AF6-42C7BF830504}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Cache", "src\backend\NetAdmin\NetAdmin.Cache\NetAdmin.Cache.csproj", "{91452C22-4B57-4F16-9AF6-42C7BF830504}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.AdmServer.Cache", "src\backend\NetAdmin.AdmServer.Cache\NetAdmin.AdmServer.Cache.csproj", "{7CB632D3-3635-4F8D-AFE7-F496D37D422B}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YourSolution.AdmServer.Cache", "src\backend\YourSolution.AdmServer.Cache\YourSolution.AdmServer.Cache.csproj", "{7CB632D3-3635-4F8D-AFE7-F496D37D422B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Host", "src\backend\NetAdmin.SysComponent.Host\NetAdmin.SysComponent.Host.csproj", "{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Host", "src\backend\NetAdmin\NetAdmin.SysComponent.Host\NetAdmin.SysComponent.Host.csproj", "{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Cache", "src\backend\NetAdmin.SysComponent.Cache\NetAdmin.SysComponent.Cache.csproj", "{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Cache", "src\backend\NetAdmin\NetAdmin.SysComponent.Cache\NetAdmin.SysComponent.Cache.csproj", "{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Application", "src\backend\NetAdmin.SysComponent.Application\NetAdmin.SysComponent.Application.csproj", "{34650E82-D257-46DA-BD6B-DE307113347B}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Application", "src\backend\NetAdmin\NetAdmin.SysComponent.Application\NetAdmin.SysComponent.Application.csproj", "{34650E82-D257-46DA-BD6B-DE307113347B}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "02.components", "02.components", "{3F23258D-8299-4992-9F51-2EE9B52CF9D2}"
|
||||
EndProject
|
||||
@ -104,21 +101,25 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "05.tools", "05.tools", "{79
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "src\backend\UnitTests\UnitTests.csproj", "{C7F27698-DA05-4ACD-B0D7-4791B3972002}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Tests", "src\backend\NetAdmin.Tests\NetAdmin.Tests.csproj", "{00604162-C444-478B-B773-3AB23C856CA7}"
|
||||
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.SysComponent.Domain\NetAdmin.SysComponent.Domain.csproj", "{51D6E603-0749-4A11-A78C-9E5BB127E03A}"
|
||||
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}") = "NetAdmin.AdmServer.Domain", "src\backend\NetAdmin.AdmServer.Domain\NetAdmin.AdmServer.Domain.csproj", "{932520DF-D312-415A-A128-1117F8221D68}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.AdmServer.Infrastructure", "src\backend\NetAdmin.AdmServer.Infrastructure\NetAdmin.AdmServer.Infrastructure.csproj", "{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Infrastructure", "src\backend\NetAdmin.SysComponent.Infrastructure\NetAdmin.SysComponent.Infrastructure.csproj", "{48EE6FC4-B64A-40D3-B889-36837E067880}"
|
||||
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}") = "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
|
||||
##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
|
||||
##EndProject#refs
|
||||
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.DbContext", "refs\FreeSql\FreeSql.DbContext\FreeSql.DbContext.csproj", "{FE03DF27-EC56-48DB-81B0-F99947259A7C}"#refs
|
||||
##EndProject#refs
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@ -180,10 +181,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
|
||||
@ -192,10 +189,22 @@ 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
|
||||
##{CCD098FE-4F95-4FA4-8CC0-9A6DE921FBAE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
##{3C65DA42-877D-46FF-B754-C12214302A29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
##{3C65DA42-877D-46FF-B754-C12214302A29}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
##{3C65DA42-877D-46FF-B754-C12214302A29}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
##{3C65DA42-877D-46FF-B754-C12214302A29}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
##{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
##{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
##{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
##{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
##{FE03DF27-EC56-48DB-81B0-F99947259A7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
##{FE03DF27-EC56-48DB-81B0-F99947259A7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
##{FE03DF27-EC56-48DB-81B0-F99947259A7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
##{FE03DF27-EC56-48DB-81B0-F99947259A7C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{4DAF9366-855F-46BB-AE4C-660C92FA0697} = {C84EB5A0-37AD-4B17-A51E-E36888C4441E}
|
||||
@ -217,10 +226,8 @@ 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}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
60
README.md
60
README.md
@ -14,7 +14,7 @@ https://na.tools92.top
|
||||
|
||||
```shell
|
||||
docker run -p 8080:8080 nsnail/netadmin
|
||||
# 需翻墙
|
||||
# 需魔法上网
|
||||
```
|
||||
|
||||
## 构建步骤
|
||||
@ -27,14 +27,17 @@ dotnet --list-sdks
|
||||
# 2. 克隆代码仓库
|
||||
git clone https://github.com/nsnail/NetAdmin.git && cd ./NetAdmin
|
||||
|
||||
# 3. 检查本机 redis 运行状态
|
||||
redis-cli dbsize
|
||||
# 3. 确认本机 redis 处于运行状态
|
||||
redis-server # 启动
|
||||
redis-cli # 连接测试
|
||||
# 下载 redis for windows:https://github.com/redis-windows/redis-windows/releases
|
||||
# 下载 redis for linux/mac:https://redis.io/download
|
||||
|
||||
# 4. 运行后端 WebApi
|
||||
dotnet run --project ./src/backend/NetAdmin.AdmServer.Host/NetAdmin.AdmServer.Host.csproj --urls http://[::]:5010 -is
|
||||
# 浏览器打开 http://localhost:5010 ,将看到Swagger(Knife4jUI)界面
|
||||
dotnet run --project ./src/backend/YourSolution.AdmServer.Host/YourSolution.AdmServer.Host.csproj --urls http://[::]:5010 -is
|
||||
# -i 插入种子数据
|
||||
# -s 同步数据库结构
|
||||
# 浏览器访问 http://localhost:5010 ,将看到Swagger(Knife4jUI)界面
|
||||
|
||||
# 5. 检查 nodejs 版本 >=20
|
||||
node -v
|
||||
@ -45,42 +48,52 @@ cd ./src/frontend/admin && npm install
|
||||
|
||||
# 7. 运行前端项目
|
||||
npm run dev
|
||||
# 浏览器打开 http://localhost:5020 ,将看到管理界面(默认用户名:root,密码:1234qwer)
|
||||
# 浏览器访问 http://localhost:5020 ,将看到管理界面(默认用户名密码:root 1234qwer)
|
||||
```
|
||||
|
||||
## 文件目录树
|
||||
## 文件目录
|
||||
|
||||
```
|
||||
+---.github # github 工程文件目录
|
||||
+---.template.config # dotnet 项目模板配置目录
|
||||
+---assets # 项目资源文件目录
|
||||
+---build # 构建相关的工程文件目录
|
||||
+---dist # 编译生成的二进制文件目录
|
||||
+---docker # docker 镜像构建文件目录
|
||||
+---docs # 项目开发文档目录
|
||||
+---refs # 引用的第三方包的仓库目录
|
||||
+---scripts # 各种工具脚本文件目录
|
||||
+---src # 项目源码文件目录
|
||||
```
|
||||
|
||||
## 后端项目架构
|
||||
## 项目架构
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
H["NetAdmin.Host\n公共主机层\n(.Net自托管主机程序)\n(输入输出格式化)\n(数据校验、鉴权)\n(...所有HTTP管道过滤器中间件)"] --> C["NetAdmin.Cache\n公共缓存层\n(基于Redis或MemoryCache的缓存策略实现)"]
|
||||
C --> A["NetAdmin.Application\n公共业务逻辑层\n(内部服务增删改查)\n(外部服务增删改查)\n(...所有业务用例的计算与组合逻辑的模块化)"]
|
||||
A --> D["NetAdmin.Domain\n数据实体层\n(数据库关系实体映射)\n(DTO数据传输对象)\n(...所有数据模型的抽象与封装)"]
|
||||
D --> I["NetAdmin.Infrastructure\n基础设施层\n(第三方组件和Nuget包引用)\n(公共构建和程序运行配置)\n(公共常量枚举异常定义)\n(全球化化和多语言)\n(...所有公共Utility工具)"]
|
||||
|
||||
XH["NetAdmin.XXX.Host\n(WebApi)"]-->H
|
||||
XS["NetAdmin.XXXService\n(常驻内存服务)"]-->H
|
||||
XS["NetAdmin.XXXService\n(常驻内存服务)"]-->XC
|
||||
XC["NetAdmin.XXX.Cache\n(缓存层实例)"]-->C
|
||||
XA["NetAdmin.XXX.Application\n(业务逻辑层实例)"]-->A
|
||||
|
||||
XH-->XC
|
||||
XC-->XA
|
||||
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(数据库关系实体映射)\n(DTO数据传输对象)\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-->domain-->infra
|
||||
host-->cache-->app-->domain-->infra
|
||||
biz-host-->sys-host-->host
|
||||
biz-cache-->sys-cache-->cache
|
||||
biz-app-->sys-app-->app
|
||||
biz-domain-->domain
|
||||
biz-infra-->infra
|
||||
```
|
||||
|
||||
## 引用的开源代码 / 特别鸣谢
|
||||
## 特别鸣谢
|
||||
|
||||
| 语言 | 集成领域 | 开源库 |
|
||||
|------------|---------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
@ -88,7 +101,6 @@ XC-->XA
|
||||
| C# | 数据库关系映射 | [FreeSql](https://github.com/dotnetcore/FreeSql) |
|
||||
| C# | 代码质量检查 | [Roslynator.Analyzers](https://github.com/josefpihrt/roslynator) \| [SonarAnalyzer.CSharp](https://github.com/SonarSource/sonar-dotnet) \| [StyleCop.Analyzers](https://github.com/DotNetAnalyzers/StyleCopAnalyzers) |
|
||||
| C# | 单元测试框架 | [xunit](https://github.com/xunit/xunit) \| [coverlet.collector](https://github.com/coverlet-coverage/coverlet) |
|
||||
| C# | 分布式锁 | [RedLock.net](https://github.com/samcook/RedLock.net) |
|
||||
| C# | 控制台终端界面库 | [Spectre.Console](https://github.com/spectreconsole/spectre.console) |
|
||||
| C# | 扩展函数库 | [NSExt](https://github.com/nsnail/ns-ext.git) |
|
||||
| C# | 图形处理库 | [SixLabors.ImageSharp](https://github.com/SixLabors/ImageSharp) |
|
||||
@ -96,8 +108,6 @@ XC-->XA
|
||||
| C# | 性能监控采集 | [prometheus-net.AspNetCore](https://github.com/prometheus-net/prometheus-net) |
|
||||
| C# | 雪花ID生成器 | [Yitter.IdGenerator](https://github.com/yitter/idgenerator) |
|
||||
| C# | 自动化版本管理 | [MinVer](https://github.com/adamralph/minver) |
|
||||
| C# | JavaScript引擎 | [MsieJavaScriptEngine](https://github.com/Taritsyn/MsieJavaScriptEngine) |
|
||||
| C# | WebApi图形界面 | [IGeekFan.AspNetCore.Knife4jUI](https://github.com/luoyunchong/IGeekFan.AspNetCore.Knife4jUI) |
|
||||
| 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) |
|
||||
|
@ -1,3 +1,7 @@
|
||||
上次执行时间
|
||||
上次执行状态
|
||||
上次执行耗时
|
||||
下次执行时间
|
||||
不为其中之一
|
||||
不以什么开始
|
||||
不以什么结束
|
||||
@ -8,63 +12,138 @@
|
||||
中专
|
||||
中共党员
|
||||
为其中之一
|
||||
人工审核
|
||||
以什么开始
|
||||
以什么结束
|
||||
保密
|
||||
作业名称
|
||||
作业状态
|
||||
保密
|
||||
信息
|
||||
倒序排序
|
||||
全部数据
|
||||
公告
|
||||
共青团员
|
||||
出生证
|
||||
创建时间
|
||||
初中
|
||||
删除
|
||||
包含
|
||||
博士
|
||||
博士后
|
||||
发送失败
|
||||
同步数据库结构
|
||||
响应体
|
||||
响应状态码
|
||||
唯一编码
|
||||
备注
|
||||
外国人居留证
|
||||
外部错误
|
||||
大专
|
||||
大于
|
||||
大于等于
|
||||
女
|
||||
女
|
||||
字典内容导出
|
||||
宕机
|
||||
客户端IP
|
||||
小于
|
||||
小于等于
|
||||
小学
|
||||
已发送
|
||||
已婚
|
||||
已校验
|
||||
已读
|
||||
并且
|
||||
成功
|
||||
或者
|
||||
所属角色
|
||||
所属部门
|
||||
手机
|
||||
手机号
|
||||
执行耗时
|
||||
执行计划
|
||||
护照
|
||||
指定部门数据
|
||||
按钮
|
||||
排序
|
||||
接口名称
|
||||
接口导出
|
||||
接口描述
|
||||
接口路径
|
||||
插入种子数据
|
||||
操作系统
|
||||
数据范围
|
||||
文档内容
|
||||
文档内容导出
|
||||
文档标题
|
||||
无效操作
|
||||
无效输入
|
||||
无限权限
|
||||
日期范围
|
||||
是否启用
|
||||
显示仪表板
|
||||
最后登录时间
|
||||
未处理异常
|
||||
未婚
|
||||
未读
|
||||
本人数据
|
||||
本科
|
||||
本部门和下级部门数据
|
||||
本部门数据
|
||||
框架
|
||||
比较数据库结构
|
||||
注册
|
||||
消息主题
|
||||
消息摘要
|
||||
消息类型
|
||||
港澳台通行证
|
||||
用户代理
|
||||
用户名
|
||||
用户导出
|
||||
电子邮箱
|
||||
男
|
||||
男
|
||||
登录
|
||||
登录名
|
||||
登录日志导出
|
||||
硕士
|
||||
示例导出
|
||||
离异
|
||||
空闲
|
||||
站内信导出
|
||||
等于
|
||||
等于
|
||||
等于
|
||||
等待发送
|
||||
管理模块
|
||||
系统模块
|
||||
绑定手机号码
|
||||
结果非预期
|
||||
群众
|
||||
自定义
|
||||
范围
|
||||
菜单
|
||||
角色名称
|
||||
角色导出
|
||||
解绑手机号码
|
||||
警告
|
||||
计划作业导出
|
||||
计划作业执行记录导出
|
||||
请求方式
|
||||
请求日志导出
|
||||
调试
|
||||
跟踪
|
||||
跟踪标识
|
||||
身份证
|
||||
运行
|
||||
通知
|
||||
邮箱号
|
||||
部门名称
|
||||
部门导出
|
||||
配置导出
|
||||
重设密码
|
||||
链接
|
||||
错误
|
||||
随机排序
|
||||
项值
|
||||
项名
|
||||
顺序排序
|
||||
高中
|
||||
默认角色
|
||||
默认部门
|
@ -1,21 +1,121 @@
|
||||
1分钟内只能发送1次
|
||||
6位数字
|
||||
8位以上数字字母组合
|
||||
XML注释文件不存在
|
||||
中文姓名
|
||||
事务已回滚
|
||||
事务已提交
|
||||
人机校验请求不能为空
|
||||
人机验证未通过
|
||||
作业名称不能为空
|
||||
允许的文件大小
|
||||
允许的文件格式
|
||||
区号电话号码分机号
|
||||
参数格式不正确
|
||||
唯一编码不能为空
|
||||
图标代码不能为空
|
||||
图标名称不能为空
|
||||
婚姻状况不正确
|
||||
字典名称不能为空
|
||||
字典目录不存在
|
||||
字典目录编号不能为空
|
||||
字典编码不能为空
|
||||
学历不正确
|
||||
完全公开
|
||||
密码不能为空
|
||||
已处理完毕
|
||||
并发冲突_请稍后重试
|
||||
开始事务
|
||||
性别不正确
|
||||
手机号码不正确
|
||||
手机号码不能为空
|
||||
接口编码不存在
|
||||
支付宝账号
|
||||
政治面貌不正确
|
||||
数据库同步开始
|
||||
数据库服务器时钟偏移
|
||||
数据库结构同步完成
|
||||
文件不能为空
|
||||
文档内容不能为空
|
||||
文档分类不存在
|
||||
文档分类名称不能为空
|
||||
文档分类编号不能为空
|
||||
文档分类编码不能为空
|
||||
文档标题不能为空
|
||||
新密码不能为空
|
||||
新手机号码验证码不正确
|
||||
无效端口号
|
||||
无效证件号码
|
||||
旧密码不正确
|
||||
旧密码不能为空
|
||||
旧手机号码不正确
|
||||
旧手机号码验证码不正确
|
||||
时间表达式
|
||||
时间计划不能为空
|
||||
未指定部门
|
||||
未获取到待执行任务
|
||||
档案可见性不正确
|
||||
模块名称不能为空
|
||||
模块类型不能为空
|
||||
模块说明不能为空
|
||||
此节点已下线
|
||||
民族不正确
|
||||
消息主题不能为空
|
||||
消息内容不能为空
|
||||
父节点不存在
|
||||
用户不存在
|
||||
用户名不能为空
|
||||
用户名不能是手机号码
|
||||
用户名或密码错误
|
||||
用户名长度4位以上
|
||||
用户头像不能为空
|
||||
用户编号不存在
|
||||
登录用户
|
||||
目标设备不能为空
|
||||
短信验证请求不能为空
|
||||
种子数据插入完成
|
||||
站内信不存在
|
||||
站内信状态不正确
|
||||
站内信类型不正确
|
||||
缓存键不能为空
|
||||
网络地址不正确
|
||||
自己可见
|
||||
菜单名称不能为空
|
||||
菜单标题不能为空
|
||||
菜单类型不正确
|
||||
菜单编号不能为空
|
||||
角色不存在
|
||||
角色名称不能为空
|
||||
角色数据范围不正确
|
||||
角色编号不能为空
|
||||
角色编号列表不能为空
|
||||
记录已存在
|
||||
设备类型不能为空
|
||||
证件类型不正确
|
||||
该角色下存在用户
|
||||
该部门下存在子部门
|
||||
该部门下存在用户
|
||||
请求地址不能为空
|
||||
请求对象不能为空
|
||||
请求方法不正确
|
||||
请稍后重试
|
||||
请联系管理员激活账号
|
||||
读取用户令牌出错
|
||||
账号不能为空
|
||||
邀请码不正确
|
||||
邮箱验证码不正确
|
||||
部门不存在
|
||||
部门可见
|
||||
部门名称不能为空
|
||||
配置文件初始化完毕
|
||||
键值不能为空
|
||||
键名称不能为空
|
||||
随机延时结束时间不正确
|
||||
随机延时起始时间不正确
|
||||
非JSON字符串
|
||||
验证数据不能为空
|
||||
验证码不正确
|
||||
验证码不能为空
|
||||
验证码目标设备类型不正确
|
||||
验证码类型不正确
|
||||
验证码类型不能为空
|
@ -1,81 +0,0 @@
|
||||
上次执行时间
|
||||
上次执行状态
|
||||
上次执行耗时
|
||||
下次执行时间
|
||||
人工审核
|
||||
作业名称
|
||||
作业状态
|
||||
全部数据
|
||||
公告
|
||||
创建时间
|
||||
删除
|
||||
发送失败
|
||||
响应体
|
||||
响应状态码
|
||||
唯一编码
|
||||
备注
|
||||
字典内容导出
|
||||
客户端IP
|
||||
已发送
|
||||
已校验
|
||||
已读
|
||||
所属角色
|
||||
所属部门
|
||||
手机
|
||||
手机号
|
||||
执行耗时
|
||||
执行计划
|
||||
指定部门数据
|
||||
按钮
|
||||
排序
|
||||
接口名称
|
||||
接口导出
|
||||
接口描述
|
||||
接口路径
|
||||
操作系统
|
||||
数据范围
|
||||
无限权限
|
||||
是否启用
|
||||
显示仪表板
|
||||
最后登录时间
|
||||
未读
|
||||
本人数据
|
||||
本部门和下级部门数据
|
||||
本部门数据
|
||||
框架
|
||||
注册
|
||||
消息主题
|
||||
消息摘要
|
||||
消息类型
|
||||
用户代理
|
||||
用户名
|
||||
用户导出
|
||||
电子邮箱
|
||||
登录
|
||||
登录名
|
||||
登录日志导出
|
||||
空闲
|
||||
站内信导出
|
||||
等待发送
|
||||
绑定手机号码
|
||||
菜单
|
||||
角色名称
|
||||
角色导出
|
||||
解绑手机号码
|
||||
计划作业导出
|
||||
计划作业执行记录导出
|
||||
请求方式
|
||||
请求日志导出
|
||||
跟踪标识
|
||||
运行
|
||||
通知
|
||||
邮箱号
|
||||
部门名称
|
||||
部门导出
|
||||
配置导出
|
||||
重设密码
|
||||
链接
|
||||
项值
|
||||
项名
|
||||
默认角色
|
||||
默认部门
|
@ -1,102 +0,0 @@
|
||||
1分钟内只能发送1次
|
||||
人机校验请求不能为空
|
||||
人机验证未通过
|
||||
作业名称不能为空
|
||||
允许的文件大小
|
||||
允许的文件格式
|
||||
唯一编码不能为空
|
||||
图标代码不能为空
|
||||
图标名称不能为空
|
||||
婚姻状况不正确
|
||||
字典名称不能为空
|
||||
字典目录不存在
|
||||
字典目录编号不能为空
|
||||
字典目录编号不能为空
|
||||
字典编码不能为空
|
||||
学历不正确
|
||||
密码不能为空
|
||||
密码不能为空
|
||||
密码不能为空
|
||||
密码不能为空
|
||||
已处理完毕
|
||||
已处理完毕
|
||||
已处理完毕
|
||||
并发冲突_请稍后重试
|
||||
性别不正确
|
||||
手机号码不正确
|
||||
手机号码不能为空
|
||||
接口编码不存在
|
||||
政治面貌不正确
|
||||
数据库服务器时钟偏移
|
||||
文件不能为空
|
||||
新密码不能为空
|
||||
新手机号码验证码不正确
|
||||
旧密码不正确
|
||||
旧密码不能为空
|
||||
旧手机号码不正确
|
||||
旧手机号码验证码不正确
|
||||
时间计划不能为空
|
||||
未指定部门
|
||||
未获取到待执行任务
|
||||
模块名称不能为空
|
||||
模块类型不能为空
|
||||
模块说明不能为空
|
||||
此节点已下线
|
||||
此节点已下线
|
||||
民族不正确
|
||||
消息主题不能为空
|
||||
消息内容不能为空
|
||||
父节点不存在
|
||||
用户不存在
|
||||
用户名不能为空
|
||||
用户名不能为空
|
||||
用户名不能为空
|
||||
用户名或密码错误
|
||||
用户头像不能为空
|
||||
用户编号不存在
|
||||
目标设备不能为空
|
||||
目标设备不能为空
|
||||
短信验证请求不能为空
|
||||
短信验证请求不能为空
|
||||
短信验证请求不能为空
|
||||
站内信不存在
|
||||
站内信状态不正确
|
||||
站内信类型不正确
|
||||
缓存键不能为空
|
||||
网络地址不正确
|
||||
网络地址不正确
|
||||
网络地址不正确
|
||||
菜单名称不能为空
|
||||
菜单标题不能为空
|
||||
菜单类型不正确
|
||||
菜单编号不能为空
|
||||
角色不存在
|
||||
角色名称不能为空
|
||||
角色数据范围不正确
|
||||
角色编号不能为空
|
||||
角色编号列表不能为空
|
||||
设备类型不能为空
|
||||
证件类型不正确
|
||||
该角色下存在用户
|
||||
该部门下存在子部门
|
||||
该部门下存在用户
|
||||
请求地址不能为空
|
||||
请求方法不正确
|
||||
请稍后重试
|
||||
请联系管理员激活账号
|
||||
读取用户令牌出错
|
||||
账号不能为空
|
||||
邮箱验证码不正确
|
||||
部门不存在
|
||||
部门名称不能为空
|
||||
键值不能为空
|
||||
键名称不能为空
|
||||
键名称不能为空
|
||||
随机延时结束时间不正确
|
||||
随机延时起始时间不正确
|
||||
验证数据不能为空
|
||||
验证码不正确
|
||||
验证码不能为空
|
||||
验证码目标设备类型不正确
|
||||
验证码类型不正确
|
||||
验证码类型不能为空
|
@ -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
|
||||
},
|
||||
|
@ -15,7 +15,7 @@
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.11.20">
|
||||
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.12.19">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
@ -1,9 +1,9 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"version": "2.2.0",
|
||||
"devDependencies": {
|
||||
"cz-git": "^1.10.1",
|
||||
"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 updated: 0f6c2b807d...6ea7ac8e50
1
refs/Gurion
Submodule
1
refs/Gurion
Submodule
Submodule refs/Gurion added at c5c88dc135
Submodule refs/ns-ext updated: 8c0dbcf1f4...7557cb0538
@ -1,4 +1,4 @@
|
||||
#r "nuget: NSExt, 2.2.0"
|
||||
#r "nuget: NSExt, 2.3.2"
|
||||
using NSExt.Extensions;
|
||||
|
||||
Console.WriteLine("请输入原始名称(NetAdmin):");
|
||||
|
42
scripts/switch.nuget.or.project.csx
Normal file
42
scripts/switch.nuget.or.project.csx
Normal file
@ -0,0 +1,42 @@
|
||||
using System.Text.RegularExpressions;
|
||||
string input = string.Empty;
|
||||
while (!new[] { "1", "2" }.Contains(input))
|
||||
{
|
||||
Console.WriteLine("1.nuget 2.project");
|
||||
input = Console.ReadLine();
|
||||
}
|
||||
var slnFile = Directory.GetFiles(@"../", "*.sln").First();
|
||||
var csprojFiles = Directory.GetFiles(@"../src", "*.csproj", new EnumerationOptions { RecurseSubdirectories = true });
|
||||
var slnContent = File.ReadAllText(slnFile);
|
||||
|
||||
if (input == "1")
|
||||
{
|
||||
slnContent = Regex.Replace(slnContent, "\\nProject\\((.*)#refs", "\n##Project($1#refs");
|
||||
slnContent = Regex.Replace(slnContent, "\\nEndProject#refs", "\n##EndProject#refs");
|
||||
foreach (Match m in Regex.Matches(slnContent, "\"(\\{[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}\\})\"#refs"))
|
||||
{
|
||||
slnContent = slnContent.Replace($" {m.Groups[1].Value}.", $" ##{m.Groups[1].Value}.");
|
||||
}
|
||||
foreach (var csprojFile in csprojFiles)
|
||||
{
|
||||
var csprojContent = File.ReadAllText(csprojFile);
|
||||
csprojContent = Regex.Replace(csprojContent," <ProjectReference(.*)Label=\"refs\"(.*)>", " <!--<ProjectReference$1Label=\"refs\"$2>-->");
|
||||
csprojContent = Regex.Replace(csprojContent," <!--<PackageReference(.*)Label=\"refs\"(.*)>-->", " <PackageReference$1Label=\"refs\"$2>");
|
||||
File.WriteAllText(csprojFile, csprojContent);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
slnContent = Regex.Replace(slnContent, "##", "");
|
||||
foreach (var csprojFile in csprojFiles)
|
||||
{
|
||||
var csprojContent = File.ReadAllText(csprojFile);
|
||||
csprojContent = Regex.Replace(csprojContent," <!--<ProjectReference(.*)Label=\"refs\"(.*)>-->", " <ProjectReference$1Label=\"refs\"$2>");
|
||||
csprojContent = Regex.Replace(csprojContent," <PackageReference(.*)Label=\"refs\"(.*)>", " <!--<PackageReference$1Label=\"refs\"$2>-->");
|
||||
File.WriteAllText(csprojFile, csprojContent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Console.WriteLine(slnContent);
|
||||
File.WriteAllText(slnFile, slnContent);
|
@ -1,22 +0,0 @@
|
||||
{
|
||||
"solution": "NetAdmin.sln",
|
||||
"mappings": {
|
||||
"FreeSql.NS": "../refs/FreeSql/FreeSql/FreeSql.csproj",
|
||||
"FreeSql.DbContext.NS": "../refs/FreeSql/FreeSql.DbContext/FreeSql.DbContext.csproj"
|
||||
},
|
||||
"restore": [
|
||||
{
|
||||
"name": "NetAdmin.Infrastructure",
|
||||
"packages": [
|
||||
{
|
||||
"packageName": "FreeSql.NS",
|
||||
"version": "3.2.833-ns4"
|
||||
},
|
||||
{
|
||||
"packageName": "FreeSql.DbContext.NS",
|
||||
"version": "3.2.833-ns4"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
{
|
||||
"solution": "NetAdmin.sln",
|
||||
"mappings": {
|
||||
"Gurion": "../refs/Gurion/src/Gurion.csproj"
|
||||
},
|
||||
"restore": [
|
||||
{
|
||||
"name": "NetAdmin.Infrastructure",
|
||||
"packages": [
|
||||
{
|
||||
"packageName": "Gurion",
|
||||
"version": "1.1.0"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
{
|
||||
"solution": "NetAdmin.sln",
|
||||
"mappings": {
|
||||
"NSExt": "../refs/ns-ext/src/NSExt/NSExt.csproj"
|
||||
},
|
||||
"restore": [
|
||||
{
|
||||
"name": "NetAdmin.Infrastructure",
|
||||
"packages": [
|
||||
{
|
||||
"packageName": "NSExt",
|
||||
"version": "2.2.0"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
# https://github.com/RicoSuter/DNT#switch-to-projects
|
||||
$targets = @{
|
||||
'1' = 'switch-to-projects'
|
||||
'2' = 'switch-to-packages'
|
||||
}
|
||||
$key = ''
|
||||
while ($null -eq $targets[$key])
|
||||
{
|
||||
$key = Read-Host '请选择:1(切换到项目引用) 2(切换到Nuget包引用)'
|
||||
}
|
||||
$files = Get-ChildItem Switcher.*.json
|
||||
$file = 9999
|
||||
while ($null -eq $files[[int]$file - 1])
|
||||
{
|
||||
$i = 0
|
||||
Write-Host '请选择要切换的配置文件文件'
|
||||
foreach ($file in $files)
|
||||
{
|
||||
$i++
|
||||
Write-Host $i $file.Name
|
||||
}
|
||||
$file = Read-Host
|
||||
}
|
||||
$file = [int]$file - 1
|
||||
Copy-Item $files[$file] 'switcher.json' -Force
|
||||
dnt $targets[$key] ../NetAdmin.sln
|
||||
Remove-Item switcher.json
|
@ -1,7 +0,0 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="$(SolutionDir)/build/code.quality.props"/>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../NetAdmin.AdmServer.Application/NetAdmin.AdmServer.Application.csproj"/>
|
||||
<ProjectReference Include="../NetAdmin.SysComponent.Cache/NetAdmin.SysComponent.Cache.csproj"/>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -1,19 +0,0 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="$(SolutionDir)/build/code.quality.props"/>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="$(SolutionDir)/assets/res/NetAdmin.AdmServer.Statements.ln">
|
||||
<Link>Languages/NetAdmin.AdmServer.Statements.ln</Link>
|
||||
</None>
|
||||
<None Include="$(SolutionDir)/assets/res/NetAdmin.AdmServer.Fields.ln">
|
||||
<Link>Languages/NetAdmin.AdmServer.Fields.ln</Link>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Update="*.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -1,5 +0,0 @@
|
||||
global using NetAdmin.Domain.Attributes;
|
||||
global using NetAdmin.Domain.DbMaps.Dependency;
|
||||
global using NetAdmin.Domain.DbMaps.Dependency.Fields;
|
||||
global using CsvIgnore = CsvHelper.Configuration.Attributes.IgnoreAttribute;
|
||||
global using DynamicFilterOperators = NetAdmin.Domain.Enums.DynamicFilterOperators;
|
@ -1,23 +0,0 @@
|
||||
#pragma warning disable CS1591
|
||||
|
||||
namespace NetAdmin.Infrastructure.Constant;
|
||||
|
||||
/// <summary>
|
||||
/// 数字常量表
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// public类型会通过接口暴露给前端
|
||||
/// </remarks>
|
||||
public static class Numbers
|
||||
{
|
||||
public const int DEF_PAGE_SIZE_QUERY = 20; // 默认值:分页查询页容量
|
||||
public const int HTTP_STATUS_BIZ_FAIL = 900; // HTTP状态码:业务异常
|
||||
public const int MAX_LIMIT_BULK_REQ = 100; // 最大限制:批量请求数
|
||||
public const int MAX_LIMIT_EXPORT = 50000; // 最大限制:导出为CSV文件的条数
|
||||
public const int MAX_LIMIT_QUERY = 1000; // 最大限制:非分页查询条数
|
||||
public const int MAX_LIMIT_QUERY_PAGE_NO = 10000; // 最大限制:分页查询页码
|
||||
public const int MAX_LIMIT_QUERY_PAGE_SIZE = 100; // 最大限制:分页查询页容量
|
||||
public const int MAX_LIMIT_RETRY_CNT_REDIS_LOCK = 10; // 最大限制:Redis锁重试次数
|
||||
public const int SECS_REDIS_LOCK_EXPIRY = 60; // 秒:Redis锁过期时间
|
||||
public const int SECS_REDIS_LOCK_RETRY_DELAY = 1; // 秒:Redis锁重试间隔
|
||||
}
|
@ -1,160 +0,0 @@
|
||||
using System.Numerics;
|
||||
using Microsoft.CodeAnalysis.CSharp.Scripting;
|
||||
using Microsoft.CodeAnalysis.Scripting;
|
||||
|
||||
namespace NetAdmin.Infrastructure.Extensions;
|
||||
|
||||
/// <summary>
|
||||
/// String 扩展方法
|
||||
/// </summary>
|
||||
public static class StringExtensions
|
||||
{
|
||||
private const string _CHARACTERS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
||||
private static readonly Regex _regexIpV4 = new(Chars.RGXL_IP_V4);
|
||||
|
||||
/// <summary>
|
||||
/// 将指定的输入字符串进行Base62解码
|
||||
/// </summary>
|
||||
/// <exception cref="ArgumentException">ArgumentException</exception>
|
||||
public static string Base62Decode(this string me)
|
||||
{
|
||||
BigInteger result = 0;
|
||||
|
||||
foreach (var index in me.Select(c => _CHARACTERS.IndexOf(c))) {
|
||||
if (index < 0) {
|
||||
throw new ArgumentException("Invalid character in Base62 string.");
|
||||
}
|
||||
|
||||
#pragma warning disable IDE0048, RCS1123, SA1407
|
||||
result = result * 62 + index;
|
||||
#pragma warning restore SA1407, RCS1123, IDE0048
|
||||
}
|
||||
|
||||
// Convert BigInteger back to byte array and then to string
|
||||
var bytes = result.ToByteArray();
|
||||
|
||||
// Handle the sign bit
|
||||
if (bytes[^1] == 0) {
|
||||
Array.Resize(ref bytes, bytes.Length - 1);
|
||||
}
|
||||
|
||||
return Encoding.UTF8.GetString(bytes);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将指定的输入字符串进行Base62编码
|
||||
/// </summary>
|
||||
public static string Base62Encode(this string me)
|
||||
{
|
||||
// Convert string to byte array
|
||||
var bytes = Encoding.UTF8.GetBytes(me);
|
||||
|
||||
// Convert byte array to BigInteger for easier processing
|
||||
var bigInteger = new BigInteger(bytes);
|
||||
|
||||
if (bigInteger == 0) {
|
||||
return _CHARACTERS[0].ToString();
|
||||
}
|
||||
|
||||
var result = new StringBuilder();
|
||||
|
||||
while (bigInteger > 0) {
|
||||
var remainder = (int)(bigInteger % 62);
|
||||
bigInteger /= 62;
|
||||
_ = result.Insert(0, _CHARACTERS[remainder]);
|
||||
}
|
||||
|
||||
return result.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 解码避免转义的Base64
|
||||
/// </summary>
|
||||
public static string Base64InUrlDecode(this string me)
|
||||
{
|
||||
return me.Replace("-", "+").Replace("_", "/");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 编码避免转义的Base64
|
||||
/// </summary>
|
||||
public static string Base64InUrlEncode(this string me)
|
||||
{
|
||||
return me.Replace("+", "-").Replace("/", "_");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 计算Crc32
|
||||
/// </summary>
|
||||
public static int Crc32(this string me)
|
||||
{
|
||||
return BitConverter.ToInt32(System.IO.Hashing.Crc32.Hash(Encoding.UTF8.GetBytes(me)));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 执行C#代码
|
||||
/// </summary>
|
||||
public static Task<T> ExecuteCSharpCodeAsync<T>(this string me, Assembly[] assemblies, params string[] importNamespaces)
|
||||
{
|
||||
// 使用 Roslyn 编译并执行代码
|
||||
return CSharpScript.EvaluateAsync<T>(me, ScriptOptions.Default.WithReferences(assemblies).WithImports(importNamespaces));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否IPV4地址
|
||||
/// </summary>
|
||||
public static bool IsIpV4(this string me)
|
||||
{
|
||||
return _regexIpV4.IsMatch(me);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// object -> json
|
||||
/// </summary>
|
||||
public static T ToObject<T>(this string me)
|
||||
{
|
||||
return me.Object<T>(GlobalStatic.JsonSerializerOptions);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// object -> json
|
||||
/// </summary>
|
||||
public static object ToObject(this string me, Type toType)
|
||||
{
|
||||
return me.Object(toType, GlobalStatic.JsonSerializerOptions);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 去掉前部字符串
|
||||
/// </summary>
|
||||
public static string TrimPrefix(this string me, string clearStr)
|
||||
{
|
||||
return Regex.Replace(me, $"^{clearStr}", string.Empty);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 去掉尾部字符串
|
||||
/// </summary>
|
||||
public static string TrimSuffix(this string me, string clearStr)
|
||||
{
|
||||
return Regex.Replace(me, $"{clearStr}$", string.Empty);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 去掉尾部字符串“Async”
|
||||
/// </summary>
|
||||
#pragma warning disable RCS1047, ASA002, VSTHRD200
|
||||
public static string TrimSuffixAsync(this string me)
|
||||
#pragma warning restore VSTHRD200, ASA002, RCS1047
|
||||
{
|
||||
return TrimSuffix(me, "Async");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 去掉尾部字符串“Options”
|
||||
/// </summary>
|
||||
public static string TrimSuffixOptions(this string me)
|
||||
{
|
||||
return TrimSuffix(me, "Options");
|
||||
}
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
{
|
||||
"AppSettings": {
|
||||
"InjectSpecificationDocument": true,
|
||||
"InjectMiniProfiler": true
|
||||
}
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
{
|
||||
"AppSettings": {
|
||||
"InjectSpecificationDocument": true,
|
||||
"InjectMiniProfiler": true
|
||||
}
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
{
|
||||
"AppSettings": {
|
||||
"InjectSpecificationDocument": true,
|
||||
"InjectMiniProfiler": true
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="$(SolutionDir)/build/code.quality.props"/>
|
||||
<ItemGroup>
|
||||
<Content Include="$(SolutionDir)/assets/seed-data/Sys_*.json" LinkBase="SeedData" CopyToOutputDirectory="PreserveNewest"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../NetAdmin.Domain/NetAdmin.Domain.csproj"/>
|
||||
<ProjectReference Include="../NetAdmin.SysComponent.Infrastructure/NetAdmin.SysComponent.Infrastructure.csproj"/>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -1,14 +0,0 @@
|
||||
#pragma warning disable CS1591
|
||||
|
||||
namespace NetAdmin.SysComponent.Infrastructure.Constant;
|
||||
|
||||
/// <summary>
|
||||
/// 字符串常量表
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// public类型会通过接口暴露给前端
|
||||
/// </remarks>
|
||||
public static class SysChars
|
||||
{
|
||||
public const string FLG_PATH_API_SYS_USER_LOGIN_BY_PWD = "api/sys/user/login.by.pwd";
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
#pragma warning disable CS1591
|
||||
|
||||
namespace NetAdmin.SysComponent.Infrastructure.Constant;
|
||||
|
||||
/// <summary>
|
||||
/// 数字常量表
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// public类型会通过接口暴露给前端
|
||||
/// </remarks>
|
||||
public static class SysNumbers
|
||||
{
|
||||
public const long DEF_SORT_VAL = 100; // 默认值:排序字段
|
||||
public const long ID_DIC_CATALOG_GEO_AREA = 379794295185413; // 唯一编号:字典目录-行政区划字典
|
||||
public const int REQUEST_LOG_BUFF_SIZE = 1000; // 请求日志缓冲区大小
|
||||
public const int SCHEDULED_JOB_PARALLEL_NUM = 5; // 计划作业并发数
|
||||
public const int SECS_CACHE_CHART = 300; // 缓存时间(秒):仪表
|
||||
public const int SECS_CACHE_DEFAULT = 60; // 缓存时间(秒):默认
|
||||
public const int SECS_CACHE_DIC_CATALOG_CODE = 300; // 缓存时间(秒):字典配置-目录代码
|
||||
public const int SECS_CACHE_LOGIN_BY_USER_ID = 3600 * 24 * 30; // 缓存时间(秒):通过用户编号登录的用户信息
|
||||
public const int SECS_TIMEOUT_JOB = 180; // 超时时间(秒):作业
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="$(SolutionDir)/build/code.quality.props"/>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="$(SolutionDir)/assets/res/NetAdmin.SysComponent.Statements.ln">
|
||||
<Link>Languages/NetAdmin.SysComponent.Statements.ln</Link>
|
||||
</None>
|
||||
<None Include="$(SolutionDir)/assets/res/NetAdmin.SysComponent.Fields.ln">
|
||||
<Link>Languages/NetAdmin.SysComponent.Fields.ln</Link>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -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;
|
||||
}
|
||||
}
|
@ -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>
|
||||
/// 接口编码验证器
|
||||
@ -16,7 +16,9 @@ public sealed class ApiIdAttribute : ValidationAttribute
|
||||
var req = new QueryReq<QueryApiReq> { Filter = new QueryApiReq { Id = value as string } };
|
||||
|
||||
var method = service.GetType().GetMethod("ExistAsync");
|
||||
#pragma warning disable VSTHRD002
|
||||
var exist = ((Task<bool>)method!.Invoke(service, [req]))!.ConfigureAwait(false).GetAwaiter().GetResult();
|
||||
#pragma warning restore VSTHRD002
|
||||
return !exist ? new ValidationResult(Ln.接口编码不存在) : ValidationResult.Success;
|
||||
}
|
||||
}
|
@ -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>
|
||||
/// 数据范围为特定部门的验证器
|
@ -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>
|
||||
/// 用户编号验证器
|
||||
@ -16,7 +16,9 @@ public sealed class UserIdAttribute : ValidationAttribute
|
||||
var req = new QueryReq<QueryUserReq> { Filter = new QueryUserReq { Id = (long)value! } };
|
||||
|
||||
var method = service.GetType().GetMethod("ExistAsync");
|
||||
#pragma warning disable VSTHRD002
|
||||
var exist = ((Task<bool>)method!.Invoke(service, [req]))!.ConfigureAwait(false).GetAwaiter().GetResult();
|
||||
#pragma warning restore VSTHRD002
|
||||
return !exist ? new ValidationResult(Ln.用户编号不存在) : ValidationResult.Success;
|
||||
}
|
||||
}
|
@ -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>
|
||||
/// 上下文用户信息
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user