1 Commits

Author SHA1 Message Date
tk
661640d441 chore(release): 2.2.0 2024-11-27 16:54:26 +08:00
773 changed files with 8835 additions and 16511 deletions

View File

@ -1 +0,0 @@
drone workflows

View File

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

View File

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

6
.gitmodules vendored
View File

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

View File

@ -2,131 +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. 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)
### Features
* ✨ 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c))
* ✨ 分组统计功能 ([0b036e9](https://github.com/nsnail/NetAdmin/commit/0b036e9d67ffdf7a07c772606009f02744e6a3c3))
* ✨ 框架代码同步 ([098cfc1](https://github.com/nsnail/NetAdmin/commit/098cfc135e781a0cf172cd1289e5e871c7a76419))
* ✨ 框架代码同步 ([7256626](https://github.com/nsnail/NetAdmin/commit/725662693b7b47f6fae4c1917dd8d80220c7640a))
* ✨ 文档管理 ([#221](https://github.com/nsnail/NetAdmin/issues/221)) ([7ed3040](https://github.com/nsnail/NetAdmin/commit/7ed30406c9f721a12f0b756ec8884a1882242b93))
* ✨ select-filter badge icon ([#217](https://github.com/nsnail/NetAdmin/issues/217)) ([4d857f1](https://github.com/nsnail/NetAdmin/commit/4d857f1861b1256980e7cc59e2ab6a5f7d966da2))
### Bug Fixes
* 🐛 按钮文字提示 ([#227](https://github.com/nsnail/NetAdmin/issues/227)) ([c88c8d2](https://github.com/nsnail/NetAdmin/commit/c88c8d293d44f2707f3b5232e6a40a141af9981c))
* 🐛 导出界面报错 ([#213](https://github.com/nsnail/NetAdmin/issues/213)) ([ef2f0de](https://github.com/nsnail/NetAdmin/commit/ef2f0de095e314f34bec21c0a2ccdb51423a163b))
* 🐛 导出文件的responseType ([#205](https://github.com/nsnail/NetAdmin/issues/205)) ([841a419](https://github.com/nsnail/NetAdmin/commit/841a4195e77aa96e3c6c72626c1add3f71a310aa))
* 🐛 个性主题色冲突 ([4e4a1d0](https://github.com/nsnail/NetAdmin/commit/4e4a1d0dff7f3698e9a9cfcf46368260cfd70cbd))
* 🐛 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec))
* 🐛 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71))
* 🐛 editUser ([ef2a0c3](https://github.com/nsnail/NetAdmin/commit/ef2a0c3280532ac24889279e4780a1b1a2561a6b))
* 🐛 idd ([#208](https://github.com/nsnail/NetAdmin/issues/208)) ([4e9f605](https://github.com/nsnail/NetAdmin/commit/4e9f605ea2cc6fe394068cfea5638e51920b9096))
* 🐛 version 条件重复指定 ([01058ba](https://github.com/nsnail/NetAdmin/commit/01058ba7288bcc645f66de2f78e1d659d55333cf))
* 🐛 version lock ([4eecc0b](https://github.com/nsnail/NetAdmin/commit/4eecc0b4ce09f620f83109949e4c2b67b7f8ba90))
### [2.2.1](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.2.1) (2024-12-04)
### Features
* ✨ 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c))
* ✨ 文档管理 ([#221](https://github.com/nsnail/NetAdmin/issues/221)) ([7ed3040](https://github.com/nsnail/NetAdmin/commit/7ed30406c9f721a12f0b756ec8884a1882242b93))
* ✨ select-filter badge icon ([#217](https://github.com/nsnail/NetAdmin/issues/217)) ([4d857f1](https://github.com/nsnail/NetAdmin/commit/4d857f1861b1256980e7cc59e2ab6a5f7d966da2))
### Bug Fixes
* 🐛 按钮文字提示 ([#227](https://github.com/nsnail/NetAdmin/issues/227)) ([c88c8d2](https://github.com/nsnail/NetAdmin/commit/c88c8d293d44f2707f3b5232e6a40a141af9981c))
* 🐛 导出界面报错 ([#213](https://github.com/nsnail/NetAdmin/issues/213)) ([ef2f0de](https://github.com/nsnail/NetAdmin/commit/ef2f0de095e314f34bec21c0a2ccdb51423a163b))
* 🐛 导出文件的responseType ([#205](https://github.com/nsnail/NetAdmin/issues/205)) ([841a419](https://github.com/nsnail/NetAdmin/commit/841a4195e77aa96e3c6c72626c1add3f71a310aa))
* 🐛 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec))
* 🐛 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71))
* 🐛 editUser ([ef2a0c3](https://github.com/nsnail/NetAdmin/commit/ef2a0c3280532ac24889279e4780a1b1a2561a6b))
* 🐛 idd ([#208](https://github.com/nsnail/NetAdmin/issues/208)) ([4e9f605](https://github.com/nsnail/NetAdmin/commit/4e9f605ea2cc6fe394068cfea5638e51920b9096))
* 🐛 version 条件重复指定 ([01058ba](https://github.com/nsnail/NetAdmin/commit/01058ba7288bcc645f66de2f78e1d659d55333cf))
* 🐛 version lock ([4eecc0b](https://github.com/nsnail/NetAdmin/commit/4eecc0b4ce09f620f83109949e4c2b67b7f8ba90))
## [2.2.0](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.2.0) (2024-11-27) ## [2.2.0](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.2.0) (2024-11-27)

View File

@ -4,36 +4,34 @@
<DefineConstants>DBTYPE_SQLITE</DefineConstants> <DefineConstants>DBTYPE_SQLITE</DefineConstants>
<SolutionDir>$(MSBuildThisFileDirectory)</SolutionDir> <SolutionDir>$(MSBuildThisFileDirectory)</SolutionDir>
</PropertyGroup> </PropertyGroup>
<Import Project="$(SolutionDir)/build/minver.targets"/> <Import Project="$(SolutionDir)/build/minver.targets" />
<PropertyGroup> <PropertyGroup>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Authors>nsnail</Authors> <Authors>nsnail</Authors>
<BaseIntermediateOutputPath>$(SolutionDir)/dist/backend/$(MSBuildProjectName)/obj</BaseIntermediateOutputPath> <BaseIntermediateOutputPath>$(SolutionDir)/dist/backend/$(MSBuildProjectName)/obj</BaseIntermediateOutputPath>
<BaseOutputPath>$(SolutionDir)/dist/backend/$(MSBuildProjectName)/bin</BaseOutputPath> <BaseOutputPath>$(SolutionDir)/dist/backend/$(MSBuildProjectName)/bin</BaseOutputPath>
<Copyright>© 2006-2024 nsnail</Copyright> <Copyright>© 2006-2023 nsnail</Copyright>
<Description>通用后台权限管理系统、快速开发框架基于C#13/.NET9、Vue3/Vite、ElementPlus等现代技术构建具有十分整洁、优雅的编码规范</Description> <Description>通用后台权限管理系统、快速开发框架基于C#12/.NET9、Vue3/Vite、Element Plus等现代技术构建具有十分整洁、优雅的编码规范</Description>
<EnableBaseIntermediateOutputPathMismatchWarning>false</EnableBaseIntermediateOutputPathMismatchWarning> <EnableBaseIntermediateOutputPathMismatchWarning>false</EnableBaseIntermediateOutputPathMismatchWarning>
<GenerateDocumentationFile>true</GenerateDocumentationFile> <GenerateDocumentationFile>true</GenerateDocumentationFile>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<LangVersion>preview</LangVersion> <LangVersion>preview</LangVersion>
<MinVerDefaultPreReleaseIdentifiers>beta</MinVerDefaultPreReleaseIdentifiers> <MinVerDefaultPreReleaseIdentifiers>beta</MinVerDefaultPreReleaseIdentifiers>
<MinVerTagPrefix>v</MinVerTagPrefix> <MinVerTagPrefix>v</MinVerTagPrefix>
<NoWarn>CA1707;IDE0005;IDE0008;IDE0010;IDE0028;IDE0055;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> <Product>NetAdmin</Product>
<RepositoryType>git</RepositoryType> <RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/nsnail/NetAdmin.git</RepositoryUrl> <RepositoryUrl>https://github.com/nsnail/NetAdmin.git</RepositoryUrl>
<TargetFramework Condition="'$(OS)' != 'Windows_NT'">net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<TargetFramework Condition="'$(OS)' == 'Windows_NT'">net9.0-windows</TargetFramework>
<UseWindowsForms Condition="'$(OS)' == 'Windows_NT'">true</UseWindowsForms>
<Title>$(AssemblyName)</Title> <Title>$(AssemblyName)</Title>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="MinVer" Version="6.1.0-beta.1"> <PackageReference Include="MinVer" Version="6.0.0">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="$(SolutionDir)/src/backend/GlobalUsings.cs" Link="GlobalUsings.cs"/> <Compile Include="$(SolutionDir)/src/backend/GlobalUsings.cs" Link="GlobalUsings.cs" />
</ItemGroup> </ItemGroup>
</Project> </Project>

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 WORKDIR /app
EXPOSE 8080 EXPOSE 8080
RUN apt update RUN apt update

233
NetAdmin.sln Normal file
View File

@ -0,0 +1,233 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{C84EB5A0-37AD-4B17-A51E-E36888C4441E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "backend", "backend", "{4DAF9366-855F-46BB-AE4C-660C92FA0697}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{5198A03D-0CAC-4828-A807-34A693F73859}"
ProjectSection(SolutionItems) = preProject
.commitlintrc.js = .commitlintrc.js
.editorconfig = .editorconfig
.gitattributes = .gitattributes
.gitignore = .gitignore
.gitmodules = .gitmodules
CHANGELOG.md = CHANGELOG.md
Directory.Build.props = Directory.Build.props
Dockerfile = Dockerfile
dotnet-tools.json = dotnet-tools.json
global.json = global.json
LICENSE = LICENSE
NetAdmin.sln.DotSettings = NetAdmin.sln.DotSettings
nuget.config = nuget.config
package.json = package.json
README.md = README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B25C9-0901-4923-913F-00F9A6B352A5}"
ProjectSection(SolutionItems) = preProject
1.git.pull.request.ps1 = scripts/1.git.pull.request.ps1
2.git.release.ps1 = scripts/2.git.release.ps1
3.git.recreate.branch.ps1 = scripts/3.git.recreate.branch.ps1
4.git.del.obsolete.tags.ps1 = scripts/4.git.del.obsolete.tags.ps1
clean.ln.csx = scripts/clean.ln.csx
code.clean.csx = scripts/code.clean.csx
code.clean.ps1 = scripts/code.clean.ps1
find.unused.ln.csx = scripts/find.unused.ln.csx
gen.cs.tt = scripts/gen.cs.tt
gen.id.linq = scripts/gen.id.linq
gen.ln.cmd = scripts/gen.ln.cmd
gen.resx.tt = scripts/gen.resx.tt
image.optimize.csx = scripts/image.optimize.csx
install.as.tpl.ps1 = scripts/install.as.tpl.ps1
rename.csx = scripts/rename.csx
resharper.full.ps1 = scripts/resharper.full.ps1
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}") = ".github", ".github", "{1129FE25-466B-4F4F-85FC-3752664245E1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{3C6F049E-3EE8-4D66-9AFF-E8A369032487}"
ProjectSection(SolutionItems) = preProject
nightly-build.yml = .github/workflows/nightly-build.yml
README.md = .github/workflows/README.md
release.yml = .github/workflows/release.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{8E4C93BA-9493-4892-80C4-5E174C504829}"
ProjectSection(SolutionItems) = preProject
code.quality.props = build/code.quality.props
copy.pkg.xml.comment.files.targets = build/copy.pkg.xml.comment.files.targets
minver.targets = build/minver.targets
prebuild.targets = build/prebuild.targets
stylecop.analyzers.ruleset = build/stylecop.analyzers.ruleset
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Infrastructure", "src\backend\NetAdmin\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("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{E80A1018-C354-4A26-9029-8847BB9DA864}"
ProjectSection(SolutionItems) = preProject
README.md = docker/README.md
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "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\FreeSql\FreeSql\FreeSql.csproj", "{3C65DA42-877D-46FF-B754-C12214302A29}"#refs
##EndProject#refs
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.Provider.Sqlite", "refs\FreeSql\Providers\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj", "{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}"#refs
##EndProject#refs
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.DbContext", "refs\FreeSql\FreeSql.DbContext\FreeSql.DbContext.csproj", "{FE03DF27-EC56-48DB-81B0-F99947259A7C}"#refs
##EndProject#refs
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
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}
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/=RedundantPatternParentheses/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SuggestBaseTypeForParameter/@EntryIndexedValue">DO_NOT_SHOW</s:String> <s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SuggestBaseTypeForParameter/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SuggestBaseTypeForParameterInConstructor/@EntryIndexedValue">DO_NOT_SHOW</s:String> <s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SuggestBaseTypeForParameterInConstructor/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SwitchExpressionHandlesSomeKnownEnumValuesWithExceptionInDefault/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=TooWideLocalVariableScope/@EntryIndexedValue">HINT</s:String> <s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=TooWideLocalVariableScope/@EntryIndexedValue">HINT</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002EGlobal/@EntryIndexedValue">DO_NOT_SHOW</s:String> <s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002EGlobal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002ELocal/@EntryIndexedValue">DO_NOT_SHOW</s:String> <s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002ELocal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
@ -326,7 +325,6 @@
&lt;/Patterns&gt;</s:String> &lt;/Patterns&gt;</s:String>
<!-- Environment--> <!-- Environment-->
<s:Boolean x:Key="/Default/Environment/Editor/UseCamelHumps/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>

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

@ -1,6 +1,6 @@
# NetAdmin # NetAdmin
通用后台权限管理系统、快速开发框架基于C#13/.NET9、Vue3/Vite、ElementPlus等现代技术构建具有十分整洁、优雅的编码规范 通用后台权限管理系统、快速开发框架基于C#12/.NET9、Vue3/Vite、Element Plus等现代技术构建具有十分整洁、优雅的编码规范
[![.NET](https://github.com/nsnail/NetAdmin/actions/workflows/nightly-build.yml/badge.svg)](https://github.com/nsnail/NetAdmin/actions/workflows/nightly-build.yml) [![.NET](https://github.com/nsnail/NetAdmin/actions/workflows/nightly-build.yml/badge.svg)](https://github.com/nsnail/NetAdmin/actions/workflows/nightly-build.yml)
[![MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/nsnail/NetAdmin/blob/main/LICENSE) [![MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/nsnail/NetAdmin/blob/main/LICENSE)
@ -14,35 +14,34 @@ https://na.tools92.top
```shell ```shell
docker run -p 8080:8080 nsnail/netadmin docker run -p 8080:8080 nsnail/netadmin
# 墙内用户请自备梯子 # 需魔法上网
``` ```
## 构建步骤 ## 构建步骤
所涉软件均推荐下载zip/tar版本解压即用一键删除不会污染系统环境
```shell ```shell
# 1. 检查 dotnet sdk 版本 >=9.0.0 # 1. 检查 dotnet sdk 版本 >=9.0.0
dotnet --list-sdks dotnet --list-sdks
# 下载 dotnethttps://dotnet.microsoft.com/zh-cn/download/dotnet # 下载 dotnethttps://dotnet.microsoft.com/zh-cn/download/dotnet
# 2. 克隆代码仓库 # 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 处于运行状态 # 3. 确认本机 redis 处于运行状态
redis-server # 启动服务器 redis-server # 启动
redis-cli ping # 连接测试 redis-cli # 连接测试
# 下载 redis for windowshttps://github.com/redis-windows/redis-windows/releases # 下载 redis for windowshttps://github.com/redis-windows/redis-windows/releases
# 下载 redis for linux/machttps://redis.io/download # 下载 redis for linux/machttps://redis.io/download
# 4. 运行后端 WebApi # 4. 运行后端 WebApi
dotnet run --project ./src/backend/YourSolution.AdmServer.Host/YourSolution.AdmServer.Host.csproj --urls http://[::]:5010 -is dotnet run --project ./src/backend/YourSolution.AdmServer.Host/YourSolution.AdmServer.Host.csproj --urls http://[::]:5010 -is
# -i 插入种子数据-s 同步数据库结构 # -i 插入种子数据
# -s 同步数据库结构
# 浏览器访问 http://localhost:5010 将看到SwaggerKnife4jUI界面 # 浏览器访问 http://localhost:5010 将看到SwaggerKnife4jUI界面
# 5. 检查 nodejs 版本 >=20 # 5. 检查 nodejs 版本 >=20
node -v node -v
# 下载 nodejshttps://nodejs.org/zh-cn/download # 下载 nodejshttps://nodejs.org/en/download
# 6. 安装 npm 依赖包 # 6. 安装 npm 依赖包
cd ./src/frontend/admin && npm install cd ./src/frontend/admin && npm install
@ -71,19 +70,19 @@ npm run dev
```mermaid ```mermaid
flowchart TD flowchart TD
sys-host["NetAdmin.SysComponent.Host<br>系统组件:主机层"] sys-host["NetAdmin.SysComponent.Host\n系统组件:主机层"]
sys-cache["NetAdmin.SysComponent.Cache<br>系统组件:缓存层"] sys-cache["NetAdmin.SysComponent.Cache\n系统组件:缓存层"]
sys-app["NetAdmin.SysComponent.Application<br>系统组件:应用层"] sys-app["NetAdmin.SysComponent.Application\n系统组件:应用层"]
host["<b>NetAdmin.Host</b><br>框架:主机层<br>.Net自托管主机程序<br>(输入输出格式化)<br>(数据校验、鉴权)<br>...所有HTTP管道过滤器中间件"] host["<b>NetAdmin.Host</b>\n框架:主机层\n.Net自托管主机程序\n(输入输出格式化)\n(数据校验、鉴权)\n...所有HTTP管道过滤器中间件"]
cache["<b>NetAdmin.Cache</b><br>框架:缓存层<br>基于Redis或MemoryCache的缓存策略实现"] cache["<b>NetAdmin.Cache</b>\n框架:缓存层\n基于Redis或MemoryCache的缓存策略实现"]
app["<b>NetAdmin.Application</b><br>框架:业务应用层<br>(内部服务增删改查)<br>(外部服务增删改查)<br>...所有业务用例的计算与组合逻辑的模块化)"] app["<b>NetAdmin.Application</b>\n框架:业务应用层\n(内部服务增删改查)\n(外部服务增删改查)\n...所有业务用例的计算与组合逻辑的模块化)"]
domain["<b>NetAdmin.Domain</b><br>框架:数据实体层<br>(数据库关系实体映射)<br>DTO数据传输对象<br>...所有数据模型的抽象与封装)"] domain["<b>NetAdmin.Domain</b>\n框架:数据实体层\n(数据库关系实体映射)\nDTO数据传输对象\n...所有数据模型的抽象与封装)"]
infra["<b>NetAdmin.Infrastructure</b><br>框架:基础设施层<br>第三方组件和Nuget包引用<br>(公共构建和程序运行配置)<br>(公共常量枚举异常定义)<br>(全球化化和多语言)<br>...所有公共Utility工具"] infra["<b>NetAdmin.Infrastructure</b>\n框架:基础设施层\n第三方组件和Nuget包引用\n(公共构建和程序运行配置)\n(公共常量枚举异常定义)\n(全球化化和多语言)\n...所有公共Utility工具"]
biz-host["YourSolution.XXX.Host<br>业务实例:主机层"] biz-host["YourSolution.XXX.Host\n业务实例:主机层"]
biz-cache["YourSolution.XXX.Cache<br>业务实例:缓存层"] biz-cache["YourSolution.XXX.Cache\n业务实例:缓存层"]
biz-app["YourSolution.XXX.Application<br>业务实例:应用层"] biz-app["YourSolution.XXX.Application\n业务实例:应用层"]
biz-domain["YourSolution.XXX.Domain<br>业务实例:数据实体层"] biz-domain["YourSolution.XXX.Domain\n业务实例:数据实体层"]
biz-infra["YourSolution.XXX.Infrastructure<br>业务实例:基础设施层"] biz-infra["YourSolution.XXX.Infrastructure\n业务实例:基础设施层"]
biz-host-->biz-cache-->biz-app-->biz-domain-->biz-infra biz-host-->biz-cache-->biz-app-->biz-domain-->biz-infra
sys-host-->sys-cache-->sys-app-->domain-->infra sys-host-->sys-cache-->sys-app-->domain-->infra
host-->cache-->app-->domain-->infra host-->cache-->app-->domain-->infra
@ -111,7 +110,7 @@ biz-infra-->infra
| C# | 自动化版本管理 | [MinVer](https://github.com/adamralph/minver) | | C# | 自动化版本管理 | [MinVer](https://github.com/adamralph/minver) |
| TypeScript | SPA基础框架 | [Vue](https://github.com/vuejs/core) | | TypeScript | SPA基础框架 | [Vue](https://github.com/vuejs/core) |
| TypeScript | 前端构建工具 | [Vite](https://github.com/vitejs/vite) | | TypeScript | 前端构建工具 | [Vite](https://github.com/vitejs/vite) |
| TypeScript | UI控件库 | [ElementPlus](https://github.com/element-plus/element-plus) | | TypeScript | UI控件库 | [Element Plus](https://github.com/element-plus/element-plus) |
| TypeScript | CSS解析器 | [Sass](https://github.com/sass/sass) | | TypeScript | CSS解析器 | [Sass](https://github.com/sass/sass) |
| TypeScript | 图表和数据可视化 | [ECharts](https://github.com/apache/echarts) | | TypeScript | 图表和数据可视化 | [ECharts](https://github.com/apache/echarts) |
| JavaScript | 后台管理界面 | [SCUI](https://gitee.com/lolicode/scui) | | JavaScript | 后台管理界面 | [SCUI](https://gitee.com/lolicode/scui) |

View File

@ -1,4 +1,3 @@
USDT
上次执行时间 上次执行时间
上次执行状态 上次执行状态
上次执行耗时 上次执行耗时
@ -18,10 +17,9 @@ USDT
以什么结束 以什么结束
作业名称 作业名称
作业状态 作业状态
保密
信息 信息
倒序排序 倒序排序
充值成功
充值订单导出
全部数据 全部数据
公告 公告
共青团员 共青团员
@ -29,7 +27,6 @@ USDT
创建时间 创建时间
初中 初中
删除 删除
到账确认中
包含 包含
博士 博士
博士后 博士后
@ -48,7 +45,6 @@ USDT
字典内容导出 字典内容导出
宕机 宕机
客户端IP 客户端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, "Enabled": true,
"Trc20ReceiptAddress": "TMTByCrcZkY7o8YMax1pXiYV5SUQBZEnCu",
"UsdToPointRate": 700,
"UserRegisterConfirm": false, "UserRegisterConfirm": false,
"UserRegisterDeptId": 372119301627909, "UserRegisterDeptId": 372119301627909,
"UserRegisterRoleId": 371729946431493, "UserRegisterRoleId": 371729946431493
} }
] ]

View File

@ -2,29 +2,12 @@
{ {
"Enabled": true, "Enabled": true,
"ExecutionCron": "0 * * * * ?", "ExecutionCron": "0 * * * * ?",
"HttpMethod": 7, "HttpMethod": 3,
"JobName": "用户收入支出统计", "JobName": "HTTP 请求测试",
"LastStatusCode": 200, "NextExecTime": "2020-09-13 12:26:40",
"NextExecTime": "2025-06-27 19:07:00", "NextTimeId": 1600000000,
"NextTimeId": 1751022420, "RequestUrl": "https://httpbin.org/ip",
"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",
"Status": 1, "Status": 1,
"UserId": 664362432344581, "UserId": 370942943322181,
}, }
{
"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,
},
] ]

View File

@ -26,7 +26,7 @@
"Id": 373837957840901, "Id": 373837957840901,
"Name": "sys/user", "Name": "sys/user",
"ParentId": 373837917724677, "ParentId": 373837917724677,
"Path": "/power/user", "Path": "/sys/user",
"Sort": 100, "Sort": 100,
"Title": "用户管理", "Title": "用户管理",
"Type": 1 "Type": 1
@ -37,7 +37,7 @@
"Id": 373838018527237, "Id": 373838018527237,
"Name": "sys/role", "Name": "sys/role",
"ParentId": 373837917724677, "ParentId": 373837917724677,
"Path": "/power/role", "Path": "/sys/role",
"Sort": 99, "Sort": 99,
"Title": "角色管理", "Title": "角色管理",
"Type": 1 "Type": 1
@ -48,7 +48,7 @@
"Id": 373838045605893, "Id": 373838045605893,
"Name": "sys/dept", "Name": "sys/dept",
"ParentId": 373837917724677, "ParentId": 373837917724677,
"Path": "/power/dept", "Path": "/sys/dept",
"Sort": 98, "Sort": 98,
"Title": "部门管理", "Title": "部门管理",
"Type": 1 "Type": 1
@ -59,82 +59,18 @@
"Id": 373838070898693, "Id": 373838070898693,
"Name": "sys/menu", "Name": "sys/menu",
"ParentId": 373837917724677, "ParentId": 373837917724677,
"Path": "/power/menu", "Path": "/sys/menu",
"Sort": 97, "Sort": 97,
"Title": "菜单管理", "Title": "菜单管理",
"Type": 1 "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, "Id": 485278637670422,
"Name": "sys", "Name": "sys",
"Path": "/sys", "Path": "/sys",
"Sort": 98, "Sort": 99,
"Title": "系统管理", "Title": "系统管理",
"Type": 1 "Type": 1
}, },
@ -144,18 +80,18 @@
"Id": 380415005847557, "Id": 380415005847557,
"Name": "sys/config", "Name": "sys/config",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/config", "Path": "/sys/config",
"Sort": 100, "Sort": 100,
"Title": "系统设置", "Title": "系统设置",
"Type": 1 "Type": 1
}, },
{ {
"Component": "sys/job", "Component": "sys/job",
"Icon": "sc-icon-scheduled-job", "Icon": "sc-icon-ScheduledJob",
"Id": 510067557638158, "Id": 510067557638158,
"Name": "sys/job", "Name": "sys/job",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/job", "Path": "/sys/job",
"Sort": 99, "Sort": 99,
"Title": "计划作业", "Title": "计划作业",
"Type": 1 "Type": 1
@ -166,7 +102,7 @@
"Id": 375315654221829, "Id": 375315654221829,
"Name": "sys/dic", "Name": "sys/dic",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/dic", "Path": "/sys/dic",
"Sort": 98, "Sort": 98,
"Title": "字典管理", "Title": "字典管理",
"Type": 1 "Type": 1
@ -177,7 +113,7 @@
"Id": 482779610341392, "Id": 482779610341392,
"Name": "sys/msg", "Name": "sys/msg",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/msg", "Path": "/sys/msg",
"Sort": 97, "Sort": 97,
"Title": "消息管理", "Title": "消息管理",
"Type": 1, "Type": 1,
@ -188,7 +124,7 @@
"Id": 397880678895621, "Id": 397880678895621,
"Name": "sys/api", "Name": "sys/api",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/api", "Path": "/sys/api",
"Sort": 96, "Sort": 96,
"Title": "接口管理", "Title": "接口管理",
"Type": 1 "Type": 1
@ -199,18 +135,18 @@
"Id": 374911555702789, "Id": 374911555702789,
"Name": "sys/cache", "Name": "sys/cache",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/cache", "Path": "/sys/cache",
"Sort": 95, "Sort": 95,
"Title": "缓存管理", "Title": "缓存管理",
"Type": 1 "Type": 1
}, },
// ------------------------------ 档案管理 ------------------------------ // ------------------------------ 档案管理 ------------------------------
{ {
"Icon": "sc-icon-archive", "Icon": "sc-icon-Archive",
"Id": 616214756757512, "Id": 616214756757512,
"Name": "archive", "Name": "archive",
"Path": "/archive", "Path": "/archive",
"Sort": 97, "Sort": 98,
"Title": "档案管理", "Title": "档案管理",
"Type": 1 "Type": 1
}, },
@ -231,7 +167,7 @@
"Id": 374792687640581, "Id": 374792687640581,
"Name": "log", "Name": "log",
"Path": "/log", "Path": "/log",
"Sort": 96, "Sort": 97,
"Title": "日志管理", "Title": "日志管理",
"Type": 1 "Type": 1
}, },
@ -241,18 +177,18 @@
"Id": 485285246504976, "Id": 485285246504976,
"Name": "sys/log/operation", "Name": "sys/log/operation",
"ParentId": 374792687640581, "ParentId": 374792687640581,
"Path": "/log/operation", "Path": "/sys/log/operation",
"Sort": 100, "Sort": 100,
"Title": "操作日志", "Title": "操作日志",
"Type": 1, "Type": 1,
}, },
{ {
"Component": "sys/log/login", "Component": "sys/log/login",
"Icon": "sc-icon-open-door", "Icon": "sc-icon-OpenDoor",
"Id": 485285246504970, "Id": 485285246504970,
"Name": "sys/log/login", "Name": "sys/log/login",
"ParentId": 374792687640581, "ParentId": 374792687640581,
"Path": "/log/login", "Path": "/sys/log/login",
"Sort": 99, "Sort": 99,
"Title": "登录日志", "Title": "登录日志",
"Type": 1, "Type": 1,
@ -263,7 +199,7 @@
"Id": 373838105399301, "Id": 373838105399301,
"Name": "dev", "Name": "dev",
"Path": "/dev", "Path": "/dev",
"Sort": 95, "Sort": 96,
"Title": "开发管理", "Title": "开发管理",
"Type": 1 "Type": 1
}, },
@ -283,7 +219,7 @@
"ParentId": 373838105399301, "ParentId": 373838105399301,
"Icon": "el-icon-eleme-filled", "Icon": "el-icon-eleme-filled",
"Name": "dev/element", "Name": "dev/element",
"Path": "https://element-plus.org/zh-CN/component/overview.html", "Path": "http://element-plus.org/zh-CN/component/overview.html",
"Sort": 99, "Sort": 99,
"Title": "Element", "Title": "Element",
"Type": 3, "Type": 3,
@ -291,7 +227,7 @@
{ {
"Id": 560217289232398, "Id": 560217289232398,
"ParentId": 373838105399301, "ParentId": 373838105399301,
"Icon": "sc-icon-free-sql", "Icon": "sc-icon-FreeSql",
"Name": "dev/freesql", "Name": "dev/freesql",
"Path": "https://freesql.net/guide", "Path": "https://freesql.net/guide",
"Sort": 99, "Sort": 99,

View File

@ -42,69 +42,5 @@
{ {
"ApiId": "api/sys/user/set.session.user.app.config", "ApiId": "api/sys/user/set.session.user.app.config",
"RoleId": 371729946431493, "RoleId": 371729946431493,
},
{
"ApiId": "api/sys/login.log/paged.query",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/login.log/get",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/login.log/count.by",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/login.log/export",
"RoleId": 371729946431493,
},
{
"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, "MenuId": 374967228141573,
"RoleId": 371729946431493 "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

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

View File

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

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, "Id": 370942943322181,
"AppConfig": "[]" "AppConfig": "[]"
}, },
{
"Id": 664362432344581,
"AppConfig": "[]"
},
{ {
"Id": 560217289236492, "Id": 560217289236492,
"AppConfig": "[]" "AppConfig": "[]"

View File

@ -3,10 +3,6 @@
"RoleId": 370943613149253, "RoleId": 370943613149253,
"UserId": 370942943322181 "UserId": 370942943322181
}, },
{
"RoleId": 370943613149253,
"UserId": 664362432344581
},
{ {
"RoleId": 371729946431493, "RoleId": 371729946431493,
"UserId": 560217289236492 "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> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.14.15"> <PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.12.19">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Roslynator.Analyzers" Version="4.13.1"> <PackageReference Include="Roslynator.Analyzers" Version="4.12.9">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="SonarAnalyzer.CSharp" Version="10.12.0.118525"> <PackageReference Include="SonarAnalyzer.CSharp" Version="9.32.0.97167">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>

View File

@ -3,8 +3,8 @@
<ItemGroup> <ItemGroup>
<PackageReferenceFiles <PackageReferenceFiles
Condition="%(PackageReference.CopyToOutputDirectory) != ''" Condition="%(PackageReference.CopyToOutputDirectory) != ''"
Include="$(NugetPackageRoot)\%(PackageReference.Identity)\%(PackageReference.Version)\%(PackageReference.CopyToOutputDirectory)"/> Include="$(NugetPackageRoot)\%(PackageReference.Identity)\%(PackageReference.Version)\%(PackageReference.CopyToOutputDirectory)" />
</ItemGroup> </ItemGroup>
<Copy SourceFiles="@(PackageReferenceFiles)" DestinationFolder="$(OutDir)"/> <Copy SourceFiles="@(PackageReferenceFiles)" DestinationFolder="$(OutDir)" />
</Target> </Target>
</Project> </Project>

View File

@ -1,12 +1,12 @@
<Project> <Project>
<Target Name="PreBuild" BeforeTargets="PreBuildEvent"> <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Exec Command="dotnet tool restore" StdOutEncoding="utf-8"/> <Exec Command="dotnet tool restore" StdOutEncoding="utf-8" />
<Exec Condition="!Exists('$(SolutionDir)/assets/res/Ln.resx')" WorkingDirectory="$(SolutionDir)/scripts" <Exec Condition="!Exists('$(SolutionDir)/assets/res/Ln.resx')" WorkingDirectory="$(SolutionDir)/scripts"
Command="dotnet t4 ./gen.resx.tt -o ../assets/res/Ln.resx" Command="dotnet t4 ./gen.resx.tt -o ../assets/res/Ln.resx"
StdOutEncoding="utf-8"/> StdOutEncoding="utf-8" />
<Exec Condition="!Exists('$(SolutionDir)/dist/backend/$(ProjectName)/Ln.cs')" <Exec Condition="!Exists('$(SolutionDir)/dist/backend/$(ProjectName)/Ln.cs')"
WorkingDirectory="$(SolutionDir)/scripts" WorkingDirectory="$(SolutionDir)/scripts"
Command="dotnet t4 ./gen.cs.tt -o ../dist/backend/$(ProjectName)/Ln.cs" Command="dotnet t4 ./gen.cs.tt -o ../dist/backend/$(ProjectName)/Ln.cs"
StdOutEncoding="utf-8"/> StdOutEncoding="utf-8" />
</Target> </Target>
</Project> </Project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -2,6 +2,6 @@
<configuration> <configuration>
<packageSources> <packageSources>
<add key="nuget.cdn.azure.cn" value="https://nuget.cdn.azure.cn/v3/index.json"/> <add key="nuget.cdn.azure.cn" value="https://nuget.cdn.azure.cn/v3/index.json" />
</packageSources> </packageSources>
</configuration> </configuration>

View File

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

1
refs/FreeSql Submodule

Submodule refs/FreeSql added at 6ea7ac8e50

View File

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

View File

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

View File

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

View File

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

View File

@ -1,5 +0,0 @@
#!/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, CreateNoWindow = true,
FileName = "dotnet", FileName = "dotnet",
Arguments = $"jb cleanupcode --include=\"{files}\" --no-build ../NetAdmin.slnx", Arguments = $"jb cleanupcode --include=\"{files}\" --no-build ../NetAdmin.sln",
UseShellExecute = false, UseShellExecute = false,
RedirectStandardOutput = true RedirectStandardOutput = true
} }

View File

@ -1,7 +1,5 @@
#!/usr/bin/env pwsh
npm --prefix ../src/frontend/admin run prettier npm --prefix ../src/frontend/admin run prettier
jb cleanupcode --no-build --include=$( $( git status --porcelain | Where-Object { $_ -match "^\s*[MA]" } | ForEach-Object { $_.TrimStart(" M").TrimStart(" A") } ) -join ";" ) ../NetAdmin.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 rbom -w -e refs -e .git -e node_modules ../
dot trim -w -e refs -e .git -e node_modules ../ dot trim -w -e refs -e .git -e node_modules ../
dot tolf -w -e refs -e .git -e node_modules ../ dot tolf -w -e refs -e .git -e node_modules ../

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 uninstall ../
dotnet new --install ../ dotnet new --install ../

View File

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

View File

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

View File

@ -5,13 +5,18 @@ while (!new[] { "1", "2" }.Contains(input))
Console.WriteLine("1.nuget 2.project"); Console.WriteLine("1.nuget 2.project");
input = Console.ReadLine(); 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 csprojFiles = Directory.GetFiles(@"../src", "*.csproj", new EnumerationOptions { RecurseSubdirectories = true });
var slnContent = File.ReadAllText(slnxFile); var slnContent = File.ReadAllText(slnFile);
if (input == "1") 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) foreach (var csprojFile in csprojFiles)
{ {
var csprojContent = File.ReadAllText(csprojFile); var csprojContent = File.ReadAllText(csprojFile);
@ -22,7 +27,7 @@ if (input == "1")
} }
else else
{ {
slnContent = Regex.Replace(slnContent, "<!--(.*)-->", "$1"); slnContent = Regex.Replace(slnContent, "##", "");
foreach (var csprojFile in csprojFiles) foreach (var csprojFile in csprojFiles)
{ {
var csprojContent = File.ReadAllText(csprojFile); var csprojContent = File.ReadAllText(csprojFile);
@ -34,4 +39,4 @@ else
Console.WriteLine(slnContent); Console.WriteLine(slnContent);
File.WriteAllText(slnxFile, slnContent); File.WriteAllText(slnFile, slnContent);

View File

@ -0,0 +1,77 @@
using System.Text.RegularExpressions;
var slnFile = Directory.GetFiles(@"../", "*.sln").First();
var content = File.ReadAllText(slnFile);
content = Regex.Replace(
content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"meta\", \"meta\", \"{5198A03D-0CAC-4828-A807-34A693F73859}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{5198A03D-0CAC-4828-A807-34A693F73859}"
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../", "*").Where(x => !x.EndsWith(".sln") && !x.EndsWith(".user"))
.Select(x=>$" {Path.GetFileName(x)} = {Path.GetFileName(x)}")
)}}
EndProject
"""
);
content = Regex.Replace(
content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"docker\", \"docker\", \"{E80A1018-C354-4A26-9029-8847BB9DA864}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{E80A1018-C354-4A26-9029-8847BB9DA864}"
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../docker", "*")
.Select(x=>$" {Path.GetFileName(x)} = docker/{Path.GetFileName(x)}")
)}}
EndProject
"""
);
content = Regex.Replace(
content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"workflows\", \"workflows\", \"{3C6F049E-3EE8-4D66-9AFF-E8A369032487}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{3C6F049E-3EE8-4D66-9AFF-E8A369032487}"
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../.github/workflows", "*")
.Select(x=>$" {Path.GetFileName(x)} = .github/workflows/{Path.GetFileName(x)}")
)}}
EndProject
"""
);
content = Regex.Replace(
content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"scripts\", \"scripts\", \"{BB0B25C9-0901-4923-913F-00F9A6B352A5}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B25C9-0901-4923-913F-00F9A6B352A5}"
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../scripts", "*")
.Select(x=>$" {Path.GetFileName(x)} = scripts/{Path.GetFileName(x)}")
)}}
EndProject
"""
);
content = Regex.Replace(
content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"build\", \"build\", \"{8E4C93BA-9493-4892-80C4-5E174C504829}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{8E4C93BA-9493-4892-80C4-5E174C504829}"
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../build", "*")
.Select(x=>$" {Path.GetFileName(x)} = build/{Path.GetFileName(x)}")
)}}
EndProject
"""
);
Console.WriteLine(content);
File.WriteAllText(slnFile, content);

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

View File

@ -8,14 +8,12 @@ namespace NetAdmin.Application.Modules;
/// </summary> /// </summary>
/// <typeparam name="TCreateReq">创建请求类型</typeparam> /// <typeparam name="TCreateReq">创建请求类型</typeparam>
/// <typeparam name="TCreateRsp">创建响应类型</typeparam> /// <typeparam name="TCreateRsp">创建响应类型</typeparam>
/// <typeparam name="TEditReq">编辑请求类型</typeparam>
/// <typeparam name="TQueryReq">查询请求类型</typeparam> /// <typeparam name="TQueryReq">查询请求类型</typeparam>
/// <typeparam name="TQueryRsp">查询响应类型</typeparam> /// <typeparam name="TQueryRsp">查询响应类型</typeparam>
/// <typeparam name="TDelReq">删除请求类型</typeparam> /// <typeparam name="TDelReq">删除请求类型</typeparam>
public interface ICrudModule<in TCreateReq, TCreateRsp, in TEditReq, TQueryReq, TQueryRsp, TDelReq> public interface ICrudModule<in TCreateReq, TCreateRsp, TQueryReq, TQueryRsp, TDelReq>
where TCreateReq : DataAbstraction, new() where TCreateReq : DataAbstraction, new()
where TCreateRsp : DataAbstraction where TCreateRsp : DataAbstraction
where TEditReq : DataAbstraction, new()
where TQueryReq : DataAbstraction, new() where TQueryReq : DataAbstraction, new()
where TQueryRsp : DataAbstraction where TQueryRsp : DataAbstraction
where TDelReq : DataAbstraction, new() where TDelReq : DataAbstraction, new()
@ -30,11 +28,6 @@ public interface ICrudModule<in TCreateReq, TCreateRsp, in TEditReq, TQueryReq,
/// </summary> /// </summary>
Task<long> CountAsync(QueryReq<TQueryReq> req); Task<long> CountAsync(QueryReq<TQueryReq> req);
/// <summary>
/// 实体分组计数
/// </summary>
Task<IOrderedEnumerable<KeyValuePair<IImmutableDictionary<string, string>, int>>> CountByAsync(QueryReq<TQueryReq> req);
/// <summary> /// <summary>
/// 创建实体 /// 创建实体
/// </summary> /// </summary>
@ -46,9 +39,9 @@ public interface ICrudModule<in TCreateReq, TCreateRsp, in TEditReq, TQueryReq,
Task<int> DeleteAsync(TDelReq req); Task<int> DeleteAsync(TDelReq req);
/// <summary> /// <summary>
/// 编辑实体 /// 判断实体是否存在
/// </summary> /// </summary>
Task<TQueryRsp> EditAsync(TEditReq req); Task<bool> ExistAsync(QueryReq<TQueryReq> req);
/// <summary> /// <summary>
/// 导出实体 /// 导出实体

View File

@ -7,7 +7,6 @@ namespace NetAdmin.Application.Modules.Tpl;
/// 示例模块 /// 示例模块
/// </summary> /// </summary>
public interface IExampleModule : ICrudModule<CreateExampleReq, QueryExampleRsp // 创建类型 public interface IExampleModule : ICrudModule<CreateExampleReq, QueryExampleRsp // 创建类型
, EditExampleReq // 编辑类型
, QueryExampleReq, QueryExampleRsp // 查询类型 , QueryExampleReq, QueryExampleRsp // 查询类型
, DelReq // 删除类型 , DelReq // 删除类型
>; >;

View File

@ -2,11 +2,9 @@ using CsvHelper;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
using NetAdmin.Application.Repositories; using NetAdmin.Application.Repositories;
using NetAdmin.Domain; using NetAdmin.Domain;
using NetAdmin.Domain.Contexts;
using NetAdmin.Domain.DbMaps.Dependency; using NetAdmin.Domain.DbMaps.Dependency;
using NetAdmin.Domain.DbMaps.Dependency.Fields; using NetAdmin.Domain.DbMaps.Dependency.Fields;
using NetAdmin.Domain.Dto.Dependency; using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Extensions;
namespace NetAdmin.Application.Services; namespace NetAdmin.Application.Services;
@ -49,16 +47,17 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
/// 导出实体 /// 导出实体
/// </summary> /// </summary>
protected static async Task<IActionResult> ExportAsync<TQuery, TExport>( // 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<QueryReq<TQuery>, ISelect<TEntity>> selector, QueryReq<TQuery> query, string fileName, Expression<Func<TEntity, object>> listExp = null)
, Func<object, object> listHandle = null)
where TQuery : DataAbstraction, new() where TQuery : DataAbstraction, new()
{ {
var select = selector(query).WithNoLockNoWait().Take(Numbers.MAX_LIMIT_EXPORT); var select = selector(query)
#if DBTYPE_SQLSERVER
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
#endif
.Take(Numbers.MAX_LIMIT_EXPORT);
object list = listExp == null ? await select.ToListAsync().ConfigureAwait(false) : await select.ToListAsync(listExp).ConfigureAwait(false); object list = listExp == null ? await select.ToListAsync().ConfigureAwait(false) : await select.ToListAsync(listExp).ConfigureAwait(false);
list = listHandle?.Invoke(list) ?? list;
return await GetExportFileStreamAsync<TExport>(fileName, list).ConfigureAwait(false); return await GetExportFileStreamAsync<TExport>(fileName, list).ConfigureAwait(false);
} }
@ -71,24 +70,19 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
/// <param name="whereExp">查询表达式</param> /// <param name="whereExp">查询表达式</param>
/// <param name="whereSql">查询sql</param> /// <param name="whereSql">查询sql</param>
/// <param name="ignoreVersion">是否忽略版本锁</param> /// <param name="ignoreVersion">是否忽略版本锁</param>
/// <param name="disableGlobalDataFilter">是否忽略全局数据权限过滤</param>
/// <returns>更新行数</returns> /// <returns>更新行数</returns>
protected Task<int> UpdateAsync( // protected Task<int> UpdateAsync( //
TEntity newValue // TEntity newValue //
, List<string> includeFields = null // , IEnumerable<string> includeFields //
, List<string> excludeFields = null // , string[] excludeFields = null //
, Expression<Func<TEntity, bool>> whereExp = null // , Expression<Func<TEntity, bool>> whereExp = null //
, string whereSql = null // , string whereSql = null //
, bool ignoreVersion = false, bool disableGlobalDataFilter = false) , bool ignoreVersion = false)
{ {
// 默认匹配主键 // 默认匹配主键
whereExp ??= a => a.Id.Equals(newValue.Id); whereExp ??= a => a.Id.Equals(newValue.Id);
var update = BuildUpdate(newValue, includeFields, excludeFields, ignoreVersion).Where(whereExp).Where(whereSql); var update = BuildUpdate(newValue, includeFields, excludeFields, ignoreVersion).Where(whereExp).Where(whereSql);
if (disableGlobalDataFilter) { return update.ExecuteAffrowsAsync();
update = update.DisableGlobalFilter(nameof(Chars.FLG_FREE_SQL_GLOBAL_FILTER_DATA));
}
return update.ExecuteEffectsAsync();
} }
#if DBTYPE_SQLSERVER #if DBTYPE_SQLSERVER
@ -104,10 +98,10 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
/// <returns>更新后的实体列表</returns> /// <returns>更新后的实体列表</returns>
protected Task<List<TEntity>> UpdateReturnListAsync( // protected Task<List<TEntity>> UpdateReturnListAsync( //
TEntity newValue // TEntity newValue //
, List<string> includeFields = null // , IEnumerable<string> includeFields //
, List<string> excludeFields = null // , string[] excludeFields = null //
, Expression<Func<TEntity, bool>> whereExp = null // , Expression<Func<TEntity, bool>> whereExp = null //
, string whereSql = null // , string whereSql = null //
, bool ignoreVersion = false) , bool ignoreVersion = false)
{ {
// 默认匹配主键 // 默认匹配主键
@ -142,44 +136,22 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM);
} }
private static Dictionary<string, object> IncludeToDictionary(TEntity entity, List<string> includeFields) private IUpdate<TEntity> BuildUpdate( //
TEntity entity //
, IEnumerable<string> includeFields //
, string[] excludeFields = null //
, bool ignoreVersion = false)
{ {
var ret = includeFields!.ToDictionary( var updateExp = includeFields == null
x => x, x => typeof(TEntity).GetProperty(x, BindingFlags.Public | BindingFlags.Instance)!.GetValue(entity)); ? Rpo.UpdateDiy.SetSource(entity)
: Rpo.UpdateDiy.SetDto(includeFields!.ToDictionary(
// ReSharper disable once ConvertIfStatementToSwitchStatement x => x, x => typeof(TEntity).GetProperty(x, BindingFlags.Public | BindingFlags.Instance)!.GetValue(entity)));
if (entity is IFieldModifiedUser) { if (excludeFields != null) {
var userInfo = App.GetService<ContextUserInfo>(); updateExp = updateExp.IgnoreColumns(excludeFields);
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 (!ignoreVersion && entity is IFieldVersion ver) {
if (entity is IFieldModifiedClientIp) { updateExp = updateExp.Where($"{nameof(IFieldVersion.Version)} = @version", new { version = ver.Version });
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;
if (includeFields.NullOrEmpty()) {
updateExp = Rpo.UpdateDiy.SetSource(entity);
if (!excludeFields.NullOrEmpty()) {
updateExp = updateExp.IgnoreColumns(excludeFields.ToArray());
}
}
else {
updateExp = Rpo.UpdateDiy.SetDto(IncludeToDictionary(entity, includeFields));
if (!ignoreVersion && entity is IFieldVersion ver) {
updateExp = updateExp.Where($"{nameof(IFieldVersion.Version)} = {ver.Version}");
}
} }
return updateExp; return updateExp;

View File

@ -10,7 +10,7 @@ public abstract class ServiceBase<TLogger> : ServiceBase
/// </summary> /// </summary>
protected ServiceBase() // protected ServiceBase() //
{ {
Logger = S<ILogger<TLogger>>(); Logger = App.GetService<ILogger<TLogger>>();
} }
/// <summary> /// <summary>
@ -29,7 +29,7 @@ public abstract class ServiceBase : IScoped, IService
/// </summary> /// </summary>
protected ServiceBase() protected ServiceBase()
{ {
UserToken = S<ContextUserToken>(); UserToken = App.GetService<ContextUserToken>();
ServiceId = Guid.NewGuid(); ServiceId = Guid.NewGuid();
} }
@ -38,19 +38,4 @@ public abstract class ServiceBase : IScoped, IService
/// <inheritdoc /> /// <inheritdoc />
public ContextUserToken UserToken { get; set; } 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

@ -3,7 +3,6 @@ using NetAdmin.Application.Services.Tpl.Dependency;
using NetAdmin.Domain.DbMaps.Tpl; using NetAdmin.Domain.DbMaps.Tpl;
using NetAdmin.Domain.Dto.Dependency; using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example; using NetAdmin.Domain.Dto.Tpl.Example;
using NetAdmin.Domain.Extensions;
namespace NetAdmin.Application.Services.Tpl; namespace NetAdmin.Application.Services.Tpl;
@ -29,23 +28,11 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
public Task<long> CountAsync(QueryReq<QueryExampleReq> req) public Task<long> CountAsync(QueryReq<QueryExampleReq> req)
{ {
req.ThrowIfInvalid(); req.ThrowIfInvalid();
return QueryInternal(req).WithNoLockNoWait().CountAsync(); return QueryInternal(req)
} #if DBTYPE_SQLSERVER
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
/// <inheritdoc /> #endif
public async Task<IOrderedEnumerable<KeyValuePair<IImmutableDictionary<string, string>, int>>> CountByAsync(QueryReq<QueryExampleReq> req) .CountAsync();
{
req.ThrowIfInvalid();
var ret = await QueryInternal(req with { Order = Orders.None })
.WithNoLockNoWait()
.GroupBy(req.GetToListExp<Tpl_Example>())
.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())
, x.Value))
.Where(x => x.Key.Any(y => !y.Value.NullOrEmpty()))
.OrderByDescending(x => x.Value);
} }
/// <inheritdoc /> /// <inheritdoc />
@ -64,14 +51,14 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
} }
/// <inheritdoc /> /// <inheritdoc />
public async Task<QueryExampleRsp> EditAsync(EditExampleReq req) public Task<bool> ExistAsync(QueryReq<QueryExampleReq> req)
{ {
req.ThrowIfInvalid(); req.ThrowIfInvalid();
#if DBTYPE_SQLSERVER return QueryInternal(req)
return (await UpdateReturnListAsync(req).ConfigureAwait(false)).FirstOrDefault()?.Adapt<QueryExampleRsp>(); #if DBTYPE_SQLSERVER
#else .WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
return await UpdateAsync(req).ConfigureAwait(false) > 0 ? await GetAsync(new QueryExampleReq { Id = req.Id }).ConfigureAwait(false) : null; #endif
#endif .AnyAsync();
} }
/// <inheritdoc /> /// <inheritdoc />
@ -95,9 +82,11 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
req.ThrowIfInvalid(); req.ThrowIfInvalid();
var list = await QueryInternal(req) var list = await QueryInternal(req)
.Page(req.Page, req.PageSize) .Page(req.Page, req.PageSize)
.WithNoLockNoWait() #if DBTYPE_SQLSERVER
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
#endif
.Count(out var total) .Count(out var total)
.ToListAsync(req) .ToListAsync()
.ConfigureAwait(false); .ConfigureAwait(false);
return new PagedQueryRsp<QueryExampleRsp>(req.Page, req.PageSize, total, list.Adapt<IEnumerable<QueryExampleRsp>>()); return new PagedQueryRsp<QueryExampleRsp>(req.Page, req.PageSize, total, list.Adapt<IEnumerable<QueryExampleRsp>>());
@ -107,7 +96,13 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
public async Task<IEnumerable<QueryExampleRsp>> QueryAsync(QueryReq<QueryExampleReq> req) public async Task<IEnumerable<QueryExampleRsp>> QueryAsync(QueryReq<QueryExampleReq> req)
{ {
req.ThrowIfInvalid(); req.ThrowIfInvalid();
var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync(req).ConfigureAwait(false); var ret = await QueryInternal(req)
#if DBTYPE_SQLSERVER
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
#endif
.Take(req.Count)
.ToListAsync()
.ConfigureAwait(false);
return ret.Adapt<IEnumerable<QueryExampleRsp>>(); return ret.Adapt<IEnumerable<QueryExampleRsp>>();
} }

View File

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

View File

@ -21,12 +21,6 @@ public sealed class ExampleCache(IDistributedCache cache, IExampleService servic
return Service.CountAsync(req); return Service.CountAsync(req);
} }
/// <inheritdoc />
public Task<IOrderedEnumerable<KeyValuePair<IImmutableDictionary<string, string>, int>>> CountByAsync(QueryReq<QueryExampleReq> req)
{
return Service.CountByAsync(req);
}
/// <inheritdoc /> /// <inheritdoc />
public Task<QueryExampleRsp> CreateAsync(CreateExampleReq req) public Task<QueryExampleRsp> CreateAsync(CreateExampleReq req)
{ {
@ -40,9 +34,9 @@ public sealed class ExampleCache(IDistributedCache cache, IExampleService servic
} }
/// <inheritdoc /> /// <inheritdoc />
public Task<QueryExampleRsp> EditAsync(EditExampleReq req) public Task<bool> ExistAsync(QueryReq<QueryExampleReq> req)
{ {
return Service.EditAsync(req); return Service.ExistAsync(req);
} }
/// <inheritdoc /> /// <inheritdoc />

View File

@ -11,8 +11,7 @@ public sealed class ApiIdAttribute : ValidationAttribute
/// <inheritdoc /> /// <inheritdoc />
protected override ValidationResult IsValid(object value, ValidationContext validationContext) protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{ {
var service = App.GetService( var service = App.GetService(App.EffectiveTypes.Single(x => x.FullName == "NetAdmin.SysComponent.Cache.Sys.Dependency.IApiCache"));
App.EffectiveTypes.Single(x => x.FullName == "NetAdmin.SysComponent.Application.Services.Sys.Dependency.IApiService"));
var req = new QueryReq<QueryApiReq> { Filter = new QueryApiReq { Id = value as string } }; var req = new QueryReq<QueryApiReq> { Filter = new QueryApiReq { Id = value as string } };

View File

@ -11,8 +11,7 @@ public sealed class UserIdAttribute : ValidationAttribute
/// <inheritdoc /> /// <inheritdoc />
protected override ValidationResult IsValid(object value, ValidationContext validationContext) protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{ {
var service = App.GetService( var service = App.GetService(App.EffectiveTypes.Single(x => x.FullName == "NetAdmin.SysComponent.Cache.Sys.Dependency.IUserCache"));
App.EffectiveTypes.Single(x => x.FullName == "NetAdmin.SysComponent.Application.Services.Sys.Dependency.IUserService"));
var req = new QueryReq<QueryUserReq> { Filter = new QueryUserReq { Id = (long)value! } }; var req = new QueryReq<QueryUserReq> { Filter = new QueryUserReq { Id = (long)value! } };

View File

@ -1,24 +0,0 @@
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
{
/// <summary>
/// 状态指示
/// </summary>
public string Indicate { get; } = indicate;
/// <summary>
/// 脉动
/// </summary>
public bool Pulse { get; } = pulse;
/// <summary>
/// 排序值
/// </summary>
public int Sort { get; } = sort;
}

View File

@ -0,0 +1,14 @@
namespace NetAdmin.Domain.Attributes;
/// <summary>
/// 标记一个枚举的状态指示
/// </summary>
/// <inheritdoc />
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
public sealed class IndicatorAttribute(string indicate) : Attribute
{
/// <summary>
/// 状态指示
/// </summary>
public string Indicate { get; } = indicate;
}

View File

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

View File

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

View File

@ -25,7 +25,7 @@ public abstract record ImmutableEntity<T> : LiteImmutableEntity<T>, IFieldCreate
[Column(CanUpdate = false, Position = -1)] [Column(CanUpdate = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual long? CreatedUserId { get; init; } public long? CreatedUserId { get; init; }
/// <summary> /// <summary>
/// 创建者用户名 /// 创建者用户名

View File

@ -47,7 +47,7 @@ public abstract record MutableEntity<T> : LiteMutableEntity<T>, IFieldCreatedUse
[Column(CanInsert = false, Position = -1)] [Column(CanInsert = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual long? ModifiedUserId { get; init; } public long? ModifiedUserId { get; init; }
/// <summary> /// <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)] [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [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] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_RoleApi))] [Navigate(ManyToMany = typeof(Sys_RoleApi))]
public IReadOnlyCollection<Sys_Role> Roles { get; init; } public ICollection<Sys_Role> Roles { get; init; }
/// <summary> /// <summary>
/// 服务描述 /// 服务描述

View File

@ -6,14 +6,6 @@ namespace NetAdmin.Domain.DbMaps.Sys;
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_Config))] [Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_Config))]
public record Sys_Config : VersionEntity, IFieldEnabled public record Sys_Config : VersionEntity, IFieldEnabled
{ {
/// <summary>
/// 人民币兑点数比率
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual int CnyToPointRate { get; init; }
/// <summary> /// <summary>
/// 是否启用 /// 是否启用
/// </summary> /// </summary>
@ -22,38 +14,6 @@ public record Sys_Config : VersionEntity, IFieldEnabled
[JsonIgnore] [JsonIgnore]
public virtual bool Enabled { get; init; } 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>
/// 用户注册是否需要人工确认 /// 用户注册是否需要人工确认
/// </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] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_RoleDept))] [Navigate(ManyToMany = typeof(Sys_RoleDept))]
public IReadOnlyCollection<Sys_Role> Roles { get; init; } public ICollection<Sys_Role> Roles { get; init; }
/// <summary> /// <summary>
/// 发送给此部门的站内信集合 /// 发送给此部门的站内信集合
@ -52,7 +52,7 @@ public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_SiteMsgDept))] [Navigate(ManyToMany = typeof(Sys_SiteMsgDept))]
public IReadOnlyCollection<Sys_SiteMsg> SiteMsgs { get; init; } public ICollection<Sys_SiteMsg> SiteMsgs { get; init; }
/// <summary> /// <summary>
/// 排序值,越大越前 /// 排序值,越大越前

View File

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

View File

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

View File

@ -11,7 +11,11 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner
/// <summary> /// <summary>
/// 文档正文 /// 文档正文
/// </summary> /// </summary>
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] #if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string Body { get; init; } public virtual string Body { get; init; }
@ -41,7 +45,7 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner
public virtual bool Enabled { get; init; } public virtual bool Enabled { get; init; }
/// <summary> /// <summary>
/// 归属用户 /// 拥有者
/// </summary> /// </summary>
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
@ -49,7 +53,7 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner
public Sys_User Owner { get; init; } public Sys_User Owner { get; init; }
/// <summary> /// <summary>
/// 归属部门编号 /// 拥有者部门编号
/// </summary> /// </summary>
[Column] [Column]
[CsvIgnore] [CsvIgnore]
@ -57,7 +61,7 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner
public virtual long? OwnerDeptId { get; init; } public virtual long? OwnerDeptId { get; init; }
/// <summary> /// <summary>
/// 归属用户编号 /// 拥有者用户编号
/// </summary> /// </summary>
[Column] [Column]
[CsvIgnore] [CsvIgnore]

View File

@ -59,10 +59,10 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary
/// <summary> /// <summary>
/// 上次执行状态 /// 上次执行状态
/// </summary> /// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_SMALL_INT)] [Column]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public int? LastStatusCode { get; init; } public HttpStatusCode? LastStatusCode { get; init; }
/// <summary> /// <summary>
/// 下次执行时间 /// 下次执行时间
@ -99,7 +99,11 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary
/// <summary> /// <summary>
/// 请求体 /// 请求体
/// </summary> /// </summary>
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] #if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string RequestBody { get; init; } public virtual string RequestBody { get; init; }
@ -107,7 +111,11 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary
/// <summary> /// <summary>
/// 请求头 /// 请求头
/// </summary> /// </summary>
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] #if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string RequestHeader { get; init; } public virtual string RequestHeader { get; init; }
@ -115,7 +123,11 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary
/// <summary> /// <summary>
/// 请求的网络地址 /// 请求的网络地址
/// </summary> /// </summary>
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] #if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string RequestUrl { get; init; } public virtual string RequestUrl { get; init; }
@ -131,7 +143,11 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary
/// <summary> /// <summary>
/// 备注 /// 备注
/// </summary> /// </summary>
#if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string Summary { get; init; } public virtual string Summary { get; init; }

View File

@ -35,7 +35,7 @@ public record Sys_JobRecord : LiteImmutableEntity
public int HttpStatusCode { get; init; } public int HttpStatusCode { get; init; }
/// <summary> /// <summary>
/// 归属信息 /// 拥有者信息
/// </summary> /// </summary>
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
@ -53,7 +53,11 @@ public record Sys_JobRecord : LiteImmutableEntity
/// <summary> /// <summary>
/// 请求体 /// 请求体
/// </summary> /// </summary>
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] #if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string RequestBody { get; init; } public virtual string RequestBody { get; init; }
@ -61,7 +65,11 @@ public record Sys_JobRecord : LiteImmutableEntity
/// <summary> /// <summary>
/// 请求头 /// 请求头
/// </summary> /// </summary>
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] #if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string RequestHeader { get; init; } public virtual string RequestHeader { get; init; }
@ -77,7 +85,11 @@ public record Sys_JobRecord : LiteImmutableEntity
/// <summary> /// <summary>
/// 响应体 /// 响应体
/// </summary> /// </summary>
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] #if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string ResponseBody { get; init; } public virtual string ResponseBody { get; init; }
@ -85,7 +97,11 @@ public record Sys_JobRecord : LiteImmutableEntity
/// <summary> /// <summary>
/// 响应头 /// 响应头
/// </summary> /// </summary>
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] #if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string ResponseHeader { get; init; } public virtual string ResponseHeader { get; init; }

View File

@ -28,7 +28,11 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
/// <summary> /// <summary>
/// 创建者客户端用户代理 /// 创建者客户端用户代理
/// </summary> /// </summary>
#if DBTYPE_SQLSERVER
[Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_1022)] [Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_1022)]
#else
[Column(Position = -1, DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string CreatedUserAgent { get; init; } public virtual string CreatedUserAgent { get; init; }
@ -66,7 +70,7 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
public virtual string LoginUserName { get; protected init; } public virtual string LoginUserName { get; protected init; }
/// <summary> /// <summary>
/// 归属用户 /// 拥有者
/// </summary> /// </summary>
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
@ -74,7 +78,7 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
public Sys_User Owner { get; init; } public Sys_User Owner { get; init; }
/// <summary> /// <summary>
/// 归属部门编号 /// 拥有者部门编号
/// </summary> /// </summary>
[Column] [Column]
[CsvIgnore] [CsvIgnore]
@ -82,7 +86,7 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
public virtual long? OwnerDeptId { get; init; } public virtual long? OwnerDeptId { get; init; }
/// <summary> /// <summary>
/// 归属用户编号 /// 拥有者用户编号
/// </summary> /// </summary>
[Column] [Column]
[CsvIgnore] [CsvIgnore]
@ -92,7 +96,11 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
/// <summary> /// <summary>
/// 请求内容 /// 请求内容
/// </summary> /// </summary>
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] #if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string RequestBody { get; protected init; } public virtual string RequestBody { get; protected init; }
@ -100,7 +108,11 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
/// <summary> /// <summary>
/// 请求头信息 /// 请求头信息
/// </summary> /// </summary>
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] #if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string RequestHeaders { get; protected init; } public virtual string RequestHeaders { get; protected init; }
@ -116,7 +128,11 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
/// <summary> /// <summary>
/// 响应内容 /// 响应内容
/// </summary> /// </summary>
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] #if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string ResponseBody { get; protected init; } public virtual string ResponseBody { get; protected init; }
@ -124,7 +140,11 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
/// <summary> /// <summary>
/// 响应头 /// 响应头
/// </summary> /// </summary>
[Column(DbType = Chars.FLGL_DB_FIELD_TYPE_VARCHAR_MAX)] #if DBTYPE_SQLSERVER
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_MAX)]
#else
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
#endif
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string ResponseHeaders { get; protected init; } public virtual string ResponseHeaders { get; protected init; }

View File

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

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