Compare commits
114 Commits
Author | SHA1 | Date | |
---|---|---|---|
220b19d152 | |||
7d0fcd4906 | |||
9b6e053721 | |||
![]() |
eef6661c92 | ||
7a7bf0e578 | |||
d4956c94e0 | |||
20f09c8ea1 | |||
e0a4a40314 | |||
6fed7ec752 | |||
4afda0fbde | |||
a3b4608919 | |||
9155db4d9d | |||
72cc3c42fd | |||
f50dfc8f19 | |||
e82a172598 | |||
c9e570f11d | |||
278e10d8fc | |||
ddac448087 | |||
![]() |
a2de0bcbd1 | ||
13a4896828 | |||
6580516e81 | |||
d827d56e49 | |||
b0a4f46af3 | |||
7b8f1b0fcd | |||
52e7f93cc2 | |||
81ac00d1f1 | |||
9c81ce6f9f | |||
ac4bb50b66 | |||
377c28c570 | |||
4d45a72243 | |||
f3651f1432 | |||
ce697588f5 | |||
![]() |
93fe9e41b7 | ||
![]() |
5815ca8594 | ||
![]() |
44e21423cc | ||
f7c91252cd | |||
ef17a8bd79 | |||
e5e1d6f50f | |||
7c47c09838 | |||
b1678e2537 | |||
![]() |
442a69f90d | ||
![]() |
f1fd53f72b | ||
ae4ed8b3ef | |||
4e4a1d0dff | |||
098cfc135e | |||
0285eea352 | |||
725662693b | |||
9504c96f40 | |||
d1e4704adc | |||
0b036e9d67 | |||
89846d9783 | |||
![]() |
194eb89d31 | ||
d622111f53 | |||
c2a2b27afd | |||
4228bd5c32 | |||
b24642e5c9 | |||
4eecc0b4ce | |||
01058ba728 | |||
![]() |
a6f6a8f0a3 | ||
![]() |
4f12b5064d | ||
![]() |
2acf88cad1 | ||
180119019c | |||
f5203782aa | |||
4874a58eee | |||
b4ca6d5626 | |||
63d7a3ed4a | |||
![]() |
ef2a0c3280 | ||
![]() |
c69655e353 | ||
![]() |
f0e1155ee8 | ||
![]() |
03745ff767 | ||
![]() |
ee94d47551 | ||
![]() |
155deedd15 | ||
![]() |
a0a04590c9 | ||
![]() |
c88c8d293d | ||
![]() |
7501138e31 | ||
![]() |
cb75d19202 | ||
e8a2d27c00 | |||
![]() |
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 |
1
.drone/workflows/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
drone workflows
|
6
.github/workflows/nightly-build.yml
vendored
@ -12,7 +12,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [ 22.x ]
|
node-version: [ 23.x ]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
@ -37,8 +37,8 @@ jobs:
|
|||||||
path: ~/.nuget/packages
|
path: ~/.nuget/packages
|
||||||
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
|
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
|
||||||
restore-keys: ${{ runner.os }}-nuget
|
restore-keys: ${{ runner.os }}-nuget
|
||||||
- working-directory: ./src/backend/NetAdmin.AdmServer.Host
|
- working-directory: ./src/backend/YourSolution.AdmServer.Host
|
||||||
run: dotnet publish NetAdmin.AdmServer.Host.csproj -c Release
|
run: dotnet publish YourSolution.AdmServer.Host.csproj -c Release
|
||||||
- run: docker build -t nsnail/netadmin:nightly .
|
- run: docker build -t nsnail/netadmin:nightly .
|
||||||
- uses: docker/login-action@v3
|
- uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
|
6
.github/workflows/release.yml
vendored
@ -12,7 +12,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [ 22.x ]
|
node-version: [ 23.x ]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
@ -37,8 +37,8 @@ jobs:
|
|||||||
path: ~/.nuget/packages
|
path: ~/.nuget/packages
|
||||||
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
|
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
|
||||||
restore-keys: ${{ runner.os }}-nuget
|
restore-keys: ${{ runner.os }}-nuget
|
||||||
- working-directory: ./src/backend/NetAdmin.AdmServer.Host
|
- working-directory: ./src/backend/YourSolution.AdmServer.Host
|
||||||
run: dotnet publish NetAdmin.AdmServer.Host.csproj -c Release
|
run: dotnet publish YourSolution.AdmServer.Host.csproj -c Release
|
||||||
- uses: actions/create-release@v1
|
- uses: actions/create-release@v1
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
1
.gitignore
vendored
@ -397,7 +397,6 @@ FodyWeavers.xsd
|
|||||||
# JetBrains Rider
|
# JetBrains Rider
|
||||||
*.sln.iml
|
*.sln.iml
|
||||||
.idea/
|
.idea/
|
||||||
!src/backend/CloudCode.DataGrip/.idea
|
|
||||||
|
|
||||||
# User Define
|
# User Define
|
||||||
dist/
|
dist/
|
||||||
|
6
.gitmodules
vendored
@ -4,6 +4,6 @@
|
|||||||
[submodule "refs/ns-ext"]
|
[submodule "refs/ns-ext"]
|
||||||
path = refs/ns-ext
|
path = refs/ns-ext
|
||||||
url = https://github.com/nsnail/ns-ext.git
|
url = https://github.com/nsnail/ns-ext.git
|
||||||
[submodule "refs/FreeSql"]
|
[submodule "refs/NetAdmin.FreeSql"]
|
||||||
path = refs/FreeSql
|
path = refs/NetAdmin.FreeSql
|
||||||
url = https://github.com/nsnail/FreeSql.git
|
url = https://github.com/nsnail/NetAdmin.FreeSql.git
|
108
CHANGELOG.md
@ -2,6 +2,114 @@
|
|||||||
|
|
||||||
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.
|
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.3.1](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.3.1) (2024-12-13)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* ✨ 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c))
|
||||||
|
* ✨ 分组统计功能 ([0b036e9](https://github.com/nsnail/NetAdmin/commit/0b036e9d67ffdf7a07c772606009f02744e6a3c3))
|
||||||
|
* ✨ 框架代码同步 ([098cfc1](https://github.com/nsnail/NetAdmin/commit/098cfc135e781a0cf172cd1289e5e871c7a76419))
|
||||||
|
* ✨ 框架代码同步 ([7256626](https://github.com/nsnail/NetAdmin/commit/725662693b7b47f6fae4c1917dd8d80220c7640a))
|
||||||
|
* ✨ 文档管理 ([#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))
|
||||||
|
* 🐛 个性主题色冲突 ([4e4a1d0](https://github.com/nsnail/NetAdmin/commit/4e4a1d0dff7f3698e9a9cfcf46368260cfd70cbd))
|
||||||
|
* 🐛 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec))
|
||||||
|
* 🐛 修复一些样式问题 ([442a69f](https://github.com/nsnail/NetAdmin/commit/442a69f90de179539f78c01d967572f83bd2eff8))
|
||||||
|
* 🐛 用户选择器报错 ([#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.3.0](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.3.0) (2024-12-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* ✨ 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c))
|
||||||
|
* ✨ 分组统计功能 ([0b036e9](https://github.com/nsnail/NetAdmin/commit/0b036e9d67ffdf7a07c772606009f02744e6a3c3))
|
||||||
|
* ✨ 框架代码同步 ([098cfc1](https://github.com/nsnail/NetAdmin/commit/098cfc135e781a0cf172cd1289e5e871c7a76419))
|
||||||
|
* ✨ 框架代码同步 ([7256626](https://github.com/nsnail/NetAdmin/commit/725662693b7b47f6fae4c1917dd8d80220c7640a))
|
||||||
|
* ✨ 文档管理 ([#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))
|
||||||
|
* 🐛 个性主题色冲突 ([4e4a1d0](https://github.com/nsnail/NetAdmin/commit/4e4a1d0dff7f3698e9a9cfcf46368260cfd70cbd))
|
||||||
|
* 🐛 请求日志批量插入,漏写了登录日志 ([#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.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)
|
||||||
|
|
||||||
|
|
||||||
|
### 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)
|
## [2.0.0](https://github.com/nsnail/NetAdmin/compare/v1.6.0...v2.0.0) (2024-11-04)
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,21 +4,21 @@
|
|||||||
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
|
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
|
||||||
<SolutionDir>$(MSBuildThisFileDirectory)</SolutionDir>
|
<SolutionDir>$(MSBuildThisFileDirectory)</SolutionDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(SolutionDir)/build/minver.targets" />
|
<Import Project="$(SolutionDir)/build/minver.targets"/>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<Authors>nsnail</Authors>
|
<Authors>nsnail</Authors>
|
||||||
<BaseIntermediateOutputPath>$(SolutionDir)/dist/backend/$(MSBuildProjectName)/obj</BaseIntermediateOutputPath>
|
<BaseIntermediateOutputPath>$(SolutionDir)/dist/backend/$(MSBuildProjectName)/obj</BaseIntermediateOutputPath>
|
||||||
<BaseOutputPath>$(SolutionDir)/dist/backend/$(MSBuildProjectName)/bin</BaseOutputPath>
|
<BaseOutputPath>$(SolutionDir)/dist/backend/$(MSBuildProjectName)/bin</BaseOutputPath>
|
||||||
<Copyright>© 2006-2023 nsnail</Copyright>
|
<Copyright>© 2006-2024 nsnail</Copyright>
|
||||||
<Description>通用后台权限管理系统、快速开发框架(基于C#12/.NET9、Vue3/Vite、Element Plus等现代技术构建,具有十分整洁、优雅的编码规范)</Description>
|
<Description>通用后台权限管理系统、快速开发框架(基于C#13/.NET9、Vue3/Vite、ElementPlus等现代技术构建,具有十分整洁、优雅的编码规范)</Description>
|
||||||
<EnableBaseIntermediateOutputPathMismatchWarning>false</EnableBaseIntermediateOutputPathMismatchWarning>
|
<EnableBaseIntermediateOutputPathMismatchWarning>false</EnableBaseIntermediateOutputPathMismatchWarning>
|
||||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<LangVersion>preview</LangVersion>
|
<LangVersion>preview</LangVersion>
|
||||||
<MinVerDefaultPreReleaseIdentifiers>beta</MinVerDefaultPreReleaseIdentifiers>
|
<MinVerDefaultPreReleaseIdentifiers>beta</MinVerDefaultPreReleaseIdentifiers>
|
||||||
<MinVerTagPrefix>v</MinVerTagPrefix>
|
<MinVerTagPrefix>v</MinVerTagPrefix>
|
||||||
<NoWarn>CA1707;IDE0005;IDE0008;IDE0010;IDE0028;IDE0055;IDE0160;IDE0300;IDE0305;RCS1141;RCS1142;RCS1181;S101;S1121;S1135;S125;S2094;S3604;S4663;S6561;SYSLIB1045;SA1010</NoWarn>
|
<NoWarn>CA1707;IDE0005;IDE0008;IDE0010;IDE0028;IDE0055;IDE0072;IDE0160;IDE0300;IDE0305;RCS1141;RCS1142;RCS1181;S101;S1121;S1135;S125;S2094;S3604;S4663;S6561;SA1010;SYSLIB1045</NoWarn>
|
||||||
<Product>NetAdmin</Product>
|
<Product>NetAdmin</Product>
|
||||||
<RepositoryType>git</RepositoryType>
|
<RepositoryType>git</RepositoryType>
|
||||||
<RepositoryUrl>https://github.com/nsnail/NetAdmin.git</RepositoryUrl>
|
<RepositoryUrl>https://github.com/nsnail/NetAdmin.git</RepositoryUrl>
|
||||||
@ -26,12 +26,12 @@
|
|||||||
<Title>$(AssemblyName)</Title>
|
<Title>$(AssemblyName)</Title>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="MinVer" Version="6.0.0">
|
<PackageReference Include="MinVer" Version="6.1.0-beta.1">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="../GlobalUsings.cs" Link="GlobalUsings.cs" />
|
<Compile Include="$(SolutionDir)/src/backend/GlobalUsings.cs" Link="GlobalUsings.cs"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
@ -1,7 +1,7 @@
|
|||||||
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
|
FROM mcr.microsoft.com/dotnet/aspnet:9.0.4 AS base
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
RUN apt update
|
RUN apt update
|
||||||
RUN apt install -y redis
|
RUN apt install -y redis
|
||||||
COPY ./dist/backend/NetAdmin.AdmServer.Host/bin/Release/net9.0/publish .
|
COPY ./dist/backend/YourSolution.AdmServer.Host/bin/Release/net9.0/publish .
|
||||||
ENTRYPOINT redis-server --daemonize yes && dotnet NetAdmin.AdmServer.Host.dll -is
|
ENTRYPOINT redis-server --daemonize yes && dotnet YourSolution.AdmServer.Host.dll -is
|
226
NetAdmin.sln
@ -1,226 +0,0 @@
|
|||||||
|
|
||||||
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}"
|
|
||||||
EndProject
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "backend", "backend", "{4DAF9366-855F-46BB-AE4C-660C92FA0697}"
|
|
||||||
EndProject
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{5198A03D-0CAC-4828-A807-34A693F73859}"
|
|
||||||
ProjectSection(SolutionItems) = preProject
|
|
||||||
.commitlintrc.js = .commitlintrc.js
|
|
||||||
.editorconfig = .editorconfig
|
|
||||||
.gitattributes = .gitattributes
|
|
||||||
.gitignore = .gitignore
|
|
||||||
.gitmodules = .gitmodules
|
|
||||||
CHANGELOG.md = CHANGELOG.md
|
|
||||||
Directory.Build.props = Directory.Build.props
|
|
||||||
Dockerfile = Dockerfile
|
|
||||||
dotnet-tools.json = dotnet-tools.json
|
|
||||||
global.json = global.json
|
|
||||||
LICENSE = LICENSE
|
|
||||||
NetAdmin.sln.DotSettings = NetAdmin.sln.DotSettings
|
|
||||||
nuget.config = nuget.config
|
|
||||||
package.json = package.json
|
|
||||||
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
|
|
||||||
clean.ln.csx = scripts/clean.ln.csx
|
|
||||||
code.clean.csx = scripts/code.clean.csx
|
|
||||||
code.clean.ps1 = scripts/code.clean.ps1
|
|
||||||
find.unused.ln.csx = scripts/find.unused.ln.csx
|
|
||||||
gen.cs.tt = scripts/gen.cs.tt
|
|
||||||
gen.id.linq = scripts/gen.id.linq
|
|
||||||
gen.ln.cmd = scripts/gen.ln.cmd
|
|
||||||
gen.resx.tt = scripts/gen.resx.tt
|
|
||||||
image.optimize.csx = scripts/image.optimize.csx
|
|
||||||
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
|
|
||||||
sync.sln.files.csx = scripts/sync.sln.files.csx
|
|
||||||
wait.server.stop.sh = scripts/wait.server.stop.sh
|
|
||||||
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("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Infrastructure", "src\backend\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}"
|
|
||||||
EndProject
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.AdmServer.Host", "src\backend\NetAdmin.AdmServer.Host\NetAdmin.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}"
|
|
||||||
EndProject
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Application", "src\backend\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}"
|
|
||||||
EndProject
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Cache", "src\backend\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}"
|
|
||||||
EndProject
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Host", "src\backend\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}"
|
|
||||||
EndProject
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Application", "src\backend\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
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "01.frameworks", "01.frameworks", "{D9C3EF66-2757-473D-A26B-54FD08DA203F}"
|
|
||||||
EndProject
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "04.tests", "04.tests", "{89260294-80FC-49F1-8D73-AECD39AFF2B7}"
|
|
||||||
EndProject
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "05.tools", "05.tools", "{79409163-5006-405D-AC96-406FA0AD77B7}"
|
|
||||||
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}"
|
|
||||||
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}"
|
|
||||||
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}"
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Any CPU = Debug|Any CPU
|
|
||||||
Release|Any CPU = Release|Any CPU
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{91839A15-D08F-4848-A301-F793412BC688}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{91839A15-D08F-4848-A301-F793412BC688}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{91839A15-D08F-4848-A301-F793412BC688}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{91839A15-D08F-4848-A301-F793412BC688}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{34650E82-D257-46DA-BD6B-DE307113347B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{34650E82-D257-46DA-BD6B-DE307113347B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{34650E82-D257-46DA-BD6B-DE307113347B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{34650E82-D257-46DA-BD6B-DE307113347B}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{00604162-C444-478B-B773-3AB23C856CA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{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
|
|
||||||
{932520DF-D312-415A-A128-1117F8221D68}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{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
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(NestedProjects) = preSolution
|
|
||||||
{4DAF9366-855F-46BB-AE4C-660C92FA0697} = {C84EB5A0-37AD-4B17-A51E-E36888C4441E}
|
|
||||||
{12AE5B4B-CB1A-498E-83B8-04E201E31D86} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
|
|
||||||
{3F23258D-8299-4992-9F51-2EE9B52CF9D2} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
|
|
||||||
{D9C3EF66-2757-473D-A26B-54FD08DA203F} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
|
|
||||||
{70C54E1B-2083-4196-AB68-34CAF0075D82} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
|
|
||||||
{91452C22-4B57-4F16-9AF6-42C7BF830504} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
|
|
||||||
{58509C57-09FA-4E3C-BC07-78E786A2A326} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
|
|
||||||
{91839A15-D08F-4848-A301-F793412BC688} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
|
|
||||||
{1E62C322-EE42-4699-A6F1-791C53EFA62D} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
|
|
||||||
{E38B2EB4-D7A5-4777-9236-3B348919DF23} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
|
|
||||||
{7CB632D3-3635-4F8D-AFE7-F496D37D422B} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
|
|
||||||
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
|
|
||||||
{89260294-80FC-49F1-8D73-AECD39AFF2B7} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
|
|
||||||
{C7F27698-DA05-4ACD-B0D7-4791B3972002} = {89260294-80FC-49F1-8D73-AECD39AFF2B7}
|
|
||||||
{00604162-C444-478B-B773-3AB23C856CA7} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
|
|
||||||
{34650E82-D257-46DA-BD6B-DE307113347B} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
|
|
||||||
{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
|
|
93
NetAdmin.slnx
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
<Solution>
|
||||||
|
<Folder Name="/.drone/"/>
|
||||||
|
<Folder Name="/.drone/workflows/">
|
||||||
|
<File Path=".drone/workflows/README.md"/>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/.github/"/>
|
||||||
|
<Folder Name="/.github/workflows/">
|
||||||
|
<File Path=".github/workflows/nightly-build.yml"/>
|
||||||
|
<File Path=".github/workflows/README.md"/>
|
||||||
|
<File Path=".github/workflows/release.yml"/>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/build/">
|
||||||
|
<File Path="build/code.quality.props"/>
|
||||||
|
<File Path="build/copy.pkg.xml.comment.files.targets"/>
|
||||||
|
<File Path="build/minver.targets"/>
|
||||||
|
<File Path="build/prebuild.targets"/>
|
||||||
|
<File Path="build/stylecop.analyzers.ruleset"/>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/docker/">
|
||||||
|
<File Path="docker/README.md"/>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/meta/">
|
||||||
|
<File Path=".commitlintrc.js"/>
|
||||||
|
<File Path=".editorconfig"/>
|
||||||
|
<File Path=".gitattributes"/>
|
||||||
|
<File Path=".gitignore"/>
|
||||||
|
<File Path=".gitmodules"/>
|
||||||
|
<File Path="CHANGELOG.md"/>
|
||||||
|
<File Path="Directory.Build.props"/>
|
||||||
|
<File Path="Dockerfile"/>
|
||||||
|
<File Path="dotnet-tools.json"/>
|
||||||
|
<File Path="global.json"/>
|
||||||
|
<File Path="LICENSE"/>
|
||||||
|
<File Path="NetAdmin.slnx.DotSettings"/>
|
||||||
|
<File Path="nuget.config"/>
|
||||||
|
<File Path="package.json"/>
|
||||||
|
<File Path="README.md"/>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/scripts/">
|
||||||
|
<File Path="scripts/1.git.pull.request.ps1"/>
|
||||||
|
<File Path="scripts/2.git.release.ps1"/>
|
||||||
|
<File Path="scripts/3.git.recreate.branch.ps1"/>
|
||||||
|
<File Path="scripts/4.git.del.obsolete.tags.ps1"/>
|
||||||
|
<File Path="scripts/5.git.update.submodule.ps1"/>
|
||||||
|
<File Path="scripts/clean.ln.csx"/>
|
||||||
|
<File Path="scripts/code.clean.csx"/>
|
||||||
|
<File Path="scripts/code.clean.ps1"/>
|
||||||
|
<File Path="scripts/find.unused.ln.csx"/>
|
||||||
|
<File Path="scripts/gen.cs.tt"/>
|
||||||
|
<File Path="scripts/gen.id.linq"/>
|
||||||
|
<File Path="scripts/gen.ln.cmd"/>
|
||||||
|
<File Path="scripts/gen.resx.tt"/>
|
||||||
|
<File Path="scripts/git.config.cmd"/>
|
||||||
|
<File Path="scripts/image.optimize.csx"/>
|
||||||
|
<File Path="scripts/install.as.tpl.ps1"/>
|
||||||
|
<File Path="scripts/rename.csx"/>
|
||||||
|
<File Path="scripts/resharper.full.ps1"/>
|
||||||
|
<File Path="scripts/switch.nuget.or.project.csx"/>
|
||||||
|
<File Path="scripts/sync.slnx.files.csx"/>
|
||||||
|
<File Path="scripts/wait.server.stop.sh"/>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/src/"/>
|
||||||
|
<Folder Name="/src/backend/"/>
|
||||||
|
<Folder Name="/src/backend/01.frameworks/">
|
||||||
|
<!--<Project Type="Refs" Path="refs/Gurion/src/Gurion/Gurion.csproj"/>-->
|
||||||
|
<!--<Project Type="Refs" Path="refs/NetAdmin.FreeSql/src/FreeSql.DbContext/FreeSql.DbContext.csproj"/>-->
|
||||||
|
<!--<Project Type="Refs" Path="refs/NetAdmin.FreeSql/src/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj"/>-->
|
||||||
|
<!--<Project Type="Refs" Path="refs/NetAdmin.FreeSql/src/FreeSql/FreeSql.csproj"/>-->
|
||||||
|
<Project Path="src/backend/NetAdmin/NetAdmin.Application/NetAdmin.Application.csproj"/>
|
||||||
|
<Project Path="src/backend/NetAdmin/NetAdmin.Cache/NetAdmin.Cache.csproj"/>
|
||||||
|
<Project Path="src/backend/NetAdmin/NetAdmin.Domain/NetAdmin.Domain.csproj"/>
|
||||||
|
<Project Path="src/backend/NetAdmin/NetAdmin.Host/NetAdmin.Host.csproj"/>
|
||||||
|
<Project Path="src/backend/NetAdmin/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj"/>
|
||||||
|
<Project Path="src/backend/NetAdmin/NetAdmin.Tests/NetAdmin.Tests.csproj"/>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/src/backend/02.components/">
|
||||||
|
<Project Path="src/backend/NetAdmin/NetAdmin.SysComponent.Application/NetAdmin.SysComponent.Application.csproj"/>
|
||||||
|
<Project Path="src/backend/NetAdmin/NetAdmin.SysComponent.Cache/NetAdmin.SysComponent.Cache.csproj"/>
|
||||||
|
<Project Path="src/backend/NetAdmin/NetAdmin.SysComponent.Host/NetAdmin.SysComponent.Host.csproj"/>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/src/backend/03.hosted-servers/">
|
||||||
|
<Project Path="src/backend/YourSolution.AdmServer.Application/YourSolution.AdmServer.Application.csproj"/>
|
||||||
|
<Project Path="src/backend/YourSolution.AdmServer.Cache/YourSolution.AdmServer.Cache.csproj"/>
|
||||||
|
<Project Path="src/backend/YourSolution.AdmServer.Domain/YourSolution.AdmServer.Domain.csproj"/>
|
||||||
|
<Project Path="src/backend/YourSolution.AdmServer.Host/YourSolution.AdmServer.Host.csproj"/>
|
||||||
|
<Project Path="src/backend/YourSolution.AdmServer.Infrastructure/YourSolution.AdmServer.Infrastructure.csproj"/>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/src/backend/04.tests/">
|
||||||
|
<Project Path="src/backend/UnitTests/UnitTests.csproj"/>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/src/backend/05.tools/">
|
||||||
|
</Folder>
|
||||||
|
</Solution>
|
@ -12,6 +12,7 @@
|
|||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=RedundantPatternParentheses/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=RedundantPatternParentheses/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SuggestBaseTypeForParameter/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SuggestBaseTypeForParameter/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SuggestBaseTypeForParameterInConstructor/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SuggestBaseTypeForParameterInConstructor/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SwitchExpressionHandlesSomeKnownEnumValuesWithExceptionInDefault/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=TooWideLocalVariableScope/@EntryIndexedValue">HINT</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=TooWideLocalVariableScope/@EntryIndexedValue">HINT</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002EGlobal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002EGlobal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002ELocal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002ELocal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
||||||
@ -325,6 +326,7 @@
|
|||||||
</Patterns></s:String>
|
</Patterns></s:String>
|
||||||
|
|
||||||
<!-- Environment-->
|
<!-- Environment-->
|
||||||
|
<s:Boolean x:Key="/Default/Environment/Editor/UseCamelHumps/@EntryValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
|
68
README.md
@ -1,6 +1,6 @@
|
|||||||
# NetAdmin
|
# NetAdmin
|
||||||
|
|
||||||
通用后台权限管理系统、快速开发框架(基于C#12/.NET9、Vue3/Vite、Element Plus等现代技术构建,具有十分整洁、优雅的编码规范)
|
通用后台权限管理系统、快速开发框架(基于C#13/.NET9、Vue3/Vite、ElementPlus等现代技术构建,具有十分整洁、优雅的编码规范)
|
||||||
|
|
||||||
[](https://github.com/nsnail/NetAdmin/actions/workflows/nightly-build.yml)
|
[](https://github.com/nsnail/NetAdmin/actions/workflows/nightly-build.yml)
|
||||||
[](https://github.com/nsnail/NetAdmin/blob/main/LICENSE)
|
[](https://github.com/nsnail/NetAdmin/blob/main/LICENSE)
|
||||||
@ -14,73 +14,86 @@ https://na.tools92.top
|
|||||||
|
|
||||||
```shell
|
```shell
|
||||||
docker run -p 8080:8080 nsnail/netadmin
|
docker run -p 8080:8080 nsnail/netadmin
|
||||||
# 需翻墙
|
# 墙内用户请自备梯子
|
||||||
```
|
```
|
||||||
|
|
||||||
## 构建步骤
|
## 构建步骤
|
||||||
|
|
||||||
|
所涉软件均推荐下载zip/tar版本,解压即用,一键删除,不会污染系统环境:
|
||||||
```shell
|
```shell
|
||||||
# 1. 检查 dotnet sdk 版本 >=9.0.0
|
# 1. 检查 dotnet sdk 版本 >=9.0.0
|
||||||
dotnet --list-sdks
|
dotnet --list-sdks
|
||||||
# 下载 dotnet:https://dotnet.microsoft.com/zh-cn/download/dotnet
|
# 下载 dotnet:https://dotnet.microsoft.com/zh-cn/download/dotnet
|
||||||
|
|
||||||
# 2. 克隆代码仓库
|
# 2. 克隆代码仓库
|
||||||
git clone https://github.com/nsnail/NetAdmin.git && cd ./NetAdmin
|
git clone --depth 1 https://github.com/nsnail/NetAdmin.git && cd ./NetAdmin
|
||||||
|
|
||||||
# 3. 检查本机 redis 运行状态
|
# 3. 确认本机 redis 处于运行状态
|
||||||
redis-cli dbsize
|
redis-server # 启动服务器
|
||||||
|
redis-cli ping # 连接测试
|
||||||
# 下载 redis for windows:https://github.com/redis-windows/redis-windows/releases
|
# 下载 redis for windows:https://github.com/redis-windows/redis-windows/releases
|
||||||
# 下载 redis for linux/mac:https://redis.io/download
|
# 下载 redis for linux/mac:https://redis.io/download
|
||||||
|
|
||||||
# 4. 运行后端 WebApi
|
# 4. 运行后端 WebApi
|
||||||
dotnet run --project ./src/backend/NetAdmin.AdmServer.Host/NetAdmin.AdmServer.Host.csproj --urls http://[::]:5010 -is
|
dotnet run --project ./src/backend/YourSolution.AdmServer.Host/YourSolution.AdmServer.Host.csproj --urls http://[::]:5010 -is
|
||||||
# 浏览器打开 http://localhost:5010 ,将看到Swagger(Knife4jUI)界面
|
# -i 插入种子数据;-s 同步数据库结构
|
||||||
|
# 浏览器访问 http://localhost:5010 ,将看到Swagger(Knife4jUI)界面
|
||||||
|
|
||||||
# 5. 检查 nodejs 版本 >=20
|
# 5. 检查 nodejs 版本 >=20
|
||||||
node -v
|
node -v
|
||||||
# 下载 nodejs:https://nodejs.org/en/download
|
# 下载 nodejs:https://nodejs.org/zh-cn/download
|
||||||
|
|
||||||
# 6. 安装 npm 依赖包
|
# 6. 安装 npm 依赖包
|
||||||
cd ./src/frontend/admin && npm install
|
cd ./src/frontend/admin && npm install
|
||||||
|
|
||||||
# 7. 运行前端项目
|
# 7. 运行前端项目
|
||||||
npm run dev
|
npm run dev
|
||||||
# 浏览器打开 http://localhost:5020 ,将看到管理界面(默认用户名:root,密码:1234qwer)
|
# 浏览器访问 http://localhost:5020 ,将看到管理界面(默认用户名密码:root 1234qwer)
|
||||||
```
|
```
|
||||||
|
|
||||||
## 文件目录树
|
## 文件目录
|
||||||
|
|
||||||
```
|
```
|
||||||
|
+---.github # github 工程文件目录
|
||||||
+---.template.config # dotnet 项目模板配置目录
|
+---.template.config # dotnet 项目模板配置目录
|
||||||
+---assets # 项目资源文件目录
|
+---assets # 项目资源文件目录
|
||||||
+---build # 构建相关的工程文件目录
|
+---build # 构建相关的工程文件目录
|
||||||
+---dist # 编译生成的二进制文件目录
|
+---dist # 编译生成的二进制文件目录
|
||||||
|
+---docker # docker 镜像构建文件目录
|
||||||
+---docs # 项目开发文档目录
|
+---docs # 项目开发文档目录
|
||||||
+---refs # 引用的第三方包的仓库目录
|
+---refs # 引用的第三方包的仓库目录
|
||||||
+---scripts # 各种工具脚本文件目录
|
+---scripts # 各种工具脚本文件目录
|
||||||
+---src # 项目源码文件目录
|
+---src # 项目源码文件目录
|
||||||
```
|
```
|
||||||
|
|
||||||
## 后端项目架构
|
## 项目架构
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
flowchart TD
|
flowchart TD
|
||||||
H["NetAdmin.Host\n公共主机层\n(.Net自托管主机程序)\n(输入输出格式化)\n(数据校验、鉴权)\n(...所有HTTP管道过滤器中间件)"] --> C["NetAdmin.Cache\n公共缓存层\n(基于Redis或MemoryCache的缓存策略实现)"]
|
sys-host["NetAdmin.SysComponent.Host<br>系统组件:主机层"]
|
||||||
C --> A["NetAdmin.Application\n公共业务逻辑层\n(内部服务增删改查)\n(外部服务增删改查)\n(...所有业务用例的计算与组合逻辑的模块化)"]
|
sys-cache["NetAdmin.SysComponent.Cache<br>系统组件:缓存层"]
|
||||||
A --> D["NetAdmin.Domain\n数据实体层\n(数据库关系实体映射)\n(DTO数据传输对象)\n(...所有数据模型的抽象与封装)"]
|
sys-app["NetAdmin.SysComponent.Application<br>系统组件:应用层"]
|
||||||
D --> I["NetAdmin.Infrastructure\n基础设施层\n(第三方组件和Nuget包引用)\n(公共构建和程序运行配置)\n(公共常量枚举异常定义)\n(全球化化和多语言)\n(...所有公共Utility工具)"]
|
host["<b>NetAdmin.Host</b><br>框架:主机层<br>(.Net自托管主机程序)<br>(输入输出格式化)<br>(数据校验、鉴权)<br>(...所有HTTP管道过滤器中间件)"]
|
||||||
|
cache["<b>NetAdmin.Cache</b><br>框架:缓存层<br>(基于Redis或MemoryCache的缓存策略实现)"]
|
||||||
XH["NetAdmin.XXX.Host\n(WebApi)"]-->H
|
app["<b>NetAdmin.Application</b><br>框架:业务应用层<br>(内部服务增删改查)<br>(外部服务增删改查)<br>(...所有业务用例的计算与组合逻辑的模块化)"]
|
||||||
XS["NetAdmin.XXXService\n(常驻内存服务)"]-->H
|
domain["<b>NetAdmin.Domain</b><br>框架:数据实体层<br>(数据库关系实体映射)<br>(DTO数据传输对象)<br>(...所有数据模型的抽象与封装)"]
|
||||||
XS["NetAdmin.XXXService\n(常驻内存服务)"]-->XC
|
infra["<b>NetAdmin.Infrastructure</b><br>框架:基础设施层<br>(第三方组件和Nuget包引用)<br>(公共构建和程序运行配置)<br>(公共常量枚举异常定义)<br>(全球化化和多语言)<br>(...所有公共Utility工具)"]
|
||||||
XC["NetAdmin.XXX.Cache\n(缓存层实例)"]-->C
|
biz-host["YourSolution.XXX.Host<br>业务实例:主机层"]
|
||||||
XA["NetAdmin.XXX.Application\n(业务逻辑层实例)"]-->A
|
biz-cache["YourSolution.XXX.Cache<br>业务实例:缓存层"]
|
||||||
|
biz-app["YourSolution.XXX.Application<br>业务实例:应用层"]
|
||||||
XH-->XC
|
biz-domain["YourSolution.XXX.Domain<br>业务实例:数据实体层"]
|
||||||
XC-->XA
|
biz-infra["YourSolution.XXX.Infrastructure<br>业务实例:基础设施层"]
|
||||||
|
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# | 数据库关系映射 | [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# | 代码质量检查 | [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# | 单元测试框架 | [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# | 控制台终端界面库 | [Spectre.Console](https://github.com/spectreconsole/spectre.console) |
|
||||||
| C# | 扩展函数库 | [NSExt](https://github.com/nsnail/ns-ext.git) |
|
| C# | 扩展函数库 | [NSExt](https://github.com/nsnail/ns-ext.git) |
|
||||||
| C# | 图形处理库 | [SixLabors.ImageSharp](https://github.com/SixLabors/ImageSharp) |
|
| C# | 图形处理库 | [SixLabors.ImageSharp](https://github.com/SixLabors/ImageSharp) |
|
||||||
@ -96,11 +108,9 @@ XC-->XA
|
|||||||
| C# | 性能监控采集 | [prometheus-net.AspNetCore](https://github.com/prometheus-net/prometheus-net) |
|
| C# | 性能监控采集 | [prometheus-net.AspNetCore](https://github.com/prometheus-net/prometheus-net) |
|
||||||
| C# | 雪花ID生成器 | [Yitter.IdGenerator](https://github.com/yitter/idgenerator) |
|
| C# | 雪花ID生成器 | [Yitter.IdGenerator](https://github.com/yitter/idgenerator) |
|
||||||
| C# | 自动化版本管理 | [MinVer](https://github.com/adamralph/minver) |
|
| 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 | SPA基础框架 | [Vue](https://github.com/vuejs/core) |
|
||||||
| TypeScript | 前端构建工具 | [Vite](https://github.com/vitejs/vite) |
|
| 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 | CSS解析器 | [Sass](https://github.com/sass/sass) |
|
||||||
| TypeScript | 图表和数据可视化 | [ECharts](https://github.com/apache/echarts) |
|
| TypeScript | 图表和数据可视化 | [ECharts](https://github.com/apache/echarts) |
|
||||||
| JavaScript | 后台管理界面 | [SCUI](https://gitee.com/lolicode/scui) |
|
| JavaScript | 后台管理界面 | [SCUI](https://gitee.com/lolicode/scui) |
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
上次执行时间
|
||||||
|
上次执行状态
|
||||||
|
上次执行耗时
|
||||||
|
下次执行时间
|
||||||
不为其中之一
|
不为其中之一
|
||||||
不以什么开始
|
不以什么开始
|
||||||
不以什么结束
|
不以什么结束
|
||||||
@ -8,63 +12,138 @@
|
|||||||
中专
|
中专
|
||||||
中共党员
|
中共党员
|
||||||
为其中之一
|
为其中之一
|
||||||
|
人工审核
|
||||||
以什么开始
|
以什么开始
|
||||||
以什么结束
|
以什么结束
|
||||||
保密
|
作业名称
|
||||||
|
作业状态
|
||||||
保密
|
保密
|
||||||
信息
|
信息
|
||||||
倒序排序
|
倒序排序
|
||||||
|
全部数据
|
||||||
|
公告
|
||||||
共青团员
|
共青团员
|
||||||
出生证
|
出生证
|
||||||
|
创建时间
|
||||||
初中
|
初中
|
||||||
|
删除
|
||||||
包含
|
包含
|
||||||
博士
|
博士
|
||||||
博士后
|
博士后
|
||||||
|
发送失败
|
||||||
同步数据库结构
|
同步数据库结构
|
||||||
|
响应体
|
||||||
|
响应状态码
|
||||||
|
唯一编码
|
||||||
|
备注
|
||||||
外国人居留证
|
外国人居留证
|
||||||
外部错误
|
外部错误
|
||||||
大专
|
大专
|
||||||
大于
|
大于
|
||||||
大于等于
|
大于等于
|
||||||
女
|
女
|
||||||
女
|
字典内容导出
|
||||||
宕机
|
宕机
|
||||||
|
客户端IP
|
||||||
小于
|
小于
|
||||||
小于等于
|
小于等于
|
||||||
小学
|
小学
|
||||||
|
已发送
|
||||||
已婚
|
已婚
|
||||||
|
已校验
|
||||||
|
已读
|
||||||
并且
|
并且
|
||||||
成功
|
成功
|
||||||
或者
|
或者
|
||||||
|
所属角色
|
||||||
|
所属部门
|
||||||
|
手机
|
||||||
|
手机号
|
||||||
|
执行耗时
|
||||||
|
执行计划
|
||||||
护照
|
护照
|
||||||
|
指定部门数据
|
||||||
|
按钮
|
||||||
|
排序
|
||||||
|
接口名称
|
||||||
|
接口导出
|
||||||
|
接口描述
|
||||||
|
接口路径
|
||||||
插入种子数据
|
插入种子数据
|
||||||
|
操作系统
|
||||||
|
数据范围
|
||||||
|
文档内容
|
||||||
|
文档内容导出
|
||||||
|
文档标题
|
||||||
无效操作
|
无效操作
|
||||||
无效输入
|
无效输入
|
||||||
|
无限权限
|
||||||
日期范围
|
日期范围
|
||||||
|
是否启用
|
||||||
|
显示仪表板
|
||||||
|
最后登录时间
|
||||||
未处理异常
|
未处理异常
|
||||||
未婚
|
未婚
|
||||||
|
未读
|
||||||
|
本人数据
|
||||||
本科
|
本科
|
||||||
|
本部门和下级部门数据
|
||||||
|
本部门数据
|
||||||
|
框架
|
||||||
比较数据库结构
|
比较数据库结构
|
||||||
|
注册
|
||||||
|
消息主题
|
||||||
|
消息摘要
|
||||||
|
消息类型
|
||||||
港澳台通行证
|
港澳台通行证
|
||||||
|
用户代理
|
||||||
|
用户名
|
||||||
|
用户导出
|
||||||
|
电子邮箱
|
||||||
男
|
男
|
||||||
男
|
登录
|
||||||
|
登录名
|
||||||
|
登录日志导出
|
||||||
硕士
|
硕士
|
||||||
示例导出
|
示例导出
|
||||||
离异
|
离异
|
||||||
|
空闲
|
||||||
|
站内信导出
|
||||||
等于
|
等于
|
||||||
等于
|
等待发送
|
||||||
等于
|
|
||||||
管理模块
|
管理模块
|
||||||
系统模块
|
系统模块
|
||||||
|
绑定手机号码
|
||||||
结果非预期
|
结果非预期
|
||||||
群众
|
群众
|
||||||
自定义
|
自定义
|
||||||
范围
|
范围
|
||||||
|
菜单
|
||||||
|
角色名称
|
||||||
|
角色导出
|
||||||
|
解绑手机号码
|
||||||
警告
|
警告
|
||||||
|
计划作业导出
|
||||||
|
计划作业执行记录导出
|
||||||
|
请求方式
|
||||||
|
请求日志导出
|
||||||
调试
|
调试
|
||||||
跟踪
|
追踪
|
||||||
|
追踪标识
|
||||||
身份证
|
身份证
|
||||||
|
运行
|
||||||
|
通知
|
||||||
|
邮箱号
|
||||||
|
部门名称
|
||||||
|
部门导出
|
||||||
|
配置导出
|
||||||
|
重设密码
|
||||||
|
链接
|
||||||
错误
|
错误
|
||||||
随机排序
|
随机排序
|
||||||
|
项值
|
||||||
|
项名
|
||||||
顺序排序
|
顺序排序
|
||||||
高中
|
高中
|
||||||
|
默认角色
|
||||||
|
默认部门
|
@ -1,21 +1,121 @@
|
|||||||
|
1分钟内只能发送1次
|
||||||
6位数字
|
6位数字
|
||||||
8位以上数字字母组合
|
8位以上数字字母组合
|
||||||
XML注释文件不存在
|
XML注释文件不存在
|
||||||
中文姓名
|
中文姓名
|
||||||
事务已回滚
|
事务已回滚
|
||||||
事务已提交
|
事务已提交
|
||||||
|
人机校验请求不能为空
|
||||||
|
人机验证未通过
|
||||||
|
作业名称不能为空
|
||||||
|
允许的文件大小
|
||||||
|
允许的文件格式
|
||||||
区号电话号码分机号
|
区号电话号码分机号
|
||||||
参数格式不正确
|
参数格式不正确
|
||||||
|
唯一编码不能为空
|
||||||
|
图标代码不能为空
|
||||||
|
图标名称不能为空
|
||||||
|
婚姻状况不正确
|
||||||
|
字典名称不能为空
|
||||||
|
字典目录不存在
|
||||||
|
字典目录编号不能为空
|
||||||
|
字典编码不能为空
|
||||||
|
学历不正确
|
||||||
|
完全公开
|
||||||
|
密码不能为空
|
||||||
|
已处理完毕
|
||||||
|
并发冲突_请稍后重试
|
||||||
开始事务
|
开始事务
|
||||||
|
性别不正确
|
||||||
|
手机号码不正确
|
||||||
|
手机号码不能为空
|
||||||
|
接口编码不存在
|
||||||
支付宝账号
|
支付宝账号
|
||||||
|
政治面貌不正确
|
||||||
数据库同步开始
|
数据库同步开始
|
||||||
|
数据库服务器时钟偏移
|
||||||
数据库结构同步完成
|
数据库结构同步完成
|
||||||
|
文件不能为空
|
||||||
|
文档内容不能为空
|
||||||
|
文档分类不存在
|
||||||
|
文档分类名称不能为空
|
||||||
|
文档分类编号不能为空
|
||||||
|
文档分类编码不能为空
|
||||||
|
文档标题不能为空
|
||||||
|
新密码不能为空
|
||||||
|
新手机号码验证码不正确
|
||||||
无效端口号
|
无效端口号
|
||||||
无效证件号码
|
无效证件号码
|
||||||
|
旧密码不正确
|
||||||
|
旧密码不能为空
|
||||||
|
旧手机号码不正确
|
||||||
|
旧手机号码验证码不正确
|
||||||
时间表达式
|
时间表达式
|
||||||
|
时间计划不能为空
|
||||||
|
未指定部门
|
||||||
|
未获取到待执行任务
|
||||||
|
档案可见性不正确
|
||||||
|
模块名称不能为空
|
||||||
|
模块类型不能为空
|
||||||
|
模块说明不能为空
|
||||||
|
此节点已下线
|
||||||
|
民族不正确
|
||||||
|
消息主题不能为空
|
||||||
|
消息内容不能为空
|
||||||
|
父节点不存在
|
||||||
|
用户不存在
|
||||||
|
用户名不能为空
|
||||||
用户名不能是手机号码
|
用户名不能是手机号码
|
||||||
|
用户名或密码错误
|
||||||
用户名长度4位以上
|
用户名长度4位以上
|
||||||
|
用户头像不能为空
|
||||||
|
用户编号不存在
|
||||||
|
登录用户
|
||||||
|
目标设备不能为空
|
||||||
|
短信验证请求不能为空
|
||||||
|
种子数据插入完成
|
||||||
|
站内信不存在
|
||||||
|
站内信状态不正确
|
||||||
|
站内信类型不正确
|
||||||
|
缓存键不能为空
|
||||||
|
网络地址不正确
|
||||||
|
自己可见
|
||||||
|
菜单名称不能为空
|
||||||
|
菜单标题不能为空
|
||||||
|
菜单类型不正确
|
||||||
|
菜单编号不能为空
|
||||||
|
角色不存在
|
||||||
|
角色名称不能为空
|
||||||
|
角色数据范围不正确
|
||||||
|
角色编号不能为空
|
||||||
|
角色编号列表不能为空
|
||||||
|
记录已存在
|
||||||
|
设备类型不能为空
|
||||||
|
证件类型不正确
|
||||||
|
该角色下存在用户
|
||||||
|
该部门下存在子部门
|
||||||
|
该部门下存在用户
|
||||||
|
请求地址不能为空
|
||||||
请求对象不能为空
|
请求对象不能为空
|
||||||
|
请求方法不正确
|
||||||
|
请稍后重试
|
||||||
|
请联系管理员激活账号
|
||||||
|
读取用户令牌出错
|
||||||
|
账号不能为空
|
||||||
邀请码不正确
|
邀请码不正确
|
||||||
|
邮箱验证码不正确
|
||||||
|
部门不存在
|
||||||
|
部门可见
|
||||||
|
部门名称不能为空
|
||||||
配置文件初始化完毕
|
配置文件初始化完毕
|
||||||
|
键值不能为空
|
||||||
|
键名称不能为空
|
||||||
|
随机延时结束时间不正确
|
||||||
|
随机延时起始时间不正确
|
||||||
非JSON字符串
|
非JSON字符串
|
||||||
|
验证数据不能为空
|
||||||
|
验证码不正确
|
||||||
|
验证码不能为空
|
||||||
|
验证码目标设备类型不正确
|
||||||
|
验证码类型不正确
|
||||||
|
验证码类型不能为空
|
@ -1,81 +0,0 @@
|
|||||||
上次执行时间
|
|
||||||
上次执行状态
|
|
||||||
上次执行耗时
|
|
||||||
下次执行时间
|
|
||||||
人工审核
|
|
||||||
作业名称
|
|
||||||
作业状态
|
|
||||||
全部数据
|
|
||||||
公告
|
|
||||||
创建时间
|
|
||||||
删除
|
|
||||||
发送失败
|
|
||||||
响应体
|
|
||||||
响应状态码
|
|
||||||
唯一编码
|
|
||||||
备注
|
|
||||||
字典内容导出
|
|
||||||
客户端IP
|
|
||||||
已发送
|
|
||||||
已校验
|
|
||||||
已读
|
|
||||||
所属角色
|
|
||||||
所属部门
|
|
||||||
手机
|
|
||||||
手机号
|
|
||||||
执行耗时
|
|
||||||
执行计划
|
|
||||||
指定部门数据
|
|
||||||
按钮
|
|
||||||
排序
|
|
||||||
接口名称
|
|
||||||
接口导出
|
|
||||||
接口描述
|
|
||||||
接口路径
|
|
||||||
操作系统
|
|
||||||
数据范围
|
|
||||||
无限权限
|
|
||||||
是否启用
|
|
||||||
显示仪表板
|
|
||||||
最后登录时间
|
|
||||||
未读
|
|
||||||
本人数据
|
|
||||||
本部门和下级部门数据
|
|
||||||
本部门数据
|
|
||||||
框架
|
|
||||||
注册
|
|
||||||
消息主题
|
|
||||||
消息摘要
|
|
||||||
消息类型
|
|
||||||
用户代理
|
|
||||||
用户名
|
|
||||||
用户导出
|
|
||||||
电子邮箱
|
|
||||||
登录
|
|
||||||
登录名
|
|
||||||
登录日志导出
|
|
||||||
空闲
|
|
||||||
站内信导出
|
|
||||||
等待发送
|
|
||||||
绑定手机号码
|
|
||||||
菜单
|
|
||||||
角色名称
|
|
||||||
角色导出
|
|
||||||
解绑手机号码
|
|
||||||
计划作业导出
|
|
||||||
计划作业执行记录导出
|
|
||||||
请求方式
|
|
||||||
请求日志导出
|
|
||||||
跟踪标识
|
|
||||||
运行
|
|
||||||
通知
|
|
||||||
邮箱号
|
|
||||||
部门名称
|
|
||||||
部门导出
|
|
||||||
配置导出
|
|
||||||
重设密码
|
|
||||||
链接
|
|
||||||
项值
|
|
||||||
项名
|
|
||||||
默认角色
|
|
||||||
默认部门
|
|
@ -1,102 +0,0 @@
|
|||||||
1分钟内只能发送1次
|
|
||||||
人机校验请求不能为空
|
|
||||||
人机验证未通过
|
|
||||||
作业名称不能为空
|
|
||||||
允许的文件大小
|
|
||||||
允许的文件格式
|
|
||||||
唯一编码不能为空
|
|
||||||
图标代码不能为空
|
|
||||||
图标名称不能为空
|
|
||||||
婚姻状况不正确
|
|
||||||
字典名称不能为空
|
|
||||||
字典目录不存在
|
|
||||||
字典目录编号不能为空
|
|
||||||
字典目录编号不能为空
|
|
||||||
字典编码不能为空
|
|
||||||
学历不正确
|
|
||||||
密码不能为空
|
|
||||||
密码不能为空
|
|
||||||
密码不能为空
|
|
||||||
密码不能为空
|
|
||||||
已处理完毕
|
|
||||||
已处理完毕
|
|
||||||
已处理完毕
|
|
||||||
并发冲突_请稍后重试
|
|
||||||
性别不正确
|
|
||||||
手机号码不正确
|
|
||||||
手机号码不能为空
|
|
||||||
接口编码不存在
|
|
||||||
政治面貌不正确
|
|
||||||
数据库服务器时钟偏移
|
|
||||||
文件不能为空
|
|
||||||
新密码不能为空
|
|
||||||
新手机号码验证码不正确
|
|
||||||
旧密码不正确
|
|
||||||
旧密码不能为空
|
|
||||||
旧手机号码不正确
|
|
||||||
旧手机号码验证码不正确
|
|
||||||
时间计划不能为空
|
|
||||||
未指定部门
|
|
||||||
未获取到待执行任务
|
|
||||||
模块名称不能为空
|
|
||||||
模块类型不能为空
|
|
||||||
模块说明不能为空
|
|
||||||
此节点已下线
|
|
||||||
此节点已下线
|
|
||||||
民族不正确
|
|
||||||
消息主题不能为空
|
|
||||||
消息内容不能为空
|
|
||||||
父节点不存在
|
|
||||||
用户不存在
|
|
||||||
用户名不能为空
|
|
||||||
用户名不能为空
|
|
||||||
用户名不能为空
|
|
||||||
用户名或密码错误
|
|
||||||
用户头像不能为空
|
|
||||||
用户编号不存在
|
|
||||||
目标设备不能为空
|
|
||||||
目标设备不能为空
|
|
||||||
短信验证请求不能为空
|
|
||||||
短信验证请求不能为空
|
|
||||||
短信验证请求不能为空
|
|
||||||
站内信不存在
|
|
||||||
站内信状态不正确
|
|
||||||
站内信类型不正确
|
|
||||||
缓存键不能为空
|
|
||||||
网络地址不正确
|
|
||||||
网络地址不正确
|
|
||||||
网络地址不正确
|
|
||||||
菜单名称不能为空
|
|
||||||
菜单标题不能为空
|
|
||||||
菜单类型不正确
|
|
||||||
菜单编号不能为空
|
|
||||||
角色不存在
|
|
||||||
角色名称不能为空
|
|
||||||
角色数据范围不正确
|
|
||||||
角色编号不能为空
|
|
||||||
角色编号列表不能为空
|
|
||||||
设备类型不能为空
|
|
||||||
证件类型不正确
|
|
||||||
该角色下存在用户
|
|
||||||
该部门下存在子部门
|
|
||||||
该部门下存在用户
|
|
||||||
请求地址不能为空
|
|
||||||
请求方法不正确
|
|
||||||
请稍后重试
|
|
||||||
请联系管理员激活账号
|
|
||||||
读取用户令牌出错
|
|
||||||
账号不能为空
|
|
||||||
邮箱验证码不正确
|
|
||||||
部门不存在
|
|
||||||
部门名称不能为空
|
|
||||||
键值不能为空
|
|
||||||
键名称不能为空
|
|
||||||
键名称不能为空
|
|
||||||
随机延时结束时间不正确
|
|
||||||
随机延时起始时间不正确
|
|
||||||
验证数据不能为空
|
|
||||||
验证码不正确
|
|
||||||
验证码不能为空
|
|
||||||
验证码目标设备类型不正确
|
|
||||||
验证码类型不正确
|
|
||||||
验证码类型不能为空
|
|
@ -140,13 +140,34 @@
|
|||||||
"Title": "缓存管理",
|
"Title": "缓存管理",
|
||||||
"Type": 1
|
"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",
|
"Icon": "el-icon-tickets",
|
||||||
"Id": 374792687640581,
|
"Id": 374792687640581,
|
||||||
"Name": "log",
|
"Name": "log",
|
||||||
"Path": "/log",
|
"Path": "/log",
|
||||||
"Sort": 98,
|
"Sort": 97,
|
||||||
"Title": "日志管理",
|
"Title": "日志管理",
|
||||||
"Type": 1
|
"Type": 1
|
||||||
},
|
},
|
||||||
@ -178,7 +199,7 @@
|
|||||||
"Id": 373838105399301,
|
"Id": 373838105399301,
|
||||||
"Name": "dev",
|
"Name": "dev",
|
||||||
"Path": "/dev",
|
"Path": "/dev",
|
||||||
"Sort": 97,
|
"Sort": 96,
|
||||||
"Title": "开发管理",
|
"Title": "开发管理",
|
||||||
"Type": 1
|
"Type": 1
|
||||||
},
|
},
|
||||||
@ -198,7 +219,7 @@
|
|||||||
"ParentId": 373838105399301,
|
"ParentId": 373838105399301,
|
||||||
"Icon": "el-icon-eleme-filled",
|
"Icon": "el-icon-eleme-filled",
|
||||||
"Name": "dev/element",
|
"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,
|
"Sort": 99,
|
||||||
"Title": "Element",
|
"Title": "Element",
|
||||||
"Type": 3,
|
"Type": 3,
|
||||||
|
@ -42,5 +42,21 @@
|
|||||||
{
|
{
|
||||||
"ApiId": "api/sys/user/set.session.user.app.config",
|
"ApiId": "api/sys/user/set.session.user.app.config",
|
||||||
"RoleId": 371729946431493,
|
"RoleId": 371729946431493,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ApiId": "api/sys/login.log/paged.query",
|
||||||
|
"RoleId": 371729946431493,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ApiId": "api/sys/login.log/get",
|
||||||
|
"RoleId": 371729946431493,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ApiId": "api/sys/login.log/count.by",
|
||||||
|
"RoleId": 371729946431493,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ApiId": "api/sys/login.log/export",
|
||||||
|
"RoleId": 371729946431493,
|
||||||
}
|
}
|
||||||
]
|
]
|
@ -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,
|
"CreatedUserId": 370942943322181,
|
||||||
"CreatedUserName": "root",
|
"CreatedUserName": "root",
|
||||||
"MsgType": 2,
|
"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 后台管理系统",
|
"Title": "欢迎使用 NetAdmin 后台管理系统",
|
||||||
}
|
}
|
||||||
]
|
]
|
@ -15,15 +15,15 @@
|
|||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.11.20">
|
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.14.2-alpha">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Roslynator.Analyzers" Version="4.12.9">
|
<PackageReference Include="Roslynator.Analyzers" Version="4.13.1">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="SonarAnalyzer.CSharp" Version="9.32.0.97167">
|
<PackageReference Include="SonarAnalyzer.CSharp" Version="10.8.0.113526">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
Before Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 207 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 90 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 28 KiB |
@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"version": "2.0.0",
|
"version": "2.3.1",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"cz-git": "^1.10.1",
|
"cz-git": "^1.11.1",
|
||||||
"commitizen": "^4.3.1",
|
"commitizen": "^4.3.1",
|
||||||
"prettier": "^3.3.3",
|
"prettier": "^3.5.3",
|
||||||
"standard-version": "^9.5.0"
|
"standard-version": "^9.5.0"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
|
@ -1 +0,0 @@
|
|||||||
Subproject commit 0f6c2b807db92d2ade000558faf3ad5fd9baa34c
|
|
1
refs/Gurion
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit b16b1a35559281a9f53d6914f1195a204c9b4185
|
1
refs/NetAdmin.FreeSql
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 15717df4499d284ec77c624a281c199a29280a4e
|
@ -1 +1 @@
|
|||||||
Subproject commit 8c0dbcf1f4507af29517dccebff5289c42e9b477
|
Subproject commit 322cbc32df1363755d4b0588923ee7324676c3b6
|
@ -1,3 +1,5 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
|
||||||
$branch = $( git branch --show-current )
|
$branch = $( git branch --show-current )
|
||||||
git add ../
|
git add ../
|
||||||
$skipFormat = Read-Host "输入 n 跳过代码整理"
|
$skipFormat = Read-Host "输入 n 跳过代码整理"
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
$types = @{
|
$types = @{
|
||||||
'1' = @('major', '主版本')
|
'1' = @('major', '主版本')
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
|
||||||
$branch = $( git branch --show-current )
|
$branch = $( git branch --show-current )
|
||||||
git checkout main
|
git checkout main
|
||||||
git pull
|
git pull
|
||||||
|
@ -1,2 +1,4 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
|
||||||
git push origin :refs/tags/$(git tag -l "*-*")
|
git push origin :refs/tags/$(git tag -l "*-*")
|
||||||
git tag -d $(git tag -l "*-*")
|
git tag -d $(git tag -l "*-*")
|
5
scripts/5.git.update.submodule.ps1
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
|
||||||
|
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"
|
@ -18,7 +18,7 @@ using System.Net.Http.Json;
|
|||||||
{
|
{
|
||||||
CreateNoWindow = true,
|
CreateNoWindow = true,
|
||||||
FileName = "dotnet",
|
FileName = "dotnet",
|
||||||
Arguments = $"jb cleanupcode --include=\"{files}\" --no-build ../NetAdmin.sln",
|
Arguments = $"jb cleanupcode --include=\"{files}\" --no-build ../NetAdmin.slnx",
|
||||||
UseShellExecute = false,
|
UseShellExecute = false,
|
||||||
RedirectStandardOutput = true
|
RedirectStandardOutput = true
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
|
||||||
npm --prefix ../src/frontend/admin run prettier
|
npm --prefix ../src/frontend/admin run prettier
|
||||||
jb cleanupcode --no-build --include=$($(git status --porcelain | Where-Object { $_ -match "^\s*[MA]" } | ForEach-Object { $_.TrimStart(" M").TrimStart(" A") }) -join ";") ../NetAdmin.sln
|
jb cleanupcode --no-build --include=$( $( git status --porcelain | Where-Object { $_ -match "^\s*[MA]" } | ForEach-Object { $_.TrimStart(" M").TrimStart(" A") } ) -join ";" ) ../NetAdmin.slnx
|
||||||
dot rbom -w -e refs -e .git -e node_modules ../
|
dot rbom -w -e refs -e .git -e node_modules ../
|
||||||
dot trim -w -e refs -e .git -e node_modules ../
|
dot trim -w -e refs -e .git -e node_modules ../
|
||||||
dot tolf -w -e refs -e .git -e node_modules ../
|
dot tolf -w -e refs -e .git -e node_modules ../
|
4
scripts/git.config.cmd
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
git config --local core.eol lf
|
||||||
|
git config --local core.autocrlf false
|
||||||
|
git config --local core.longpaths true
|
||||||
|
git config --local pull.rebase false
|
@ -1,2 +1,4 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
|
||||||
dotnet new uninstall ../
|
dotnet new uninstall ../
|
||||||
dotnet new --install ../
|
dotnet new --install ../
|
@ -1,12 +1,11 @@
|
|||||||
#r "nuget: NSExt, 2.2.0"
|
#r "nuget: NSExt, 2.3.5"
|
||||||
using NSExt.Extensions;
|
using NSExt.Extensions;
|
||||||
|
|
||||||
Console.WriteLine("请输入原始名称(NetAdmin):");
|
Console.WriteLine("请输入原始名称(NetAdmin):");
|
||||||
var oldName = Console.ReadLine().NullOrEmpty("NetAdmin");
|
var oldName = Console.ReadLine().NullOrEmpty("NetAdmin");
|
||||||
Console.WriteLine("请输入替换名称:");
|
Console.WriteLine("请输入替换名称:");
|
||||||
var newName = Console.ReadLine();
|
var newName = Console.ReadLine();
|
||||||
foreach (var path in Directory.EnumerateDirectories("../", $"*{oldName}*",
|
foreach (var path in Directory.EnumerateDirectories("../", $"*{oldName}*", SearchOption.AllDirectories).Where(x => !x.Contains(".git")))
|
||||||
SearchOption.AllDirectories))
|
|
||||||
{
|
{
|
||||||
Console.Write($"{path} --> ");
|
Console.Write($"{path} --> ");
|
||||||
var newPath = path.Replace(oldName, newName);
|
var newPath = path.Replace(oldName, newName);
|
||||||
@ -16,7 +15,7 @@ foreach (var path in Directory.EnumerateDirectories("../", $"*{oldName}*",
|
|||||||
|
|
||||||
|
|
||||||
Console.WriteLine();
|
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));
|
File.WriteAllText(path, File.ReadAllText(path).Replace(oldName, newName));
|
||||||
var newPath = path.Replace(oldName, newName);
|
var newPath = path.Replace(oldName, newName);
|
||||||
|
@ -1 +1,3 @@
|
|||||||
jb cleanupcode --no-build ../NetAdmin.sln
|
#!/usr/bin/env pwsh
|
||||||
|
|
||||||
|
jb cleanupcode --no-build ../NetAdmin.slnx
|
37
scripts/switch.nuget.or.project.csx
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
using System.Text.RegularExpressions;
|
||||||
|
string input = string.Empty;
|
||||||
|
while (!new[] { "1", "2" }.Contains(input))
|
||||||
|
{
|
||||||
|
Console.WriteLine("1.nuget 2.project");
|
||||||
|
input = Console.ReadLine();
|
||||||
|
}
|
||||||
|
var slnxFile = Directory.GetFiles(@"../", "*.slnx").First();
|
||||||
|
var csprojFiles = Directory.GetFiles(@"../src", "*.csproj", new EnumerationOptions { RecurseSubdirectories = true });
|
||||||
|
var slnContent = File.ReadAllText(slnxFile);
|
||||||
|
|
||||||
|
if (input == "1")
|
||||||
|
{
|
||||||
|
slnContent = Regex.Replace(slnContent, "<Project Type=\"Refs\"(.*)>", "<!--<Project Type=\"Refs\"$1>-->");
|
||||||
|
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, "<!--(.*)-->", "$1");
|
||||||
|
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(slnxFile, 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,77 +0,0 @@
|
|||||||
using System.Text.RegularExpressions;
|
|
||||||
|
|
||||||
var slnFile = Directory.GetFiles(@"../", "*.sln").First();
|
|
||||||
var content = File.ReadAllText(slnFile);
|
|
||||||
|
|
||||||
content = Regex.Replace(
|
|
||||||
content,
|
|
||||||
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"meta\", \"meta\", \"{5198A03D-0CAC-4828-A807-34A693F73859}\"(?:.|\n)*?EndProject",
|
|
||||||
$$"""
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{5198A03D-0CAC-4828-A807-34A693F73859}"
|
|
||||||
ProjectSection(SolutionItems) = preProject
|
|
||||||
{{string.Join('\n',
|
|
||||||
Directory.GetFiles(@"../", "*").Where(x => !x.EndsWith(".sln") && !x.EndsWith(".user"))
|
|
||||||
.Select(x=>$" {Path.GetFileName(x)} = {Path.GetFileName(x)}")
|
|
||||||
)}}
|
|
||||||
EndProject
|
|
||||||
"""
|
|
||||||
);
|
|
||||||
|
|
||||||
content = Regex.Replace(
|
|
||||||
content,
|
|
||||||
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"docker\", \"docker\", \"{E80A1018-C354-4A26-9029-8847BB9DA864}\"(?:.|\n)*?EndProject",
|
|
||||||
$$"""
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{E80A1018-C354-4A26-9029-8847BB9DA864}"
|
|
||||||
ProjectSection(SolutionItems) = preProject
|
|
||||||
{{string.Join('\n',
|
|
||||||
Directory.GetFiles(@"../docker", "*")
|
|
||||||
.Select(x=>$" {Path.GetFileName(x)} = docker/{Path.GetFileName(x)}")
|
|
||||||
)}}
|
|
||||||
EndProject
|
|
||||||
"""
|
|
||||||
);
|
|
||||||
|
|
||||||
content = Regex.Replace(
|
|
||||||
content,
|
|
||||||
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"workflows\", \"workflows\", \"{3C6F049E-3EE8-4D66-9AFF-E8A369032487}\"(?:.|\n)*?EndProject",
|
|
||||||
$$"""
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{3C6F049E-3EE8-4D66-9AFF-E8A369032487}"
|
|
||||||
ProjectSection(SolutionItems) = preProject
|
|
||||||
{{string.Join('\n',
|
|
||||||
Directory.GetFiles(@"../.github/workflows", "*")
|
|
||||||
.Select(x=>$" {Path.GetFileName(x)} = .github/workflows/{Path.GetFileName(x)}")
|
|
||||||
)}}
|
|
||||||
EndProject
|
|
||||||
"""
|
|
||||||
);
|
|
||||||
|
|
||||||
content = Regex.Replace(
|
|
||||||
content,
|
|
||||||
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"scripts\", \"scripts\", \"{BB0B25C9-0901-4923-913F-00F9A6B352A5}\"(?:.|\n)*?EndProject",
|
|
||||||
$$"""
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B25C9-0901-4923-913F-00F9A6B352A5}"
|
|
||||||
ProjectSection(SolutionItems) = preProject
|
|
||||||
{{string.Join('\n',
|
|
||||||
Directory.GetFiles(@"../scripts", "*")
|
|
||||||
.Select(x=>$" {Path.GetFileName(x)} = scripts/{Path.GetFileName(x)}")
|
|
||||||
)}}
|
|
||||||
EndProject
|
|
||||||
"""
|
|
||||||
);
|
|
||||||
|
|
||||||
content = Regex.Replace(
|
|
||||||
content,
|
|
||||||
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"build\", \"build\", \"{8E4C93BA-9493-4892-80C4-5E174C504829}\"(?:.|\n)*?EndProject",
|
|
||||||
$$"""
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{8E4C93BA-9493-4892-80C4-5E174C504829}"
|
|
||||||
ProjectSection(SolutionItems) = preProject
|
|
||||||
{{string.Join('\n',
|
|
||||||
Directory.GetFiles(@"../build", "*")
|
|
||||||
.Select(x=>$" {Path.GetFileName(x)} = build/{Path.GetFileName(x)}")
|
|
||||||
)}}
|
|
||||||
EndProject
|
|
||||||
"""
|
|
||||||
);
|
|
||||||
|
|
||||||
Console.WriteLine(content);
|
|
||||||
File.WriteAllText(slnFile, content);
|
|
87
scripts/sync.slnx.files.csx
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
var slnxFile = Directory.GetFiles(@"../", "*.slnx").First();
|
||||||
|
var content = File.ReadAllText(slnxFile);
|
||||||
|
|
||||||
|
content = Regex.Replace(
|
||||||
|
content,
|
||||||
|
"<Folder Name=\"/meta/\">(?:.|\n)*?</Folder>",
|
||||||
|
$$"""
|
||||||
|
<Folder Name="/meta/">
|
||||||
|
{{string.Join('\n',
|
||||||
|
Directory.GetFiles(@"../", "*").Where(x => !x.EndsWith(".slnx") && !x.EndsWith(".user"))
|
||||||
|
.Select(x=>$" <File Path=\"{Path.GetFileName(x)}\"/>")
|
||||||
|
)}}
|
||||||
|
</Folder>
|
||||||
|
"""
|
||||||
|
);
|
||||||
|
|
||||||
|
content = Regex.Replace(
|
||||||
|
content,
|
||||||
|
"<Folder Name=\"/docker/\">(?:.|\n)*?</Folder>",
|
||||||
|
$$"""
|
||||||
|
<Folder Name="/docker/">
|
||||||
|
{{string.Join('\n',
|
||||||
|
Directory.GetFiles(@"../docker", "*")
|
||||||
|
.Select(x=>$" <File Path=\"docker/{Path.GetFileName(x)}\"/>")
|
||||||
|
)}}
|
||||||
|
</Folder>
|
||||||
|
"""
|
||||||
|
);
|
||||||
|
|
||||||
|
content = Regex.Replace(
|
||||||
|
content,
|
||||||
|
"<Folder Name=\"/.github/workflows/\">(?:.|\n)*?</Folder>",
|
||||||
|
$$"""
|
||||||
|
<Folder Name="/.github/workflows/">
|
||||||
|
{{string.Join('\n',
|
||||||
|
Directory.GetFiles(@"../.github/workflows", "*")
|
||||||
|
.Select(x=>$" <File Path=\".github/workflows/{Path.GetFileName(x)}\"/>")
|
||||||
|
)}}
|
||||||
|
</Folder>
|
||||||
|
"""
|
||||||
|
);
|
||||||
|
|
||||||
|
content = Regex.Replace(
|
||||||
|
content,
|
||||||
|
"<Folder Name=\"/.drone/workflows/\">(?:.|\n)*?</Folder>",
|
||||||
|
$$"""
|
||||||
|
<Folder Name="/.drone/workflows/">
|
||||||
|
{{string.Join('\n',
|
||||||
|
Directory.GetFiles(@"../.drone/workflows", "*")
|
||||||
|
.Select(x=>$" <File Path=\".drone/workflows/{Path.GetFileName(x)}\"/>")
|
||||||
|
)}}
|
||||||
|
</Folder>
|
||||||
|
"""
|
||||||
|
);
|
||||||
|
|
||||||
|
content = Regex.Replace(
|
||||||
|
content,
|
||||||
|
"<Folder Name=\"/scripts/\">(?:.|\n)*?</Folder>",
|
||||||
|
$$"""
|
||||||
|
<Folder Name="/scripts/">
|
||||||
|
{{string.Join('\n',
|
||||||
|
Directory.GetFiles(@"../scripts", "*")
|
||||||
|
.Select(x=>$" <File Path=\"scripts/{Path.GetFileName(x)}\"/>")
|
||||||
|
)}}
|
||||||
|
</Folder>
|
||||||
|
"""
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
content = Regex.Replace(
|
||||||
|
content,
|
||||||
|
"<Folder Name=\"/build/\">(?:.|\n)*?</Folder>",
|
||||||
|
$$"""
|
||||||
|
<Folder Name="/build/">
|
||||||
|
{{string.Join('\n',
|
||||||
|
Directory.GetFiles(@"../build", "*")
|
||||||
|
.Select(x=>$" <File Path=\"build/{Path.GetFileName(x)}\"/>")
|
||||||
|
)}}
|
||||||
|
</Folder>
|
||||||
|
"""
|
||||||
|
);
|
||||||
|
|
||||||
|
Console.WriteLine(content);
|
||||||
|
File.WriteAllText(slnxFile, content);
|
@ -32,7 +32,6 @@ global using Gurion.DataEncryption;
|
|||||||
global using Gurion.DataValidation;
|
global using Gurion.DataValidation;
|
||||||
global using Gurion.DependencyInjection;
|
global using Gurion.DependencyInjection;
|
||||||
global using Gurion.DynamicApiController;
|
global using Gurion.DynamicApiController;
|
||||||
global using Gurion.EventBus;
|
|
||||||
global using Gurion.SpecificationDocument;
|
global using Gurion.SpecificationDocument;
|
||||||
global using Gurion.UnifyResult;
|
global using Gurion.UnifyResult;
|
||||||
global using Mapster;
|
global using Mapster;
|
||||||
@ -58,6 +57,7 @@ global using NetAdmin.Infrastructure.Configuration.Options.SubNodes.Redis;
|
|||||||
global using NetAdmin.Infrastructure.Configuration.Options.SubNodes.Upload;
|
global using NetAdmin.Infrastructure.Configuration.Options.SubNodes.Upload;
|
||||||
global using NetAdmin.Infrastructure.Constant;
|
global using NetAdmin.Infrastructure.Constant;
|
||||||
global using NetAdmin.Infrastructure.Enums;
|
global using NetAdmin.Infrastructure.Enums;
|
||||||
|
global using NetAdmin.Infrastructure.EventBus;
|
||||||
global using NetAdmin.Infrastructure.Exceptions;
|
global using NetAdmin.Infrastructure.Exceptions;
|
||||||
global using NetAdmin.Infrastructure.Extensions;
|
global using NetAdmin.Infrastructure.Extensions;
|
||||||
global using NetAdmin.Infrastructure.Languages;
|
global using NetAdmin.Infrastructure.Languages;
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
<Import Project="$(SolutionDir)/build/code.quality.props"/>
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="../NetAdmin.AdmServer.Domain/NetAdmin.AdmServer.Domain.csproj"/>
|
|
||||||
<ProjectReference Include="../NetAdmin.SysComponent.Application/NetAdmin.SysComponent.Application.csproj"/>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="MailKit" Version="4.8.0"/>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
@ -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,14 +0,0 @@
|
|||||||
namespace NetAdmin.Domain.Attributes;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 标记一个枚举的状态指示
|
|
||||||
/// </summary>
|
|
||||||
/// <inheritdoc />
|
|
||||||
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
|
|
||||||
public sealed class IndicatorAttribute(string indicate) : Attribute
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 状态指示
|
|
||||||
/// </summary>
|
|
||||||
public string Indicate { get; } = indicate;
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
namespace NetAdmin.Domain.Events;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 泛型事件源接口
|
|
||||||
/// </summary>
|
|
||||||
public interface IEventSourceGeneric<out T> : IEventSource
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 事件承载(携带)数据
|
|
||||||
/// </summary>
|
|
||||||
T Data { get; }
|
|
||||||
}
|
|
@ -1,45 +0,0 @@
|
|||||||
namespace NetAdmin.Domain.Events;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sql命令事件
|
|
||||||
/// </summary>
|
|
||||||
public abstract record SqlCommandEvent : DataAbstraction, IEventSource
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="SqlCommandEvent" /> class.
|
|
||||||
/// </summary>
|
|
||||||
protected SqlCommandEvent(bool isConsumOnce = false)
|
|
||||||
{
|
|
||||||
IsConsumOnce = isConsumOnce;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public bool IsConsumOnce { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public CancellationToken CancellationToken { get; init; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public DateTime CreatedTime { get; protected init; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string EventId { get; protected init; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public object Payload { get; init; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 标识符缩写
|
|
||||||
/// </summary>
|
|
||||||
protected string Id => Identifier.ToString()[..8].ToUpperInvariant();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 标识符,可将 CommandBefore 与 CommandAfter 进行匹配
|
|
||||||
/// </summary>
|
|
||||||
protected Guid Identifier { get; init; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 关联的Sql语句
|
|
||||||
/// </summary>
|
|
||||||
protected string Sql { get; init; }
|
|
||||||
}
|
|
@ -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,53 +0,0 @@
|
|||||||
using NetAdmin.Domain.Events;
|
|
||||||
|
|
||||||
namespace NetAdmin.Host.Subscribers;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sql性能分析
|
|
||||||
/// </summary>
|
|
||||||
public sealed class SqlProfiler(ILogger<SqlProfiler> logger) : IEventSubscriber
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Sql命令执行后
|
|
||||||
/// </summary>
|
|
||||||
[EventSubscribe(nameof(SqlCommandAfterEvent))]
|
|
||||||
public Task CommandAfterAsync(EventHandlerExecutingContext context)
|
|
||||||
{
|
|
||||||
var source = context.Source as SqlCommandAfterEvent;
|
|
||||||
logger.Info(source);
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sql命令执行前
|
|
||||||
/// </summary>
|
|
||||||
[EventSubscribe(nameof(SqlCommandBeforeEvent))]
|
|
||||||
public Task CommandBeforeAsync(EventHandlerExecutingContext context)
|
|
||||||
{
|
|
||||||
var source = context.Source as SqlCommandBeforeEvent;
|
|
||||||
logger.Debug(source);
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 同步数据库结构之后
|
|
||||||
/// </summary>
|
|
||||||
[EventSubscribe(nameof(SyncStructureAfterEvent))]
|
|
||||||
public Task SyncStructureAfterAsync(EventHandlerExecutingContext context)
|
|
||||||
{
|
|
||||||
var source = context.Source as SyncStructureAfterEvent;
|
|
||||||
logger.Info(source);
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 同步数据库结构之前
|
|
||||||
/// </summary>
|
|
||||||
[EventSubscribe(nameof(SyncStructureBeforeEvent))]
|
|
||||||
public Task SyncStructureBeforeAsync(EventHandlerExecutingContext context)
|
|
||||||
{
|
|
||||||
var source = context.Source as SyncStructureBeforeEvent;
|
|
||||||
logger.Info(source);
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
}
|
|
@ -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,95 +0,0 @@
|
|||||||
using DataType = FreeSql.DataType;
|
|
||||||
|
|
||||||
namespace NetAdmin.Infrastructure;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 全局静态类
|
|
||||||
/// </summary>
|
|
||||||
public static class GlobalStatic
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 当前进程
|
|
||||||
/// </summary>
|
|
||||||
public static readonly Process CurrentProcess = Process.GetCurrentProcess();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 产品版本
|
|
||||||
/// </summary>
|
|
||||||
public static readonly string ProductVersion = FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly()!.Location).ProductVersion;
|
|
||||||
|
|
||||||
private static long _latestLogTime;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 调试模式
|
|
||||||
/// </summary>
|
|
||||||
public static bool DebugMode =>
|
|
||||||
#if DEBUG
|
|
||||||
true
|
|
||||||
#else
|
|
||||||
false
|
|
||||||
#endif
|
|
||||||
;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 最后一次日志时间
|
|
||||||
/// </summary>
|
|
||||||
public static DateTime LatestLogTime => LogCounterOff ? DateTime.MinValue : Volatile.Read(ref _latestLogTime).Time();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 系统内部密钥
|
|
||||||
/// </summary>
|
|
||||||
public static string SecretKey => "{6C4922D3-499A-46db-BFC4-0B51A9C4395F}";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// SQL 随机排序语法
|
|
||||||
/// </summary>
|
|
||||||
/// <exception cref="NotImplementedException">NotImplementedException</exception>
|
|
||||||
public static string SqlRandomSorting =>
|
|
||||||
App.GetOptions<DatabaseOptions>().DbType switch {
|
|
||||||
DataType.MySql => "RAND()"
|
|
||||||
, DataType.SqlServer => "NEWID()"
|
|
||||||
, DataType.PostgreSQL => "RANDOM()"
|
|
||||||
, DataType.Oracle => "DBMS_RANDOM.value"
|
|
||||||
, DataType.Sqlite => "RANDOM()"
|
|
||||||
, DataType.OdbcOracle => throw new NotImplementedException()
|
|
||||||
, DataType.OdbcSqlServer => throw new NotImplementedException()
|
|
||||||
, DataType.OdbcMySql => throw new NotImplementedException()
|
|
||||||
, DataType.OdbcPostgreSQL => throw new NotImplementedException()
|
|
||||||
, DataType.Odbc => throw new NotImplementedException()
|
|
||||||
, DataType.OdbcDameng => throw new NotImplementedException()
|
|
||||||
, DataType.MsAccess => throw new NotImplementedException()
|
|
||||||
, DataType.Dameng => throw new NotImplementedException()
|
|
||||||
, DataType.OdbcKingbaseES => throw new NotImplementedException()
|
|
||||||
, DataType.ShenTong => throw new NotImplementedException()
|
|
||||||
, DataType.KingbaseES => throw new NotImplementedException()
|
|
||||||
, DataType.Firebird => throw new NotImplementedException()
|
|
||||||
, DataType.Custom => throw new NotImplementedException()
|
|
||||||
, DataType.ClickHouse => throw new NotImplementedException()
|
|
||||||
, DataType.GBase => throw new NotImplementedException()
|
|
||||||
, DataType.QuestDb => throw new NotImplementedException()
|
|
||||||
, DataType.Xugu => throw new NotImplementedException()
|
|
||||||
, DataType.CustomOracle => throw new NotImplementedException()
|
|
||||||
, DataType.CustomSqlServer => throw new NotImplementedException()
|
|
||||||
, DataType.CustomMySql => throw new NotImplementedException()
|
|
||||||
, DataType.CustomPostgreSQL => throw new NotImplementedException()
|
|
||||||
, _ => throw new NotImplementedException()
|
|
||||||
};
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Json序列化选项
|
|
||||||
/// </summary>
|
|
||||||
public static JsonSerializerOptions JsonSerializerOptions { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 停止更新日志时间
|
|
||||||
/// </summary>
|
|
||||||
public static bool LogCounterOff { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 增加日志计数器
|
|
||||||
/// </summary>
|
|
||||||
public static void IncrementLogCounter()
|
|
||||||
{
|
|
||||||
Volatile.Write(ref _latestLogTime, DateTime.Now.TimeUnixUtcMs());
|
|
||||||
}
|
|
||||||
}
|
|
@ -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,6 +0,0 @@
|
|||||||
namespace NetAdmin.SysComponent.Domain.Dto.Sys.JobRecord;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 请求:创建计划作业执行记录
|
|
||||||
/// </summary>
|
|
||||||
public sealed record CreateJobRecordReq : Sys_JobRecord;
|
|
@ -1,6 +0,0 @@
|
|||||||
namespace NetAdmin.SysComponent.Domain.Dto.Sys.RequestLogDetail;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 请求:创建请求日志明细
|
|
||||||
/// </summary>
|
|
||||||
public sealed record CreateRequestLogDetailReq : Sys_RequestLogDetail;
|
|
@ -1,6 +0,0 @@
|
|||||||
namespace NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgDept;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 请求:创建站内信-部门映射
|
|
||||||
/// </summary>
|
|
||||||
public sealed record CreateSiteMsgDeptReq : Sys_SiteMsgDept;
|
|
@ -1,6 +0,0 @@
|
|||||||
namespace NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgRole;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 请求:创建站内信-角色映射
|
|
||||||
/// </summary>
|
|
||||||
public sealed record CreateSiteMsgRoleReq : Sys_SiteMsgRole;
|
|
@ -1,6 +0,0 @@
|
|||||||
namespace NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgUser;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 请求:创建站内信-用户映射
|
|
||||||
/// </summary>
|
|
||||||
public sealed record CreateSiteMsgUserReq : Sys_SiteMsgUser;
|
|
@ -1,41 +0,0 @@
|
|||||||
using NetAdmin.Domain.Events;
|
|
||||||
using NetAdmin.SysComponent.Domain.Dto.Sys.RequestLog;
|
|
||||||
|
|
||||||
namespace NetAdmin.SysComponent.Domain.Events.Sys;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 请求日志事件
|
|
||||||
/// </summary>
|
|
||||||
public sealed record RequestLogEvent : DataAbstraction, IEventSourceGeneric<CreateRequestLogReq>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="RequestLogEvent" /> class.
|
|
||||||
/// </summary>
|
|
||||||
public RequestLogEvent(CreateRequestLogReq data, bool isConsumOnce = false, object payload = default, DateTime createdTime = default
|
|
||||||
, CancellationToken cancellationToken = default)
|
|
||||||
{
|
|
||||||
Data = data;
|
|
||||||
IsConsumOnce = isConsumOnce;
|
|
||||||
Payload = payload;
|
|
||||||
CreatedTime = createdTime;
|
|
||||||
CancellationToken = cancellationToken;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public CancellationToken CancellationToken { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public DateTime CreatedTime { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public CreateRequestLogReq Data { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string EventId => nameof(RequestLogEvent);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public bool IsConsumOnce { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public object Payload { get; }
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
using NetAdmin.Domain.Events;
|
|
||||||
using NetAdmin.SysComponent.Domain.Dto.Sys.User;
|
|
||||||
|
|
||||||
namespace NetAdmin.SysComponent.Domain.Events.Sys;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 用户被创建事件
|
|
||||||
/// </summary>
|
|
||||||
public sealed record UserCreatedEvent : DataAbstraction, IEventSourceGeneric<UserInfoRsp>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="UserCreatedEvent" /> class.
|
|
||||||
/// </summary>
|
|
||||||
public UserCreatedEvent(UserInfoRsp data, DateTime createdTime = default, bool isConsumOnce = false, object payload = default
|
|
||||||
, CancellationToken cancellationToken = default)
|
|
||||||
{
|
|
||||||
Data = data;
|
|
||||||
CancellationToken = cancellationToken;
|
|
||||||
CreatedTime = createdTime;
|
|
||||||
IsConsumOnce = isConsumOnce;
|
|
||||||
Payload = payload;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public CancellationToken CancellationToken { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public DateTime CreatedTime { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public UserInfoRsp Data { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string EventId => nameof(UserCreatedEvent);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public bool IsConsumOnce { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public object Payload { get; }
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
using NetAdmin.Domain.Events;
|
|
||||||
using NetAdmin.SysComponent.Domain.Dto.Sys.User;
|
|
||||||
|
|
||||||
namespace NetAdmin.SysComponent.Domain.Events.Sys;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 用户被更新事件
|
|
||||||
/// </summary>
|
|
||||||
public sealed record UserUpdatedEvent : DataAbstraction, IEventSourceGeneric<UserInfoRsp>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="UserUpdatedEvent" /> class.
|
|
||||||
/// </summary>
|
|
||||||
public UserUpdatedEvent(UserInfoRsp data, DateTime createdTime = default, bool isConsumOnce = false, object payload = default
|
|
||||||
, CancellationToken cancellationToken = default)
|
|
||||||
{
|
|
||||||
Data = data;
|
|
||||||
CancellationToken = cancellationToken;
|
|
||||||
CreatedTime = createdTime;
|
|
||||||
IsConsumOnce = isConsumOnce;
|
|
||||||
Payload = payload;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public CancellationToken CancellationToken { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public DateTime CreatedTime { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public UserInfoRsp Data { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string EventId => nameof(UserUpdatedEvent);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public bool IsConsumOnce { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public object Payload { get; }
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
using NetAdmin.Domain.Events;
|
|
||||||
using NetAdmin.SysComponent.Domain.Dto.Sys.VerifyCode;
|
|
||||||
|
|
||||||
namespace NetAdmin.SysComponent.Domain.Events.Sys;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 验证码创建事件
|
|
||||||
/// </summary>
|
|
||||||
public sealed record VerifyCodeCreatedEvent : DataAbstraction, IEventSourceGeneric<QueryVerifyCodeRsp>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="VerifyCodeCreatedEvent" /> class.
|
|
||||||
/// </summary>
|
|
||||||
public VerifyCodeCreatedEvent(QueryVerifyCodeRsp data, DateTime createdTime = default, bool isConsumOnce = false, object payload = default
|
|
||||||
, CancellationToken cancellationToken = default)
|
|
||||||
{
|
|
||||||
Data = data;
|
|
||||||
CancellationToken = cancellationToken;
|
|
||||||
CreatedTime = createdTime;
|
|
||||||
IsConsumOnce = isConsumOnce;
|
|
||||||
Payload = payload;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public CancellationToken CancellationToken { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public DateTime CreatedTime { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public QueryVerifyCodeRsp Data { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string EventId => nameof(VerifyCodeCreatedEvent);
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public bool IsConsumOnce { get; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public object Payload { get; }
|
|
||||||
}
|
|
@ -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,73 +0,0 @@
|
|||||||
using Gurion.Schedule;
|
|
||||||
using NetAdmin.Domain.Events;
|
|
||||||
using NetAdmin.Host.Filters;
|
|
||||||
using NetAdmin.SysComponent.Domain.Contexts;
|
|
||||||
using NetAdmin.SysComponent.Host.Jobs;
|
|
||||||
using NetAdmin.SysComponent.Host.Utils;
|
|
||||||
using FreeSqlBuilder = NetAdmin.Infrastructure.Utils.FreeSqlBuilder;
|
|
||||||
|
|
||||||
namespace NetAdmin.SysComponent.Host.Extensions;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// ServiceCollection 扩展方法
|
|
||||||
/// </summary>
|
|
||||||
[SuppressSniffer]
|
|
||||||
public static class ServiceCollectionExtensions
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 添加上下文用户信息
|
|
||||||
/// </summary>
|
|
||||||
public static IServiceCollection AddContextUserInfo(this IServiceCollection me)
|
|
||||||
{
|
|
||||||
return me.AddScoped(typeof(ContextUserInfo), _ => ContextUserInfo.Create());
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 添加 freeSql orm工具
|
|
||||||
/// </summary>
|
|
||||||
public static IServiceCollection AddFreeSql( //
|
|
||||||
this IServiceCollection me, FreeSqlInitMethods initMethods = FreeSqlInitMethods.None, Action<IFreeSql> freeSqlConfig = null)
|
|
||||||
{
|
|
||||||
// // 非调试模式下禁止同步数据库
|
|
||||||
// #if !DEBUG
|
|
||||||
// initOptions = FreeSqlInitOptions.None;
|
|
||||||
// #endif
|
|
||||||
var dbOptions = App.GetOptions<DatabaseOptions>();
|
|
||||||
var fSql = new FreeSqlBuilder(dbOptions).Build(initMethods);
|
|
||||||
_ = me.AddSingleton(fSql);
|
|
||||||
|
|
||||||
fSql.Aop.AuditValue += SqlAuditor.DataAuditHandler; // Insert/Update自动值处理
|
|
||||||
var eventPublisher = App.GetService<IEventPublisher>();
|
|
||||||
|
|
||||||
#pragma warning disable VSTHRD110
|
|
||||||
|
|
||||||
// AOP事件发布(异步)
|
|
||||||
fSql.Aop.CommandBefore += (_, e) => eventPublisher.PublishAsync(new SqlCommandBeforeEvent(e)); // 增删查改,执行命令之前触发
|
|
||||||
fSql.Aop.CommandAfter += (_, e) => eventPublisher.PublishAsync(new SqlCommandAfterEvent(e)); // 增删查改,执行命令完成后触发
|
|
||||||
|
|
||||||
fSql.Aop.SyncStructureBefore += (_, e) => eventPublisher.PublishAsync(new SyncStructureBeforeEvent(e)); // CodeFirst迁移,执行之前触发
|
|
||||||
|
|
||||||
fSql.Aop.SyncStructureAfter += (_, e) => eventPublisher.PublishAsync(new SyncStructureAfterEvent(e)); // CodeFirst迁移,执行完成触发
|
|
||||||
#pragma warning restore VSTHRD110
|
|
||||||
|
|
||||||
// 全局过滤器设置
|
|
||||||
freeSqlConfig?.Invoke(fSql);
|
|
||||||
|
|
||||||
return me.AddScoped<UnitOfWorkManager>() // 注入工作单元管理器
|
|
||||||
.AddFreeRepository(null, App.Assemblies.ToArray()) // 批量注入 Repository
|
|
||||||
.AddMvcFilter<TransactionInterceptor>(); // 注入事务拦截器
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 添加定时任务
|
|
||||||
/// </summary>
|
|
||||||
public static IServiceCollection AddSchedules(this IServiceCollection me)
|
|
||||||
{
|
|
||||||
return App.WebHostEnvironment.IsProduction()
|
|
||||||
? me.AddSchedule( //
|
|
||||||
builder => builder //
|
|
||||||
.AddJob<ScheduledJob>(true, Triggers.PeriodSeconds(1).SetRunOnStart(true))
|
|
||||||
.AddJob<FreeScheduledJob>(true, Triggers.PeriodMinutes(1).SetRunOnStart(true)))
|
|
||||||
: me;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
using NetAdmin.Domain.Contexts;
|
|
||||||
using NetAdmin.SysComponent.Domain.Events.Sys;
|
|
||||||
|
|
||||||
namespace NetAdmin.SysComponent.Host.Subscribers;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 缓存清理器
|
|
||||||
/// </summary>
|
|
||||||
public sealed class CacheCleaner : IEventSubscriber
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="CacheCleaner" /> class.
|
|
||||||
/// </summary>
|
|
||||||
public CacheCleaner() { }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 用户缓存清理
|
|
||||||
/// </summary>
|
|
||||||
[EventSubscribe(nameof(UserUpdatedEvent))]
|
|
||||||
public Task RemoveUserInfoAsync(EventHandlerExecutingContext context)
|
|
||||||
{
|
|
||||||
if (context.Source is not UserUpdatedEvent userUpdatedEvent) {
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
var cache = App.GetService<IUserCache>();
|
|
||||||
cache.Service.UserToken = ContextUserToken.Create(userUpdatedEvent.Data.Id, userUpdatedEvent.Data.Token, userUpdatedEvent.Data.UserName
|
|
||||||
, userUpdatedEvent.Data.DeptId);
|
|
||||||
return cache.RemoveUserInfoAsync();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
using NetAdmin.SysComponent.Domain.Dto.Sys.VerifyCode;
|
|
||||||
using NetAdmin.SysComponent.Domain.Enums.Sys;
|
|
||||||
using NetAdmin.SysComponent.Domain.Events.Sys;
|
|
||||||
|
|
||||||
namespace NetAdmin.SysComponent.Host.Subscribers;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 邮件验证码发送器
|
|
||||||
/// </summary>
|
|
||||||
public sealed class EmailCodeSender(ILogger<EmailCodeSender> logger) : IEventSubscriber
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 发送邮件
|
|
||||||
/// </summary>
|
|
||||||
[EventSubscribe(nameof(VerifyCodeCreatedEvent))]
|
|
||||||
public async Task SendEmailAsync(EventHandlerExecutingContext context)
|
|
||||||
{
|
|
||||||
if (context.Source is not VerifyCodeCreatedEvent verifyCodeCreatedEvent ||
|
|
||||||
verifyCodeCreatedEvent.Data.DeviceType != VerifyCodeDeviceTypes.Email) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 发送...
|
|
||||||
var verifyCodeService = App.GetService<IVerifyCodeService>();
|
|
||||||
_ = await verifyCodeService.SetVerifyCodeStatusAsync(
|
|
||||||
verifyCodeCreatedEvent.Data.Adapt<SetVerifyCodeStatusReq>() with { Status = VerifyCodeStatues.Sent })
|
|
||||||
.ConfigureAwait(false);
|
|
||||||
logger.Info($"{nameof(IVerifyCodeService)}.{nameof(IVerifyCodeService.SetVerifyCodeStatusAsync)} {Ln.已处理完毕}");
|
|
||||||
}
|
|
||||||
}
|
|