1 Commits

Author SHA1 Message Date
tk
64c7f07df4 chore(release): 2.3.0 2024-12-12 18:15:30 +08:00
522 changed files with 4371 additions and 10390 deletions

View File

@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [ 23.x ]
node-version: [ 22.x ]
steps:
- uses: actions/checkout@v3
with:

View File

@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [ 23.x ]
node-version: [ 22.x ]
steps:
- uses: actions/checkout@v3
with:

View File

@ -2,83 +2,6 @@
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.4.0](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.4.0) (2025-07-02)
### ⚠ BREAKING CHANGES
* [skip ci]
### Features
* ✨ 表格操作栏按钮下拉菜单 ([51cc9fa](https://github.com/nsnail/NetAdmin/commit/51cc9fa80ca296fa6c320d0a47ed51ee0aaef1ce))
* ✨ 表格右键菜单增加排序功能 ([a202595](https://github.com/nsnail/NetAdmin/commit/a2025956878d4e8fb935659f4db0adee02cd8071))
* ✨ 财务管理 ([94d0b70](https://github.com/nsnail/NetAdmin/commit/94d0b7028f8a0d31af67b435f5ed14f7eb2de0b4))
* ✨ 菜单复制 ([#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))
* ✨ 移动国家代码 ([2ff1466](https://github.com/nsnail/NetAdmin/commit/2ff146664e539c395d98530856783f33d3bbd6f2))
* ✨ 营销管理 ([62ac779](https://github.com/nsnail/NetAdmin/commit/62ac7790e80408c9194a71b032f7597c5d8c16cf))
* ✨ 营销管理-返佣比率 ([e5a0f92](https://github.com/nsnail/NetAdmin/commit/e5a0f925a0650a263b79de0e5793b8db2348a7ae))
* ✨ 自助充值 ([e621532](https://github.com/nsnail/NetAdmin/commit/e62153289fd13c5588518a5ee7cfc05c799df6b9))
* ✨ 作业增加请求地址显示查询 ([585f8f4](https://github.com/nsnail/NetAdmin/commit/585f8f4e43ae7fe0c9c387cc41f629f4f279740a))
* ✨ 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))
* 🐛 初次访问时前端js错误 ([9b6e053](https://github.com/nsnail/NetAdmin/commit/9b6e053721c95cf5fbdfa11112892a51e047af59))
* 🐛 档案管理空列表loading状态 ([ac4bb50](https://github.com/nsnail/NetAdmin/commit/ac4bb50b66034f9841ba2398a168ed746c673aea))
* 🐛 导出界面报错 ([#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))
* 🐛 前端警告 ([9c81ce6](https://github.com/nsnail/NetAdmin/commit/9c81ce6f9fe9573c33a99eb86fcf727ed0cbf9f0))
* 🐛 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec))
* 🐛 文件下载编码匹配 ([541c061](https://github.com/nsnail/NetAdmin/commit/541c0616bf5d405a62eac0c5eb967f0ddd4c5139))
* 🐛 修复一些样式问题 ([442a69f](https://github.com/nsnail/NetAdmin/commit/442a69f90de179539f78c01d967572f83bd2eff8))
* 🐛 样式问题 ([377c28c](https://github.com/nsnail/NetAdmin/commit/377c28c57049d453108f9da41b168e1fdb64d7e1))
* 🐛 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71))
* 🐛 种子数据 ([f6aee1b](https://github.com/nsnail/NetAdmin/commit/f6aee1be0f05113cf1b798e23a176c02686348b5))
* 🐛 build err ([60e8451](https://github.com/nsnail/NetAdmin/commit/60e8451048a42cfa47d7c82b038eb8db7e017697))
* 🐛 build error ([278e10d](https://github.com/nsnail/NetAdmin/commit/278e10d8fc750eeb0933a86b64d69f5cc7e0b1cb))
* 🐛 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))
* 🐛 scTable dataChanged ([52e7f93](https://github.com/nsnail/NetAdmin/commit/52e7f93cc2de967a7a90448813b4c1030996d170))
* 🐛 version 条件重复指定 ([01058ba](https://github.com/nsnail/NetAdmin/commit/01058ba7288bcc645f66de2f78e1d659d55333cf))
* 🐛 version lock ([4eecc0b](https://github.com/nsnail/NetAdmin/commit/4eecc0b4ce09f620f83109949e4c2b67b7f8ba90))
* 🐛 vue3-json-viewer 升级出现问题 ([0a03e27](https://github.com/nsnail/NetAdmin/commit/0a03e27b0e7a62de0d836de2dea061adc392cf0f))
* flowchart显示问题 ([eef6661](https://github.com/nsnail/NetAdmin/commit/eef6661c9233c88b3447cc94b44c025b7b87ff8a))
### [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)

View File

@ -18,17 +18,15 @@
<LangVersion>preview</LangVersion>
<MinVerDefaultPreReleaseIdentifiers>beta</MinVerDefaultPreReleaseIdentifiers>
<MinVerTagPrefix>v</MinVerTagPrefix>
<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>
<NoWarn>CA1707;IDE0005;IDE0008;IDE0010;IDE0028;IDE0055;IDE0160;IDE0300;IDE0305;RCS1141;RCS1142;RCS1181;S101;S1121;S1135;S125;S2094;S3604;S4663;S6561;SYSLIB1045;SA1010</NoWarn>
<Product>NetAdmin</Product>
<RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/nsnail/NetAdmin.git</RepositoryUrl>
<TargetFramework Condition="'$(OS)' != 'Windows_NT'">net9.0</TargetFramework>
<TargetFramework Condition="'$(OS)' == 'Windows_NT'">net9.0-windows</TargetFramework>
<UseWindowsForms Condition="'$(OS)' == 'Windows_NT'">true</UseWindowsForms>
<TargetFramework>net9.0</TargetFramework>
<Title>$(AssemblyName)</Title>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MinVer" Version="6.1.0-beta.1">
<PackageReference Include="MinVer" Version="6.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -1,4 +1,4 @@
FROM mcr.microsoft.com/dotnet/aspnet:9.0.5 AS base
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
WORKDIR /app
EXPOSE 8080
RUN apt update

249
NetAdmin.sln Normal file
View File

@ -0,0 +1,249 @@
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}") = ".drone", ".drone", "{3E408077-E73E-45CE-A53A-EF5F9DAE4B46}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{BB5BB244-E7D2-4368-8C18-C1C0ED1E12D1}"
ProjectSection(SolutionItems) = preProject
README.md = .drone/workflows/README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{1129FE25-466B-4F4F-85FC-3752664245E1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{3C6F049E-3EE8-4D66-9AFF-E8A369032487}"
ProjectSection(SolutionItems) = preProject
nightly-build.yml = .github/workflows/nightly-build.yml
README.md = .github/workflows/README.md
release.yml = .github/workflows/release.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{8E4C93BA-9493-4892-80C4-5E174C504829}"
ProjectSection(SolutionItems) = preProject
code.quality.props = build/code.quality.props
copy.pkg.xml.comment.files.targets = build/copy.pkg.xml.comment.files.targets
minver.targets = build/minver.targets
prebuild.targets = build/prebuild.targets
stylecop.analyzers.ruleset = build/stylecop.analyzers.ruleset
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{E80A1018-C354-4A26-9029-8847BB9DA864}"
ProjectSection(SolutionItems) = preProject
README.md = docker/README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{5198A03D-0CAC-4828-A807-34A693F73859}"
ProjectSection(SolutionItems) = preProject
.commitlintrc.js = .commitlintrc.js
.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
5.git.update.submodule.ps1 = scripts/5.git.update.submodule.ps1
clean.ln.csx = scripts/clean.ln.csx
code.clean.csx = scripts/code.clean.csx
code.clean.ps1 = scripts/code.clean.ps1
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
switch.nuget.or.project.csx = scripts/switch.nuget.or.project.csx
sync.sln.files.csx = scripts/sync.sln.files.csx
wait.server.stop.sh = scripts/wait.server.stop.sh
EndProjectSection
EndProject
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("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Infrastructure", "src\backend\NetAdmin\NetAdmin.Infrastructure\NetAdmin.Infrastructure.csproj", "{1E62C322-EE42-4699-A6F1-791C53EFA62D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YourSolution.AdmServer.Application", "src\backend\YourSolution.AdmServer.Application\YourSolution.AdmServer.Application.csproj", "{E38B2EB4-D7A5-4777-9236-3B348919DF23}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YourSolution.AdmServer.Host", "src\backend\YourSolution.AdmServer.Host\YourSolution.AdmServer.Host.csproj", "{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "03.hosted-servers", "03.hosted-servers", "{12AE5B4B-CB1A-498E-83B8-04E201E31D86}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Domain", "src\backend\NetAdmin\NetAdmin.Domain\NetAdmin.Domain.csproj", "{58509C57-09FA-4E3C-BC07-78E786A2A326}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Application", "src\backend\NetAdmin\NetAdmin.Application\NetAdmin.Application.csproj", "{70C54E1B-2083-4196-AB68-34CAF0075D82}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Host", "src\backend\NetAdmin\NetAdmin.Host\NetAdmin.Host.csproj", "{91839A15-D08F-4848-A301-F793412BC688}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Cache", "src\backend\NetAdmin\NetAdmin.Cache\NetAdmin.Cache.csproj", "{91452C22-4B57-4F16-9AF6-42C7BF830504}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YourSolution.AdmServer.Cache", "src\backend\YourSolution.AdmServer.Cache\YourSolution.AdmServer.Cache.csproj", "{7CB632D3-3635-4F8D-AFE7-F496D37D422B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Host", "src\backend\NetAdmin\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\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\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\NetAdmin.Tests\NetAdmin.Tests.csproj", "{00604162-C444-478B-B773-3AB23C856CA7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YourSolution.AdmServer.Domain", "src\backend\YourSolution.AdmServer.Domain\YourSolution.AdmServer.Domain.csproj", "{932520DF-D312-415A-A128-1117F8221D68}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YourSolution.AdmServer.Infrastructure", "src\backend\YourSolution.AdmServer.Infrastructure\YourSolution.AdmServer.Infrastructure.csproj", "{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}"
EndProject
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gurion", "refs\Gurion\src\Gurion\Gurion.csproj", "{CCD098FE-4F95-4FA4-8CC0-9A6DE921FBAE}"#refs
##EndProject#refs
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql", "refs\NetAdmin.FreeSql\src\FreeSql\FreeSql.csproj", "{3C65DA42-877D-46FF-B754-C12214302A29}"#refs
##EndProject#refs
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.Provider.Sqlite", "refs\NetAdmin.FreeSql\src\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj", "{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}"#refs
##EndProject#refs
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.DbContext", "refs\NetAdmin.FreeSql\src\FreeSql.DbContext\FreeSql.DbContext.csproj", "{FE03DF27-EC56-48DB-81B0-F99947259A7C}"#refs
##EndProject#refs
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
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
{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
##{CCD098FE-4F95-4FA4-8CC0-9A6DE921FBAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
##{CCD098FE-4F95-4FA4-8CC0-9A6DE921FBAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
##{CCD098FE-4F95-4FA4-8CC0-9A6DE921FBAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
##{CCD098FE-4F95-4FA4-8CC0-9A6DE921FBAE}.Release|Any CPU.Build.0 = Release|Any CPU
##{3C65DA42-877D-46FF-B754-C12214302A29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
##{3C65DA42-877D-46FF-B754-C12214302A29}.Debug|Any CPU.Build.0 = Debug|Any CPU
##{3C65DA42-877D-46FF-B754-C12214302A29}.Release|Any CPU.ActiveCfg = Release|Any CPU
##{3C65DA42-877D-46FF-B754-C12214302A29}.Release|Any CPU.Build.0 = Release|Any CPU
##{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
##{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}.Debug|Any CPU.Build.0 = Debug|Any CPU
##{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}.Release|Any CPU.ActiveCfg = Release|Any CPU
##{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}.Release|Any CPU.Build.0 = Release|Any CPU
##{FE03DF27-EC56-48DB-81B0-F99947259A7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
##{FE03DF27-EC56-48DB-81B0-F99947259A7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
##{FE03DF27-EC56-48DB-81B0-F99947259A7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
##{FE03DF27-EC56-48DB-81B0-F99947259A7C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{4DAF9366-855F-46BB-AE4C-660C92FA0697} = {C84EB5A0-37AD-4B17-A51E-E36888C4441E}
{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}
{932520DF-D312-415A-A128-1117F8221D68} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{3C6F049E-3EE8-4D66-9AFF-E8A369032487} = {1129FE25-466B-4F4F-85FC-3752664245E1}
{BB5BB244-E7D2-4368-8C18-C1C0ED1E12D1} = {3E408077-E73E-45CE-A53A-EF5F9DAE4B46}
EndGlobalSection
EndGlobal

View File

@ -12,7 +12,6 @@
<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/=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/=UnusedAutoPropertyAccessor_002EGlobal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002ELocal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
@ -326,7 +325,6 @@
&lt;/Patterns&gt;</s:String>
<!-- 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_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>

View File

@ -1,93 +0,0 @@
<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>

View File

@ -14,24 +14,22 @@ https://na.tools92.top
```shell
docker run -p 8080:8080 nsnail/netadmin
# 墙内用户请自备梯子
# 需魔法上网
```
## 构建步骤
所涉软件均推荐下载zip/tar版本解压即用一键删除不会污染系统环境
```shell
# 1. 检查 dotnet sdk 版本 >=9.0.0
dotnet --list-sdks
# 下载 dotnethttps://dotnet.microsoft.com/zh-cn/download/dotnet
# 2. 克隆代码仓库
git clone --depth 1 https://github.com/nsnail/NetAdmin.git && cd ./NetAdmin
git clone https://github.com/nsnail/NetAdmin.git && cd ./NetAdmin
# 3. 确认本机 redis 处于运行状态
redis-server # 启动服务器
redis-cli ping # 连接测试
redis-cli # 连接测试
# 下载 redis for windowshttps://github.com/redis-windows/redis-windows/releases
# 下载 redis for linux/machttps://redis.io/download
@ -42,7 +40,7 @@ dotnet run --project ./src/backend/YourSolution.AdmServer.Host/YourSolution.AdmS
# 5. 检查 nodejs 版本 >=20
node -v
# 下载 nodejshttps://nodejs.org/zh-cn/download
# 下载 nodejshttps://nodejs.org/en/download
# 6. 安装 npm 依赖包
cd ./src/frontend/admin && npm install
@ -71,19 +69,19 @@ npm run dev
```mermaid
flowchart TD
sys-host["NetAdmin.SysComponent.Host<br>系统组件:主机层"]
sys-cache["NetAdmin.SysComponent.Cache<br>系统组件:缓存层"]
sys-app["NetAdmin.SysComponent.Application<br>系统组件:应用层"]
host["<b>NetAdmin.Host</b><br>框架:主机层<br>.Net自托管主机程序<br>(输入输出格式化)<br>(数据校验、鉴权)<br>...所有HTTP管道过滤器中间件"]
cache["<b>NetAdmin.Cache</b><br>框架:缓存层<br>基于Redis或MemoryCache的缓存策略实现"]
app["<b>NetAdmin.Application</b><br>框架:业务应用层<br>(内部服务增删改查)<br>(外部服务增删改查)<br>...所有业务用例的计算与组合逻辑的模块化)"]
domain["<b>NetAdmin.Domain</b><br>框架:数据实体层<br>(数据库关系实体映射)<br>DTO数据传输对象<br>...所有数据模型的抽象与封装)"]
infra["<b>NetAdmin.Infrastructure</b><br>框架:基础设施层<br>第三方组件和Nuget包引用<br>(公共构建和程序运行配置)<br>(公共常量枚举异常定义)<br>(全球化化和多语言)<br>...所有公共Utility工具"]
biz-host["YourSolution.XXX.Host<br>业务实例:主机层"]
biz-cache["YourSolution.XXX.Cache<br>业务实例:缓存层"]
biz-app["YourSolution.XXX.Application<br>业务实例:应用层"]
biz-domain["YourSolution.XXX.Domain<br>业务实例:数据实体层"]
biz-infra["YourSolution.XXX.Infrastructure<br>业务实例:基础设施层"]
sys-host["NetAdmin.SysComponent.Host\n系统组件:主机层"]
sys-cache["NetAdmin.SysComponent.Cache\n系统组件:缓存层"]
sys-app["NetAdmin.SysComponent.Application\n系统组件:应用层"]
host["<b>NetAdmin.Host</b>\n框架:主机层\n.Net自托管主机程序\n(输入输出格式化)\n(数据校验、鉴权)\n...所有HTTP管道过滤器中间件"]
cache["<b>NetAdmin.Cache</b>\n框架:缓存层\n基于Redis或MemoryCache的缓存策略实现"]
app["<b>NetAdmin.Application</b>\n框架:业务应用层\n(内部服务增删改查)\n(外部服务增删改查)\n...所有业务用例的计算与组合逻辑的模块化)"]
domain["<b>NetAdmin.Domain</b>\n框架:数据实体层\n(数据库关系实体映射)\nDTO数据传输对象\n...所有数据模型的抽象与封装)"]
infra["<b>NetAdmin.Infrastructure</b>\n框架:基础设施层\n第三方组件和Nuget包引用\n(公共构建和程序运行配置)\n(公共常量枚举异常定义)\n(全球化化和多语言)\n...所有公共Utility工具"]
biz-host["YourSolution.XXX.Host\n业务实例:主机层"]
biz-cache["YourSolution.XXX.Cache\n业务实例:缓存层"]
biz-app["YourSolution.XXX.Application\n业务实例:应用层"]
biz-domain["YourSolution.XXX.Domain\n业务实例:数据实体层"]
biz-infra["YourSolution.XXX.Infrastructure\n业务实例:基础设施层"]
biz-host-->biz-cache-->biz-app-->biz-domain-->biz-infra
sys-host-->sys-cache-->sys-app-->domain-->infra
host-->cache-->app-->domain-->infra

View File

@ -1,4 +1,3 @@
USDT
上次执行时间
上次执行状态
上次执行耗时
@ -18,10 +17,9 @@ USDT
以什么结束
作业名称
作业状态
保密
信息
倒序排序
充值成功
充值订单导出
全部数据
公告
共青团员
@ -29,7 +27,6 @@ USDT
创建时间
初中
删除
到账确认中
包含
博士
博士后
@ -48,7 +45,6 @@ USDT
字典内容导出
宕机
客户端IP
小于
小于等于
小学
@ -57,11 +53,10 @@ USDT
已校验
已读
并且
归属角色
归属部门
微信支付
成功
或者
所属角色
所属部门
手机
手机号
执行耗时
@ -76,10 +71,6 @@ USDT
接口路径
插入种子数据
操作系统
支付宝
支付超时
支出
收入
数据范围
文档内容
文档内容导出
@ -108,8 +99,6 @@ USDT
用户代理
用户名
用户导出
用户邀请导出
用户钱包导出
电子邮箱
登录
@ -122,15 +111,11 @@ USDT
站内信导出
等于
等待发送
等待支付
管理员充值
管理员扣费
管理模块
系统模块
绑定手机号码
结果非预期
群众
自助充值
自定义
范围
菜单
@ -143,17 +128,16 @@ USDT
请求方式
请求日志导出
调试
跟踪
跟踪标识
身份证
运行
追踪
追踪标识
通知
邮箱号
部门名称
部门导出
配置导出
重设密码
钱包交易导出
链接
错误
随机排序

View File

@ -5,8 +5,6 @@ XML注释文件不存在
中文姓名
事务已回滚
事务已提交
交易失败
交易金额不正确
人机校验请求不能为空
人机验证未通过
作业名称不能为空
@ -33,7 +31,6 @@ XML注释文件不存在
手机号码不能为空
接口编码不存在
支付宝账号
支付方式不正确
政治面貌不正确
数据库同步开始
数据库服务器时钟偏移
@ -111,7 +108,6 @@ XML注释文件不存在
部门可见
部门名称不能为空
配置文件初始化完毕
钱包余额不足
键值不能为空
键名称不能为空
随机延时结束时间不正确

View File

@ -1,11 +1,8 @@
[
{
"CnyToPointRate": 100,
"Enabled": true,
"Trc20ReceiptAddress": "TMTByCrcZkY7o8YMax1pXiYV5SUQBZEnCu",
"UsdToPointRate": 700,
"UserRegisterConfirm": false,
"UserRegisterDeptId": 372119301627909,
"UserRegisterRoleId": 371729946431493,
"UserRegisterRoleId": 371729946431493
}
]

View File

@ -2,29 +2,12 @@
{
"Enabled": true,
"ExecutionCron": "0 * * * * ?",
"HttpMethod": 7,
"JobName": "用户收入支出统计",
"LastStatusCode": 200,
"NextExecTime": "2025-06-27 19:07:00",
"NextTimeId": 1751022420,
"RequestBody": "{\"Sql\":\"UPDATE Sys_UserWallet SET TotalIncome = (SELECT COALESCE(SUM(Amount), 0) FROM Sys_WalletTrade WHERE Sys_WalletTrade.OwnerId = Sys_UserWallet.Id AND Sys_WalletTrade.TradeDirection = 1);UPDATE Sys_UserWallet SET TotalExpenditure = (SELECT COALESCE(SUM(Amount), 0) FROM Sys_WalletTrade WHERE Sys_WalletTrade.OwnerId = Sys_UserWallet.Id AND Sys_WalletTrade.TradeDirection = 2);\",\"TimeoutSecs\":60}",
"RequestHeader": "{\"Content-Type\":\"application/json\"}",
"RequestUrl": "https://na.tools92.top/api/sys/tools/execute.sql",
"HttpMethod": 3,
"JobName": "HTTP 请求测试",
"NextExecTime": "2020-09-13 12:26:40",
"NextTimeId": 1600000000,
"RequestUrl": "https://httpbin.org/ip",
"Status": 1,
"UserId": 664362432344581,
},
{
"Enabled": true,
"ExecutionCron": "0 * * * * ?",
"HttpMethod": 7,
"JobName": "充值到账确认",
"LastStatusCode": 200,
"NextExecTime": "2025-06-27 19:07:00",
"NextTimeId": 1751022420,
"RequestBody": "{\"readRecordCount\":100}",
"RequestHeader": "{\"Content-Type\":\"application/json\"}",
"RequestUrl": "https://na.tools92.top/api/sys/deposit.order/received.confirmation",
"Status": 1,
"UserId": 664362432344581,
},
"UserId": 370942943322181,
}
]

View File

@ -26,7 +26,7 @@
"Id": 373837957840901,
"Name": "sys/user",
"ParentId": 373837917724677,
"Path": "/power/user",
"Path": "/sys/user",
"Sort": 100,
"Title": "用户管理",
"Type": 1
@ -37,7 +37,7 @@
"Id": 373838018527237,
"Name": "sys/role",
"ParentId": 373837917724677,
"Path": "/power/role",
"Path": "/sys/role",
"Sort": 99,
"Title": "角色管理",
"Type": 1
@ -48,7 +48,7 @@
"Id": 373838045605893,
"Name": "sys/dept",
"ParentId": 373837917724677,
"Path": "/power/dept",
"Path": "/sys/dept",
"Sort": 98,
"Title": "部门管理",
"Type": 1
@ -59,82 +59,18 @@
"Id": 373838070898693,
"Name": "sys/menu",
"ParentId": 373837917724677,
"Path": "/power/menu",
"Path": "/sys/menu",
"Sort": 97,
"Title": "菜单管理",
"Type": 1
},
// ------------------------------ 财务管理 ------------------------------
{
"Icon": "el-icon-money",
"Id": 690906994118665,
"Name": "finance",
"Path": "/finance",
"Sort": 99,
"Title": "财务管理",
"Type": 1
},
{
"Component": "sys/wallet",
"Icon": "el-icon-wallet",
"Id": 690907673255942,
"Name": "sys/wallet",
"ParentId": 690906994118665,
"Path": "/finance/wallet",
"Sort": 100,
"Title": "钱包管理",
"Type": 1
},
{
"Component": "sys/trade",
"Icon": "el-icon-calendar",
"Id": 690907673255943,
"Name": "sys/trade",
"ParentId": 690906994118665,
"Path": "/finance/trade",
"Sort": 99,
"Title": "交易流水",
"Type": 1
},
{
"Component": "sys/order",
"Icon": "el-icon-shopping-cart",
"Id": 690907673255944,
"Name": "sys/order",
"ParentId": 690906994118665,
"Path": "/finance/order",
"Sort": 98,
"Title": "充值订单",
"Type": 1
},
// ------------------------------ 营销管理 ------------------------------
{
"Icon": "el-icon-share",
"Id": 692575802241032,
"Name": "market",
"Path": "/market",
"Sort": 98,
"Title": "营销管理",
"Type": 1
},
{
"Component": "sys/invite",
"Icon": "el-icon-connection",
"Id": 692575802245126,
"Name": "sys/invite",
"ParentId": 692575802241032,
"Path": "/market/invite",
"Sort": 100,
"Title": "邀请管理",
"Type": 1
},
// ------------------------------ 系统管理 ------------------------------
{
"Icon": "sc-icon-app",
"Icon": "sc-icon-App",
"Id": 485278637670422,
"Name": "sys",
"Path": "/sys",
"Sort": 98,
"Sort": 99,
"Title": "系统管理",
"Type": 1
},
@ -144,18 +80,18 @@
"Id": 380415005847557,
"Name": "sys/config",
"ParentId": 485278637670422,
"Path": "/system/config",
"Path": "/sys/config",
"Sort": 100,
"Title": "系统设置",
"Type": 1
},
{
"Component": "sys/job",
"Icon": "sc-icon-scheduled-job",
"Icon": "sc-icon-ScheduledJob",
"Id": 510067557638158,
"Name": "sys/job",
"ParentId": 485278637670422,
"Path": "/system/job",
"Path": "/sys/job",
"Sort": 99,
"Title": "计划作业",
"Type": 1
@ -166,7 +102,7 @@
"Id": 375315654221829,
"Name": "sys/dic",
"ParentId": 485278637670422,
"Path": "/system/dic",
"Path": "/sys/dic",
"Sort": 98,
"Title": "字典管理",
"Type": 1
@ -177,7 +113,7 @@
"Id": 482779610341392,
"Name": "sys/msg",
"ParentId": 485278637670422,
"Path": "/system/msg",
"Path": "/sys/msg",
"Sort": 97,
"Title": "消息管理",
"Type": 1,
@ -188,7 +124,7 @@
"Id": 397880678895621,
"Name": "sys/api",
"ParentId": 485278637670422,
"Path": "/system/api",
"Path": "/sys/api",
"Sort": 96,
"Title": "接口管理",
"Type": 1
@ -199,18 +135,18 @@
"Id": 374911555702789,
"Name": "sys/cache",
"ParentId": 485278637670422,
"Path": "/system/cache",
"Path": "/sys/cache",
"Sort": 95,
"Title": "缓存管理",
"Type": 1
},
// ------------------------------ 档案管理 ------------------------------
{
"Icon": "sc-icon-archive",
"Icon": "sc-icon-Archive",
"Id": 616214756757512,
"Name": "archive",
"Path": "/archive",
"Sort": 97,
"Sort": 98,
"Title": "档案管理",
"Type": 1
},
@ -231,7 +167,7 @@
"Id": 374792687640581,
"Name": "log",
"Path": "/log",
"Sort": 96,
"Sort": 97,
"Title": "日志管理",
"Type": 1
},
@ -241,18 +177,18 @@
"Id": 485285246504976,
"Name": "sys/log/operation",
"ParentId": 374792687640581,
"Path": "/log/operation",
"Path": "/sys/log/operation",
"Sort": 100,
"Title": "操作日志",
"Type": 1,
},
{
"Component": "sys/log/login",
"Icon": "sc-icon-open-door",
"Icon": "sc-icon-OpenDoor",
"Id": 485285246504970,
"Name": "sys/log/login",
"ParentId": 374792687640581,
"Path": "/log/login",
"Path": "/sys/log/login",
"Sort": 99,
"Title": "登录日志",
"Type": 1,
@ -263,7 +199,7 @@
"Id": 373838105399301,
"Name": "dev",
"Path": "/dev",
"Sort": 95,
"Sort": 96,
"Title": "开发管理",
"Type": 1
},
@ -291,7 +227,7 @@
{
"Id": 560217289232398,
"ParentId": 373838105399301,
"Icon": "sc-icon-free-sql",
"Icon": "sc-icon-FreeSql",
"Name": "dev/freesql",
"Path": "https://freesql.net/guide",
"Sort": 99,

View File

@ -42,69 +42,5 @@
{
"ApiId": "api/sys/user/set.session.user.app.config",
"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,
},
{
"ApiId": "api/sys/user.wallet/paged.query",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/user.wallet/get",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/wallet.trade/paged.query",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/wallet.trade/count.by",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/wallet.trade/get",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/deposit.order/paged.query",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/deposit.order/count.by",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/deposit.order/create",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/deposit.order/get",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/deposit.order/get.deposit.config",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/deposit.order/pay.confirm",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/user.invite/query",
"RoleId": 371729946431493,
}
]

View File

@ -6,37 +6,5 @@
{
"MenuId": 374967228141573,
"RoleId": 371729946431493
},
{
"MenuId": 690906994118665,
"RoleId": 371729946431493
},
{
"MenuId": 690907673255942,
"RoleId": 371729946431493
},
{
"MenuId": 374792687640581,
"RoleId": 371729946431493
},
{
"MenuId": 485285246504970,
"RoleId": 371729946431493
},
{
"MenuId": 690907673255943,
"RoleId": 371729946431493
},
{
"MenuId": 690907673255944,
"RoleId": 371729946431493
},
{
"MenuId": 692575802241032,
"RoleId": 371729946431493
},
{
"MenuId": 692575802245126,
"RoleId": 371729946431493
}
]

View File

@ -3,27 +3,16 @@
"DeptId": 372119301627909,
"Enabled": true,
"Id": 370942943322181,
"InviteCode": "Q09Y8O",
"Password": "A8E87D23-49BC-25A1-1C7C-59186BEF5D15",
"Token": "A9AFD92E-A33D-4152-9A6C-A9C141D24887",
"UserName": "root",
"UserName": "root"
},
{
"DeptId": 372119301627909,
"Enabled": true,
"Id": 560217289236492,
"InviteCode": "7ZH5PB",
"Password": "A8E87D23-49BC-25A1-1C7C-59186BEF5D15",
"Token": "4208EA97-B32F-4E39-A290-4C0D27B61EBF",
"UserName": "user",
},
{
"DeptId": 372119301627909,
"Enabled": true,
"Id": 664362432344581,
"InviteCode": "47Q56H",
"Password": "A8E87D23-49BC-25A1-1C7C-59186BEF5D15",
"Token": "751D599B-2B8C-417C-9565-CCF2363F5F6F",
"UserName": "jobs",
"UserName": "user"
}
]

View File

@ -1,15 +0,0 @@
[
{
"Id": 370942943322181,
},
{
"Id": 560217289236492,
"OwnerDeptId": 372119301627909,
"OwnerId": 370942943322181,
},
{
"Id": 664362432344581,
"OwnerDeptId": 372119301627909,
"OwnerId": 370942943322181,
}
]

View File

@ -3,10 +3,6 @@
"Id": 370942943322181,
"AppConfig": "[]"
},
{
"Id": 664362432344581,
"AppConfig": "[]"
},
{
"Id": 560217289236492,
"AppConfig": "[]"

View File

@ -3,10 +3,6 @@
"RoleId": 370943613149253,
"UserId": 370942943322181
},
{
"RoleId": 370943613149253,
"UserId": 664362432344581
},
{
"RoleId": 371729946431493,
"UserId": 560217289236492

View File

@ -1,17 +0,0 @@
[
{
"Id": 370942943322181,
"OwnerDeptId": 372119301627909,
"OwnerId": 370942943322181,
},
{
"Id": 664362432344581,
"OwnerDeptId": 372119301627909,
"OwnerId": 664362432344581,
},
{
"Id": 560217289236492,
"OwnerDeptId": 372119301627909,
"OwnerId": 560217289236492,
}
]

View File

@ -15,15 +15,15 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.14.15">
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.12.19">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Roslynator.Analyzers" Version="4.13.1">
<PackageReference Include="Roslynator.Analyzers" Version="4.12.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="SonarAnalyzer.CSharp" Version="10.12.0.118525">
<PackageReference Include="SonarAnalyzer.CSharp" Version="10.3.0.106239">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -1,9 +1,9 @@
{
"version": "2.4.0",
"version": "2.3.0",
"devDependencies": {
"cz-git": "^1.11.2",
"cz-git": "^1.11.0",
"commitizen": "^4.3.1",
"prettier": "^3.6.2",
"prettier": "^3.4.2",
"standard-version": "^9.5.0"
},
"config": {

View File

@ -1,5 +1,3 @@
#!/usr/bin/env pwsh
$branch = $( git branch --show-current )
git add ../
$skipFormat = Read-Host "输入 n 跳过代码整理"

View File

@ -1,5 +1,3 @@
#!/usr/bin/env pwsh
cd ..
$types = @{
'1' = @('major', '主版本')

View File

@ -1,5 +1,3 @@
#!/usr/bin/env pwsh
$branch = $( git branch --show-current )
git checkout main
git pull

View File

@ -1,4 +1,2 @@
#!/usr/bin/env pwsh
git push origin :refs/tags/$(git tag -l "*-*")
git tag -d $(git tag -l "*-*")

View File

@ -1,5 +1,3 @@
#!/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"

View File

@ -18,7 +18,7 @@ using System.Net.Http.Json;
{
CreateNoWindow = true,
FileName = "dotnet",
Arguments = $"jb cleanupcode --include=\"{files}\" --no-build ../NetAdmin.slnx",
Arguments = $"jb cleanupcode --include=\"{files}\" --no-build ../NetAdmin.sln",
UseShellExecute = false,
RedirectStandardOutput = true
}

View File

@ -1,7 +1,5 @@
#!/usr/bin/env pwsh
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.slnx
jb cleanupcode --no-build --include=$($(git status --porcelain | Where-Object { $_ -match "^\s*[MA]" } | ForEach-Object { $_.TrimStart(" M").TrimStart(" A") }) -join ";") ../NetAdmin.sln
dot rbom -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 ../

View File

@ -1,4 +0,0 @@
git config --local core.eol lf
git config --local core.autocrlf false
git config --local core.longpaths true
git config --local pull.rebase false

View File

@ -1,4 +1,2 @@
#!/usr/bin/env pwsh
dotnet new uninstall ../
dotnet new --install ../

View File

@ -1,4 +1,4 @@
#r "nuget: NSExt, 2.3.5"
#r "nuget: NSExt, 2.3.2"
using NSExt.Extensions;
Console.WriteLine("请输入原始名称NetAdmin");

View File

@ -1,3 +1 @@
#!/usr/bin/env pwsh
jb cleanupcode --no-build ../NetAdmin.slnx
jb cleanupcode --no-build ../NetAdmin.sln

View File

@ -5,13 +5,18 @@ while (!new[] { "1", "2" }.Contains(input))
Console.WriteLine("1.nuget 2.project");
input = Console.ReadLine();
}
var slnxFile = Directory.GetFiles(@"../", "*.slnx").First();
var slnFile = Directory.GetFiles(@"../", "*.sln").First();
var csprojFiles = Directory.GetFiles(@"../src", "*.csproj", new EnumerationOptions { RecurseSubdirectories = true });
var slnContent = File.ReadAllText(slnxFile);
var slnContent = File.ReadAllText(slnFile);
if (input == "1")
{
slnContent = Regex.Replace(slnContent, "<Project Type=\"Refs\"(.*)>", "<!--<Project Type=\"Refs\"$1>-->");
slnContent = Regex.Replace(slnContent, "\\nProject\\((.*)#refs", "\n##Project($1#refs");
slnContent = Regex.Replace(slnContent, "\\nEndProject#refs", "\n##EndProject#refs");
foreach (Match m in Regex.Matches(slnContent, "\"(\\{[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}\\})\"#refs"))
{
slnContent = slnContent.Replace($" {m.Groups[1].Value}.", $" ##{m.Groups[1].Value}.");
}
foreach (var csprojFile in csprojFiles)
{
var csprojContent = File.ReadAllText(csprojFile);
@ -22,7 +27,7 @@ if (input == "1")
}
else
{
slnContent = Regex.Replace(slnContent, "<!--(.*)-->", "$1");
slnContent = Regex.Replace(slnContent, "##", "");
foreach (var csprojFile in csprojFiles)
{
var csprojContent = File.ReadAllText(csprojFile);
@ -34,4 +39,4 @@ else
Console.WriteLine(slnContent);
File.WriteAllText(slnxFile, slnContent);
File.WriteAllText(slnFile, slnContent);

View File

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

View File

@ -1,87 +0,0 @@
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);

View File

@ -32,6 +32,7 @@ global using Gurion.DataEncryption;
global using Gurion.DataValidation;
global using Gurion.DependencyInjection;
global using Gurion.DynamicApiController;
global using Gurion.EventBus;
global using Gurion.SpecificationDocument;
global using Gurion.UnifyResult;
global using Mapster;
@ -57,7 +58,6 @@ global using NetAdmin.Infrastructure.Configuration.Options.SubNodes.Redis;
global using NetAdmin.Infrastructure.Configuration.Options.SubNodes.Upload;
global using NetAdmin.Infrastructure.Constant;
global using NetAdmin.Infrastructure.Enums;
global using NetAdmin.Infrastructure.EventBus;
global using NetAdmin.Infrastructure.Exceptions;
global using NetAdmin.Infrastructure.Extensions;
global using NetAdmin.Infrastructure.Languages;

View File

@ -2,7 +2,6 @@ using CsvHelper;
using Microsoft.Net.Http.Headers;
using NetAdmin.Application.Repositories;
using NetAdmin.Domain;
using NetAdmin.Domain.Contexts;
using NetAdmin.Domain.DbMaps.Dependency;
using NetAdmin.Domain.DbMaps.Dependency.Fields;
using NetAdmin.Domain.Dto.Dependency;
@ -49,15 +48,14 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
/// 导出实体
/// </summary>
protected static async Task<IActionResult> ExportAsync<TQuery, TExport>( //
Func<QueryReq<TQuery>, ISelect<TEntity>> selector, QueryReq<TQuery> query, string fileName, Expression<Func<TEntity, object>> listExp = null
, Func<object, object> listHandle = null)
Func<QueryReq<TQuery>, ISelect<TEntity>> selector, QueryReq<TQuery> query, string fileName, Expression<Func<TEntity, object>> listExp = null)
where TQuery : DataAbstraction, new()
{
var select = selector(query).WithNoLockNoWait().Take(Numbers.MAX_LIMIT_EXPORT);
object list = listExp == null ? await select.ToListAsync().ConfigureAwait(false) : await select.ToListAsync(listExp).ConfigureAwait(false);
list = listHandle?.Invoke(list) ?? list;
object list = listExp == null
? await select.ToListAsync().ConfigureAwait(false)
: await select.ToListAsync(listExp).ConfigureAwait(false);
return await GetExportFileStreamAsync<TExport>(fileName, list).ConfigureAwait(false);
}
@ -71,7 +69,6 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
/// <param name="whereExp">查询表达式</param>
/// <param name="whereSql">查询sql</param>
/// <param name="ignoreVersion">是否忽略版本锁</param>
/// <param name="disableGlobalDataFilter">是否忽略全局数据权限过滤</param>
/// <returns>更新行数</returns>
protected Task<int> UpdateAsync( //
TEntity newValue //
@ -79,16 +76,12 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
, List<string> excludeFields = null //
, Expression<Func<TEntity, bool>> whereExp = null //
, string whereSql = null //
, bool ignoreVersion = false, bool disableGlobalDataFilter = false)
, bool ignoreVersion = false)
{
// 默认匹配主键
whereExp ??= a => a.Id.Equals(newValue.Id);
var update = BuildUpdate(newValue, includeFields, excludeFields, ignoreVersion).Where(whereExp).Where(whereSql);
if (disableGlobalDataFilter) {
update = update.DisableGlobalFilter(nameof(Chars.FLG_FREE_SQL_GLOBAL_FILTER_DATA));
}
return update.ExecuteEffectsAsync();
return update.ExecuteAffrowsAsync();
}
#if DBTYPE_SQLSERVER
@ -142,30 +135,6 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM);
}
private static Dictionary<string, object> IncludeToDictionary(TEntity entity, List<string> includeFields)
{
var ret = includeFields!.ToDictionary(
x => x, x => typeof(TEntity).GetProperty(x, BindingFlags.Public | BindingFlags.Instance)!.GetValue(entity));
// ReSharper disable once ConvertIfStatementToSwitchStatement
if (entity is IFieldModifiedUser) {
var userInfo = App.GetService<ContextUserInfo>();
if (userInfo == null) {
return ret;
}
ret.Add(nameof(IFieldModifiedUser.ModifiedUserId), userInfo.Id);
ret.Add(nameof(IFieldModifiedUser.ModifiedUserName), userInfo.UserName);
}
// ReSharper disable once SuspiciousTypeConversion.Global
if (entity is IFieldModifiedClientIp) {
ret.Add(nameof(IFieldModifiedClientIp.ModifiedClientIp), App.HttpContext?.GetRealIpAddress()?.MapToIPv4().ToString().IpV4ToInt32());
}
return ret;
}
private IUpdate<TEntity> BuildUpdate(TEntity entity, List<string> includeFields, List<string> excludeFields, bool ignoreVersion)
{
IUpdate<TEntity> updateExp;
@ -176,7 +145,9 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
}
}
else {
updateExp = Rpo.UpdateDiy.SetDto(IncludeToDictionary(entity, includeFields));
updateExp = Rpo.UpdateDiy.SetDto(includeFields!.ToDictionary(
x => x
, x => typeof(TEntity).GetProperty(x, BindingFlags.Public | BindingFlags.Instance)!.GetValue(entity)));
if (!ignoreVersion && entity is IFieldVersion ver) {
updateExp = updateExp.Where($"{nameof(IFieldVersion.Version)} = {ver.Version}");
}

View File

@ -10,7 +10,7 @@ public abstract class ServiceBase<TLogger> : ServiceBase
/// </summary>
protected ServiceBase() //
{
Logger = S<ILogger<TLogger>>();
Logger = App.GetService<ILogger<TLogger>>();
}
/// <summary>
@ -29,7 +29,7 @@ public abstract class ServiceBase : IScoped, IService
/// </summary>
protected ServiceBase()
{
UserToken = S<ContextUserToken>();
UserToken = App.GetService<ContextUserToken>();
ServiceId = Guid.NewGuid();
}
@ -38,19 +38,4 @@ public abstract class ServiceBase : IScoped, IService
/// <inheritdoc />
public ContextUserToken UserToken { get; set; }
/// <summary>
/// 获取服务
/// </summary>
#pragma warning disable RCS1036
#pragma warning restore RCS1036
// ReSharper disable once MemberCanBeMadeStatic.Global
#pragma warning disable CA1822, S2325
protected T S<T>()
#pragma warning restore S2325, CA1822
where T : class
{
return App.GetService<T>();
}
}

View File

@ -42,9 +42,8 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
.ToDictionaryAsync(a => a.Count())
.ConfigureAwait(false);
return ret.Select(x => new KeyValuePair<IImmutableDictionary<string, string>, int>(
req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Tpl_Example).GetProperty(y)!.GetValue(x.Key)?.ToString())
req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Tpl_Example).GetProperty(y)!.GetValue(x.Key)!.ToString())
, x.Value))
.Where(x => x.Key.Any(y => !y.Value.NullOrEmpty()))
.OrderByDescending(x => x.Value);
}

View File

@ -16,5 +16,5 @@ public interface ICache<out TCacheLoad, out TService>
/// <summary>
/// 关联的服务
/// </summary>
TService Service { get; }
public TService Service { get; }
}

View File

@ -1,11 +1,11 @@
namespace NetAdmin.Domain.Attributes;
/// <summary>
/// 枚举装饰
/// 标记一个枚举的状态指示
/// </summary>
/// <inheritdoc />
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
public sealed class EnumDecorationAttribute(string indicate = nameof(Indicates.None), bool pulse = false, int sort = 0) : Attribute
public sealed class IndicatorAttribute(string indicate, bool pulse) : Attribute
{
/// <summary>
/// 状态指示
@ -16,9 +16,4 @@ public sealed class EnumDecorationAttribute(string indicate = nameof(Indicates.N
/// 脉动
/// </summary>
public bool Pulse { get; } = pulse;
/// <summary>
/// 排序值
/// </summary>
public int Sort { get; } = sort;
}

View File

@ -8,5 +8,5 @@ public interface IFieldModifiedClientIp
/// <summary>
/// 客户端IP
/// </summary>
int? ModifiedClientIp { get; init; }
int ModifiedClientIp { get; init; }
}

View File

@ -1,17 +1,17 @@
namespace NetAdmin.Domain.DbMaps.Dependency.Fields;
/// <summary>
/// 归属字段接口
/// 拥有者字段接口
/// </summary>
public interface IFieldOwner
{
/// <summary>
/// 归属部门编号
/// 拥有者部门编号
/// </summary>
long? OwnerDeptId { get; init; }
/// <summary>
/// 归属用户编号
/// 拥有者用户编号
/// </summary>
long? OwnerId { get; init; }
}

View File

@ -47,7 +47,7 @@ public abstract record MutableEntity<T> : LiteMutableEntity<T>, IFieldCreatedUse
[Column(CanInsert = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual long? ModifiedUserId { get; init; }
public long? ModifiedUserId { get; init; }
/// <summary>
/// 修改者用户名
@ -55,5 +55,5 @@ public abstract record MutableEntity<T> : LiteMutableEntity<T>, IFieldCreatedUse
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual string ModifiedUserName { get; init; }
public string ModifiedUserName { get; init; }
}

View File

@ -71,7 +71,7 @@ public record Sys_Api : ImmutableEntity<string>, IFieldSummary
[CsvIgnore]
[JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_RoleApi))]
public IReadOnlyCollection<Sys_Role> Roles { get; init; }
public ICollection<Sys_Role> Roles { get; init; }
/// <summary>
/// 服务描述

View File

@ -6,14 +6,6 @@ namespace NetAdmin.Domain.DbMaps.Sys;
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_Config))]
public record Sys_Config : VersionEntity, IFieldEnabled
{
/// <summary>
/// 人民币兑点数比率
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual int CnyToPointRate { get; init; }
/// <summary>
/// 是否启用
/// </summary>
@ -22,38 +14,6 @@ public record Sys_Config : VersionEntity, IFieldEnabled
[JsonIgnore]
public virtual bool Enabled { get; init; }
/// <summary>
/// 必须邀请注册
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual bool RegisterInviteRequired { get; init; }
/// <summary>
/// 必须手机号注册
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual bool RegisterMobileRequired { get; init; }
/// <summary>
/// Trc20收款地址
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_CHAR_34)]
[CsvIgnore]
[JsonIgnore]
public virtual string Trc20ReceiptAddress { get; init; }
/// <summary>
/// 美元兑点数比率
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual int UsdToPointRate { get; init; }
/// <summary>
/// 用户注册是否需要人工确认
/// </summary>

View File

@ -1,115 +0,0 @@
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 充值订单表
/// </summary>
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_DepositOrder))]
[SqlIndex( //
$"{Chars.FLG_DB_INDEX_PREFIX}{nameof(ActualPayAmount)}_{nameof(FinishTimestamp)}", $"{nameof(ActualPayAmount)},{nameof(FinishTimestamp)}", true)]
[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(PaymentFinger), nameof(PaymentFinger), true, WhenNotNull = true)]
public record Sys_DepositOrder : LiteVersionEntity, IFieldOwner
{
/// <summary>
/// 实际支付金额
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long ActualPayAmount { get; init; }
/// <summary>
/// 订单状态
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual DepositOrderStatues DepositOrderStatus { get; init; }
/// <summary>
/// 充值点数
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long DepositPoint { get; init; }
/// <summary>
/// 完成时间戳
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long FinishTimestamp { get; init; }
/// <summary>
/// 归属用户
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(OwnerId))]
public Sys_User Owner { get; init; }
/// <summary>
/// 归属部门编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 归属用户编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerId { get; init; }
/// <summary>
/// 付款账号
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)]
[CsvIgnore]
[JsonIgnore]
public virtual string PaidAccount { get; init; }
/// <summary>
/// 付款时间
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual DateTime? PaidTime { get; init; }
/// <summary>
/// 付款指纹
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
[CsvIgnore]
[JsonIgnore]
public virtual string PaymentFinger { get; init; }
/// <summary>
/// 支付方式
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual PaymentModes PaymentMode { get; init; }
/// <summary>
/// 收款账号
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)]
[CsvIgnore]
[JsonIgnore]
public virtual string ReceiptAccount { get; init; }
/// <summary>
/// 兑点数比率
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual int ToPointRate { get; init; }
}

View File

@ -44,7 +44,7 @@ public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort
[CsvIgnore]
[JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_RoleDept))]
public IReadOnlyCollection<Sys_Role> Roles { get; init; }
public ICollection<Sys_Role> Roles { get; init; }
/// <summary>
/// 发送给此部门的站内信集合
@ -52,7 +52,7 @@ public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort
[CsvIgnore]
[JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_SiteMsgDept))]
public IReadOnlyCollection<Sys_SiteMsg> SiteMsgs { get; init; }
public ICollection<Sys_SiteMsg> SiteMsgs { get; init; }
/// <summary>
/// 排序值,越大越前

View File

@ -29,7 +29,7 @@ public record Sys_DicCatalog : VersionEntity
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(Sys_DicContent.CatalogId))]
public IReadOnlyCollection<Sys_DicContent> Contents { get; init; }
public ICollection<Sys_DicContent> Contents { get; init; }
/// <summary>
/// 字典目录名称

View File

@ -29,7 +29,7 @@ public record Sys_DocCatalog : VersionEntity, IFieldOwner
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(Sys_DocContent.CatalogId))]
public IReadOnlyCollection<Sys_DocContent> Contents { get; init; }
public ICollection<Sys_DocContent> Contents { get; init; }
/// <summary>
/// 文档分类名称
@ -40,7 +40,7 @@ public record Sys_DocCatalog : VersionEntity, IFieldOwner
public virtual string Name { get; init; }
/// <summary>
/// 归属用户
/// 拥有者
/// </summary>
[CsvIgnore]
[JsonIgnore]
@ -48,7 +48,7 @@ public record Sys_DocCatalog : VersionEntity, IFieldOwner
public Sys_User Owner { get; init; }
/// <summary>
/// 归属部门编号
/// 拥有者部门编号
/// </summary>
[Column]
[CsvIgnore]
@ -56,7 +56,7 @@ public record Sys_DocCatalog : VersionEntity, IFieldOwner
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 归属用户编号
/// 拥有者用户编号
/// </summary>
[Column]
[CsvIgnore]

View File

@ -41,7 +41,7 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner
public virtual bool Enabled { get; init; }
/// <summary>
/// 归属用户
/// 拥有者
/// </summary>
[CsvIgnore]
[JsonIgnore]
@ -49,7 +49,7 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner
public Sys_User Owner { get; init; }
/// <summary>
/// 归属部门编号
/// 拥有者部门编号
/// </summary>
[Column]
[CsvIgnore]
@ -57,7 +57,7 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 归属用户编号
/// 拥有者用户编号
/// </summary>
[Column]
[CsvIgnore]

View File

@ -35,7 +35,7 @@ public record Sys_JobRecord : LiteImmutableEntity
public int HttpStatusCode { get; init; }
/// <summary>
/// 归属信息
/// 拥有者信息
/// </summary>
[CsvIgnore]
[JsonIgnore]

View File

@ -66,7 +66,7 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
public virtual string LoginUserName { get; protected init; }
/// <summary>
/// 归属用户
/// 拥有者
/// </summary>
[CsvIgnore]
[JsonIgnore]
@ -74,7 +74,7 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
public Sys_User Owner { get; init; }
/// <summary>
/// 归属部门编号
/// 拥有者部门编号
/// </summary>
[Column]
[CsvIgnore]
@ -82,7 +82,7 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 归属用户编号
/// 拥有者用户编号
/// </summary>
[Column]
[CsvIgnore]

View File

@ -111,7 +111,7 @@ public record Sys_Menu : VersionEntity, IFieldSort
[CsvIgnore]
[JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_RoleMenu))]
public IReadOnlyCollection<Sys_Role> Roles { get; init; }
public ICollection<Sys_Role> Roles { get; init; }
/// <summary>
/// 排序值,越大越前

View File

@ -76,7 +76,7 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi
public virtual int HttpStatusCode { get; init; }
/// <summary>
/// 归属用户
/// 拥有者
/// </summary>
[CsvIgnore]
[JsonIgnore]
@ -84,7 +84,7 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi
public Sys_User Owner { get; init; }
/// <summary>
/// 归属部门编号
/// 拥有者部门编号
/// </summary>
[Column]
[CsvIgnore]
@ -92,7 +92,7 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 归属用户编号
/// 拥有者用户编号
/// </summary>
[Column]
[CsvIgnore]
@ -100,7 +100,7 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi
public virtual long? OwnerId { get; init; }
/// <summary>
/// 请求踪标识
/// 请求踪标识
/// </summary>
[Column]
[CsvIgnore]

View File

@ -16,7 +16,7 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary
[CsvIgnore]
[JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_RoleApi))]
public IReadOnlyCollection<Sys_Api> Apis { get; init; }
public ICollection<Sys_Api> Apis { get; init; }
/// <summary>
/// 仪表板布局
@ -40,7 +40,7 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary
[CsvIgnore]
[JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_RoleDept))]
public IReadOnlyCollection<Sys_Dept> Depts { get; init; }
public ICollection<Sys_Dept> Depts { get; init; }
/// <summary>
/// 是否显示仪表板
@ -72,7 +72,7 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary
[CsvIgnore]
[JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_RoleMenu))]
public IReadOnlyCollection<Sys_Menu> Menus { get; init; }
public ICollection<Sys_Menu> Menus { get; init; }
/// <summary>
/// 角色名称
@ -88,7 +88,7 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary
[CsvIgnore]
[JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_SiteMsgRole))]
public IReadOnlyCollection<Sys_SiteMsg> SiteMsgs { get; init; }
public ICollection<Sys_SiteMsg> SiteMsgs { get; init; }
/// <summary>
/// 排序值,越大越前
@ -112,7 +112,7 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary
[CsvIgnore]
[JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_UserRole))]
public IReadOnlyCollection<Sys_User> Users { get; init; }
public ICollection<Sys_User> Users { get; init; }
/// <inheritdoc />
public virtual void Register(TypeAdapterConfig config)

View File

@ -31,7 +31,7 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary
[CsvIgnore]
[JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_SiteMsgDept))]
public IReadOnlyCollection<Sys_Dept> Depts { get; init; }
public ICollection<Sys_Dept> Depts { get; init; }
/// <summary>
/// 消息-标记映射
@ -39,7 +39,7 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(Sys_SiteMsgFlag.SiteMsgId))]
public IReadOnlyCollection<Sys_SiteMsgFlag> Flags { get; init; }
public ICollection<Sys_SiteMsgFlag> Flags { get; init; }
/// <summary>
/// 消息类型
@ -54,7 +54,7 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary
[CsvIgnore]
[JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_SiteMsgRole))]
public IReadOnlyCollection<Sys_Role> Roles { get; init; }
public ICollection<Sys_Role> Roles { get; init; }
/// <summary>
/// 消息摘要
@ -78,7 +78,7 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary
[CsvIgnore]
[JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_SiteMsgUser))]
public IReadOnlyCollection<Sys_User> Users { get; init; }
public ICollection<Sys_User> Users { get; init; }
/// <inheritdoc />
public void Register(TypeAdapterConfig config)

View File

@ -7,7 +7,6 @@ namespace NetAdmin.Domain.DbMaps.Sys;
/// </summary>
[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Email), nameof(Email), true)]
[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Mobile), nameof(Mobile), true)]
[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(InviteCode), nameof(InviteCode), true)]
[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(UserName), nameof(UserName), true)]
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_User))]
public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister
@ -21,7 +20,7 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister
public virtual string Avatar { get; init; }
/// <summary>
/// 属部门
/// 属部门
/// </summary>
[CsvIgnore]
[JsonIgnore]
@ -52,21 +51,6 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister
[JsonIgnore]
public virtual bool Enabled { get; init; }
/// <summary>
/// 用户邀请
/// </summary>
[CsvIgnore]
[JsonIgnore]
public Sys_UserInvite Invite { get; init; }
/// <summary>
/// 邀请码
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_CHAR_6)]
[CsvIgnore]
[JsonIgnore]
public virtual string InviteCode { get; init; }
/// <summary>
/// 最后登录时间
/// </summary>
@ -100,7 +84,7 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister
public Sys_UserProfile Profile { get; init; }
/// <summary>
/// 属角色
/// 属角色
/// </summary>
[CsvIgnore]
[JsonIgnore]
@ -113,7 +97,7 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister
[CsvIgnore]
[JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_SiteMsgUser))]
public IReadOnlyCollection<Sys_SiteMsg> SiteMsgs { get; init; }
public ICollection<Sys_SiteMsg> SiteMsgs { get; init; }
/// <summary>
/// 备注

View File

@ -1,56 +0,0 @@
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 用户邀请表
/// </summary>
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_UserInvite))]
public record Sys_UserInvite : VersionEntity, IFieldOwner
{
/// <summary>
/// 子节点
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(OwnerId))]
public IEnumerable<Sys_UserInvite> Children { get; init; }
/// <summary>
/// 返佣比率
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual int CommissionRatio { get; init; }
/// <summary>
/// 归属
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(OwnerId))]
public Sys_User Owner { get; init; }
/// <summary>
/// 归属部门编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 归属用户编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerId { get; init; }
/// <summary>
/// 用户
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(Id))]
public Sys_User User { get; init; }
}

View File

@ -112,14 +112,6 @@ public record Sys_UserProfile : VersionEntity, IRegister
[JsonIgnore]
public virtual string EmergencyContactName { get; init; }
/// <summary>
/// 性别
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual Genders? Gender { get; init; }
/// <summary>
/// 毕业学校
/// </summary>
@ -209,6 +201,14 @@ public record Sys_UserProfile : VersionEntity, IRegister
[JsonIgnore]
public virtual string RealName { get; init; }
/// <summary>
/// 性别
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual Sexes? Sex { get; init; }
/// <summary>
/// 用户基本信息
/// </summary>

View File

@ -1,72 +0,0 @@
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 用户钱包表
/// </summary>
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_UserWallet))]
public record Sys_UserWallet : LiteVersionEntity, IFieldOwner
{
/// <summary>
/// 可用余额
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long AvailableBalance { get; init; }
/// <summary>
/// 冻结余额
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long FrozenBalance { get; init; }
/// <summary>
/// 归属用户
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(OwnerId))]
public Sys_User Owner { get; init; }
/// <summary>
/// 归属部门编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 归属用户编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerId { get; init; }
/// <summary>
/// 总余额
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long TotalBalance { get; init; }
/// <summary>
/// 总支出
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long TotalExpenditure { get; init; }
/// <summary>
/// 总收入
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long TotalIncome { get; init; }
}

View File

@ -1,80 +0,0 @@
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 钱包交易表
/// </summary>
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_WalletTrade))]
public record Sys_WalletTrade : ImmutableEntity, IFieldOwner, IFieldSummary
{
/// <summary>
/// 交易金额
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long Amount { get; init; }
/// <summary>
/// 交易前余额
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long BalanceBefore { get; init; }
/// <summary>
/// 业务订单号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? BusinessOrderNumber { get; init; }
/// <summary>
/// 归属用户
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(OwnerId))]
public Sys_User Owner { get; init; }
/// <summary>
/// 归属部门编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 归属用户编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerId { get; init; }
/// <summary>
/// 备注
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
[CsvIgnore]
[JsonIgnore]
public virtual string Summary { get; init; }
/// <summary>
/// 交易方向
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual TradeDirections TradeDirection { get; init; }
/// <summary>
/// 交易类型
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual TradeTypes TradeType { get; init; }
}

View File

@ -22,9 +22,4 @@ public record RestfulInfo<T> : DataAbstraction
/// </summary>
/// <example>请求成功</example>
public object Msg { get; init; }
/// <summary>
/// 追踪标识
/// </summary>
public Guid? TraceId { get; set; }
}

View File

@ -15,6 +15,11 @@ public sealed record CacheStatisticsRsp : DataAbstraction
, new("redis_version:(.+)", RegexOptions.Compiled) //
];
/// <summary>
/// Initializes a new instance of the <see cref="CacheStatisticsRsp" /> class.
/// </summary>
public CacheStatisticsRsp() { }
/// <summary>
/// Initializes a new instance of the <see cref="CacheStatisticsRsp" /> class.
/// </summary>

View File

@ -7,6 +7,11 @@ namespace NetAdmin.Domain.Dto.Sys.Cache;
/// </summary>
public sealed record GetEntryRsp : DataAbstraction
{
/// <summary>
/// Initializes a new instance of the <see cref="GetEntryRsp" /> class.
/// </summary>
public GetEntryRsp() { }
/// <summary>
/// 缓存值
/// </summary>

View File

@ -5,33 +5,10 @@ namespace NetAdmin.Domain.Dto.Sys.Config;
/// </summary>
public record CreateConfigReq : Sys_Config
{
/// <inheritdoc cref="Sys_Config.CnyToPointRate" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
[Range(1, int.MaxValue)]
public override int CnyToPointRate { get; init; }
/// <inheritdoc cref="IFieldEnabled.Enabled" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override bool Enabled { get; init; }
/// <inheritdoc cref="Sys_Config.RegisterInviteRequired" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override bool RegisterInviteRequired { get; init; }
/// <inheritdoc cref="Sys_Config.RegisterMobileRequired" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override bool RegisterMobileRequired { get; init; }
/// <inheritdoc cref="Sys_Config.Trc20ReceiptAddress" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
[Length(34, 34)]
public override string Trc20ReceiptAddress { get; init; }
/// <inheritdoc cref="Sys_Config.UsdToPointRate" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
[Range(1, int.MaxValue)]
public override int UsdToPointRate { get; init; }
/// <inheritdoc cref="Sys_Config.UserRegisterConfirm" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override bool UserRegisterConfirm { get; init; }

View File

@ -8,10 +8,6 @@ namespace NetAdmin.Domain.Dto.Sys.Config;
/// </summary>
public record QueryConfigRsp : Sys_Config
{
/// <inheritdoc cref="Sys_Config.CnyToPointRate" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int CnyToPointRate { get; init; }
/// <inheritdoc cref="IFieldCreatedTime.CreatedTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override DateTime CreatedTime { get; init; }
@ -24,22 +20,6 @@ public record QueryConfigRsp : Sys_Config
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="Sys_Config.RegisterInviteRequired" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override bool RegisterInviteRequired { get; init; }
/// <inheritdoc cref="Sys_Config.RegisterMobileRequired" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override bool RegisterMobileRequired { get; init; }
/// <inheritdoc cref="Sys_Config.Trc20ReceiptAddress" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string Trc20ReceiptAddress { get; init; }
/// <inheritdoc cref="Sys_Config.UsdToPointRate" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int UsdToPointRate { get; init; }
/// <inheritdoc cref="Sys_Config.UserRegisterConfirm" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override bool UserRegisterConfirm { get; init; }

View File

@ -1,36 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.DepositOrder;
/// <summary>
/// 请求:创建充值订单
/// </summary>
public record CreateDepositOrderReq : Sys_DepositOrder, IValidatableObject
{
/// <inheritdoc cref="Sys_DepositOrder.ActualPayAmount" />
public override long ActualPayAmount { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.DepositOrderStatus" />
public override DepositOrderStatues DepositOrderStatus { get; init; } = DepositOrderStatues.WaitingForPayment;
/// <inheritdoc cref="Sys_DepositOrder.DepositPoint" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
[Range(100, long.MaxValue)]
public override long DepositPoint { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.PaymentMode" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
[EnumDataType(typeof(PaymentModes))]
public override PaymentModes PaymentMode { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.ToPointRate" />
public override int ToPointRate { get; init; }
/// <inheritdoc />
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (PaymentMode != PaymentModes.USDT) {
yield return new ValidationResult(Ln., [nameof(PaymentMode)]);
}
yield return ValidationResult.Success;
}
}

View File

@ -1,15 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.DepositOrder;
/// <summary>
/// 请求:编辑充值订单
/// </summary>
public record EditDepositOrderReq : CreateDepositOrderReq
{
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; }
}

View File

@ -1,19 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.DepositOrder;
/// <summary>
/// 响应:查询充值订单
/// </summary>
public sealed record GetDepositConfigRsp : Sys_Config
{
/// <inheritdoc cref="Sys_Config.CnyToPointRate" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int CnyToPointRate { get; init; }
/// <inheritdoc cref="Sys_Config.Trc20ReceiptAddress" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string Trc20ReceiptAddress { get; init; }
/// <inheritdoc cref="Sys_Config.UsdToPointRate" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int UsdToPointRate { get; init; }
}

View File

@ -1,11 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.DepositOrder;
/// <summary>
/// 请求:支付确认
/// </summary>
public record PayConfirmReq : Sys_DepositOrder
{
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
}

View File

@ -1,11 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.DepositOrder;
/// <summary>
/// 请求:查询充值订单
/// </summary>
public sealed record QueryDepositOrderReq : Sys_DepositOrder
{
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
}

View File

@ -1,73 +0,0 @@
using NetAdmin.Domain.Dto.Sys.User;
namespace NetAdmin.Domain.Dto.Sys.DepositOrder;
/// <summary>
/// 响应:查询充值订单
/// </summary>
public record QueryDepositOrderRsp : Sys_DepositOrder
{
/// <inheritdoc cref="Sys_DepositOrder.ActualPayAmount" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long ActualPayAmount { get; init; }
/// <inheritdoc cref="IFieldCreatedTime.CreatedTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override DateTime CreatedTime { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.DepositOrderStatus" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override DepositOrderStatues DepositOrderStatus { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.DepositPoint" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long DepositPoint { get; init; }
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="IFieldModifiedTime.ModifiedTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override DateTime? ModifiedTime { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.Owner" />
[CsvIgnore]
public new virtual QueryUserRsp Owner { get; init; }
/// <inheritdoc cref="IFieldOwner.OwnerDeptId" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override long? OwnerDeptId { get; init; }
/// <inheritdoc cref="IFieldOwner.OwnerId" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override long? OwnerId { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.PaidAccount" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string PaidAccount { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.PaidTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override DateTime? PaidTime { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.PaymentFinger" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string PaymentFinger { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.PaymentMode" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override PaymentModes PaymentMode { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.ReceiptAccount" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string ReceiptAccount { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.ToPointRate" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int ToPointRate { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; }
}

View File

@ -1,12 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.DepositOrder;
/// <summary>
/// 请求:到账确认
/// </summary>
public record ReceivedConfirmationReq : DataAbstraction
{
/// <summary>
/// 读取前n条记录
/// </summary>
public int ReadRecordCount { get; init; }
}

View File

@ -1,17 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.File;
/// <summary>
/// 响应:文件上传
/// </summary>
public record UploadFileRsp : DataAbstraction
{
/// <summary>
/// 文件名
/// </summary>
public string FileName { get; init; }
/// <summary>
/// 可访问的url地址
/// </summary>
public string Url { get; init; }
}

View File

@ -5,7 +5,7 @@ namespace NetAdmin.Domain.Dto.Sys.Job;
/// </summary>
public sealed record EditJobReq : CreateJobReq
{
/// <inheritdoc cref="IFieldVersion.Version" />
/// <inheritdoc cref="System.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; }
}

View File

@ -7,6 +7,11 @@ namespace NetAdmin.Domain.Dto.Sys.Menu;
/// </summary>
public sealed record MetaInfo : DataAbstraction
{
/// <summary>
/// Initializes a new instance of the <see cref="MetaInfo" /> class.
/// </summary>
public MetaInfo() { }
/// <summary>
/// Initializes a new instance of the <see cref="MetaInfo" /> class.
/// </summary>

View File

@ -76,6 +76,6 @@ public sealed record ExportRequestLogRsp : QueryRequestLogRsp
/// <inheritdoc />
[CsvIndex(7)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.踪标识))]
[CsvName(nameof(Ln.踪标识))]
public override Guid TraceId { get; init; }
}

View File

@ -14,9 +14,4 @@ public record ExecuteSqlReq : DataAbstraction
/// 超时时间(秒)
/// </summary>
public int TimeoutSecs { get; init; }
/// <summary>
/// 等待结果
/// </summary>
public bool WaitResult { get; init; } = true;
}

View File

@ -1,13 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.User;
/// <summary>
/// 请求:检查邀请码是否正确
/// </summary>
public sealed record CheckInviterAvailableReq : DataAbstraction
{
/// <summary>
/// 邀请码
/// </summary>
[Required]
public string Code { get; init; }
}

View File

@ -1,4 +1,3 @@
using NetAdmin.Domain.Dto.Sys.UserInvite;
using NetAdmin.Domain.Dto.Sys.UserProfile;
namespace NetAdmin.Domain.Dto.Sys.User;
@ -8,15 +7,6 @@ namespace NetAdmin.Domain.Dto.Sys.User;
/// </summary>
public sealed record CreateUserReq : CreateEditUserReq
{
/// <inheritdoc />
public override bool Enabled { get; init; } = true;
/// <inheritdoc cref="Sys_User.Invite" />
public new CreateUserInviteReq Invite { get; init; }
/// <inheritdoc />
public override string InviteCode { get; init; } = ((long)new[] { 60466176, int.MaxValue }.Rand()).Sys36().ToUpperInvariant();
/// <inheritdoc cref="CreateEditUserReq.PasswordText" />
[Required(ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.密码不能为空))]
public override string PasswordText { get; init; }
@ -28,7 +18,6 @@ public sealed record CreateUserReq : CreateEditUserReq
public override void Register(TypeAdapterConfig config)
{
_ = config.ForType<RegisterUserReq, CreateUserReq>() //
.Ignore(a => a.InviteCode)
.Map(d => d.Mobile, s => s.VerifySmsCodeReq.DestDevice)
//

View File

@ -19,10 +19,10 @@ public sealed record ExportUserRsp : QueryUserRsp
public override QueryDeptRsp Dept { get; init; }
/// <summary>
/// 属部门
/// 属部门
/// </summary>
[CsvIndex(5)]
[CsvName(nameof(Ln.属部门))]
[CsvName(nameof(Ln.属部门))]
public string DeptName { get; init; }
/// <inheritdoc />
@ -56,10 +56,10 @@ public sealed record ExportUserRsp : QueryUserRsp
public override string Mobile { get; init; }
/// <summary>
/// 属角色
/// 属角色
/// </summary>
[CsvIndex(4)]
[CsvName(nameof(Ln.属角色))]
[CsvName(nameof(Ln.属角色))]
public string RoleNames { get; init; }
/// <inheritdoc />

View File

@ -39,10 +39,6 @@ public record QueryUserRsp : Sys_User
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="Sys_User.InviteCode" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string InviteCode { get; init; }
/// <inheritdoc cref="Sys_User.LastLoginTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override DateTime? LastLoginTime { get; init; }

View File

@ -7,11 +7,6 @@ namespace NetAdmin.Domain.Dto.Sys.User;
/// </summary>
public sealed record RegisterUserReq : Sys_User
{
/// <summary>
/// 邀请者的邀请码
/// </summary>
public string Inviter { get; init; }
/// <summary>
/// 密码
/// </summary>

View File

@ -11,7 +11,7 @@ public sealed record SetAvatarReq : Sys_User
[Url(ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.网络地址不正确))]
public override string Avatar { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" />
/// <inheritdoc cref="System.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; }
}

View File

@ -1,11 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.UserInvite;
/// <summary>
/// 请求:创建用户邀请
/// </summary>
public record CreateUserInviteReq : Sys_UserInvite
{
/// <inheritdoc cref="Sys_UserInvite.CommissionRatio" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int CommissionRatio { get; init; }
}

View File

@ -1,15 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.UserInvite;
/// <summary>
/// 请求:编辑用户邀请
/// </summary>
public record EditUserInviteReq : CreateUserInviteReq
{
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; }
}

View File

@ -1,11 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.UserInvite;
/// <summary>
/// 请求:查询用户邀请
/// </summary>
public sealed record QueryUserInviteReq : Sys_UserInvite
{
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
}

View File

@ -1,64 +0,0 @@
using NetAdmin.Domain.Dto.Sys.User;
namespace NetAdmin.Domain.Dto.Sys.UserInvite;
/// <summary>
/// 响应:查询用户邀请
/// </summary>
public record QueryUserInviteRsp : Sys_UserInvite
{
/// <inheritdoc cref="Sys_UserInvite.Children" />
public new virtual IEnumerable<QueryUserInviteRsp> Children { get; init; }
/// <inheritdoc cref="Sys_UserInvite.CommissionRatio" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int CommissionRatio { get; init; }
/// <inheritdoc cref="IFieldCreatedTime.CreatedTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override DateTime CreatedTime { get; init; }
/// <inheritdoc cref="IFieldCreatedUser.CreatedUserId" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override long? CreatedUserId { get; init; }
/// <inheritdoc cref="IFieldCreatedUser.CreatedUserName" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string CreatedUserName { get; init; }
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="IFieldModifiedTime.ModifiedTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override DateTime? ModifiedTime { get; init; }
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserId" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override long? ModifiedUserId { get; init; }
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserName" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string ModifiedUserName { get; init; }
/// <inheritdoc cref="Sys_UserInvite.Owner" />
[CsvIgnore]
public new virtual QueryUserRsp Owner { get; init; }
/// <inheritdoc cref="IFieldOwner.OwnerDeptId" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override long? OwnerDeptId { get; init; }
/// <inheritdoc cref="IFieldOwner.OwnerId" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override long? OwnerId { get; init; }
/// <inheritdoc cref="Sys_UserInvite.User" />
[CsvIgnore]
public new virtual QueryUserRsp User { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; }
}

View File

@ -1,15 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.UserInvite;
/// <summary>
/// 请求:设置返佣比率
/// </summary>
public record SetCommissionRatioReq : CreateUserInviteReq
{
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; }
}

View File

@ -58,11 +58,6 @@ public record CreateUserProfileReq : Sys_UserProfile
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string EmergencyContactName { get; init; }
/// <inheritdoc cref="Sys_UserProfile.Gender" />
[EnumDataType(typeof(Genders), ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.性别不正确))]
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override Genders? Gender { get; init; }
/// <inheritdoc cref="Sys_UserProfile.GraduateSchool" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string GraduateSchool { get; init; }
@ -109,4 +104,9 @@ public record CreateUserProfileReq : Sys_UserProfile
/// <inheritdoc cref="Sys_UserProfile.RealName" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string RealName { get; init; }
/// <inheritdoc cref="Sys_UserProfile.Sex" />
[EnumDataType(typeof(Sexes), ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.性别不正确))]
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override Sexes? Sex { get; init; }
}

View File

@ -57,10 +57,6 @@ public sealed record QueryUserProfileRsp : Sys_UserProfile
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string EmergencyContactName { get; init; }
/// <inheritdoc cref="Sys_UserProfile.Gender" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override Genders? Gender { get; init; }
/// <inheritdoc cref="Sys_UserProfile.GraduateSchool" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string GraduateSchool { get; init; }
@ -107,6 +103,10 @@ public sealed record QueryUserProfileRsp : Sys_UserProfile
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string RealName { get; init; }
/// <inheritdoc cref="Sys_UserProfile.Sex" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override Sexes? Sex { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; }

View File

@ -1,6 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.UserWallet;
/// <summary>
/// 请求:创建用户钱包
/// </summary>
public record CreateUserWalletReq : Sys_UserWallet;

View File

@ -1,15 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.UserWallet;
/// <summary>
/// 请求:编辑用户钱包
/// </summary>
public record EditUserWalletReq : CreateUserWalletReq
{
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; }
}

View File

@ -1,21 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.UserWallet;
/// <summary>
/// 请求:查询用户钱包
/// </summary>
public sealed record QueryUserWalletReq : Sys_UserWallet
{
/// <summary>
/// 部门编号
/// </summary>
public long DeptId { get; init; }
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <summary>
/// 角色编号
/// </summary>
public long RoleId { get; init; }
}

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