😎初始化

This commit is contained in:
zuohuaijun 2024-06-15 13:02:35 +08:00
parent fbc6d7223c
commit 5074b67f65
1283 changed files with 147232 additions and 11 deletions

45
.gitignore vendored Normal file
View File

@ -0,0 +1,45 @@
# Build and Release Folders
bin-debug/
bin-release/
[Oo]bj/
[Bb]in/
# Other files and folders
.settings/
# Executables
*.swf
*.air
*.ipa
*.apk
# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
# should NOT be excluded as they contain compiler settings and other important
# information for Eclipse / Flash Builder.
/Admin.NET/.vs
/Admin.NET/packages
/Admin.NET/Admin.NET.Web.Entry/wwwroot/Upload
/Admin.NET/Admin.NET.Web.Entry/wwwroot/Avatar
/Admin.NET/Admin.NET.Web.Entry/wwwroot/Signature
/Admin.NET/Admin.NET.Web.Entry/wwwroot/CodeGen
/Admin.NET/Admin.NET.Web.Entry/wwwroot/is-cache
/Admin.NET/Admin.NET.Web.Core/Admin.NET.Web.Core.csproj.user
/Admin.NET/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj.user
/Admin.NET/Admin.NET.Web.Entry/Properties/PublishProfiles
/Admin.NET/Admin.NET.Web.Entry/publish
/Admin.NET/Admin.NET.Web.Entry/logs
/Admin.NET/Admin.NET.Web.Entry/Admin.NET.db
# folders
dist/
node_modules/
/Web/package-lock.json
/Web/public/config.js
/Web/stats.html
/Web/npminstall-debug.log
.vs
.idea
.DS_Store
/Admin.NET/.vs
/Admin.NET.App/unpackage
/App/unpackage

25
Admin.NET/.dockerignore Normal file
View File

@ -0,0 +1,25 @@
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md

178
Admin.NET/.editorconfig Normal file
View File

@ -0,0 +1,178 @@
[*.cs]
#### 命名样式 ####
# 命名规则
dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
# 符号规范
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.required_modifiers =
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.non_field_members.required_modifiers =
# 命名样式
dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix =
dotnet_naming_style.begins_with_i.word_separator =
dotnet_naming_style.begins_with_i.capitalization = pascal_case
dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
csharp_using_directive_placement = outside_namespace:silent
csharp_style_expression_bodied_methods = false:silent
csharp_style_expression_bodied_constructors = false:silent
csharp_style_expression_bodied_operators = false:silent
csharp_style_expression_bodied_properties = true:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_accessors = true:silent
csharp_style_expression_bodied_lambdas = true:silent
csharp_style_expression_bodied_local_functions = false:silent
csharp_style_conditional_delegate_call = true:suggestion
csharp_style_var_for_built_in_types = false:silent
csharp_style_var_when_type_is_apparent = false:silent
csharp_style_var_elsewhere = false:silent
csharp_prefer_simple_using_statement = true:suggestion
csharp_prefer_braces = true:silent
csharp_style_namespace_declarations = file_scoped:silent
csharp_style_prefer_top_level_statements = true:silent
csharp_style_prefer_method_group_conversion = true:silent
csharp_prefer_static_local_function = true:suggestion
csharp_style_allow_embedded_statements_on_same_line_experimental = true:silent
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true:silent
csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true:silent
csharp_style_prefer_switch_expression = true:suggestion
csharp_style_prefer_pattern_matching = true:silent
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
csharp_style_prefer_not_pattern = true:suggestion
csharp_style_prefer_extended_property_pattern = true:suggestion
csharp_style_throw_expression = true:suggestion
csharp_style_prefer_null_check_over_type_check = true:suggestion
csharp_prefer_simple_default_expression = true:suggestion
csharp_style_prefer_local_over_anonymous_function = true:suggestion
csharp_style_prefer_index_operator = true:suggestion
csharp_style_prefer_range_operator = true:suggestion
csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion
csharp_style_prefer_tuple_swap = true:suggestion
csharp_style_prefer_utf8_string_literals = true:suggestion
csharp_style_inlined_variable_declaration = true:suggestion
csharp_style_deconstructed_variable_declaration = true:suggestion
csharp_style_unused_value_assignment_preference = discard_variable:suggestion
csharp_style_unused_value_expression_statement_preference = discard_variable:silent
csharp_space_around_binary_operators = before_and_after
csharp_indent_labels = one_less_than_current
[*.vb]
#### 命名样式 ####
# 命名规则
dotnet_naming_rule.interface_should_be_以_i_开始.severity = suggestion
dotnet_naming_rule.interface_should_be_以_i_开始.symbols = interface
dotnet_naming_rule.interface_should_be_以_i_开始.style = 以_i_开始
dotnet_naming_rule.类型_should_be_帕斯卡拼写法.severity = suggestion
dotnet_naming_rule.类型_should_be_帕斯卡拼写法.symbols = 类型
dotnet_naming_rule.类型_should_be_帕斯卡拼写法.style = 帕斯卡拼写法
dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.severity = suggestion
dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.symbols = 非字段成员
dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.style = 帕斯卡拼写法
# 符号规范
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected
dotnet_naming_symbols.interface.required_modifiers =
dotnet_naming_symbols.类型.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.类型.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected
dotnet_naming_symbols.类型.required_modifiers =
dotnet_naming_symbols.非字段成员.applicable_kinds = property, event, method
dotnet_naming_symbols.非字段成员.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected
dotnet_naming_symbols.非字段成员.required_modifiers =
# 命名样式
dotnet_naming_style.以_i_开始.required_prefix = I
dotnet_naming_style.以_i_开始.required_suffix =
dotnet_naming_style.以_i_开始.word_separator =
dotnet_naming_style.以_i_开始.capitalization = pascal_case
dotnet_naming_style.帕斯卡拼写法.required_prefix =
dotnet_naming_style.帕斯卡拼写法.required_suffix =
dotnet_naming_style.帕斯卡拼写法.word_separator =
dotnet_naming_style.帕斯卡拼写法.capitalization = pascal_case
dotnet_naming_style.帕斯卡拼写法.required_prefix =
dotnet_naming_style.帕斯卡拼写法.required_suffix =
dotnet_naming_style.帕斯卡拼写法.word_separator =
dotnet_naming_style.帕斯卡拼写法.capitalization = pascal_case
[*.{cs,vb}]
end_of_line = crlf
dotnet_style_qualification_for_field = false:silent
dotnet_style_qualification_for_property = false:silent
dotnet_style_qualification_for_method = false:silent
dotnet_style_qualification_for_event = false:silent
dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent
dotnet_code_quality_unused_parameters = all:suggestion
dotnet_style_readonly_field = true:suggestion
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
dotnet_style_allow_multiple_blank_lines_experimental = true:silent
dotnet_style_allow_statement_immediately_after_block_experimental = true:silent
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
dotnet_style_prefer_auto_properties = true:silent
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
dotnet_style_prefer_conditional_expression_over_return = true:silent
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_compound_assignment = true:suggestion
dotnet_style_prefer_simplified_interpolation = true:suggestion
dotnet_style_namespace_match_folder = true:suggestion
dotnet_style_predefined_type_for_locals_parameters_members = true:silent
dotnet_style_predefined_type_for_member_access = true:silent
indent_size = 4
tab_width = 4
dotnet_style_operator_placement_when_wrapping = beginning_of_line
# Add copyright file header
file_header_template = Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。\n\n本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。\n\n不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动任何基于本项目二次开发而产生的一切法律纠纷和责任我们不承担任何责任

View File

@ -0,0 +1,43 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net6.0;net8.0</TargetFrameworks>
<NoWarn>1701;1702;1591;8632</NoWarn>
<DocumentationFile></DocumentationFile>
<ImplicitUsings>enable</ImplicitUsings>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<Nullable>disable</Nullable>
<Copyright>Admin.NET</Copyright>
<Description>Admin.NET 通用权限开发平台</Description>
</PropertyGroup>
<ItemGroup>
<Content Include="Configuration\**\*">
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Include="wwwroot\**\*">
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<Compile Remove="App\**" />
<EmbeddedResource Remove="App\**" />
<None Remove="App\**" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Admin.NET.Core\Admin.NET.Core.csproj" />
<ProjectReference Include="..\Plugins\Admin.NET.Plugin.GoView\Admin.NET.Plugin.GoView.csproj" />
<ProjectReference Include="..\Plugins\Admin.NET.Plugin.ReZero\Admin.NET.Plugin.ReZero.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="Service\App\Auth\Dto\" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,34 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"APIJSON": {
"Roles": [
{
"RoleName": "Role1", //
"Select": { //
"Table": [ "*" ], //
"Column": [ "*" ], //
"Filter": []
},
"Insert": { //
"Table": [ "table1", "table2", "table3" ],
"Column": [ "*", "*", "tb.*" ]
},
"Update": { //
"Table": [ "table1", "table2", "table3" ],
"Column": [ "*", "tb.*", "tb.*" ]
},
"Delete": { //
"Table": [ "table1", "table2", "table3" ]
}
},
{
"RoleName": "Role2",
"Select": {
"Table": [ "table1" ],
"Column": [ "tb.*" ]
}
}
]
}
}

View File

@ -0,0 +1,52 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"Urls": "http://*:5005", //
// "https_port": 44325,
"AllowedHosts": "*",
"AppSettings": {
"InjectSpecificationDocument": true, // Swagger
"ExternalAssemblies": [ "plugins" ] //
},
"DynamicApiControllerSettings": {
//"DefaultRoutePrefix": "api", //
"CamelCaseSeparator": "", //
"SplitCamelCase": false, // ()/
"LowercaseRoute": false, //
"AsLowerCamelCase": true, //
"KeepVerb": false, //
"KeepName": false //
},
"FriendlyExceptionSettings": {
"DefaultErrorMessage": "系统异常,请联系管理员",
"ThrowBah": true, // Oops.Oh
"LogError": false //
},
"LocalizationSettings": {
"SupportedCultures": [ "zh-CN", "en" ], //
"DefaultCulture": "zh-CN", //
"DateTimeFormatCulture": "zh-CN" //
},
"CorsAccessorSettings": {
//"PolicyName": "App.Cors.Policy",
//"WithOrigins": [ "http://localhost:5005", "https://gitee.com" ],
"WithExposedHeaders": [ "Content-Disposition", "X-Pagination", "access-token", "x-access-token" ], // axios
"SignalRSupport": true // SignalR
},
"SnowId": {
"WorkerId": 1, //
"WorkerIdBitLength": 6, // 6 [1, 19]
"SeqBitLength": 6, // 6 [3, 21]4Id
"WorkerPrefix": "adminnet_" //
},
"Cryptogram": {
"StrongPassword": false, //
"PasswordStrengthValidation": "(?=^.{6,16}$)(?=.*\\d)(?=.*\\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\\n).*$", // 6-16
"PasswordStrengthValidationMsg": "密码必须包含大小写字母、数字和特殊字符的组合长度在6-16之间", //
"CryptoType": "SM2", // MD5SM2SM4
"PublicKey": "04851D329AA3E38C2E7670AFE70E6E70E92F8769CA27C8766B12209A0FFBA4493B603EF7A0B9B1E16F0E8930C0406EA0B179B68DF28E25334BDEC4AE76D907E9E9", //
"PrivateKey": "3A61D1D30C6302DABFF36201D936D0143EEF0C850AF28C5CA6D5C045AF8C5C8A" //
}
}

View File

@ -0,0 +1,35 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"Cache": {
"Prefix": "adminnet_", //
"CacheType": "Memory", // MemoryRedis
"Redis": {
"Configuration": "server=127.0.0.1:6379;password=;db=5;", // Redis
"Prefix": "adminnet_", // Redis
"MaxMessageSize": "1048576" // 1024 * 1024
}
},
"Cluster": { //
"Enabled": false, // Redis
"ServerId": "adminnet", //
"ServerIp": "", // IP
"SignalR": {
"RedisConfiguration": "127.0.0.1:6379,ssl=false,password=,defaultDatabase=5",
"ChannelPrefix": "signalrPrefix_"
},
"DataProtecteKey": "AdminNet:DataProtection-Keys",
"IsSentinel": false, //
"SentinelConfig": {
"DefaultDb": "4",
"EndPoints": [ //
// "10.10.0.124:26380"
],
"MainPrefix": "adminNet:",
"Password": "123456",
"SentinelPassword": "adminNet",
"ServiceName": "adminNet",
"SignalRChannelPrefix": "signalR:"
}
}
}

View File

@ -0,0 +1,28 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"CaptchaOptions": {
"CaptchaType": 10, // 01234567891011
"CodeLength": 1, // , CaptchaType , 2
"ExpirySeconds": 60, //
"IgnoreCase": true, //
"StoreageKeyPrefix": "", //
"ImageOption": {
"Animation": true, //
"FontSize": 36, //
"Width": 150, //
"Height": 50, //
"BubbleMinRadius": 5, //
"BubbleMaxRadius": 10, //
"BubbleCount": 3, //
"BubbleThickness": 1.0, // 沿
"InterferenceLineCount": 3, // 线
"FontFamily": "kaiti", // actionj,epilog,fresnel,headache,lexo,prefix,progbot,ransom,robot,scandal,kaiti
"FrameDelay": 300, // ,Animation=true, 300
"BackgroundColor": "#ffffff", // : rgb, rgba, rrggbb, or rrggbbaa format to match web syntax, #fff
"ForegroundColors": "", // BackgroundColor,使
"Quality": 100, // gif
"TextBold": true //
}
}
}

View File

@ -0,0 +1,20 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
// -
"CodeGen": {
"EntityAssemblyNames": [ "Admin.NET.Core", "Admin.NET.Application" ],
"BaseEntityNames": [ "EntityTenantId", "EntityTenant", "EntityTenantBaseData", "EntityBaseData", "EntityBase", "EntityBaseId" ],
"EntityBaseColumn": {
"EntityTenantId": [ "Id", "TenantId" ],
"EntityTenant": [ "Id", "CreateTime", "UpdateTime", "CreateUserId", "UpdateUserId", "CreateUserName", "UpdateUserName", "IsDelete", "TenantId" ],
"EntityTenantBaseData": [ "Id", "CreateTime", "UpdateTime", "CreateUserId", "UpdateUserId", "CreateUserName", "UpdateUserName", "IsDelete", "CreateOrgId", "CreateOrgName", "TenantId" ],
"EntityBaseData": [ "Id", "CreateTime", "UpdateTime", "CreateUserId", "UpdateUserId", "CreateUserName", "UpdateUserName", "IsDelete", "CreateOrgId", "CreateOrgName" ],
"EntityBase": [ "Id", "CreateTime", "UpdateTime", "CreateUserId", "UpdateUserId", "CreateUserName", "UpdateUserName", "IsDelete" ],
"EntityBaseId": [ "Id" ]
//"BaseId": [ "Id" ]
},
"FrontRootPath": "Web", //
"BackendApplicationNamespaces": [ "Admin.NET.Application", "Admin.NET.Application2" ] //
}
}

View File

@ -0,0 +1,76 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
// SqlSugar
"DbConnection": {
"EnableConsoleSql": true, // SQL
"ConnectionConfigs": [
{
//"ConfigId": "1300000000001", // -
"DbType": "Sqlite", // MySqlSqlServerSqliteOraclePostgreSQLDmKdbndpOscarMySqlConnectorAccessOpenGaussQuestDBHGClickHouseGBaseOdbcCustom
"ConnectionString": "DataSource=./Admin.NET.db", //
//"SlaveConnectionConfigs": [ // /
// {
// "HitRate": 10,
// "ConnectionString": "DataSource=./Admin.NET1.db"
// },
// {
// "HitRate": 10,
// "ConnectionString": "DataSource=./Admin.NET2.db"
// }
//],
"DbSettings": {
"EnableInitDb": true, //
"EnableDiffLog": false, //
"EnableUnderLine": false // 线
},
"TableSettings": {
"EnableInitTable": true, //
"EnableIncreTable": false // -[IncreTable]
},
"SeedSettings": {
"EnableInitSeed": true, //
"EnableIncreSeed": false // -[IncreSeed]
}
}
////
//{
// "ConfigId": "1300000000002", // -
// "DbType": "Sqlite",
// "ConnectionString": "DataSource=./Admin.NET.Log.db", //
// "DbSettings": {
// "EnableInitDb": true, //
// "EnableDiffLog": false, //
// "EnableUnderLine": false // 线
// },
// "TableSettings": {
// "EnableInitTable": true, //
// "EnableIncreTable": false // -[IncreTable]
// },
// "SeedSettings": {
// "EnableInitSeed": false, //
// "EnableIncreSeed": false // -[IncreSeed]
// }
//},
////
//{
// "ConfigId": "test", //
// "DbType": "Sqlite", //
// "ConnectionString": "DataSource=./Admin.NET.Test.db", //
// "DbSettings": {
// "EnableInitDb": true, //
// "EnableDiffLog": false, //
// "EnableUnderLine": false // 线
// },
// "TableSettings": {
// "EnableInitTable": true, //
// "EnableIncreTable": false // -[IncreTable]
// },
// "SeedSettings": {
// "EnableInitSeed": true, //
// "EnableIncreSeed": false // -[IncreSeed]
// }
//}
]
}
}

View File

@ -0,0 +1,14 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"Email": {
"Host": "smtp.163.com", //
"Port": 465, // 46599425
"EnableSsl": true, // SSL
"DefaultFromEmail": "xxx@163.com", //
"DefaultToEmail": "xxx@qq.com", //
"UserName": "xxx@163.com", //
"Password": "", //
"DefaultFromName": "Admin.NET 通用权限开发平台" //
}
}

View File

@ -0,0 +1,8 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
//
"Enum": {
"EntityAssemblyNames": [ "Admin.NET.Core", "Admin.NET.Application", "Admin.NET.AppCMS" ]
}
}

View File

@ -0,0 +1,12 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"EventBus": {
"RabbitMQ": {
"UserName": "adminnet",
"Password": "adminnet++123456",
"HostName": "127.0.0.1",
"Port": 5672
}
}
}

View File

@ -0,0 +1,17 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"JWTSettings": {
"ValidateIssuerSigningKey": true, // bool true
"IssuerSigningKey": "3F025D682370B0126BBAE7A93D9B66CE3F025D682370B0126BBAE7A93D9B66CE", // string 16.NET8+ 32MD5
"ValidateIssuer": true, // bool true
"ValidIssuer": "Admin.NET", // string
"ValidateAudience": true, // bool true
"ValidAudience": "Admin.NET", // string
"ValidateLifetime": true, // bool truetrue
//"ExpiredTime": 20, // long 20 13
"ClockSkew": 5, // long 5
"Algorithm": "HS256", // string HS256
"RequireExpirationTime": true // false
}
}

View File

@ -0,0 +1,121 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
// IP
"IpRateLimiting": {
// :5访
// False访5访
// True 5GetData访访PostData()5,5
"EnableEndpointRateLimiting": true,
// StackBlockedRequestsfalseAPI3
// APIAPI
"StackBlockedRequests": false,
// RealIpHeader使Kestrel使IP X-Real-IP使
"RealIpHeader": "X-Real-IP",
// ClientIdHeaderIDIDClientWhitelist
"ClientIdHeader": "X-ClientId",
// IP:Ipv4Ipv6
"IpWhitelist": [],
//
"EndpointWhitelist": [],
//
"ClientWhitelist": [],
"QuotaExceededResponse": {
"Content": "{{\"code\":429,\"type\":\"error\",\"message\":\"访问过于频繁,请稍后重试!\",\"result\":null,\"extras\":null}}",
"ContentType": "application/json",
"StatusCode": 429
},
//
"HttpStatusCode": 429,
// API,*
"GeneralRules": [
// 110
{
"Endpoint": "*",
"Period": "1s",
"Limit": 10
},
// 1600
{
"Endpoint": "*",
"Period": "1m",
"Limit": 600
},
// 13600
{
"Endpoint": "*",
"Period": "1h",
"Limit": 3600
},
// 186400
{
"Endpoint": "*",
"Period": "1d",
"Limit": 86400
}
]
},
"IpRateLimitPolicies": {
"IpRules": [
{
"Ip": "XXX.XXX.XXX.XXX",
"Rules": [
{
"Endpoint": "*",
"Period": "1s",
"Limit": 10
},
{
"Endpoint": "*",
"Period": "1m",
"Limit": 600
}
]
}
]
},
//
"ClientRateLimiting": {
"EnableEndpointRateLimiting": true,
"ClientIdHeader": "X-ClientId",
"EndpointWhitelist": [],
"ClientWhitelist": [],
"QuotaExceededResponse": {
"Content": "{{\"code\":429,\"type\":\"error\",\"message\":\"访问人数过多,请稍后重试!\",\"result\":null,\"extras\":null}}",
"ContentType": "application/json",
"StatusCode": 429
},
"HttpStatusCode": 429,
"GeneralRules": [
{
"Endpoint": "*",
"Period": "1s",
"Limit": 10
},
{
"Endpoint": "*",
"Period": "1m",
"Limit": 600
}
]
},
"ClientRateLimitPolicies": {
"ClientRules": [
{
"ClientId": "xxx-xxx",
"Rules": [
{
"Endpoint": "*",
"Period": "1s",
"Limit": 10
},
{
"Endpoint": "*",
"Period": "1m",
"Limit": 600
}
]
}
]
}
}

View File

@ -0,0 +1,47 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Microsoft.EntityFrameworkCore": "Information"
},
"File": {
"Enabled": false, //
"FileName": "logs/{0:yyyyMMdd}_{1}.log", //
"Append": true, //
// "MinimumLevel": "Information", //
"FileSizeLimitBytes": 10485760, // 10M=10*1024*1024
"MaxRollingFiles": 30 // 30
},
"Database": {
"Enabled": true, //
"MinimumLevel": "Information"
},
"ElasticSearch": {
"Enabled": false, // ES
"AuthType": "Basic", // ES BasicApiKeyBase64ApiKey
"User": "admin", // Basic使Basic
"Password": "123456", // Basic使Basic
"ApiId": "", // 使ApiKey
"ApiKey": "", // 使ApiKey
"Base64ApiKey": "TmtrOEszNEJuQ0NyaWlydGtROFk6SG1RZ0w3YzBTc2lCanJTYlV3aXNzZw==", // 使Base64ApiKey
"Fingerprint": "37:08:6A:C6:06:CC:9A:43:CF:ED:25:A2:1C:A4:69:57:90:31:2C:06:CA:61:56:39:6A:9C:46:11:BD:22:51:DA", // ES使Https
"ServerUris": [ "http://192.168.1.100:9200" ], //
"DefaultIndex": "adminnet" //
},
"Monitor": {
"GlobalEnabled": true, //
"IncludeOfMethods": [], // GlobalEnabled=false
"ExcludeOfMethods": [], // GlobalEnabled=true
"BahLogLevel": "Information", // Oops.Oh Oops.Bah
"WithReturnValue": true, // true
"ReturnValueThreshold": 500, // 0
"JsonBehavior": "None", // JsonNone(OnlyJsonAll)
"JsonIndented": false, // Json
"UseUtcTimestamp": false, // UTCLOCAL
"ConsoleLog": true //
}
}
}

View File

@ -0,0 +1,14 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"OAuth": {
"Weixin": {
"ClientId": "xxx",
"ClientSecret": "xxx"
},
"Gitee": {
"ClientId": "xxx",
"ClientSecret": "xxx"
}
}
}

View File

@ -0,0 +1,19 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"SMS": {
"Aliyun": {
"AccessKeyId": "",
"AccessKeySecret": "",
"SignName": "AdminNET 平台", //
"TemplateCode": "" //
},
"Tencentyun": {
"SdkAppId": "",
"AccessKeyId": "",
"AccessKeySecret": "",
"SignName": "AdminNET 平台", //
"TemplateCode": "" //
}
}
}

View File

@ -0,0 +1,32 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"SpecificationDocumentSettings": {
"DocumentTitle": "Admin.NET 通用权限开发平台",
"GroupOpenApiInfos": [
{
"Group": "Default",
"Title": "Admin.NET 通用权限开发平台",
"Description": "让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。",
"Version": "1.0.0",
"Order": 1000
},
{
"Group": "All Groups",
"Title": "所有接口",
"Description": "让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。",
"Version": "1.0.0",
"Order": 0
}
],
"DefaultGroupName": "Default", //
"DocExpansionState": "List", // ListFullNone
"EnableAllGroups": true,
"LoginInfo": {
"Enabled": true, // Swagger
"CheckUrl": "/api/swagger/checkUrl",
"SubmitUrl": "/api/swagger/submitUrl"
},
"EnumToNumber": true //
}
}

View File

@ -0,0 +1,28 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"Upload": {
"Path": "Upload/{yyyy}/{MM}/{dd}", //
"MaxSize": 20480, // KB1024*20
"ContentType": [ "image/jpg", "image/png", "image/jpeg", "image/gif", "image/bmp", "text/plain", "application/pdf", "application/msword", "application/vnd.ms-excel", "application/vnd.ms-powerpoint", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "video/mp4", "application/wps-office.docx", "application/wps-office.xlsx" ],
"EnableMd5": false // MDF5-
},
"OSSProvider": {
"IsEnable": false,
"Provider": "Minio", // OSS Invalid/Minio/Aliyun/QCloud/Qiniu/HuaweiCloud
"Endpoint": "xxx.xxx.xxx.xxx:8090", // /APIOSSAppId
"Region": "xxx.xxx.xxx.xxx", //
"AccessKey": "",
"SecretKey": "",
"IsEnableHttps": false, // HTTPS
"IsEnableCache": true, //
"Bucket": "admin.net"
},
"SSHProvider": {
"IsEnable": false,
"Host": "127.0.0.1",
"Port": 8222,
"Username": "sshuser",
"Password": "Password.1"
}
}

View File

@ -0,0 +1,31 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"Wechat": {
//
"WechatAppId": "",
"WechatAppSecret": "",
"WechatToken": "", // (Token)
"WechatEncodingAESKey": "", // (EncodingAESKey)
//
"WxOpenAppId": "",
"WxOpenAppSecret": "",
"WxToken": "", // (Token)
"WxEncodingAESKey": "" // (EncodingAESKey)
},
//
"WechatPay": {
"AppId": "", // AppIdAppIdAppIdCorpId
"MerchantId": "", //
"MerchantV3Secret": "", // APIv3
"MerchantCertificateSerialNumber": "", //
"MerchantCertificatePrivateKey": "\\WxPayCert\\apiclient_key.pem" // API(apiclient_key.pem)
},
//
"PayCallBack": {
"WechatPayUrl": "https://xxx/api/sysWechatPay/payCallBack", //
"WechatRefundUrl": "", // 退
"AlipayUrl": "", //
"AlipayRefundUrl": "" // 退
}
}

View File

@ -0,0 +1,15 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Application;
/// <summary>
/// 移动端Claim相关常量
/// </summary>
public class AppClaimConst : ClaimConst
{
}

View File

@ -0,0 +1,18 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Application;
/// <summary>
/// 业务应用相关常量
/// </summary>
public class ApplicationConst
{
/// <summary>
/// API分组名称
/// </summary>
public const string GroupName = "xxx业务应用";
}

View File

@ -0,0 +1,22 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
global using Admin.NET.Core;
global using Furion;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.FriendlyException;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.Extensions.DependencyInjection;
global using SqlSugar;
global using System;
global using System.Collections.Generic;
global using System.ComponentModel;
global using System.ComponentModel.DataAnnotations;
global using System.Threading.Tasks;
global using System.Linq;

View File

@ -0,0 +1,28 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Application;
///// <summary>
///// 示例开放接口
///// </summary>
//[ApiDescriptionSettings("开放接口", Name = "Demo", Order = 100)]
//[Authorize(AuthenticationSchemes = SignatureAuthenticationDefaults.AuthenticationScheme)]
//public class DemoOpenApi : IDynamicApiController
//{
// private readonly UserManager _userManager;
// public DemoOpenApi(UserManager userManager)
// {
// _userManager = userManager;
// }
// [HttpGet("helloWord")]
// public Task<string> HelloWord()
// {
// return Task.FromResult($"Hello word. {_userManager.Account}");
// }
//}

View File

@ -0,0 +1,313 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Admin.NET.Core.Service;
using Furion.DataEncryption;
using Furion.DataValidation;
using Lazy.Captcha.Core;
using Microsoft.AspNetCore.Http;
using Yitter.IdGenerator;
namespace Admin.NET.Application.Service.App;
/// <summary>
/// 移动应用服务
/// </summary>
[ApiDescriptionSettings(ApplicationConst.GroupName, Order = 500)]
public class AppAuthService : IDynamicApiController, ITransient
{
private readonly AppUserManager _appUserManager;
private readonly SqlSugarRepository<SysUser> _sysUserRep;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly SysMenuService _sysMenuService;
private readonly SysOnlineUserService _sysOnlineUserService;
private readonly SysConfigService _sysConfigService;
private readonly ICaptcha _captcha;
private readonly SysCacheService _sysCacheService;
public AppAuthService(AppUserManager appUserManager,
SqlSugarRepository<SysUser> sysUserRep,
IHttpContextAccessor httpContextAccessor,
SysMenuService sysMenuService,
SysOnlineUserService sysOnlineUserService,
SysConfigService sysConfigService,
ICaptcha captcha,
SysCacheService sysCacheService)
{
_appUserManager = appUserManager;
_sysUserRep = sysUserRep;
_httpContextAccessor = httpContextAccessor;
_sysMenuService = sysMenuService;
_sysOnlineUserService = sysOnlineUserService;
_sysConfigService = sysConfigService;
_captcha = captcha;
_sysCacheService = sysCacheService;
}
/// <summary>
/// 账号密码登录 🔖
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[AllowAnonymous]
[DisplayName("账号密码登录")]
public virtual async Task<LoginOutput> Login([Required] LoginInput input)
{
// 判断密码错误次数默认5次缓存30分钟
var keyErrorPasswordCount = $"{CacheConst.KeyErrorPasswordCount}{input.Account}";
var errorPasswordCount = _sysCacheService.Get<int>(keyErrorPasswordCount);
if (errorPasswordCount >= 5)
throw Oops.Oh(ErrorCodeEnum.D1027);
// 是否开启验证码
if (await _sysConfigService.GetConfigValue<bool>(CommonConst.SysCaptcha))
{
// 判断验证码
if (!_captcha.Validate(input.CodeId.ToString(), input.Code))
throw Oops.Oh(ErrorCodeEnum.D0008);
}
// 账号是否存在
var user = await _sysUserRep.AsQueryable().Includes(t => t.SysOrg).ClearFilter().FirstAsync(u => u.Account.Equals(input.Account));
_ = user ?? throw Oops.Oh(ErrorCodeEnum.D0009);
// 账号是否被冻结
if (user.Status == StatusEnum.Disable)
throw Oops.Oh(ErrorCodeEnum.D1017);
// 租户是否被禁用
var tenant = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysTenant>>().GetFirstAsync(u => u.Id == user.TenantId);
if (tenant != null && tenant.Status == StatusEnum.Disable)
throw Oops.Oh(ErrorCodeEnum.Z1003);
// 国密SM2解密前端密码传输SM2加密后的
try
{
input.Password = CryptogramUtil.SM2Decrypt(input.Password);
}
catch
{
throw Oops.Oh(ErrorCodeEnum.D0010);
}
VerifyPassword(input, keyErrorPasswordCount, errorPasswordCount, user);
// 登录成功则清空密码错误次数
_sysCacheService.Remove(keyErrorPasswordCount);
return await CreateToken(user);
}
/// <summary>
/// 验证用户密码
/// </summary>
/// <param name="input"></param>
/// <param name="keyErrorPasswordCount"></param>
/// <param name="errorPasswordCount"></param>
/// <param name="user"></param>
private void VerifyPassword(LoginInput input, string keyErrorPasswordCount, int errorPasswordCount, SysUser user)
{
if (CryptogramUtil.CryptoType == CryptogramEnum.MD5.ToString())
{
if (!user.Password.Equals(MD5Encryption.Encrypt(input.Password)))
{
_sysCacheService.Set(keyErrorPasswordCount, ++errorPasswordCount, TimeSpan.FromMinutes(30));
throw Oops.Oh(ErrorCodeEnum.D1000);
}
}
else
{
if (!CryptogramUtil.Decrypt(user.Password).Equals(input.Password))
{
_sysCacheService.Set(keyErrorPasswordCount, ++errorPasswordCount, TimeSpan.FromMinutes(30));
throw Oops.Oh(ErrorCodeEnum.D1000);
}
}
}
/// <summary>
/// 手机号登录 🔖
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[AllowAnonymous]
[DisplayName("手机号登录")]
public virtual async Task<LoginOutput> LoginPhone([Required] LoginPhoneInput input)
{
var verifyCode = _sysCacheService.Get<string>($"{CacheConst.KeyPhoneVerCode}{input.Phone}");
if (string.IsNullOrWhiteSpace(verifyCode))
throw Oops.Oh("验证码不存在或已失效,请重新获取!");
if (verifyCode != input.Code)
throw Oops.Oh("验证码错误!");
// 账号是否存在
var user = await _sysUserRep.AsQueryable().Includes(t => t.SysOrg).ClearFilter().FirstAsync(u => u.Phone.Equals(input.Phone));
_ = user ?? throw Oops.Oh(ErrorCodeEnum.D0009);
return await CreateToken(user);
}
/// <summary>
/// 生成Token令牌 🔖
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
[NonAction]
public virtual async Task<LoginOutput> CreateToken(SysUser user)
{
// 单用户登录
await _sysOnlineUserService.SingleLogin(user.Id);
// 生成Token令牌
var tokenExpire = await _sysConfigService.GetTokenExpire();
var accessToken = JWTEncryption.Encrypt(new Dictionary<string, object>
{
{ AppClaimConst.UserId, user.Id },
{ AppClaimConst.TenantId, user.TenantId },
{ AppClaimConst.Account, user.Account },
{ AppClaimConst.RealName, user.RealName },
{ AppClaimConst.AccountType, user.AccountType },
{ AppClaimConst.OrgId, user.OrgId },
{ AppClaimConst.OrgName, user.SysOrg?.Name },
{ AppClaimConst.OrgType, user.SysOrg?.Type },
}, tokenExpire);
// 生成刷新Token令牌
var refreshTokenExpire = await _sysConfigService.GetRefreshTokenExpire();
var refreshToken = JWTEncryption.GenerateRefreshToken(accessToken, refreshTokenExpire);
// 设置响应报文头
_httpContextAccessor.HttpContext.SetTokensOfResponseHeaders(accessToken, refreshToken);
// Swagger Knife4UI-AfterScript登录脚本
// ke.global.setAllHeader('Authorization', 'Bearer ' + ke.response.headers['access-token']);
return new LoginOutput
{
AccessToken = accessToken,
RefreshToken = refreshToken
};
}
/// <summary>
/// 获取登录账号 🔖
/// </summary>
/// <returns></returns>
[DisplayName("获取登录账号")]
public virtual async Task<LoginUserOutput> GetUserInfo()
{
var user = await _sysUserRep.GetFirstAsync(u => u.Id == _appUserManager.UserId) ?? throw Oops.Oh(ErrorCodeEnum.D1011).StatusCode(401);
// 获取机构
var org = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysOrg>>().GetFirstAsync(u => u.Id == user.OrgId);
// 获取职位
var pos = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysPos>>().GetFirstAsync(u => u.Id == user.PosId);
// 获取按钮集合
var buttons = await _sysMenuService.GetOwnBtnPermList();
// 获取角色集合
var roleIds = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysUserRole>>().AsQueryable()
.Where(u => u.UserId == user.Id).Select(u => u.RoleId).ToListAsync();
return new LoginUserOutput
{
Id = user.Id,
Account = user.Account,
RealName = user.RealName,
Phone = user.Phone,
IdCardNum = user.IdCardNum,
Email = user.Email,
AccountType = user.AccountType,
Avatar = user.Avatar,
Address = user.Address,
Signature = user.Signature,
OrgId = user.OrgId,
OrgName = org?.Name,
OrgType = org?.Type,
PosName = pos?.Name,
Buttons = buttons,
RoleIds = roleIds
};
}
/// <summary>
/// 获取刷新Token 🔖
/// </summary>
/// <param name="accessToken"></param>
/// <returns></returns>
[DisplayName("获取刷新Token")]
public virtual string GetRefreshToken([FromQuery] string accessToken)
{
var refreshTokenExpire = _sysConfigService.GetRefreshTokenExpire().GetAwaiter().GetResult();
return JWTEncryption.GenerateRefreshToken(accessToken, refreshTokenExpire);
}
/// <summary>
/// 退出系统 🔖
/// </summary>
[DisplayName("退出系统")]
public void Logout()
{
if (string.IsNullOrWhiteSpace(_appUserManager.Account))
throw Oops.Oh(ErrorCodeEnum.D1011);
_httpContextAccessor.HttpContext.SignoutToSwagger();
}
/// <summary>
/// 获取验证码 🔖
/// </summary>
/// <returns></returns>
[AllowAnonymous]
[SuppressMonitor]
[DisplayName("获取验证码")]
public dynamic GetCaptcha()
{
var codeId = YitIdHelper.NextId().ToString();
var captcha = _captcha.Generate(codeId);
return new { Id = codeId, Img = captcha.Base64 };
}
/// <summary>
/// 修改用户密码
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[DisplayName("修改用户密码")]
public async Task<int> ChangePwd(ChangePwdInput input)
{
// 国密SM2解密前端密码传输SM2加密后的
input.PasswordOld = CryptogramUtil.SM2Decrypt(input.PasswordOld);
input.PasswordNew = CryptogramUtil.SM2Decrypt(input.PasswordNew);
var user = await _sysUserRep.GetFirstAsync(u => u.Id == _appUserManager.UserId) ?? throw Oops.Oh(ErrorCodeEnum.D0009);
if (CryptogramUtil.CryptoType == CryptogramEnum.MD5.ToString())
{
if (user.Password != MD5Encryption.Encrypt(input.PasswordOld))
throw Oops.Oh(ErrorCodeEnum.D1004);
}
else
{
if (CryptogramUtil.Decrypt(user.Password) != input.PasswordOld)
throw Oops.Oh(ErrorCodeEnum.D1004);
}
if (input.PasswordOld == input.PasswordNew)
throw Oops.Oh(ErrorCodeEnum.D1028);
// 验证密码强度
if (CryptogramUtil.StrongPassword)
{
user.Password = input.PasswordNew.TryValidate(CryptogramUtil.PasswordStrengthValidation)
? CryptogramUtil.Encrypt(input.PasswordNew)
: throw Oops.Oh(CryptogramUtil.PasswordStrengthValidationMsg);
}
else
{
user.Password = CryptogramUtil.Encrypt(input.PasswordNew);
}
return await _sysUserRep.AsUpdateable(user).UpdateColumns(u => u.Password).ExecuteCommandAsync();
}
}

View File

@ -0,0 +1,22 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Microsoft.AspNetCore.Http;
namespace Admin.NET.Application.Service.App;
public class AppUserManager : UserManager
{
private readonly IHttpContextAccessor _httpContextAccessor;
public AppUserManager(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
// 扩展属性
}

View File

@ -0,0 +1,22 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
namespace Admin.NET.Application;
[AppStartup(100)]
public class Startup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
}
}

View File

@ -0,0 +1,65 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net6.0;net8.0</TargetFrameworks>
<NoWarn>1701;1702;1591;8632</NoWarn>
<DocumentationFile></DocumentationFile>
<ImplicitUsings>enable</ImplicitUsings>
<PreserveCompilationContext>true</PreserveCompilationContext>
<Nullable>disable</Nullable>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<Copyright>Admin.NET</Copyright>
<Description>Admin.NET 通用权限开发平台</Description>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AlibabaCloud.SDK.Dysmsapi20170525" Version="2.0.24" />
<PackageReference Include="AngleSharp" Version="1.1.2" />
<PackageReference Include="AspectCore.Extensions.Reflection" Version="2.4.0" />
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
<PackageReference Include="Elastic.Clients.Elasticsearch" Version="8.14.1" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.4" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.4" />
<PackageReference Include="Furion.Pure" Version="4.9.4" />
<PackageReference Include="IPTools.China" Version="1.6.0" />
<PackageReference Include="IPTools.International" Version="1.6.0" />
<PackageReference Include="Magicodes.IE.Excel" Version="2.7.5.1" />
<PackageReference Include="Magicodes.IE.Pdf" Version="2.7.5.1" />
<PackageReference Include="Magicodes.IE.Word" Version="2.7.5.1" />
<PackageReference Include="MailKit" Version="4.6.0" />
<PackageReference Include="NewLife.Redis" Version="5.7.2024.602" />
<PackageReference Include="Novell.Directory.Ldap.NETStandard" Version="3.6.0" />
<PackageReference Include="QRCoder" Version="1.5.1" />
<PackageReference Include="RabbitMQ.Client" Version="6.8.1" />
<PackageReference Include="SixLabors.ImageSharp.Web" Version="3.1.2" />
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="3.3.0" />
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="3.4.0" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.158" />
<PackageReference Include="SSH.NET" Version="2024.0.0" />
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.4.0" />
<PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1023" />
<PackageReference Include="UAParser" Version="3.1.47" />
<PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
<PackageReference Include="AspNet.Security.OAuth.Gitee" Version="6.0.15" />
<PackageReference Include="AspNet.Security.OAuth.Weixin" Version="6.0.15" />
<PackageReference Include="Lazy.Captcha.Core" Version="2.0.6" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="6.0.31" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="6.0.31" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="6.0.31" />
<PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.1.9" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
<PackageReference Include="AspNet.Security.OAuth.Gitee" Version="8.0.0" />
<PackageReference Include="AspNet.Security.OAuth.Weixin" Version="8.0.0" />
<PackageReference Include="Lazy.Captcha.Core" Version="2.0.7" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="8.0.6" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="8.0.6" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="8.0.6" />
<PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.2.0" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,16 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 业务应用种子特性
/// </summary>
[SuppressSniffer]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public class AppSeedAttribute : Attribute
{
}

View File

@ -0,0 +1,22 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 常量特性
/// </summary>
[SuppressSniffer]
[AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)]
public class ConstAttribute : Attribute
{
public string Name { get; set; }
public ConstAttribute(string name)
{
Name = name;
}
}

View File

@ -0,0 +1,22 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 自定义规范化结果特性
/// </summary>
[SuppressSniffer]
[AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)]
public class CustomUnifyResultAttribute : Attribute
{
public string Name { get; set; }
public CustomUnifyResultAttribute(string name)
{
Name = name;
}
}

View File

@ -0,0 +1,105 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using System.Security.Claims;
namespace Admin.NET.Core;
/// <summary>
/// 防止重复请求过滤器特性
/// </summary>
[SuppressSniffer]
[AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)]
public class IdempotentAttribute : Attribute, IAsyncActionFilter
{
/// <summary>
/// 请求间隔时间/秒
/// </summary>
public int IntervalTime { get; set; } = 5;
/// <summary>
/// 错误提示内容
/// </summary>
public string Message { get; set; } = "你操作频率过快,请稍后重试!";
/// <summary>
/// 缓存前缀: Key+请求路由+用户Id+请求参数
/// </summary>
public string CacheKey { get; set; }
/// <summary>
/// 是否直接抛出异常Ture是False返回上次请求结果
/// </summary>
public bool ThrowBah { get; set; }
public IdempotentAttribute()
{
}
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
var httpContext = context.HttpContext;
var path = httpContext.Request.Path.Value.ToString();
var userId = httpContext.User?.FindFirstValue(ClaimConst.UserId);
var cacheExpireTime = TimeSpan.FromSeconds(IntervalTime);
var parameters = "";
foreach (var parameter in context.ActionDescriptor.Parameters)
{
parameters += parameter.Name;
parameters += context.ActionArguments[parameter.Name].ToJson();
}
var cacheKey = MD5Encryption.Encrypt($"{CacheKey}{path}{userId}{parameters}");
var sysCacheService = App.GetRequiredService<SysCacheService>();
if (sysCacheService.ExistKey(cacheKey))
{
if (ThrowBah) throw Oops.Oh(Message);
try
{
var cachedResult = sysCacheService.Get<ResponseData>(cacheKey);
context.Result = new ObjectResult(cachedResult.Value);
}
catch (Exception ex)
{
throw Oops.Oh($"{Message}-{ex}");
}
}
else
{
// 先加入一个空缓存,防止第一次请求结果没回来导致连续请求
sysCacheService.Set(cacheKey, "", cacheExpireTime);
var resultContext = await next();
if (resultContext.Result is ObjectResult objectResult)
{
var valueType = objectResult.Value.GetType();
var responseData = new ResponseData
{
Type = valueType.Name,
Value = objectResult.Value
};
sysCacheService.Set(cacheKey, responseData, cacheExpireTime);
}
}
}
/// <summary>
/// 请求结果数据
/// </summary>
private class ResponseData
{
/// <summary>
/// 结果类型
/// </summary>
public string Type { get; set; }
/// <summary>
/// 请求结果
/// </summary>
public dynamic Value { get; set; }
}
}

View File

@ -0,0 +1,16 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 忽略表结构初始化特性(标记在实体)
/// </summary>
[SuppressSniffer]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public class IgnoreTableAttribute : Attribute
{
}

View File

@ -0,0 +1,16 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 忽略更新种子特性(标记在种子类)
/// </summary>
[SuppressSniffer]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public class IgnoreUpdateSeedAttribute : Attribute
{
}

View File

@ -0,0 +1,16 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 忽略更新种子列特性(标记在实体属性)
/// </summary>
[SuppressSniffer]
[AttributeUsage(AttributeTargets.Property, AllowMultiple = true, Inherited = true)]
public class IgnoreUpdateSeedColumnAttribute : Attribute
{
}

View File

@ -0,0 +1,24 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 属性字典配置
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class ImportDictAttribute : Attribute
{
/// <summary>
/// 字典Code
/// </summary>
public string TypeCode { get; set; }
/// <summary>
/// 目标对象名称
/// </summary>
public string TargetPropName { get; set; }
}

View File

@ -0,0 +1,16 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 增量种子特性
/// </summary>
[SuppressSniffer]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public class IncreSeedAttribute : Attribute
{
}

View File

@ -0,0 +1,16 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 增量表特性
/// </summary>
[SuppressSniffer]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public class IncreTableAttribute : Attribute
{
}

View File

@ -0,0 +1,16 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 日志表特性
/// </summary>
[SuppressSniffer]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public class LogTableAttribute : Attribute
{
}

View File

@ -0,0 +1,60 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Newtonsoft.Json;
namespace Admin.NET.Core;
/// <summary>
/// 字符串掩码
/// </summary>
[SuppressSniffer]
public class MaskNewtonsoftJsonConverter : JsonConverter<string>
{
public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer)
{
return reader.Value.ToString();
}
public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer)
{
writer.WriteValue(value?.ToString().Mask());
}
}
/// <summary>
/// 身份证掩码
/// </summary>
[SuppressSniffer]
public class MaskIdCardNewtonsoftJsonConverter : JsonConverter<string>
{
public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer)
{
return reader.Value.ToString();
}
public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer)
{
writer.WriteValue(value?.ToString().MaskIdCard());
}
}
/// <summary>
/// 邮箱掩码
/// </summary>
[SuppressSniffer]
public class MaskEmailNewtonsoftJsonConverter : JsonConverter<string>
{
public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer)
{
return reader.Value.ToString();
}
public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer)
{
writer.WriteValue(value?.ToString().MaskEmail());
}
}

View File

@ -0,0 +1,61 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Admin.NET.Core;
/// <summary>
/// 字符串掩码
/// </summary>
[SuppressSniffer]
public class MaskSystemTextJsonConverter : JsonConverter<string>
{
public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return reader.GetString();
}
public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
{
writer.WriteStringValue(value?.ToString().Mask());
}
}
/// <summary>
/// 身份证掩码
/// </summary>
[SuppressSniffer]
public class MaskIdCardSystemTextJsonConverter : JsonConverter<string>
{
public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return reader.GetString();
}
public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
{
writer.WriteStringValue(value?.ToString().MaskIdCard());
}
}
/// <summary>
/// 邮箱掩码
/// </summary>
[SuppressSniffer]
public class MaskEmailSystemTextJsonConverter : JsonConverter<string>
{
public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return reader.GetString();
}
public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
{
writer.WriteStringValue(value?.ToString().MaskEmail());
}
}

View File

@ -0,0 +1,39 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 最大值校验
/// </summary>
[SuppressSniffer]
public class MaxValueAttribute : ValidationAttribute
{
private double MaxValue { get; }
/// <summary>
/// 最大值
/// </summary>
/// <param name="value"></param>
public MaxValueAttribute(double value) => this.MaxValue = value;
/// <summary>
/// 最大值校验
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public override bool IsValid(object value)
{
return value == null || Convert.ToDouble(value) <= this.MaxValue;
}
/// <summary>
/// 错误信息
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public override string FormatErrorMessage(string name) => base.FormatErrorMessage(name);
}

View File

@ -0,0 +1,39 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 最小值校验
/// </summary>
[SuppressSniffer]
public class MinValueAttribute : ValidationAttribute
{
private double MinValue { get; set; }
/// <summary>
/// 最小值
/// </summary>
/// <param name="value"></param>
public MinValueAttribute(double value) => this.MinValue = value;
/// <summary>
/// 最小值校验
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public override bool IsValid(object value)
{
return value == null || Convert.ToDouble(value) > this.MinValue;
}
/// <summary>
/// 错误信息
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public override string FormatErrorMessage(string name) => base.FormatErrorMessage(name);
}

View File

@ -0,0 +1,16 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统表特性
/// </summary>
[SuppressSniffer]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public class SysTableAttribute : Attribute
{
}

View File

@ -0,0 +1,33 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
public static class CacheSetup
{
/// <summary>
/// 缓存注册新生命Redis组件
/// </summary>
/// <param name="services"></param>
public static void AddCache(this IServiceCollection services)
{
ICache cache = Cache.Default;
var cacheOptions = App.GetConfig<CacheOptions>("Cache", true);
if (cacheOptions.CacheType == CacheTypeEnum.Redis.ToString())
{
cache = new FullRedis(new RedisOptions
{
Configuration = cacheOptions.Redis.Configuration,
Prefix = cacheOptions.Redis.Prefix
});
if (cacheOptions.Redis.MaxMessageSize > 0)
((FullRedis)cache).MaxMessageSize = cacheOptions.Redis.MaxMessageSize;
}
services.AddSingleton(cache);
}
}

View File

@ -0,0 +1,56 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// SqlSugar二级缓存
/// </summary>
public class SqlSugarCache : ICacheService
{
/// <summary>
/// 系统缓存服务
/// </summary>
private static readonly SysCacheService _cache = App.GetRequiredService<SysCacheService>();
public void Add<V>(string key, V value)
{
_cache.Set($"{CacheConst.SqlSugar}{key}", value);
}
public void Add<V>(string key, V value, int cacheDurationInSeconds)
{
_cache.Set($"{CacheConst.SqlSugar}{key}", value, TimeSpan.FromSeconds(cacheDurationInSeconds));
}
public bool ContainsKey<V>(string key)
{
return _cache.ExistKey($"{CacheConst.SqlSugar}{key}");
}
public V Get<V>(string key)
{
return _cache.Get<V>($"{CacheConst.SqlSugar}{key}");
}
public IEnumerable<string> GetAllKey<V>()
{
return _cache.GetKeysByPrefixKey(CacheConst.SqlSugar);
}
public V GetOrCreate<V>(string key, Func<V> create, int cacheDurationInSeconds = int.MaxValue)
{
return _cache.GetOrAdd<V>($"{CacheConst.SqlSugar}{key}", (cacheKey) =>
{
return create();
}, cacheDurationInSeconds);
}
public void Remove<V>(string key)
{
_cache.Remove(key); // SqlSugar调用Remove方法时key中已包含了CacheConst.SqlSugar前缀
}
}

View File

@ -0,0 +1,93 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 缓存相关常量
/// </summary>
public class CacheConst
{
/// <summary>
/// 用户权限缓存(按钮集合)
/// </summary>
public const string KeyUserButton = "sys_user_button:";
/// <summary>
/// 用户接口缓存(接口集合)
/// </summary>
public const string KeyUserApi = "sys_user_api:";
/// <summary>
/// 用户机构缓存
/// </summary>
public const string KeyUserOrg = "sys_user_org:";
/// <summary>
/// 角色最大数据范围缓存
/// </summary>
public const string KeyRoleMaxDataScope = "sys_role_maxDataScope:";
/// <summary>
/// 在线用户缓存
/// </summary>
public const string KeyUserOnline = "sys_user_online:";
/// <summary>
/// 图形验证码缓存
/// </summary>
public const string KeyVerCode = "sys_verCode:";
/// <summary>
/// 手机验证码缓存
/// </summary>
public const string KeyPhoneVerCode = "sys_phoneVerCode:";
/// <summary>
/// 密码错误次数缓存
/// </summary>
public const string KeyErrorPasswordCount = "sys_errorPasswordCount:";
/// <summary>
/// 租户缓存
/// </summary>
public const string KeyTenant = "sys_tenant";
/// <summary>
/// 常量下拉框
/// </summary>
public const string KeyConst = "sys_const:";
/// <summary>
/// 所有缓存关键字集合
/// </summary>
public const string KeyAll = "sys_keys";
/// <summary>
/// SqlSugar二级缓存
/// </summary>
public const string SqlSugar = "sys_sqlSugar:";
/// <summary>
/// 开放接口身份缓存
/// </summary>
public const string KeyOpenAccess = "sys_open_access:";
/// <summary>
/// 开放接口身份随机数缓存
/// </summary>
public const string KeyOpenAccessNonce = "sys_open_access_nonce:";
/// <summary>
/// 登录黑名单
/// </summary>
public const string KeyBlacklist = "sys_blacklist:";
/// <summary>
/// 系统配置缓存
/// </summary>
public const string KeyConfig = "sys_config:";
}

View File

@ -0,0 +1,68 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// Claim相关常量
/// </summary>
public class ClaimConst
{
/// <summary>
/// 用户Id
/// </summary>
public const string UserId = "UserId";
/// <summary>
/// 账号
/// </summary>
public const string Account = "Account";
/// <summary>
/// 真实姓名
/// </summary>
public const string RealName = "RealName";
/// <summary>
/// 昵称
/// </summary>
public const string NickName = "NickName";
/// <summary>
/// 账号类型
/// </summary>
public const string AccountType = "AccountType";
/// <summary>
/// 租户Id
/// </summary>
public const string TenantId = "TenantId";
/// <summary>
/// 组织机构Id
/// </summary>
public const string OrgId = "OrgId";
/// <summary>
/// 组织机构名称
/// </summary>
public const string OrgName = "OrgName";
/// <summary>
/// 组织机构类型
/// </summary>
public const string OrgType = "OrgType";
/// <summary>
/// 微信OpenId
/// </summary>
public const string OpenId = "OpenId";
/// <summary>
/// 登录模式PC、APP
/// </summary>
public const string LoginMode = "LoginMode";
}

View File

@ -0,0 +1,101 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 通用常量
/// </summary>
[Const("平台配置")]
public class CommonConst
{
/// <summary>
/// 演示环境开关
/// </summary>
public const string SysDemoEnv = "sys_demo";
/// <summary>
/// 默认密码
/// </summary>
public const string SysPassword = "sys_password";
/// <summary>
/// 登录二次验证
/// </summary>
public const string SysSecondVer = "sys_second_ver";
/// <summary>
/// 开启图形验证码
/// </summary>
public const string SysCaptcha = "sys_captcha";
/// <summary>
/// 开启水印
/// </summary>
public const string SysWatermark = "sys_watermark";
/// <summary>
/// 开启操作日志
/// </summary>
public const string SysOpLog = "sys_oplog";
/// <summary>
/// Token过期时间
/// </summary>
public const string SysTokenExpire = "sys_token_expire";
/// <summary>
/// RefreshToken过期时间
/// </summary>
public const string SysRefreshTokenExpire = "sys_refresh_token_expire";
/// <summary>
/// 开启发送异常日志邮件
/// </summary>
public const string SysErrorMail = "sys_error_mail";
/// <summary>
/// 单用户登录
/// </summary>
public const string SysSingleLogin = "sys_single_login";
/// <summary>
/// 系统管理员角色编码
/// </summary>
public const string SysAdminRole = "sys_admin";
///// <summary>
///// 开启全局脱敏处理(默认不开启)
///// </summary>
//public static bool SysSensitiveDetection = false;
/// <summary>
/// 开启域登录验证
/// </summary>
public const string SysDomainLogin = "sys_domain_login";
/// <summary>
/// 日志分组名称
/// </summary>
public const string SysLogCategoryName = "System.Logging.LoggingMonitor";
/// <summary>
/// 事件-增加异常日志
/// </summary>
public const string AddExLog = "Add:ExLog";
/// <summary>
/// 事件-发送异常邮件
/// </summary>
public const string SendErrorMail = "Send:ErrorMail";
/// <summary>
/// 基础接口资源列表
/// </summary>
public static readonly List<string> SysBaseRoutes = new() { "sysAuth/login", "sysAuth/unLockScreen", "sysAuth/loginPhone", "sysAuth/userInfo", "sysAuth/refreshToken", "sysAuth/logout", "sysAuth/loginConfig", "sysAuth/watermarkConfig", "sysAuth/captcha", "sysMenu/loginMenuTree", "sysOAuth/signIn", "sysOAuth/signInCallback", "sysOnlineUser/page", "sysOrg/list", "sysPos/list", "sysRole/page", "sysRole/list",
"sysFile/uploadAvatar", "sysFile/uploadSignature", "sysUser/baseInfo", "sysUser/baseInfo", "sysUser/changePwd", "sysNotice/page", "sysNotice/add", "sysNotice/update", "sysNotice/delete", "sysNotice/public", "sysNotice/setRead", "sysNotice/pageReceived", "sysNotice/unReadList" };
}

View File

@ -0,0 +1,33 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// SqlSugar相关常量
/// </summary>
public class SqlSugarConst
{
/// <summary>
/// 默认主数据库标识(默认租户)
/// </summary>
public const string MainConfigId = "1300000000001";
/// <summary>
/// 默认日志数据库标识
/// </summary>
public const string LogConfigId = "1300000000002";
/// <summary>
/// 默认表主键
/// </summary>
public const string PrimaryKey = "Id";
/// <summary>
/// 默认租户Id
/// </summary>
public const long DefaultTenantId = 1300000000001;
}

View File

@ -0,0 +1,146 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 框架实体基类Id
/// </summary>
public abstract class EntityBaseId
{
/// <summary>
/// 雪花Id
/// </summary>
[SugarColumn(ColumnName = "Id", ColumnDescription = "主键Id", IsPrimaryKey = true, IsIdentity = false)]
public virtual long Id { get; set; }
}
/// <summary>
/// 框架实体基类
/// </summary>
[SugarIndex("index_{table}_CT", nameof(CreateTime), OrderByType.Asc)]
public abstract class EntityBase : EntityBaseId, IDeletedFilter
{
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(ColumnDescription = "创建时间", IsNullable = true, IsOnlyIgnoreUpdate = true, InsertServerTime = true)]
public virtual DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(ColumnDescription = "更新时间", IsOnlyIgnoreInsert = true, UpdateServerTime = true)]
public virtual DateTime? UpdateTime { get; set; }
/// <summary>
/// 创建者Id
/// </summary>
[SugarColumn(ColumnDescription = "创建者Id", IsOnlyIgnoreUpdate = true)]
public virtual long? CreateUserId { get; set; }
///// <summary>
///// 创建者
///// </summary>
//[Newtonsoft.Json.JsonIgnore]
//[System.Text.Json.Serialization.JsonIgnore]
//[Navigate(NavigateType.OneToOne, nameof(CreateUserId))]
//public virtual SysUser CreateUser { get; set; }
/// <summary>
/// 创建者姓名
/// </summary>
[SugarColumn(ColumnDescription = "创建者姓名", Length = 64, IsOnlyIgnoreUpdate = true)]
public virtual string? CreateUserName { get; set; }
/// <summary>
/// 修改者Id
/// </summary>
[SugarColumn(ColumnDescription = "修改者Id")]
public virtual long? UpdateUserId { get; set; }
///// <summary>
///// 修改者
///// </summary>
//[Newtonsoft.Json.JsonIgnore]
//[System.Text.Json.Serialization.JsonIgnore]
//[Navigate(NavigateType.OneToOne, nameof(UpdateUserId))]
//public virtual SysUser UpdateUser { get; set; }
/// <summary>
/// 修改者姓名
/// </summary>
[SugarColumn(ColumnDescription = "修改者姓名", Length = 64)]
public virtual string? UpdateUserName { get; set; }
/// <summary>
/// 软删除
/// </summary>
[SugarColumn(ColumnDescription = "软删除")]
public virtual bool IsDelete { get; set; } = false;
}
/// <summary>
/// 业务数据实体基类(数据权限)
/// </summary>
public abstract class EntityBaseData : EntityBase, IOrgIdFilter
{
/// <summary>
/// 创建者部门Id
/// </summary>
[SugarColumn(ColumnDescription = "创建者部门Id", IsOnlyIgnoreUpdate = true)]
public virtual long? CreateOrgId { get; set; }
/// <summary>
/// 创建者部门
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(CreateOrgId))]
public virtual SysOrg CreateOrg { get; set; }
/// <summary>
/// 创建者部门名称
/// </summary>
[SugarColumn(ColumnDescription = "创建者部门名称", Length = 64, IsOnlyIgnoreUpdate = true)]
public virtual string? CreateOrgName { get; set; }
}
/// <summary>
/// 租户实体基类
/// </summary>
public abstract class EntityTenant : EntityBase, ITenantIdFilter
{
/// <summary>
/// 租户Id
/// </summary>
[SugarColumn(ColumnDescription = "租户Id", IsOnlyIgnoreUpdate = true)]
public virtual long? TenantId { get; set; }
}
/// <summary>
/// 租户实体基类Id
/// </summary>
public abstract class EntityTenantId : EntityBaseId, ITenantIdFilter
{
/// <summary>
/// 租户Id
/// </summary>
[SugarColumn(ColumnDescription = "租户Id", IsOnlyIgnoreUpdate = true)]
public virtual long? TenantId { get; set; }
}
/// <summary>
/// 租户实体基类 + 业务数据(数据权限)
/// </summary>
public abstract class EntityTenantBaseData : EntityBaseData, ITenantIdFilter
{
/// <summary>
/// 租户Id
/// </summary>
[SugarColumn(ColumnDescription = "租户Id", IsOnlyIgnoreUpdate = true)]
public virtual long? TenantId { get; set; }
}

View File

@ -0,0 +1,40 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 假删除接口过滤器
/// </summary>
internal interface IDeletedFilter
{
/// <summary>
/// 软删除
/// </summary>
bool IsDelete { get; set; }
}
/// <summary>
/// 租户Id接口过滤器
/// </summary>
internal interface ITenantIdFilter
{
/// <summary>
/// 租户Id
/// </summary>
long? TenantId { get; set; }
}
/// <summary>
/// 机构Id接口过滤器
/// </summary>
internal interface IOrgIdFilter
{
/// <summary>
/// 创建者部门Id
/// </summary>
long? CreateOrgId { get; set; }
}

View File

@ -0,0 +1,125 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 代码生成表
/// </summary>
[SugarTable(null, "代码生成表")]
[SysTable]
[SugarIndex("index_{table}_B", nameof(BusName), OrderByType.Asc)]
[SugarIndex("index_{table}_T", nameof(TableName), OrderByType.Asc)]
public partial class SysCodeGen : EntityBase
{
/// <summary>
/// 作者姓名
/// </summary>
[SugarColumn(ColumnDescription = "作者姓名", Length = 32)]
[MaxLength(32)]
public string? AuthorName { get; set; }
/// <summary>
/// 是否移除表前缀
/// </summary>
[SugarColumn(ColumnDescription = "是否移除表前缀", Length = 8)]
[MaxLength(8)]
public string? TablePrefix { get; set; }
/// <summary>
/// 生成方式
/// </summary>
[SugarColumn(ColumnDescription = "生成方式", Length = 32)]
[MaxLength(32)]
public string? GenerateType { get; set; }
/// <summary>
/// 库定位器名
/// </summary>
[SugarColumn(ColumnDescription = "库定位器名", Length = 64)]
[MaxLength(64)]
public string? ConfigId { get; set; }
/// <summary>
/// 数据库名(保留字段)
/// </summary>
[SugarColumn(ColumnDescription = "数据库库名", Length = 64)]
[MaxLength(64)]
public string? DbName { get; set; }
/// <summary>
/// 数据库类型
/// </summary>
[SugarColumn(ColumnDescription = "数据库类型", Length = 64)]
[MaxLength(64)]
public string? DbType { get; set; }
/// <summary>
/// 数据库链接
/// </summary>
[SugarColumn(ColumnDescription = "数据库链接", Length = 256)]
[MaxLength(256)]
public string? ConnectionString { get; set; }
/// <summary>
/// 数据库表名
/// </summary>
[SugarColumn(ColumnDescription = "数据库表名", Length = 128)]
[MaxLength(128)]
public string? TableName { get; set; }
/// <summary>
/// 命名空间
/// </summary>
[SugarColumn(ColumnDescription = "命名空间", Length = 128)]
[MaxLength(128)]
public string? NameSpace { get; set; }
/// <summary>
/// 业务名
/// </summary>
[SugarColumn(ColumnDescription = "业务名", Length = 128)]
[MaxLength(128)]
public string? BusName { get; set; }
/// <summary>
/// 是否生成菜单
/// </summary>
[SugarColumn(ColumnDescription = "是否生成菜单")]
public bool GenerateMenu { get; set; } = true;
/// <summary>
/// 菜单图标
/// </summary>
[SugarColumn(ColumnDescription = "菜单图标", Length = 32)]
public string? MenuIcon { get; set; } = "ele-Menu";
/// <summary>
/// 菜单编码
/// </summary>
[SugarColumn(ColumnDescription = "菜单编码")]
public long? MenuPid { get; set; }
/// <summary>
/// 页面目录
/// </summary>
[SugarColumn(ColumnDescription = "页面目录", Length = 32)]
public string? PagePath { get; set; }
/// <summary>
/// 支持打印类型
/// </summary>
[SugarColumn(ColumnDescription = "支持打印类型", Length = 32)]
[MaxLength(32)]
public string? PrintType { get; set; }
/// <summary>
/// 打印模版名称
/// </summary>
[SugarColumn(ColumnDescription = "打印模版名称", Length = 32)]
[MaxLength(32)]
public string? PrintName { get; set; }
}

View File

@ -0,0 +1,193 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 代码生成字段配置表
/// </summary>
[SugarTable(null, "代码生成字段配置表")]
[SysTable]
public partial class SysCodeGenConfig : EntityBase
{
/// <summary>
/// 代码生成主表Id
/// </summary>
[SugarColumn(ColumnDescription = "主表Id")]
public long CodeGenId { get; set; }
/// <summary>
/// 数据库字段名
/// </summary>
[SugarColumn(ColumnDescription = "字段名称", Length = 128)]
[Required, MaxLength(128)]
public virtual string ColumnName { get; set; }
/// <summary>
/// 实体属性名
/// </summary>
[SugarColumn(ColumnDescription = "属性名称", Length = 128)]
[Required, MaxLength(128)]
public virtual string PropertyName { get; set; }
/// <summary>
/// 字段数据长度
/// </summary>
[SugarColumn(ColumnDescription = "字段数据长度", DefaultValue = "0")]
public int ColumnLength { get; set; }
/// <summary>
/// 字段描述
/// </summary>
[SugarColumn(ColumnDescription = "字段描述", Length = 128)]
[MaxLength(128)]
public string? ColumnComment { get; set; }
/// <summary>
/// .NET数据类型
/// </summary>
[SugarColumn(ColumnDescription = "NET数据类型", Length = 64)]
[MaxLength(64)]
public string? NetType { get; set; }
/// <summary>
/// 作用类型(字典)
/// </summary>
[SugarColumn(ColumnDescription = "作用类型", Length = 64)]
[MaxLength(64)]
public string? EffectType { get; set; }
/// <summary>
/// 外键实体名称
/// </summary>
[SugarColumn(ColumnDescription = "外键实体名称", Length = 64)]
[MaxLength(64)]
public string? FkEntityName { get; set; }
/// <summary>
/// 外键表名称
/// </summary>
[SugarColumn(ColumnDescription = "外键表名称", Length = 128)]
[MaxLength(128)]
public string? FkTableName { get; set; }
/// <summary>
/// 外键显示字段
/// </summary>
[SugarColumn(ColumnDescription = "外键显示字段", Length = 64)]
[MaxLength(64)]
public string? FkColumnName { get; set; }
/// <summary>
/// 外键显示字段.NET类型
/// </summary>
[SugarColumn(ColumnDescription = "外键显示字段.NET类型", Length = 64)]
[MaxLength(64)]
public string? FkColumnNetType { get; set; }
/// <summary>
/// 字典编码
/// </summary>
[SugarColumn(ColumnDescription = "字典编码", Length = 64)]
[MaxLength(64)]
public string? DictTypeCode { get; set; }
/// <summary>
/// 列表是否缩进(字典)
/// </summary>
[SugarColumn(ColumnDescription = "列表是否缩进", Length = 8)]
[MaxLength(8)]
public string? WhetherRetract { get; set; }
/// <summary>
/// 是否必填(字典)
/// </summary>
[SugarColumn(ColumnDescription = "是否必填", Length = 8)]
[MaxLength(8)]
public string? WhetherRequired { get; set; }
/// <summary>
/// 是否可排序(字典)
/// </summary>
[SugarColumn(ColumnDescription = "是否可排序", Length = 8)]
[MaxLength(8)]
public string? WhetherSortable { get; set; }
/// <summary>
/// 是否是查询条件
/// </summary>
[SugarColumn(ColumnDescription = "是否是查询条件", Length = 8)]
[MaxLength(8)]
public string? QueryWhether { get; set; }
/// <summary>
/// 查询方式
/// </summary>
[SugarColumn(ColumnDescription = "查询方式", Length = 16)]
[MaxLength(16)]
public string? QueryType { get; set; }
/// <summary>
/// 列表显示
/// </summary>
[SugarColumn(ColumnDescription = "列表显示", Length = 8)]
[MaxLength(8)]
public string? WhetherTable { get; set; }
/// <summary>
/// 增改
/// </summary>
[SugarColumn(ColumnDescription = "增改", Length = 8)]
[MaxLength(8)]
public string? WhetherAddUpdate { get; set; }
/// <summary>
/// 主键
/// </summary>
[SugarColumn(ColumnDescription = "主键", Length = 8)]
[MaxLength(8)]
public string? ColumnKey { get; set; }
/// <summary>
/// 数据库中类型(物理类型)
/// </summary>
[SugarColumn(ColumnDescription = "数据库中类型", Length = 64)]
[MaxLength(64)]
public string? DataType { get; set; }
/// <summary>
/// 是否通用字段
/// </summary>
[SugarColumn(ColumnDescription = "是否通用字段", Length = 8)]
[MaxLength(8)]
public string? WhetherCommon { get; set; }
/// <summary>
/// 显示文本字段
/// </summary>
[SugarColumn(ColumnDescription = "显示文本字段", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? DisplayColumn { get; set; }
/// <summary>
/// 选中值字段
/// </summary>
[SugarColumn(ColumnDescription = "选中值字段", Length = 128)]
[MaxLength(128)]
public string? ValueColumn { get; set; }
/// <summary>
/// 父级字段
/// </summary>
[SugarColumn(ColumnDescription = "父级字段", Length = 128)]
[MaxLength(128)]
public string? PidColumn { get; set; }
/// <summary>
/// 排序
/// </summary>
[SugarColumn(ColumnDescription = "排序")]
public int OrderNo { get; set; } = 100;
}

View File

@ -0,0 +1,65 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统参数配置表
/// </summary>
[SugarTable(null, "系统参数配置表")]
[SysTable]
[SugarIndex("index_{table}_N", nameof(Name), OrderByType.Asc)]
[SugarIndex("index_{table}_C", nameof(Code), OrderByType.Asc)]
public partial class SysConfig : EntityBase
{
/// <summary>
/// 名称
/// </summary>
[SugarColumn(ColumnDescription = "名称", Length = 64)]
[Required, MaxLength(64)]
public virtual string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
[SugarColumn(ColumnDescription = "编码", Length = 64)]
[MaxLength(64)]
public string? Code { get; set; }
/// <summary>
/// 属性值
/// </summary>
[SugarColumn(ColumnDescription = "属性值", Length = 64)]
[MaxLength(64)]
[IgnoreUpdateSeedColumn]
public string? Value { get; set; }
/// <summary>
/// 是否是内置参数Y-是N-否)
/// </summary>
[SugarColumn(ColumnDescription = "是否是内置参数")]
public YesNoEnum SysFlag { get; set; }
/// <summary>
/// 分组编码
/// </summary>
[SugarColumn(ColumnDescription = "分组编码", Length = 64)]
[MaxLength(64)]
public string? GroupCode { get; set; }
/// <summary>
/// 排序
/// </summary>
[SugarColumn(ColumnDescription = "排序")]
public int OrderNo { get; set; } = 100;
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注", Length = 256)]
[MaxLength(256)]
public string? Remark { get; set; }
}

View File

@ -0,0 +1,97 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统字典值表
/// </summary>
[SugarTable(null, "系统字典值表")]
[SysTable]
[SugarIndex("index_{table}_C", nameof(Code), OrderByType.Asc)]
public partial class SysDictData : EntityBase
{
/// <summary>
/// 字典类型Id
/// </summary>
[SugarColumn(ColumnDescription = "字典类型Id")]
public long DictTypeId { get; set; }
/// <summary>
/// 字典类型
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(DictTypeId))]
public SysDictType DictType { get; set; }
/// <summary>
/// 值
/// </summary>
[SugarColumn(ColumnDescription = "值", Length = 128)]
[Required, MaxLength(128)]
public virtual string Value { get; set; }
/// <summary>
/// 编码
/// </summary>
[SugarColumn(ColumnDescription = "编码", Length = 128)]
[Required, MaxLength(128)]
public virtual string Code { get; set; }
/// <summary>
/// 名称
/// </summary>
[SugarColumn(ColumnDescription = "名称", Length = 128)]
[MaxLength(128)]
public virtual string? Name { get; set; }
/// <summary>
/// 显示样式-标签颜色
/// </summary>
[SugarColumn(ColumnDescription = "显示样式-标签颜色", Length = 16)]
[MaxLength(16)]
public string? TagType { get; set; }
/// <summary>
/// 显示样式-Style(控制显示样式)
/// </summary>
[SugarColumn(ColumnDescription = "显示样式-Style", Length = 512)]
[MaxLength(512)]
public string? StyleSetting { get; set; }
/// <summary>
/// 显示样式-Class(控制显示样式)
/// </summary>
[SugarColumn(ColumnDescription = "显示样式-Class", Length = 512)]
[MaxLength(512)]
public string? ClassSetting { get; set; }
/// <summary>
/// 排序
/// </summary>
[SugarColumn(ColumnDescription = "排序")]
public int OrderNo { get; set; } = 100;
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注", Length = 2048)]
[MaxLength(2048)]
public string? Remark { get; set; }
/// <summary>
/// 拓展数据(保存业务功能的配置项)
/// </summary>
[SugarColumn(ColumnDescription = "拓展数据(保存业务功能的配置项)", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? ExtData { get; set; }
/// <summary>
/// 状态
/// </summary>
[SugarColumn(ColumnDescription = "状态")]
public StatusEnum Status { get; set; } = StatusEnum.Enable;
}

View File

@ -0,0 +1,56 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统字典类型表
/// </summary>
[SugarTable(null, "系统字典类型表")]
[SysTable]
[SugarIndex("index_{table}_N", nameof(Name), OrderByType.Asc)]
[SugarIndex("index_{table}_C", nameof(Code), OrderByType.Asc)]
public partial class SysDictType : EntityBase
{
/// <summary>
/// 名称
/// </summary>
[SugarColumn(ColumnDescription = "名称", Length = 64)]
[Required, MaxLength(64)]
public virtual string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
[SugarColumn(ColumnDescription = "编码", Length = 64)]
[Required, MaxLength(64)]
public virtual string Code { get; set; }
/// <summary>
/// 排序
/// </summary>
[SugarColumn(ColumnDescription = "排序")]
public int OrderNo { get; set; } = 100;
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注", Length = 256)]
[MaxLength(256)]
public string? Remark { get; set; }
/// <summary>
/// 状态
/// </summary>
[SugarColumn(ColumnDescription = "状态")]
public StatusEnum Status { get; set; } = StatusEnum.Enable;
/// <summary>
/// 字典值集合
/// </summary>
[Navigate(NavigateType.OneToMany, nameof(SysDictData.DictTypeId))]
public List<SysDictData> Children { get; set; }
}

View File

@ -0,0 +1,104 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统文件表
/// </summary>
[SugarTable(null, "系统文件表")]
[SysTable]
[SugarIndex("index_{table}_F", nameof(FileName), OrderByType.Asc)]
public partial class SysFile : EntityBase
{
/// <summary>
/// 提供者
/// </summary>
[SugarColumn(ColumnDescription = "提供者", Length = 128)]
[MaxLength(128)]
public string? Provider { get; set; }
/// <summary>
/// 仓储名称
/// </summary>
[SugarColumn(ColumnDescription = "仓储名称", Length = 128)]
[MaxLength(128)]
public string? BucketName { get; set; }
/// <summary>
/// 文件名称(源文件名)
/// </summary>
[SugarColumn(ColumnDescription = "文件名称", Length = 128)]
[MaxLength(128)]
public string? FileName { get; set; }
/// <summary>
/// 文件后缀
/// </summary>
[SugarColumn(ColumnDescription = "文件后缀", Length = 16)]
[MaxLength(16)]
public string? Suffix { get; set; }
/// <summary>
/// 存储路径
/// </summary>
[SugarColumn(ColumnDescription = "存储路径", Length = 512)]
[MaxLength(512)]
public string? FilePath { get; set; }
/// <summary>
/// 文件大小KB
/// </summary>
[SugarColumn(ColumnDescription = "文件大小KB")]
public long SizeKb { get; set; }
/// <summary>
/// 文件大小信息-计算后的
/// </summary>
[SugarColumn(ColumnDescription = "文件大小信息", Length = 64)]
[MaxLength(64)]
public string? SizeInfo { get; set; }
/// <summary>
/// 外链地址-OSS上传后生成外链地址方便前端预览
/// </summary>
[SugarColumn(ColumnDescription = "外链地址", Length = 512)]
[MaxLength(512)]
public string? Url { get; set; }
/// <summary>
/// 文件MD5
/// </summary>
[SugarColumn(ColumnDescription = "文件MD5", Length = 128)]
[MaxLength(128)]
public string? FileMd5 { get; set; }
/// <summary>
/// 关联对象名称(如子对象)
/// </summary>
[SugarColumn(ColumnDescription = "关联对象名称", Length = 128)]
[MaxLength(128)]
public string? RelationName { get; set; }
/// <summary>
/// 关联对象Id
/// </summary>
[SugarColumn(ColumnDescription = "关联对象Id")]
public long? RelationId { get; set; }
/// <summary>
/// 所属Id如主对象
/// </summary>
[SugarColumn(ColumnDescription = "所属Id")]
public long? BelongId { get; set; }
/// <summary>
/// 文件类别
/// </summary>
[SugarColumn(ColumnDescription = "文件类别", Length = 128)]
[MaxLength(128)]
public string? FileType { get; set; }
}

View File

@ -0,0 +1,41 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统作业集群表
/// </summary>
[SugarTable(null, "系统作业集群表")]
[SysTable]
public partial class SysJobCluster : EntityBaseId
{
/// <summary>
/// 作业集群Id
/// </summary>
[SugarColumn(ColumnDescription = "作业集群Id", Length = 64)]
[Required, MaxLength(64)]
public virtual string ClusterId { get; set; }
/// <summary>
/// 描述信息
/// </summary>
[SugarColumn(ColumnDescription = "描述信息", Length = 128)]
[MaxLength(128)]
public string? Description { get; set; }
/// <summary>
/// 状态
/// </summary>
[SugarColumn(ColumnDescription = "状态")]
public ClusterStatus Status { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(ColumnDescription = "更新时间")]
public DateTime? UpdatedTime { get; set; }
}

View File

@ -0,0 +1,87 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统作业信息表
/// </summary>
[SugarTable(null, "系统作业信息表")]
[SysTable]
[SugarIndex("index_{table}_J", nameof(JobId), OrderByType.Asc)]
public partial class SysJobDetail : EntityBaseId
{
/// <summary>
/// 作业Id
/// </summary>
[SugarColumn(ColumnDescription = "作业Id", Length = 64)]
[Required, MaxLength(64)]
public virtual string JobId { get; set; }
/// <summary>
/// 组名称
/// </summary>
[SugarColumn(ColumnDescription = "组名称", Length = 128)]
[MaxLength(128)]
public string? GroupName { get; set; } = "default";
/// <summary>
/// 作业类型FullName
/// </summary>
[SugarColumn(ColumnDescription = "作业类型", Length = 128)]
[MaxLength(128)]
public string? JobType { get; set; }
/// <summary>
/// 程序集Name
/// </summary>
[SugarColumn(ColumnDescription = "程序集", Length = 128)]
[MaxLength(128)]
public string? AssemblyName { get; set; }
/// <summary>
/// 描述信息
/// </summary>
[SugarColumn(ColumnDescription = "描述信息", Length = 128)]
[MaxLength(128)]
public string? Description { get; set; }
/// <summary>
/// 是否并行执行
/// </summary>
[SugarColumn(ColumnDescription = "是否并行执行")]
public bool Concurrent { get; set; } = true;
/// <summary>
/// 是否扫描特性触发器
/// </summary>
[SugarColumn(ColumnDescription = "是否扫描特性触发器", ColumnName = "annotation")]
public bool IncludeAnnotation { get; set; } = false;
/// <summary>
/// 额外数据
/// </summary>
[SugarColumn(ColumnDescription = "额外数据", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? Properties { get; set; } = "{}";
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(ColumnDescription = "更新时间")]
public DateTime? UpdatedTime { get; set; }
/// <summary>
/// 作业创建类型
/// </summary>
[SugarColumn(ColumnDescription = "作业创建类型")]
public JobCreateTypeEnum CreateType { get; set; } = JobCreateTypeEnum.BuiltIn;
/// <summary>
/// 脚本代码
/// </summary>
[SugarColumn(ColumnDescription = "脚本代码", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? ScriptCode { get; set; }
}

View File

@ -0,0 +1,147 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统作业触发器表
/// </summary>
[SugarTable(null, "系统作业触发器表")]
[SysTable]
public partial class SysJobTrigger : EntityBaseId
{
/// <summary>
/// 触发器Id
/// </summary>
[SugarColumn(ColumnDescription = "触发器Id", Length = 64)]
[Required, MaxLength(64)]
public virtual string TriggerId { get; set; }
/// <summary>
/// 作业Id
/// </summary>
[SugarColumn(ColumnDescription = "作业Id", Length = 64)]
[Required, MaxLength(64)]
public virtual string JobId { get; set; }
/// <summary>
/// 触发器类型FullName
/// </summary>
[SugarColumn(ColumnDescription = "触发器类型", Length = 128)]
[MaxLength(128)]
public string? TriggerType { get; set; }
/// <summary>
/// 程序集Name
/// </summary>
[SugarColumn(ColumnDescription = "程序集", Length = 128)]
[MaxLength(128)]
public string? AssemblyName { get; set; } = "Furion.Pure";
/// <summary>
/// 参数
/// </summary>
[SugarColumn(ColumnDescription = "参数", Length = 128)]
[MaxLength(128)]
public string? Args { get; set; }
/// <summary>
/// 描述信息
/// </summary>
[SugarColumn(ColumnDescription = "描述信息", Length = 128)]
[MaxLength(128)]
public string? Description { get; set; }
/// <summary>
/// 状态
/// </summary>
[SugarColumn(ColumnDescription = "状态")]
public TriggerStatus Status { get; set; } = TriggerStatus.Ready;
/// <summary>
/// 起始时间
/// </summary>
[SugarColumn(ColumnDescription = "起始时间")]
public DateTime? StartTime { get; set; }
/// <summary>
/// 结束时间
/// </summary>
[SugarColumn(ColumnDescription = "结束时间")]
public DateTime? EndTime { get; set; }
/// <summary>
/// 最近运行时间
/// </summary>
[SugarColumn(ColumnDescription = "最近运行时间")]
public DateTime? LastRunTime { get; set; }
/// <summary>
/// 下一次运行时间
/// </summary>
[SugarColumn(ColumnDescription = "下一次运行时间")]
public DateTime? NextRunTime { get; set; }
/// <summary>
/// 触发次数
/// </summary>
[SugarColumn(ColumnDescription = "触发次数")]
public long NumberOfRuns { get; set; }
/// <summary>
/// 最大触发次数0:不限制n:N次
/// </summary>
[SugarColumn(ColumnDescription = "最大触发次数")]
public long MaxNumberOfRuns { get; set; }
/// <summary>
/// 出错次数
/// </summary>
[SugarColumn(ColumnDescription = "出错次数")]
public long NumberOfErrors { get; set; }
/// <summary>
/// 最大出错次数0:不限制n:N次
/// </summary>
[SugarColumn(ColumnDescription = "最大出错次数")]
public long MaxNumberOfErrors { get; set; }
/// <summary>
/// 重试次数
/// </summary>
[SugarColumn(ColumnDescription = "重试次数")]
public int NumRetries { get; set; }
/// <summary>
/// 重试间隔时间ms
/// </summary>
[SugarColumn(ColumnDescription = "重试间隔时间(ms)")]
public int RetryTimeout { get; set; } = 1000;
/// <summary>
/// 是否立即启动
/// </summary>
[SugarColumn(ColumnDescription = "是否立即启动")]
public bool StartNow { get; set; } = true;
/// <summary>
/// 是否启动时执行一次
/// </summary>
[SugarColumn(ColumnDescription = "是否启动时执行一次")]
public bool RunOnStart { get; set; } = false;
/// <summary>
/// 是否在启动时重置最大触发次数等于一次的作业
/// </summary>
[SugarColumn(ColumnDescription = "是否重置触发次数")]
public bool ResetOnlyOnce { get; set; } = true;
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(ColumnDescription = "更新时间")]
public DateTime? UpdatedTime { get; set; }
}

View File

@ -0,0 +1,72 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统作业触发器运行记录表
/// </summary>
[SugarTable(null, "系统作业触发器运行记录表")]
[SysTable]
public partial class SysJobTriggerRecord : EntityBaseId
{
/// <summary>
/// 作业Id
/// </summary>
[SugarColumn(ColumnDescription = "作业Id", Length = 64)]
[Required, MaxLength(64)]
public virtual string JobId { get; set; }
/// <summary>
/// 触发器Id
/// </summary>
[SugarColumn(ColumnDescription = "触发器Id", Length = 64)]
[Required, MaxLength(64)]
public virtual string TriggerId { get; set; }
/// <summary>
/// 当前运行次数
/// </summary>
[SugarColumn(ColumnDescription = "当前运行次数")]
public long NumberOfRuns { get; set; }
/// <summary>
/// 最近运行时间
/// </summary>
[SugarColumn(ColumnDescription = "最近运行时间")]
public DateTime? LastRunTime { get; set; }
/// <summary>
/// 下一次运行时间
/// </summary>
[SugarColumn(ColumnDescription = "下一次运行时间")]
public DateTime? NextRunTime { get; set; }
/// <summary>
/// 触发器状态
/// </summary>
[SugarColumn(ColumnDescription = "触发器状态")]
public TriggerStatus Status { get; set; } = TriggerStatus.Ready;
/// <summary>
/// 本次执行结果
/// </summary>
[SugarColumn(ColumnDescription = "本次执行结果", Length = 128)]
[MaxLength(128)]
public string? Result { get; set; }
/// <summary>
/// 本次执行耗时
/// </summary>
[SugarColumn(ColumnDescription = "本次执行耗时")]
public long ElapsedTime { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[SugarColumn(ColumnDescription = "创建时间")]
public DateTime? CreatedTime { get; set; }
}

View File

@ -0,0 +1,89 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统域登录信息配置表
/// </summary>
[SugarTable(null, "系统域登录信息配置表")]
[SysTable]
public class SysLdap : EntityTenant
{
/// <summary>
/// 主机
/// </summary>
[SugarColumn(ColumnDescription = "主机", Length = 128)]
[Required]
public virtual string Host { get; set; }
/// <summary>
/// 端口
/// </summary>
[SugarColumn(ColumnDescription = "端口")]
public virtual int Port { get; set; }
/// <summary>
/// 用户搜索基准
/// </summary>
[SugarColumn(ColumnDescription = "用户搜索基准", Length = 128)]
[Required]
public virtual string BaseDn { get; set; }
/// <summary>
/// 绑定DN(有管理权限制的用户)
/// </summary>
[SugarColumn(ColumnDescription = "绑定DN", Length = 32)]
[Required]
public virtual string BindDn { get; set; }
/// <summary>
/// 绑定密码(有管理权限制的用户密码)
/// </summary>
[SugarColumn(ColumnDescription = "绑定密码", Length = 512)]
[Required]
public virtual string BindPass { get; set; }
/// <summary>
/// 用户过滤规则
/// </summary>
[SugarColumn(ColumnDescription = "用户过滤规则", Length = 128)]
[Required]
public virtual string AuthFilter { get; set; } = "sAMAccountName=%s";
/// <summary>
/// Ldap版本
/// </summary>
[SugarColumn(ColumnDescription = "Ldap版本")]
public int Version { get; set; }
/// <summary>
/// 绑定域账号字段属性值
/// </summary>
[SugarColumn(ColumnDescription = "绑定域账号字段属性值", Length = 32)]
[Required]
public virtual string BindAttrAccount { get; set; } = "sAMAccountName";
/// <summary>
/// 绑定用户EmployeeId属性值
/// </summary>
[SugarColumn(ColumnDescription = "绑定用户EmployeeId属性值", Length = 32)]
[Required]
public virtual string BindAttrEmployeeId { get; set; } = "EmployeeId";
/// <summary>
/// 绑定Code属性值
/// </summary>
[SugarColumn(ColumnDescription = "绑定对象Code属性值", Length = 64)]
[Required]
public virtual string BindAttrCode { get; set; } = "objectGUID";
/// <summary>
/// 状态
/// </summary>
[SugarColumn(ColumnDescription = "状态")]
public StatusEnum Status { get; set; } = StatusEnum.Enable;
}

View File

@ -0,0 +1,58 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统差异日志表
/// </summary>
[SugarTable(null, "系统差异日志表")]
[SysTable]
[LogTable]
public partial class SysLogDiff : EntityBase
{
/// <summary>
/// 操作前记录
/// </summary>
[SugarColumn(ColumnDescription = "操作前记录", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? BeforeData { get; set; }
/// <summary>
/// 操作后记录
/// </summary>
[SugarColumn(ColumnDescription = "操作后记录", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? AfterData { get; set; }
/// <summary>
/// Sql
/// </summary>
[SugarColumn(ColumnDescription = "Sql", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? Sql { get; set; }
/// <summary>
/// 参数 手动传入的参数
/// </summary>
[SugarColumn(ColumnDescription = "参数", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? Parameters { get; set; }
/// <summary>
/// 业务对象
/// </summary>
[SugarColumn(ColumnDescription = "业务对象", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? BusinessData { get; set; }
/// <summary>
/// 差异操作
/// </summary>
[SugarColumn(ColumnDescription = "差异操作", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? DiffType { get; set; }
/// <summary>
/// 耗时
/// </summary>
[SugarColumn(ColumnDescription = "耗时")]
public long? Elapsed { get; set; }
}

View File

@ -0,0 +1,72 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统异常日志表
/// </summary>
[SugarTable(null, "系统异常日志表")]
[SysTable]
[LogTable]
public partial class SysLogEx : SysLogVis
{
/// <summary>
/// 请求方式
/// </summary>
[SugarColumn(ColumnDescription = "请求方式", Length = 32)]
[MaxLength(32)]
public string? HttpMethod { get; set; }
/// <summary>
/// 请求地址
/// </summary>
[SugarColumn(ColumnDescription = "请求地址", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? RequestUrl { get; set; }
/// <summary>
/// 请求参数
/// </summary>
[SugarColumn(ColumnDescription = "请求参数", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? RequestParam { get; set; }
/// <summary>
/// 返回结果
/// </summary>
[SugarColumn(ColumnDescription = "返回结果", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? ReturnResult { get; set; }
/// <summary>
/// 事件Id
/// </summary>
[SugarColumn(ColumnDescription = "事件Id")]
public int? EventId { get; set; }
/// <summary>
/// 线程Id
/// </summary>
[SugarColumn(ColumnDescription = "线程Id")]
public int? ThreadId { get; set; }
/// <summary>
/// 请求跟踪Id
/// </summary>
[SugarColumn(ColumnDescription = "请求跟踪Id", Length = 128)]
[MaxLength(128)]
public string? TraceId { get; set; }
/// <summary>
/// 异常信息
/// </summary>
[SugarColumn(ColumnDescription = "异常信息", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? Exception { get; set; }
/// <summary>
/// 日志消息Json
/// </summary>
[SugarColumn(ColumnDescription = "日志消息Json", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? Message { get; set; }
}

View File

@ -0,0 +1,72 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统操作日志表
/// </summary>
[SugarTable(null, "系统操作日志表")]
[SysTable]
[LogTable]
public partial class SysLogOp : SysLogVis
{
/// <summary>
/// 请求方式
/// </summary>
[SugarColumn(ColumnDescription = "请求方式", Length = 32)]
[MaxLength(32)]
public string? HttpMethod { get; set; }
/// <summary>
/// 请求地址
/// </summary>
[SugarColumn(ColumnDescription = "请求地址", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? RequestUrl { get; set; }
/// <summary>
/// 请求参数
/// </summary>
[SugarColumn(ColumnDescription = "请求参数", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? RequestParam { get; set; }
/// <summary>
/// 返回结果
/// </summary>
[SugarColumn(ColumnDescription = "返回结果", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? ReturnResult { get; set; }
/// <summary>
/// 事件Id
/// </summary>
[SugarColumn(ColumnDescription = "事件Id")]
public int? EventId { get; set; }
/// <summary>
/// 线程Id
/// </summary>
[SugarColumn(ColumnDescription = "线程Id")]
public int? ThreadId { get; set; }
/// <summary>
/// 请求跟踪Id
/// </summary>
[SugarColumn(ColumnDescription = "请求跟踪Id", Length = 128)]
[MaxLength(128)]
public string? TraceId { get; set; }
/// <summary>
/// 异常信息
/// </summary>
[SugarColumn(ColumnDescription = "异常信息", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? Exception { get; set; }
/// <summary>
/// 日志消息Json
/// </summary>
[SugarColumn(ColumnDescription = "日志消息Json", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? Message { get; set; }
}

View File

@ -0,0 +1,116 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统访问日志表
/// </summary>
[SugarTable(null, "系统访问日志表")]
[SysTable]
[LogTable]
public partial class SysLogVis : EntityTenant
{
/// <summary>
/// 模块名称
/// </summary>
[SugarColumn(ColumnDescription = "模块名称", Length = 256)]
[MaxLength(256)]
public string? ControllerName { get; set; }
/// <summary>
/// 方法名称
///</summary>
[SugarColumn(ColumnDescription = "方法名称", Length = 256)]
[MaxLength(256)]
public string? ActionName { get; set; }
/// <summary>
/// 显示名称
///</summary>
[SugarColumn(ColumnDescription = "显示名称", Length = 256)]
[MaxLength(256)]
public string? DisplayTitle { get; set; }
/// <summary>
/// 执行状态
/// </summary>
[SugarColumn(ColumnDescription = "执行状态", Length = 32)]
[MaxLength(32)]
public string? Status { get; set; }
/// <summary>
/// IP地址
/// </summary>
[SugarColumn(ColumnDescription = "IP地址", Length = 256)]
[MaxLength(256)]
public string? RemoteIp { get; set; }
/// <summary>
/// 登录地点
/// </summary>
[SugarColumn(ColumnDescription = "登录地点", Length = 128)]
[MaxLength(128)]
public string? Location { get; set; }
/// <summary>
/// 经度
/// </summary>
[SugarColumn(ColumnDescription = "经度")]
public double? Longitude { get; set; }
/// <summary>
/// 维度
/// </summary>
[SugarColumn(ColumnDescription = "维度")]
public double? Latitude { get; set; }
/// <summary>
/// 浏览器
/// </summary>
[SugarColumn(ColumnDescription = "浏览器", Length = 1024)]
[MaxLength(1024)]
public string? Browser { get; set; }
/// <summary>
/// 操作系统
/// </summary>
[SugarColumn(ColumnDescription = "操作系统", Length = 256)]
[MaxLength(256)]
public string? Os { get; set; }
/// <summary>
/// 操作用时
/// </summary>
[SugarColumn(ColumnDescription = "操作用时")]
public long? Elapsed { get; set; }
/// <summary>
/// 日志时间
/// </summary>
[SugarColumn(ColumnDescription = "日志时间")]
public DateTime? LogDateTime { get; set; }
/// <summary>
/// 日志级别
/// </summary>
[SugarColumn(ColumnDescription = "日志级别")]
public LogLevel? LogLevel { get; set; }
/// <summary>
/// 账号
/// </summary>
[SugarColumn(ColumnDescription = "账号", Length = 32)]
[MaxLength(32)]
public string? Account { get; set; }
/// <summary>
/// 真实姓名
/// </summary>
[SugarColumn(ColumnDescription = "真实姓名", Length = 32)]
[MaxLength(32)]
public string? RealName { get; set; }
}

View File

@ -0,0 +1,134 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统菜单表
/// </summary>
[SugarTable(null, "系统菜单表")]
[SysTable]
[SugarIndex("index_{table}_T", nameof(Title), OrderByType.Asc)]
[SugarIndex("index_{table}_T2", nameof(Type), OrderByType.Asc)]
public partial class SysMenu : EntityBase
{
/// <summary>
/// 父Id
/// </summary>
[SugarColumn(ColumnDescription = "父Id")]
public long Pid { get; set; }
/// <summary>
/// 菜单类型1目录 2菜单 3按钮
/// </summary>
[SugarColumn(ColumnDescription = "菜单类型")]
public MenuTypeEnum Type { get; set; }
/// <summary>
/// 路由名称
/// </summary>
[SugarColumn(ColumnDescription = "路由名称", Length = 64)]
[MaxLength(64)]
public string? Name { get; set; }
/// <summary>
/// 路由地址
/// </summary>
[SugarColumn(ColumnDescription = "路由地址", Length = 128)]
[MaxLength(128)]
public string? Path { get; set; }
/// <summary>
/// 组件路径
/// </summary>
[SugarColumn(ColumnDescription = "组件路径", Length = 128)]
[MaxLength(128)]
public string? Component { get; set; }
/// <summary>
/// 重定向
/// </summary>
[SugarColumn(ColumnDescription = "重定向", Length = 128)]
[MaxLength(128)]
public string? Redirect { get; set; }
/// <summary>
/// 权限标识
/// </summary>
[SugarColumn(ColumnDescription = "权限标识", Length = 128)]
[MaxLength(128)]
public string? Permission { get; set; }
/// <summary>
/// 菜单名称
/// </summary>
[SugarColumn(ColumnDescription = "菜单名称", Length = 64)]
[Required, MaxLength(64)]
public virtual string Title { get; set; }
/// <summary>
/// 图标
/// </summary>
[SugarColumn(ColumnDescription = "图标", Length = 128)]
[MaxLength(128)]
public string? Icon { get; set; }
/// <summary>
/// 是否内嵌
/// </summary>
[SugarColumn(ColumnDescription = "是否内嵌")]
public bool IsIframe { get; set; }
/// <summary>
/// 外链链接
/// </summary>
[SugarColumn(ColumnDescription = "外链链接", Length = 256)]
[MaxLength(256)]
public string? OutLink { get; set; }
/// <summary>
/// 是否隐藏
/// </summary>
[SugarColumn(ColumnDescription = "是否隐藏")]
public bool IsHide { get; set; }
/// <summary>
/// 是否缓存
/// </summary>
[SugarColumn(ColumnDescription = "是否缓存")]
public bool IsKeepAlive { get; set; } = true;
/// <summary>
/// 是否固定
/// </summary>
[SugarColumn(ColumnDescription = "是否固定")]
public bool IsAffix { get; set; }
/// <summary>
/// 排序
/// </summary>
[SugarColumn(ColumnDescription = "排序")]
public int OrderNo { get; set; } = 100;
/// <summary>
/// 状态
/// </summary>
[SugarColumn(ColumnDescription = "状态")]
public StatusEnum Status { get; set; } = StatusEnum.Enable;
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注", Length = 256)]
[MaxLength(256)]
public string? Remark { get; set; }
/// <summary>
/// 菜单子项
/// </summary>
[SugarColumn(IsIgnore = true)]
public List<SysMenu> Children { get; set; } = new List<SysMenu>();
}

View File

@ -0,0 +1,82 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统通知公告表
/// </summary>
[SugarTable(null, "系统通知公告表")]
[SysTable]
[SugarIndex("index_{table}_T", nameof(Type), OrderByType.Asc)]
public partial class SysNotice : EntityBase
{
/// <summary>
/// 标题
/// </summary>
[SugarColumn(ColumnDescription = "标题", Length = 32)]
[Required, MaxLength(32)]
[SensitiveDetection('*')]
public virtual string Title { get; set; }
/// <summary>
/// 内容
/// </summary>
[SugarColumn(ColumnDescription = "内容", ColumnDataType = StaticConfig.CodeFirst_BigString)]
[Required]
[SensitiveDetection('*')]
public virtual string Content { get; set; }
/// <summary>
/// 类型1通知 2公告
/// </summary>
[SugarColumn(ColumnDescription = "类型1通知 2公告")]
public NoticeTypeEnum Type { get; set; }
/// <summary>
/// 发布人Id
/// </summary>
[SugarColumn(ColumnDescription = "发布人Id")]
public long PublicUserId { get; set; }
/// <summary>
/// 发布人姓名
/// </summary>
[SugarColumn(ColumnDescription = "发布人姓名", Length = 32)]
[MaxLength(32)]
public string? PublicUserName { get; set; }
/// <summary>
/// 发布机构Id
/// </summary>
[SugarColumn(ColumnDescription = "发布机构Id")]
public long PublicOrgId { get; set; }
/// <summary>
/// 发布机构名称
/// </summary>
[SugarColumn(ColumnDescription = "发布机构名称", Length = 64)]
[MaxLength(64)]
public string? PublicOrgName { get; set; }
/// <summary>
/// 发布时间
/// </summary>
[SugarColumn(ColumnDescription = "发布时间")]
public DateTime? PublicTime { get; set; }
/// <summary>
/// 撤回时间
/// </summary>
[SugarColumn(ColumnDescription = "撤回时间")]
public DateTime? CancelTime { get; set; }
/// <summary>
/// 状态0草稿 1发布 2撤回 3删除
/// </summary>
[SugarColumn(ColumnDescription = "状态0草稿 1发布 2撤回 3删除")]
public NoticeStatusEnum Status { get; set; }
}

View File

@ -0,0 +1,45 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统通知公告用户表
/// </summary>
[SugarTable(null, "系统通知公告用户表")]
[SysTable]
public partial class SysNoticeUser : EntityBaseId
{
/// <summary>
/// 通知公告Id
/// </summary>
[SugarColumn(ColumnDescription = "通知公告Id")]
public long NoticeId { get; set; }
/// <summary>
/// 通知公告
/// </summary>
[Navigate(NavigateType.OneToOne, nameof(NoticeId))]
public SysNotice SysNotice { get; set; }
/// <summary>
/// 用户Id
/// </summary>
[SugarColumn(ColumnDescription = "用户Id")]
public long UserId { get; set; }
/// <summary>
/// 阅读时间
/// </summary>
[SugarColumn(ColumnDescription = "阅读时间")]
public DateTime? ReadTime { get; set; }
/// <summary>
/// 状态0未读 1已读
/// </summary>
[SugarColumn(ColumnDescription = "状态0未读 1已读")]
public NoticeUserStatusEnum ReadStatus { get; set; } = NoticeUserStatusEnum.UNREAD;
}

View File

@ -0,0 +1,166 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统三方用户表
/// </summary>
[SugarTable(null, "系统三方用户表")]
[SysTable]
[SugarIndex("index_{table}_N", nameof(NickName), OrderByType.Asc)]
[SugarIndex("index_{table}_M", nameof(Mobile), OrderByType.Asc)]
public partial class SysOAuthUser : EntityBase
{
/// <summary>
/// 系统用户Id
/// </summary>
[SugarColumn(ColumnDescription = "系统用户Id")]
public long UserId { get; set; }
/// <summary>
/// 系统用户
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(UserId))]
public SysUser SysUser { get; set; }
/// <summary>
/// 平台类型
/// </summary>
[SugarColumn(ColumnDescription = "平台类型")]
public PlatformTypeEnum PlatformType { get; set; } = PlatformTypeEnum.;
/// <summary>
/// OpenId
/// </summary>
[SugarColumn(ColumnDescription = "OpenId", Length = 64)]
[MaxLength(64)]
public virtual string? OpenId { get; set; }
/// <summary>
/// 会话密钥
/// </summary>
[SugarColumn(ColumnDescription = "会话密钥", Length = 256)]
[MaxLength(256)]
public string? SessionKey { get; set; }
/// <summary>
/// UnionId
/// </summary>
[SugarColumn(ColumnDescription = "UnionId", Length = 64)]
[MaxLength(64)]
public string? UnionId { get; set; }
/// <summary>
/// 账号
/// </summary>
[SugarColumn(ColumnDescription = "账号", Length = 128)]
[MaxLength(128)]
public string? Account { get; set; }
/// <summary>
/// 昵称
/// </summary>
[SugarColumn(ColumnDescription = "昵称", Length = 64)]
[Required, MaxLength(64)]
public string NickName { get; set; }
/// <summary>
/// 头像
/// </summary>
[SugarColumn(ColumnDescription = "头像", Length = 256)]
[MaxLength(256)]
public string? Avatar { get; set; }
/// <summary>
/// 邮箱
/// </summary>
[SugarColumn(ColumnDescription = "邮箱", Length = 128)]
[MaxLength(128)]
public virtual string? Email { get; set; }
/// <summary>
/// 手机号码
/// </summary>
[SugarColumn(ColumnDescription = "手机号码", Length = 16)]
[MaxLength(16)]
public string? Mobile { get; set; }
/// <summary>
/// 性别
/// </summary>
[SugarColumn(ColumnDescription = "性别")]
public int? Sex { get; set; } = 1;
/// <summary>
/// IP 地址
/// </summary>
[SugarColumn(ColumnDescription = "IP 地址", Length = 256)]
[MaxLength(256)]
public string? IpAddress { get; set; }
/// <summary>
/// 语言
/// </summary>
[SugarColumn(ColumnDescription = "语言", Length = 64)]
[MaxLength(64)]
public string? Language { get; set; }
/// <summary>
/// 城市
/// </summary>
[SugarColumn(ColumnDescription = "城市", Length = 64)]
[MaxLength(64)]
public string? City { get; set; }
/// <summary>
/// 省
/// </summary>
[SugarColumn(ColumnDescription = "省", Length = 64)]
[MaxLength(64)]
public string? Province { get; set; }
/// <summary>
/// 国家
/// </summary>
[SugarColumn(ColumnDescription = "国家", Length = 64)]
[MaxLength(64)]
public string? Country { get; set; }
/// <summary>
/// AccessToken
/// </summary>
[SugarColumn(ColumnDescription = "AccessToken", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? AccessToken { get; set; }
/// <summary>
/// RefreshToken
/// </summary>
[SugarColumn(ColumnDescription = "RefreshToken", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? RefreshToken { get; set; }
/// <summary>
/// 过期时间
/// </summary>
[SugarColumn(ColumnDescription = "ExpiresIn")]
public int? ExpiresIn { get; set; }
/// <summary>
/// 用户授权的作用域,使用逗号分隔
/// </summary>
[SugarColumn(ColumnDescription = "授权作用域", Length = 64)]
[MaxLength(64)]
public string? Scope { get; set; }
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注", Length = 128)]
[MaxLength(128)]
public string? Remark { get; set; }
}

View File

@ -0,0 +1,68 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统在线用户表
/// </summary>
[SugarTable(null, "系统在线用户表")]
[SysTable]
public partial class SysOnlineUser : EntityTenantId
{
/// <summary>
/// 连接Id
/// </summary>
[SugarColumn(ColumnDescription = "连接Id")]
public string? ConnectionId { get; set; }
/// <summary>
/// 用户Id
/// </summary>
[SugarColumn(ColumnDescription = "用户Id")]
public long UserId { get; set; }
/// <summary>
/// 账号
/// </summary>
[SugarColumn(ColumnDescription = "账号", Length = 32)]
[Required, MaxLength(32)]
public virtual string UserName { get; set; }
/// <summary>
/// 真实姓名
/// </summary>
[SugarColumn(ColumnDescription = "真实姓名", Length = 32)]
[MaxLength(32)]
public string? RealName { get; set; }
/// <summary>
/// 连接时间
/// </summary>
[SugarColumn(ColumnDescription = "连接时间")]
public DateTime? Time { get; set; }
/// <summary>
/// 连接IP
/// </summary>
[SugarColumn(ColumnDescription = "连接IP", Length = 256)]
[MaxLength(256)]
public string? Ip { get; set; }
/// <summary>
/// 浏览器
/// </summary>
[SugarColumn(ColumnDescription = "浏览器", Length = 128)]
[MaxLength(128)]
public string? Browser { get; set; }
/// <summary>
/// 操作系统
/// </summary>
[SugarColumn(ColumnDescription = "操作系统", Length = 128)]
[MaxLength(128)]
public string? Os { get; set; }
}

View File

@ -0,0 +1,58 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 开放接口身份表
/// </summary>
[SugarTable(null, "开放接口身份表")]
[SysTable]
[SugarIndex("index_{table}_A", nameof(AccessKey), OrderByType.Asc)]
public partial class SysOpenAccess : EntityBase
{
/// <summary>
/// 身份标识
/// </summary>
[SugarColumn(ColumnDescription = "身份标识", Length = 128)]
[Required, MaxLength(128)]
public virtual string AccessKey { get; set; }
/// <summary>
/// 密钥
/// </summary>
[SugarColumn(ColumnDescription = "密钥", Length = 256)]
[Required, MaxLength(256)]
public virtual string AccessSecret { get; set; }
/// <summary>
/// 绑定租户Id
/// </summary>
[SugarColumn(ColumnDescription = "绑定租户Id")]
public long BindTenantId { get; set; }
/// <summary>
/// 绑定租户
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(BindTenantId))]
public SysTenant BindTenant { get; set; }
/// <summary>
/// 绑定用户Id
/// </summary>
[SugarColumn(ColumnDescription = "绑定用户Id")]
public virtual long BindUserId { get; set; }
/// <summary>
/// 绑定用户
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(BindUserId))]
public SysUser BindUser { get; set; }
}

View File

@ -0,0 +1,96 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统机构表
/// </summary>
[SugarTable(null, "系统机构表")]
[SysTable]
[SugarIndex("index_{table}_N", nameof(Name), OrderByType.Asc)]
[SugarIndex("index_{table}_C", nameof(Code), OrderByType.Asc)]
[SugarIndex("index_{table}_T", nameof(Type), OrderByType.Asc)]
public partial class SysOrg : EntityTenant
{
/// <summary>
/// 父Id
/// </summary>
[SugarColumn(ColumnDescription = "父Id")]
public long Pid { get; set; }
/// <summary>
/// 名称
/// </summary>
[SugarColumn(ColumnDescription = "名称", Length = 64)]
[Required, MaxLength(64)]
public virtual string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
[SugarColumn(ColumnDescription = "编码", Length = 64)]
[MaxLength(64)]
public string? Code { get; set; }
/// <summary>
/// 级别
/// </summary>
[SugarColumn(ColumnDescription = "级别")]
public int? Level { get; set; }
/// <summary>
/// 机构类型-数据字典
/// </summary>
[SugarColumn(ColumnDescription = "机构类型", Length = 64)]
[MaxLength(64)]
public string? Type { get; set; }
/// <summary>
/// 负责人Id
/// </summary>
[SugarColumn(ColumnDescription = "负责人Id", IsNullable = true)]
public long? DirectorId { get; set; }
/// <summary>
/// 负责人
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(DirectorId))]
public SysUser Director { get; set; }
/// <summary>
/// 排序
/// </summary>
[SugarColumn(ColumnDescription = "排序")]
public int OrderNo { get; set; } = 100;
/// <summary>
/// 状态
/// </summary>
[SugarColumn(ColumnDescription = "状态")]
public StatusEnum Status { get; set; } = StatusEnum.Enable;
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注", Length = 128)]
[MaxLength(128)]
public string? Remark { get; set; }
/// <summary>
/// 机构子项
/// </summary>
[SugarColumn(IsIgnore = true)]
public List<SysOrg> Children { get; set; }
/// <summary>
/// 是否禁止选中
/// </summary>
[SugarColumn(IsIgnore = true)]
public bool Disabled { get; set; }
}

View File

@ -0,0 +1,56 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统动态插件表
/// </summary>
[SugarTable(null, "系统动态插件表")]
[SysTable]
[SugarIndex("index_{table}_N", nameof(Name), OrderByType.Asc)]
public partial class SysPlugin : EntityTenant
{
/// <summary>
/// 名称
/// </summary>
[SugarColumn(ColumnDescription = "名称", Length = 64)]
[Required, MaxLength(64)]
public virtual string Name { get; set; }
/// <summary>
/// C#代码
/// </summary>
[SugarColumn(ColumnDescription = "C#代码", ColumnDataType = StaticConfig.CodeFirst_BigString)]
[Required]
public virtual string CsharpCode { get; set; }
/// <summary>
/// 程序集名称
/// </summary>
[SugarColumn(ColumnDescription = "程序集名称", Length = 512)]
[MaxLength(512)]
public string? AssemblyName { get; set; }
/// <summary>
/// 排序
/// </summary>
[SugarColumn(ColumnDescription = "排序")]
public int OrderNo { get; set; } = 100;
/// <summary>
/// 状态
/// </summary>
[SugarColumn(ColumnDescription = "状态")]
public StatusEnum Status { get; set; } = StatusEnum.Enable;
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注", Length = 128)]
[MaxLength(128)]
public string? Remark { get; set; }
}

View File

@ -0,0 +1,50 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统职位表
/// </summary>
[SugarTable(null, "系统职位表")]
[SysTable]
[SugarIndex("index_{table}_N", nameof(Name), OrderByType.Asc)]
[SugarIndex("index_{table}_C", nameof(Code), OrderByType.Asc)]
public partial class SysPos : EntityTenant
{
/// <summary>
/// 名称
/// </summary>
[SugarColumn(ColumnDescription = "名称", Length = 64)]
[Required, MaxLength(64)]
public virtual string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
[SugarColumn(ColumnDescription = "编码", Length = 64)]
[MaxLength(64)]
public string? Code { get; set; }
/// <summary>
/// 排序
/// </summary>
[SugarColumn(ColumnDescription = "排序")]
public int OrderNo { get; set; } = 100;
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注", Length = 128)]
[MaxLength(128)]
public string? Remark { get; set; }
/// <summary>
/// 状态
/// </summary>
[SugarColumn(ColumnDescription = "状态")]
public StatusEnum Status { get; set; } = StatusEnum.Enable;
}

View File

@ -0,0 +1,69 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统打印模板表
/// </summary>
[SugarTable(null, "系统打印模板表")]
[SysTable]
[SugarIndex("index_{table}_N", nameof(Name), OrderByType.Asc)]
public partial class SysPrint : EntityTenant
{
/// <summary>
/// 名称
/// </summary>
[SugarColumn(ColumnDescription = "名称", Length = 64)]
[Required, MaxLength(64)]
public virtual string Name { get; set; }
/// <summary>
/// 打印模板
/// </summary>
[SugarColumn(ColumnDescription = "打印模板", ColumnDataType = StaticConfig.CodeFirst_BigString)]
[Required]
public virtual string Template { get; set; }
/// <summary>
/// 打印类型
/// </summary>
[SugarColumn(ColumnDescription = "打印类型")]
[Required]
public virtual PrintTypeEnum? PrintType { get; set; }
/// <summary>
/// 客户端服务地址
/// </summary>
[SugarColumn(ColumnDescription = "客户端服务地址", Length = 128)]
[MaxLength(128)]
public virtual string? ClientServiceAddress { get; set; }
/// <summary>
/// 打印参数
/// </summary>
[SugarColumn(ColumnDescription = "打印参数", ColumnDataType = "text")]
public virtual string? PrintParam { get; set; }
/// <summary>
/// 排序
/// </summary>
[SugarColumn(ColumnDescription = "排序")]
public int OrderNo { get; set; } = 100;
/// <summary>
/// 状态
/// </summary>
[SugarColumn(ColumnDescription = "状态")]
public StatusEnum Status { get; set; } = StatusEnum.Enable;
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注", Length = 128)]
[MaxLength(128)]
public string? Remark { get; set; }
}

View File

@ -0,0 +1,109 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统行政地区表
/// </summary>
[SugarTable(null, "系统行政地区表")]
[SysTable]
[SugarIndex("index_{table}_N", nameof(Name), OrderByType.Asc)]
[SugarIndex("index_{table}_C", nameof(Code), OrderByType.Asc)]
public partial class SysRegion : EntityBaseId
{
/// <summary>
/// 父Id
/// </summary>
[SugarColumn(ColumnDescription = "父Id")]
public long Pid { get; set; }
/// <summary>
/// 名称
/// </summary>
[SugarColumn(ColumnDescription = "名称", Length = 128)]
[Required, MaxLength(128)]
public virtual string Name { get; set; }
/// <summary>
/// 简称
/// </summary>
[SugarColumn(ColumnDescription = "简称", Length = 32)]
[MaxLength(32)]
public string? ShortName { get; set; }
/// <summary>
/// 组合名
/// </summary>
[SugarColumn(ColumnDescription = "组合名", Length = 64)]
[MaxLength(64)]
public string? MergerName { get; set; }
/// <summary>
/// 行政代码
/// </summary>
[SugarColumn(ColumnDescription = "行政代码", Length = 32)]
[MaxLength(32)]
public string? Code { get; set; }
/// <summary>
/// 邮政编码
/// </summary>
[SugarColumn(ColumnDescription = "邮政编码", Length = 6)]
[MaxLength(6)]
public string? ZipCode { get; set; }
/// <summary>
/// 区号
/// </summary>
[SugarColumn(ColumnDescription = "区号", Length = 6)]
[MaxLength(6)]
public string? CityCode { get; set; }
/// <summary>
/// 层级
/// </summary>
[SugarColumn(ColumnDescription = "层级")]
public int Level { get; set; }
/// <summary>
/// 拼音
/// </summary>
[SugarColumn(ColumnDescription = "拼音", Length = 128)]
[MaxLength(128)]
public string? PinYin { get; set; }
/// <summary>
/// 经度
/// </summary>
[SugarColumn(ColumnDescription = "经度")]
public float Lng { get; set; }
/// <summary>
/// 维度
/// </summary>
[SugarColumn(ColumnDescription = "维度")]
public float Lat { get; set; }
/// <summary>
/// 排序
/// </summary>
[SugarColumn(ColumnDescription = "排序")]
public int OrderNo { get; set; } = 100;
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注", Length = 128)]
[MaxLength(128)]
public string? Remark { get; set; }
/// <summary>
/// 机构子项
/// </summary>
[SugarColumn(IsIgnore = true)]
public List<SysRegion> Children { get; set; }
}

View File

@ -0,0 +1,62 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统角色表
/// </summary>
[SugarTable(null, "系统角色表")]
[SysTable]
[SugarIndex("index_{table}_N", nameof(Name), OrderByType.Asc)]
[SugarIndex("index_{table}_C", nameof(Code), OrderByType.Asc)]
public partial class SysRole : EntityTenant
{
/// <summary>
/// 名称
/// </summary>
[SugarColumn(ColumnDescription = "名称", Length = 64)]
[Required, MaxLength(64)]
public virtual string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
[SugarColumn(ColumnDescription = "编码", Length = 64)]
[MaxLength(64)]
public string? Code { get; set; }
/// <summary>
/// 排序
/// </summary>
[SugarColumn(ColumnDescription = "排序")]
public int OrderNo { get; set; } = 100;
/// <summary>
/// 数据范围1全部数据 2本部门及以下数据 3本部门数据 4仅本人数据 5自定义数据
/// </summary>
[SugarColumn(ColumnDescription = "数据范围")]
public DataScopeEnum DataScope { get; set; } = DataScopeEnum.Self;
/// <summary>
/// 是否是内置Y-是N-否)
/// </summary>
[SugarColumn(ColumnDescription = "是否是内置")]
public YesNoEnum SysFlag { get; set; }
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注", Length = 128)]
[MaxLength(128)]
public string? Remark { get; set; }
/// <summary>
/// 状态
/// </summary>
[SugarColumn(ColumnDescription = "状态")]
public StatusEnum Status { get; set; } = StatusEnum.Enable;
}

View File

@ -0,0 +1,28 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统角色接口表
/// </summary>
[SugarTable(null, "系统角色接口表")]
[SysTable]
public class SysRoleApi : EntityBaseId
{
/// <summary>
/// 角色Id
/// </summary>
[SugarColumn(ColumnDescription = "角色Id")]
public long RoleId { get; set; }
/// <summary>
/// 接口路由
/// </summary>
[SugarColumn(ColumnDescription = "接口路由", ColumnDataType = StaticConfig.CodeFirst_BigString)]
[Required]
public string Route { get; set; }
}

View File

@ -0,0 +1,35 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统角色菜单表
/// </summary>
[SugarTable(null, "系统角色菜单表")]
[SysTable]
public class SysRoleMenu : EntityBaseId
{
/// <summary>
/// 角色Id
/// </summary>
[SugarColumn(ColumnDescription = "角色Id")]
public long RoleId { get; set; }
/// <summary>
/// 菜单Id
/// </summary>
[SugarColumn(ColumnDescription = "菜单Id")]
public long MenuId { get; set; }
/// <summary>
/// 菜单
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(MenuId))]
public SysMenu SysMenu { get; set; }
}

View File

@ -0,0 +1,35 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统角色机构表
/// </summary>
[SugarTable(null, "系统角色机构表")]
[SysTable]
public class SysRoleOrg : EntityBaseId
{
/// <summary>
/// 角色Id
/// </summary>
[SugarColumn(ColumnDescription = "角色Id")]
public long RoleId { get; set; }
/// <summary>
/// 机构Id
/// </summary>
[SugarColumn(ColumnDescription = "机构Id")]
public long OrgId { get; set; }
/// <summary>
/// 机构
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(OrgId))]
public SysOrg SysOrg { get; set; }
}

View File

@ -0,0 +1,85 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统租户表
/// </summary>
[SugarTable(null, "系统租户表")]
[SysTable]
public partial class SysTenant : EntityBase
{
/// <summary>
/// 用户Id
/// </summary>
[SugarColumn(ColumnDescription = "用户Id")]
public long UserId { get; set; }
/// <summary>
/// 机构Id
/// </summary>
[SugarColumn(ColumnDescription = "机构Id")]
public long OrgId { get; set; }
/// <summary>
/// 主机
/// </summary>
[SugarColumn(ColumnDescription = "主机", Length = 128)]
[MaxLength(128)]
public string? Host { get; set; }
/// <summary>
/// 租户类型
/// </summary>
[SugarColumn(ColumnDescription = "租户类型")]
public TenantTypeEnum TenantType { get; set; }
/// <summary>
/// 数据库类型
/// </summary>
[SugarColumn(ColumnDescription = "数据库类型")]
public SqlSugar.DbType DbType { get; set; }
/// <summary>
/// 数据库连接
/// </summary>
[SugarColumn(ColumnDescription = "数据库连接", Length = 256)]
[MaxLength(256)]
public string? Connection { get; set; }
/// <summary>
/// 数据库标识
/// </summary>
[SugarColumn(ColumnDescription = "数据库标识", Length = 64)]
[MaxLength(64)]
public string? ConfigId { get; set; }
/// <summary>
/// 从库连接/读写分离
/// </summary>
[SugarColumn(ColumnDescription = "从库连接/读写分离", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? SlaveConnections { get; set; }
/// <summary>
/// 排序
/// </summary>
[SugarColumn(ColumnDescription = "排序")]
public int OrderNo { get; set; } = 100;
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注", Length = 128)]
[MaxLength(128)]
public string? Remark { get; set; }
/// <summary>
/// 状态
/// </summary>
[SugarColumn(ColumnDescription = "状态")]
public StatusEnum Status { get; set; } = StatusEnum.Enable;
}

View File

@ -0,0 +1,315 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统用户表
/// </summary>
[SugarTable(null, "系统用户表")]
[SysTable]
[SugarIndex("index_{table}_A", nameof(Account), OrderByType.Asc)]
[SugarIndex("index_{table}_P", nameof(Phone), OrderByType.Asc)]
public partial class SysUser : EntityTenant
{
/// <summary>
/// 账号
/// </summary>
[SugarColumn(ColumnDescription = "账号", Length = 32)]
[Required, MaxLength(32)]
public virtual string Account { get; set; }
/// <summary>
/// 密码
/// </summary>
[SugarColumn(ColumnDescription = "密码", Length = 512)]
[MaxLength(512)]
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public virtual string Password { get; set; }
/// <summary>
/// 真实姓名
/// </summary>
[SugarColumn(ColumnDescription = "真实姓名", Length = 32)]
[MaxLength(32)]
public virtual string RealName { get; set; }
/// <summary>
/// 昵称
/// </summary>
[SugarColumn(ColumnDescription = "昵称", Length = 32)]
[MaxLength(32)]
public string? NickName { get; set; }
/// <summary>
/// 头像
/// </summary>
[SugarColumn(ColumnDescription = "头像", Length = 512)]
[MaxLength(512)]
public string? Avatar { get; set; }
/// <summary>
/// 性别-男_1、女_2
/// </summary>
[SugarColumn(ColumnDescription = "性别")]
public GenderEnum Sex { get; set; } = GenderEnum.Male;
/// <summary>
/// 年龄
/// </summary>
[SugarColumn(ColumnDescription = "年龄")]
public int Age { get; set; }
/// <summary>
/// 出生日期
/// </summary>
[SugarColumn(ColumnDescription = "出生日期")]
public DateTime? Birthday { get; set; }
/// <summary>
/// 民族
/// </summary>
[SugarColumn(ColumnDescription = "民族", Length = 32)]
[MaxLength(32)]
public string? Nation { get; set; }
/// <summary>
/// 手机号码
/// </summary>
[SugarColumn(ColumnDescription = "手机号码", Length = 16)]
[MaxLength(16)]
public string? Phone { get; set; }
/// <summary>
/// 证件类型
/// </summary>
[SugarColumn(ColumnDescription = "证件类型")]
public CardTypeEnum CardType { get; set; }
/// <summary>
/// 身份证号
/// </summary>
[SugarColumn(ColumnDescription = "身份证号", Length = 32)]
[MaxLength(32)]
public string? IdCardNum { get; set; }
/// <summary>
/// 邮箱
/// </summary>
[SugarColumn(ColumnDescription = "邮箱", Length = 64)]
[MaxLength(64)]
public string? Email { get; set; }
/// <summary>
/// 地址
/// </summary>
[SugarColumn(ColumnDescription = "地址", Length = 256)]
[MaxLength(256)]
public string? Address { get; set; }
/// <summary>
/// 文化程度
/// </summary>
[SugarColumn(ColumnDescription = "文化程度")]
public CultureLevelEnum CultureLevel { get; set; }
/// <summary>
/// 政治面貌
/// </summary>
[SugarColumn(ColumnDescription = "政治面貌", Length = 16)]
[MaxLength(16)]
public string? PoliticalOutlook { get; set; }
/// <summary>
/// 毕业院校
/// </summary>COLLEGE
[SugarColumn(ColumnDescription = "毕业院校", Length = 128)]
[MaxLength(128)]
public string? College { get; set; }
/// <summary>
/// 办公电话
/// </summary>
[SugarColumn(ColumnDescription = "办公电话", Length = 16)]
[MaxLength(16)]
public string? OfficePhone { get; set; }
/// <summary>
/// 紧急联系人
/// </summary>
[SugarColumn(ColumnDescription = "紧急联系人", Length = 32)]
[MaxLength(32)]
public string? EmergencyContact { get; set; }
/// <summary>
/// 紧急联系人电话
/// </summary>
[SugarColumn(ColumnDescription = "紧急联系人电话", Length = 16)]
[MaxLength(16)]
public string? EmergencyPhone { get; set; }
/// <summary>
/// 紧急联系人地址
/// </summary>
[SugarColumn(ColumnDescription = "紧急联系人地址", Length = 256)]
[MaxLength(256)]
public string? EmergencyAddress { get; set; }
/// <summary>
/// 个人简介
/// </summary>
[SugarColumn(ColumnDescription = "个人简介", Length = 512)]
[MaxLength(512)]
public string? Introduction { get; set; }
/// <summary>
/// 排序
/// </summary>
[SugarColumn(ColumnDescription = "排序")]
public int OrderNo { get; set; } = 100;
/// <summary>
/// 状态
/// </summary>
[SugarColumn(ColumnDescription = "状态")]
public StatusEnum Status { get; set; } = StatusEnum.Enable;
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注", Length = 256)]
[MaxLength(256)]
public string? Remark { get; set; }
/// <summary>
/// 账号类型
/// </summary>
[SugarColumn(ColumnDescription = "账号类型")]
public AccountTypeEnum AccountType { get; set; } = AccountTypeEnum.NormalUser;
/// <summary>
/// 直属机构Id
/// </summary>
[SugarColumn(ColumnDescription = "直属机构Id")]
public long OrgId { get; set; }
/// <summary>
/// 直属机构
/// </summary>
[Navigate(NavigateType.OneToOne, nameof(OrgId))]
public SysOrg SysOrg { get; set; }
/// <summary>
/// 直属主管Id
/// </summary>
[SugarColumn(ColumnDescription = "直属主管Id")]
public long? ManagerUserId { get; set; }
/// <summary>
/// 直属主管
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(ManagerUserId))]
public SysUser ManagerUser { get; set; }
/// <summary>
/// 职位Id
/// </summary>
[SugarColumn(ColumnDescription = "职位Id")]
public long PosId { get; set; }
/// <summary>
/// 职位
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(PosId))]
public SysPos SysPos { get; set; }
/// <summary>
/// 工号
/// </summary>
[SugarColumn(ColumnDescription = "工号", Length = 32)]
[MaxLength(32)]
public string? JobNum { get; set; }
/// <summary>
/// 职级
/// </summary>
[SugarColumn(ColumnDescription = "职级", Length = 32)]
[MaxLength(32)]
public string? PosLevel { get; set; }
/// <summary>
/// 职称
/// </summary>
[SugarColumn(ColumnDescription = "职称", Length = 32)]
[MaxLength(32)]
public string? PosTitle { get; set; }
/// <summary>
/// 擅长领域
/// </summary>
[SugarColumn(ColumnDescription = "擅长领域", Length = 32)]
[MaxLength(32)]
public string? Expertise { get; set; }
/// <summary>
/// 办公区域
/// </summary>
[SugarColumn(ColumnDescription = "办公区域", Length = 32)]
[MaxLength(32)]
public string? OfficeZone { get; set; }
/// <summary>
/// 办公室
/// </summary>
[SugarColumn(ColumnDescription = "办公室", Length = 32)]
[MaxLength(32)]
public string? Office { get; set; }
/// <summary>
/// 入职日期
/// </summary>
[SugarColumn(ColumnDescription = "入职日期")]
public DateTime? JoinDate { get; set; }
/// <summary>
/// 最新登录Ip
/// </summary>
[SugarColumn(ColumnDescription = "最新登录Ip", Length = 256)]
[MaxLength(256)]
public string? LastLoginIp { get; set; }
/// <summary>
/// 最新登录地点
/// </summary>
[SugarColumn(ColumnDescription = "最新登录地点", Length = 128)]
[MaxLength(128)]
public string? LastLoginAddress { get; set; }
/// <summary>
/// 最新登录时间
/// </summary>
[SugarColumn(ColumnDescription = "最新登录时间")]
public DateTime? LastLoginTime { get; set; }
/// <summary>
/// 最新登录设备
/// </summary>
[SugarColumn(ColumnDescription = "最新登录设备", Length = 128)]
[MaxLength(128)]
public string? LastLoginDevice { get; set; }
/// <summary>
/// 电子签名
/// </summary>
[SugarColumn(ColumnDescription = "电子签名", Length = 512)]
[MaxLength(512)]
public string? Signature { get; set; }
}

View File

@ -0,0 +1,77 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统用户扩展机构表
/// </summary>
[SugarTable(null, "系统用户扩展机构表")]
[SysTable]
public partial class SysUserExtOrg : EntityBaseId
{
/// <summary>
/// 用户Id
/// </summary>
[SugarColumn(ColumnDescription = "用户Id")]
public long UserId { get; set; }
/// <summary>
/// 用户
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(UserId))]
public SysUser SysUser { get; set; }
/// <summary>
/// 机构Id
/// </summary>
[SugarColumn(ColumnDescription = "机构Id")]
public long OrgId { get; set; }
/// <summary>
/// 机构
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(OrgId))]
public SysOrg SysOrg { get; set; }
/// <summary>
/// 职位Id
/// </summary>
[SugarColumn(ColumnDescription = "职位Id")]
public long PosId { get; set; }
/// <summary>
/// 职位
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(PosId))]
public SysPos SysPos { get; set; }
/// <summary>
/// 工号
/// </summary>
[SugarColumn(ColumnDescription = "工号", Length = 32)]
[MaxLength(32)]
public string? JobNum { get; set; }
/// <summary>
/// 职级
/// </summary>
[SugarColumn(ColumnDescription = "职级", Length = 32)]
[MaxLength(32)]
public string? PosLevel { get; set; }
/// <summary>
/// 入职日期
/// </summary>
[SugarColumn(ColumnDescription = "入职日期")]
public DateTime? JoinDate { get; set; }
}

View File

@ -0,0 +1,44 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统用户域配置表
/// </summary>
[SugarTable(null, "系统用户域配置表")]
[SysTable]
[SugarIndex("index_{table}_A", nameof(Account), OrderByType.Asc)]
[SugarIndex("index_{table}_U", nameof(UserId), OrderByType.Asc)]
public class SysUserLdap : EntityTenant
{
/// <summary>
/// 用户Id
/// </summary>
[SugarColumn(ColumnDescription = "用户Id")]
public long UserId { get; set; }
/// <summary>
/// 域账号
/// AD域对应sAMAccountName
/// Ldap对应uid
/// </summary>
[SugarColumn(ColumnDescription = "域账号", Length = 32)]
[Required]
public string Account { get; set; }
/// <summary>
/// 对应EmployeeId(用于数据导入对照)
/// </summary>
[SugarColumn(ColumnDescription = "对应EmployeeId", Length = 32)]
public string? EmployeeId { get; set; }
/// <summary>
/// 组织代码
/// </summary>
[SugarColumn(ColumnDescription = "组织代码", Length = 64)]
public string? DeptCode { get; set; }
}

View File

@ -0,0 +1,41 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统用户菜单快捷导航表
/// </summary>
[SugarTable(null, "系统用户菜单快捷导航表")]
[SysTable]
public partial class SysUserMenu : EntityBaseId
{
/// <summary>
/// 用户Id
/// </summary>
[SugarColumn(ColumnDescription = "用户Id")]
public long UserId { get; set; }
/// <summary>
/// 用户
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(UserId))]
public SysUser SysUser { get; set; }
/// <summary>
/// 菜单Id
/// </summary>
[SugarColumn(ColumnDescription = "菜单Id")]
public long MenuId { get; set; }
/// <summary>
/// 菜单
/// </summary>
[Navigate(NavigateType.OneToOne, nameof(MenuId))]
public SysMenu SysMenu { get; set; }
}

View File

@ -0,0 +1,41 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统用户角色表
/// </summary>
[SugarTable(null, "系统用户角色表")]
[SysTable]
public class SysUserRole : EntityBaseId
{
/// <summary>
/// 用户Id
/// </summary>
[SugarColumn(ColumnDescription = "用户Id")]
public long UserId { get; set; }
/// <summary>
/// 用户
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(UserId))]
public SysUser SysUser { get; set; }
/// <summary>
/// 角色Id
/// </summary>
[SugarColumn(ColumnDescription = "角色Id")]
public long RoleId { get; set; }
/// <summary>
/// 角色
/// </summary>
[Navigate(NavigateType.OneToOne, nameof(RoleId))]
public SysRole SysRole { get; set; }
}

View File

@ -0,0 +1,165 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统微信支付表
/// </summary>
[SugarTable(null, "系统微信支付表")]
[SysTable]
public partial class SysWechatPay : EntityBase
{
/// <summary>
/// 微信商户号
/// </summary>
[SugarColumn(ColumnDescription = "微信商户号")]
[Required]
public virtual string MerchantId { get; set; }
/// <summary>
/// 服务商AppId
/// </summary>
[SugarColumn(ColumnDescription = "服务商AppId")]
[Required]
public virtual string AppId { get; set; }
/// <summary>
/// 商户订单号
/// </summary>
[SugarColumn(ColumnDescription = "商户订单号")]
[Required]
public virtual string OutTradeNumber { get; set; }
/// <summary>
/// 支付订单号
/// </summary>
[SugarColumn(ColumnDescription = "支付订单号")]
[Required]
public virtual string TransactionId { get; set; }
/// <summary>
/// 交易类型
/// </summary>
[SugarColumn(ColumnDescription = "交易类型")]
public string? TradeType { get; set; }
/// <summary>
/// 交易状态
/// </summary>
[SugarColumn(ColumnDescription = "交易状态")]
public string? TradeState { get; set; }
/// <summary>
/// 交易状态描述
/// </summary>
[SugarColumn(ColumnDescription = "交易状态描述")]
public string? TradeStateDescription { get; set; }
/// <summary>
/// 付款银行类型
/// </summary>
[SugarColumn(ColumnDescription = "付款银行类型")]
public string? BankType { get; set; }
/// <summary>
/// 订单总金额
/// </summary>
[SugarColumn(ColumnDescription = "订单总金额")]
public int Total { get; set; }
/// <summary>
/// 用户支付金额
/// </summary>
[SugarColumn(ColumnDescription = "用户支付金额")]
public int? PayerTotal { get; set; }
/// <summary>
/// 支付完成时间
/// </summary>
[SugarColumn(ColumnDescription = "支付完成时间")]
public DateTimeOffset? SuccessTime { get; set; }
/// <summary>
/// 交易结束时间
/// </summary>
[SugarColumn(ColumnDescription = "交易结束时间")]
public DateTimeOffset? ExpireTime { get; set; }
/// <summary>
/// 商品描述
/// </summary>
[SugarColumn(ColumnDescription = "商品描述")]
public string? Description { get; set; }
/// <summary>
/// 场景信息
/// </summary>
[SugarColumn(ColumnDescription = "场景信息")]
public string? Scene { get; set; }
/// <summary>
/// 附加数据
/// </summary>
[SugarColumn(ColumnDescription = "附加数据")]
public string? Attachment { get; set; }
/// <summary>
/// 优惠标记
/// </summary>
[SugarColumn(ColumnDescription = "优惠标记")]
public string? GoodsTag { get; set; }
/// <summary>
/// 结算信息
/// </summary>
[SugarColumn(ColumnDescription = "结算信息")]
public string? Settlement { get; set; }
/// <summary>
/// 回调通知地址
/// </summary>
[SugarColumn(ColumnDescription = "回调通知地址")]
public string? NotifyUrl { get; set; }
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注")]
public string? Remark { get; set; }
/// <summary>
/// 微信OpenId标识
/// </summary>
[SugarColumn(ColumnDescription = "微信OpenId标识")]
public string? OpenId { get; set; }
/// <summary>
/// 关联微信用户
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
[Navigate(NavigateType.OneToOne, nameof(OpenId))]
public SysOAuthUser SysOAuthUser { get; set; }
/// <summary>
/// 子商户号
/// </summary>
[SugarColumn(ColumnDescription = "子商户号")]
public string? SubMerchantId { get; set; }
/// <summary>
/// 子商户AppId
/// </summary>
[SugarColumn(ColumnDescription = "回调通知地址")]
public string? SubAppId { get; set; }
/// <summary>
/// 子商户唯一标识
/// </summary>
[SugarColumn(ColumnDescription = "子商户唯一标识")]
public string? SubOpenId { get; set; }
}

View File

@ -0,0 +1,38 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 账号类型枚举
/// </summary>
[Description("账号类型枚举")]
public enum AccountTypeEnum
{
/// <summary>
/// 超级管理员
/// </summary>
[Description("超级管理员")]
SuperAdmin = 999,
/// <summary>
/// 系统管理员
/// </summary>
[Description("系统管理员")]
SysAdmin = 888,
/// <summary>
/// 普通账号
/// </summary>
[Description("普通账号")]
NormalUser = 777,
/// <summary>
/// 会员
/// </summary>
[Description("会员")]
Member = 666,
}

View File

@ -0,0 +1,26 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 缓存类型枚举
/// </summary>
[Description("缓存类型枚举")]
public enum CacheTypeEnum
{
/// <summary>
/// 内存缓存
/// </summary>
[Description("内存缓存")]
Memory,
/// <summary>
/// Redis缓存
/// </summary>
[Description("Redis缓存")]
Redis
}

View File

@ -0,0 +1,50 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 证件类型枚举
/// </summary>
[Description("证件类型枚举")]
public enum CardTypeEnum
{
/// <summary>
/// 身份证
/// </summary>
[Description("身份证")]
IdCard = 0,
/// <summary>
/// 护照
/// </summary>
[Description("护照")]
PassportCard = 1,
/// <summary>
/// 出生证
/// </summary>
[Description("出生证")]
BirthCard = 2,
/// <summary>
/// 港澳台通行证
/// </summary>
[Description("港澳台通行证")]
GatCard = 3,
/// <summary>
/// 外国人居留证
/// </summary>
[Description("外国人居留证")]
ForeignCard = 4,
/// <summary>
/// 营业执照
/// </summary>
[Description("营业执照")]
License = 5,
}

View File

@ -0,0 +1,32 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 密码加密枚举
/// </summary>
[Description("密码加密枚举")]
public enum CryptogramEnum
{
/// <summary>
/// MD5
/// </summary>
[Description("MD5")]
MD5 = 0,
/// <summary>
/// SM2国密
/// </summary>
[Description("SM2")]
SM2 = 1,
/// <summary>
/// SM4国密
/// </summary>
[Description("SM4")]
SM4 = 2
}

View File

@ -0,0 +1,92 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 文化程度枚举
/// </summary>
[Description("文化程度枚举")]
public enum CultureLevelEnum
{
/// <summary>
/// 其他
/// </summary>
[Description("其他")]
Level0 = 0,
/// <summary>
/// 文盲
/// </summary>
[Description("文盲")]
Level1 = 1,
/// <summary>
/// 小学
/// </summary>
[Description("小学")]
Level2 = 2,
/// <summary>
/// 初中
/// </summary>
[Description("初中")]
Level3 = 3,
/// <summary>
/// 普通高中
/// </summary>
[Description("普通高中")]
Level4 = 4,
/// <summary>
/// 技工学校
/// </summary>
[Description("技工学校")]
Level5 = 5,
/// <summary>
/// 职业教育
/// </summary>
[Description("职业教育")]
Level6 = 6,
/// <summary>
/// 职业高中
/// </summary>
[Description("职业高中")]
Level7 = 7,
/// <summary>
/// 中等专科
/// </summary>
[Description("中等专科")]
Level8 = 8,
/// <summary>
/// 大学专科
/// </summary>
[Description("大学专科")]
Level9 = 9,
/// <summary>
/// 大学本科
/// </summary>
[Description("大学本科")]
Level10 = 10,
/// <summary>
/// 硕士研究生
/// </summary>
[Description("硕士研究生")]
Level11 = 11,
/// <summary>
/// 博士研究生
/// </summary>
[Description("博士研究生")]
Level12 = 12,
}

View File

@ -0,0 +1,92 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 数据操作类型枚举
/// </summary>
[Description("数据操作类型枚举")]
public enum DataOpTypeEnum
{
/// <summary>
/// 其它
/// </summary>
[Description("其它")]
Other,
/// <summary>
/// 增加
/// </summary>
[Description("增加")]
Add,
/// <summary>
/// 删除
/// </summary>
[Description("删除")]
Delete,
/// <summary>
/// 编辑
/// </summary>
[Description("编辑")]
Edit,
/// <summary>
/// 更新
/// </summary>
[Description("更新")]
Update,
/// <summary>
/// 查询
/// </summary>
[Description("查询")]
Query,
/// <summary>
/// 详情
/// </summary>
[Description("详情")]
Detail,
/// <summary>
/// 树
/// </summary>
[Description("树")]
Tree,
/// <summary>
/// 导入
/// </summary>
[Description("导入")]
Import,
/// <summary>
/// 导出
/// </summary>
[Description("导出")]
Export,
/// <summary>
/// 授权
/// </summary>
[Description("授权")]
Grant,
/// <summary>
/// 强退
/// </summary>
[Description("强退")]
Force,
/// <summary>
/// 清空
/// </summary>
[Description("清空")]
Clean
}

View File

@ -0,0 +1,44 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 角色数据范围枚举
/// </summary>
[Description("角色数据范围枚举")]
public enum DataScopeEnum
{
/// <summary>
/// 全部数据
/// </summary>
[Description("全部数据")]
All = 1,
/// <summary>
/// 本部门及以下数据
/// </summary>
[Description("本部门及以下数据")]
DeptChild = 2,
/// <summary>
/// 本部门数据
/// </summary>
[Description("本部门数据")]
Dept = 3,
/// <summary>
/// 仅本人数据
/// </summary>
[Description("仅本人数据")]
Self = 4,
/// <summary>
/// 自定义数据
/// </summary>
[Description("自定义数据")]
Define = 5
}

View File

@ -0,0 +1,33 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// ES认证类型枚举
/// <para>https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/_options_on_elasticsearchclientsettings.html</para>
/// </summary>
[Description("ES认证类型枚举")]
public enum ElasticSearchAuthTypeEnum
{
/// <summary>
/// BasicAuthentication
/// </summary>
[Description("BasicAuthentication")]
Basic = 1,
/// <summary>
/// ApiKey
/// </summary>
[Description("ApiKey")]
ApiKey = 2,
/// <summary>
/// Base64ApiKey
/// </summary>
[Description("Base64ApiKey")]
Base64ApiKey = 3
}

View File

@ -0,0 +1,699 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统错误码
/// </summary>
[ErrorCodeType]
[Description("系统错误码")]
public enum ErrorCodeEnum
{
/// <summary>
/// 验证码错误
/// </summary>
[ErrorCodeItemMetadata("验证码错误")]
D0008,
/// <summary>
/// 账号不存在
/// </summary>
[ErrorCodeItemMetadata("账号不存在")]
D0009,
/// <summary>
/// 密匙不匹配
/// </summary>
[ErrorCodeItemMetadata("密匙不匹配")]
D0010,
/// <summary>
/// 密码不正确
/// </summary>
[ErrorCodeItemMetadata("密码不正确")]
D1000,
/// <summary>
/// 非法操作!禁止删除自己
/// </summary>
[ErrorCodeItemMetadata("非法操作,禁止删除自己")]
D1001,
/// <summary>
/// 记录不存在
/// </summary>
[ErrorCodeItemMetadata("记录不存在")]
D1002,
/// <summary>
/// 账号已存在
/// </summary>
[ErrorCodeItemMetadata("账号已存在")]
D1003,
/// <summary>
/// 旧密码不匹配
/// </summary>
[ErrorCodeItemMetadata("旧密码输入错误")]
D1004,
/// <summary>
/// 测试数据禁止更改admin密码
/// </summary>
[ErrorCodeItemMetadata("测试数据禁止更改用户【admin】密码")]
D1005,
/// <summary>
/// 数据已存在
/// </summary>
[ErrorCodeItemMetadata("数据已存在")]
D1006,
/// <summary>
/// 数据不存在或含有关联引用,禁止删除
/// </summary>
[ErrorCodeItemMetadata("数据不存在或含有关联引用,禁止删除")]
D1007,
/// <summary>
/// 禁止为管理员分配角色
/// </summary>
[ErrorCodeItemMetadata("禁止为管理员分配角色")]
D1008,
/// <summary>
/// 重复数据或记录含有不存在数据
/// </summary>
[ErrorCodeItemMetadata("重复数据或记录含有不存在数据")]
D1009,
/// <summary>
/// 禁止为超级管理员角色分配权限
/// </summary>
[ErrorCodeItemMetadata("禁止为超级管理员角色分配权限")]
D1010,
/// <summary>
/// 非法操作,未登录
/// </summary>
[ErrorCodeItemMetadata("非法操作,未登录")]
D1011,
/// <summary>
/// Id不能为空
/// </summary>
[ErrorCodeItemMetadata("Id不能为空")]
D1012,
/// <summary>
/// 所属机构不在自己的数据范围内
/// </summary>
[ErrorCodeItemMetadata("没有权限操作该数据")]
D1013,
/// <summary>
/// 禁止删除超级管理员
/// </summary>
[ErrorCodeItemMetadata("禁止删除超级管理员")]
D1014,
/// <summary>
/// 禁止修改超级管理员状态
/// </summary>
[ErrorCodeItemMetadata("禁止修改超级管理员状态")]
D1015,
/// <summary>
/// 没有权限
/// </summary>
[ErrorCodeItemMetadata("没有权限")]
D1016,
/// <summary>
/// 账号已冻结
/// </summary>
[ErrorCodeItemMetadata("账号已冻结")]
D1017,
/// <summary>
/// 禁止删除管理员
/// </summary>
[ErrorCodeItemMetadata("禁止删除管理员")]
D1018,
/// <summary>
/// 禁止删除系统管理员角色
/// </summary>
[ErrorCodeItemMetadata("禁止删除系统管理员角色")]
D1019,
/// <summary>
/// 禁止修改系统管理员角色
/// </summary>
[ErrorCodeItemMetadata("禁止修改系统管理员角色")]
D1020,
/// <summary>
/// 禁止为系统管理员角色分配权限
/// </summary>
[ErrorCodeItemMetadata("禁止为系统管理员角色分配权限")]
D1021,
/// <summary>
/// 禁止为超级管理员分配角色
/// </summary>
[ErrorCodeItemMetadata("禁止为超级管理员分配角色")]
D1022,
/// <summary>
/// 禁止删除默认租户
/// </summary>
[ErrorCodeItemMetadata("禁止删除默认租户")]
D1023,
/// <summary>
/// 已将其他地方登录账号下线
/// </summary>
[ErrorCodeItemMetadata("已将其他地方登录账号下线")]
D1024,
/// <summary>
/// 此角色下面存在账号禁止删除
/// </summary>
[ErrorCodeItemMetadata("此角色下面存在账号禁止删除")]
D1025,
/// <summary>
/// 禁止修改本人账号状态
/// </summary>
[ErrorCodeItemMetadata("禁止修改本人账号状态")]
D1026,
/// <summary>
/// 密码错误次数过多,账号已锁定,请半小时后重试!
/// </summary>
[ErrorCodeItemMetadata("密码错误次数过多,账号已锁定,请半小时后重试!")]
D1027,
/// <summary>
/// 新密码不能与旧密码相同
/// </summary>
[ErrorCodeItemMetadata("新密码不能与旧密码相同")]
D1028,
/// <summary>
/// 父机构不存在
/// </summary>
[ErrorCodeItemMetadata("父机构不存在")]
D2000,
/// <summary>
/// 当前机构Id不能与父机构Id相同
/// </summary>
[ErrorCodeItemMetadata("当前机构Id不能与父机构Id相同")]
D2001,
/// <summary>
/// 已有相同组织机构,编码或名称相同
/// </summary>
[ErrorCodeItemMetadata("已有相同组织机构,编码或名称相同")]
D2002,
/// <summary>
/// 没有权限操作机构
/// </summary>
[ErrorCodeItemMetadata("没有权限操作机构")]
D2003,
/// <summary>
/// 该机构下有用户禁止删除
/// </summary>
[ErrorCodeItemMetadata("该机构下有用户禁止删除")]
D2004,
/// <summary>
/// 附属机构下有用户禁止删除
/// </summary>
[ErrorCodeItemMetadata("附属机构下有用户禁止删除")]
D2005,
/// <summary>
/// 只能增加下级机构
/// </summary>
[ErrorCodeItemMetadata("只能增加下级机构")]
D2006,
/// <summary>
/// 下级机构下有用户禁止删除
/// </summary>
[ErrorCodeItemMetadata("下级机构下有用户禁止删除")]
D2007,
/// <summary>
/// 租户默认机构禁止删除
/// </summary>
[ErrorCodeItemMetadata("租户默认机构禁止删除")]
D2008,
/// <summary>
/// 禁止增加根节点机构
/// </summary>
[ErrorCodeItemMetadata("禁止增加根节点机构")]
D2009,
/// <summary>
/// 字典类型不存在
/// </summary>
[ErrorCodeItemMetadata("字典类型不存在")]
D3000,
/// <summary>
/// 字典类型已存在
/// </summary>
[ErrorCodeItemMetadata("字典类型已存在,名称或编码重复")]
D3001,
/// <summary>
/// 字典类型下面有字典值禁止删除
/// </summary>
[ErrorCodeItemMetadata("字典类型下面有字典值禁止删除")]
D3002,
/// <summary>
/// 字典值已存在
/// </summary>
[ErrorCodeItemMetadata("字典值已存在,名称或编码重复")]
D3003,
/// <summary>
/// 字典值不存在
/// </summary>
[ErrorCodeItemMetadata("字典值不存在")]
D3004,
/// <summary>
/// 字典状态错误
/// </summary>
[ErrorCodeItemMetadata("字典状态错误")]
D3005,
/// <summary>
/// 菜单已存在
/// </summary>
[ErrorCodeItemMetadata("菜单已存在")]
D4000,
/// <summary>
/// 路由地址为空
/// </summary>
[ErrorCodeItemMetadata("路由地址为空")]
D4001,
/// <summary>
/// 打开方式为空
/// </summary>
[ErrorCodeItemMetadata("打开方式为空")]
D4002,
/// <summary>
/// 权限标识格式为空
/// </summary>
[ErrorCodeItemMetadata("权限标识格式为空")]
D4003,
/// <summary>
/// 权限标识格式错误
/// </summary>
[ErrorCodeItemMetadata("权限标识格式错误 如xxx:xxx")]
D4004,
/// <summary>
/// 权限不存在
/// </summary>
[ErrorCodeItemMetadata("权限不存在")]
D4005,
/// <summary>
/// 父级菜单不能为当前节点,请重新选择父级菜单
/// </summary>
[ErrorCodeItemMetadata("父级菜单不能为当前节点,请重新选择父级菜单")]
D4006,
/// <summary>
/// 不能移动根节点
/// </summary>
[ErrorCodeItemMetadata("不能移动根节点")]
D4007,
/// <summary>
/// 禁止本节点与父节点相同
/// </summary>
[ErrorCodeItemMetadata("禁止本节点与父节点相同")]
D4008,
/// <summary>
/// 路由名称重复
/// </summary>
[ErrorCodeItemMetadata("路由名称重复")]
D4009,
/// <summary>
/// 父节点不能为按钮类型
/// </summary>
[ErrorCodeItemMetadata("父节点不能为按钮类型")]
D4010,
/// <summary>
/// 已存在同名或同编码应用
/// </summary>
[ErrorCodeItemMetadata("已存在同名或同编码应用")]
D5000,
/// <summary>
/// 默认激活系统只能有一个
/// </summary>
[ErrorCodeItemMetadata("默认激活系统只能有一个")]
D5001,
/// <summary>
/// 该应用下有菜单禁止删除
/// </summary>
[ErrorCodeItemMetadata("该应用下有菜单禁止删除")]
D5002,
/// <summary>
/// 已存在同名或同编码应用
/// </summary>
[ErrorCodeItemMetadata("已存在同名或同编码应用")]
D5003,
/// <summary>
/// 已存在同名或同编码职位
/// </summary>
[ErrorCodeItemMetadata("已存在同名或同编码职位")]
D6000,
/// <summary>
/// 该职位下有用户禁止删除
/// </summary>
[ErrorCodeItemMetadata("该职位下有用户禁止删除")]
D6001,
/// <summary>
/// 无权修改本职位
/// </summary>
[ErrorCodeItemMetadata("无权修改本职位")]
D6002,
/// <summary>
/// 职位不存在
/// </summary>
[ErrorCodeItemMetadata("职位不存在")]
D6003,
/// <summary>
/// 通知公告状态错误
/// </summary>
[ErrorCodeItemMetadata("通知公告状态错误")]
D7000,
/// <summary>
/// 通知公告删除失败
/// </summary>
[ErrorCodeItemMetadata("通知公告删除失败")]
D7001,
/// <summary>
/// 通知公告编辑失败
/// </summary>
[ErrorCodeItemMetadata("通知公告编辑失败,类型必须为草稿")]
D7002,
/// <summary>
/// 通知公告操作失败,非发布者不能进行操作
/// </summary>
[ErrorCodeItemMetadata("通知公告操作失败,非发布者不能进行操作")]
D7003,
/// <summary>
/// 文件不存在
/// </summary>
[ErrorCodeItemMetadata("文件不存在")]
D8000,
/// <summary>
/// 不允许的文件类型
/// </summary>
[ErrorCodeItemMetadata("不允许的文件类型")]
D8001,
/// <summary>
/// 文件超过允许大小
/// </summary>
[ErrorCodeItemMetadata("文件超过允许大小")]
D8002,
/// <summary>
/// 文件后缀错误
/// </summary>
[ErrorCodeItemMetadata("文件后缀错误")]
D8003,
/// <summary>
/// 文件已存在
/// </summary>
[ErrorCodeItemMetadata("文件已存在")]
D8004,
/// <summary>
/// 已存在同名或同编码参数配置
/// </summary>
[ErrorCodeItemMetadata("已存在同名或同编码参数配置")]
D9000,
/// <summary>
/// 禁止删除系统参数
/// </summary>
[ErrorCodeItemMetadata("禁止删除系统参数")]
D9001,
/// <summary>
/// 已存在同名任务调度
/// </summary>
[ErrorCodeItemMetadata("已存在同名任务调度")]
D1100,
/// <summary>
/// 任务调度不存在
/// </summary>
[ErrorCodeItemMetadata("任务调度不存在")]
D1101,
/// <summary>
/// 演示环境禁止修改数据
/// </summary>
[ErrorCodeItemMetadata("演示环境禁止修改数据")]
D1200,
/// <summary>
/// 已存在同名的租户
/// </summary>
[ErrorCodeItemMetadata("已存在同名的租户")]
D1300,
/// <summary>
/// 已存在同名的租户管理员
/// </summary>
[ErrorCodeItemMetadata("已存在同名的租户管理员")]
D1301,
/// <summary>
/// 租户从库配置错误
/// </summary>
[ErrorCodeItemMetadata("租户从库配置错误")]
D1302,
/// <summary>
/// 该表代码模板已经生成过
/// </summary>
[ErrorCodeItemMetadata("该表代码模板已经生成过")]
D1400,
/// <summary>
/// 该类型不存在
/// </summary>
[ErrorCodeItemMetadata("该类型不存在")]
D1501,
/// <summary>
/// 该字段不存在
/// </summary>
[ErrorCodeItemMetadata("该字段不存在")]
D1502,
/// <summary>
/// 该类型不是枚举类型
/// </summary>
[ErrorCodeItemMetadata("该类型不是枚举类型")]
D1503,
/// <summary>
/// 该实体不存在
/// </summary>
[ErrorCodeItemMetadata("该实体不存在")]
D1504,
/// <summary>
/// 父菜单不存在
/// </summary>
[ErrorCodeItemMetadata("父菜单不存在")]
D1505,
/// <summary>
/// 父资源不存在
/// </summary>
[ErrorCodeItemMetadata("父资源不存在")]
D1600,
/// <summary>
/// 当前资源Id不能与父资源Id相同
/// </summary>
[ErrorCodeItemMetadata("当前资源Id不能与父资源Id相同")]
D1601,
/// <summary>
/// 已有相同编码或名称
/// </summary>
[ErrorCodeItemMetadata("已有相同编码或名称")]
D1602,
/// <summary>
/// 脚本代码不能为空
/// </summary>
[ErrorCodeItemMetadata("脚本代码不能为空")]
D1701,
/// <summary>
/// 脚本代码中的作业类,需要定义 [JobDetail] 特性
/// </summary>
[ErrorCodeItemMetadata("脚本代码中的作业类,需要定义 [JobDetail] ")]
D1702,
/// <summary>
/// 作业编号需要与脚本代码中的作业类 [JobDetail('jobId')] 一致
/// </summary>
[ErrorCodeItemMetadata("作业编号需要与脚本代码中的作业类 [JobDetail('jobId')] ")]
D1703,
/// <summary>
/// 禁止修改作业编号
/// </summary>
[ErrorCodeItemMetadata("禁止修改作业编号")]
D1704,
/// <summary>
/// 执行作业失败
/// </summary>
[ErrorCodeItemMetadata("执行作业失败")]
D1705,
/// <summary>
/// 已存在同名打印模板
/// </summary>
[ErrorCodeItemMetadata("已存在同名打印模板")]
D1800,
/// <summary>
/// 已存在同名功能或同名程序及插件
/// </summary>
[ErrorCodeItemMetadata("已存在同名功能或同名程序及插件")]
D1900,
/// <summary>
/// 已存在同名或同编码项目
/// </summary>
[ErrorCodeItemMetadata("已存在同名或同编码项目")]
xg1000,
/// <summary>
/// 已存在相同证件号码人员
/// </summary>
[ErrorCodeItemMetadata("已存在相同证件号码人员")]
xg1001,
/// <summary>
/// 检测数据不存在
/// </summary>
[ErrorCodeItemMetadata("检测数据不存在")]
xg1002,
/// <summary>
/// 请添加数据列
/// </summary>
[ErrorCodeItemMetadata("请添加数据列")]
db1000,
/// <summary>
/// 数据表不存在
/// </summary>
[ErrorCodeItemMetadata("数据表不存在")]
db1001,
/// <summary>
/// 数据表不存在
/// </summary>
[ErrorCodeItemMetadata("不允许添加相同字段名")]
db1002,
/// <summary>
/// 父节点不存在
/// </summary>
[ErrorCodeItemMetadata("父节点不存在")]
R2000,
/// <summary>
/// 当前节点Id不能与父节点Id相同
/// </summary>
[ErrorCodeItemMetadata("当前节点Id不能与父节点Id相同")]
R2001,
/// <summary>
/// 已有相同编码或名称
/// </summary>
[ErrorCodeItemMetadata("已有相同编码或名称")]
R2002,
/// <summary>
/// 默认租户状态禁止修改
/// </summary>
[ErrorCodeItemMetadata("默认租户状态禁止修改")]
Z1001,
/// <summary>
/// 禁止创建此类型的数据库
/// </summary>
[ErrorCodeItemMetadata("禁止创建此类型的数据库")]
Z1002,
/// <summary>
/// 租户已禁用
/// </summary>
[ErrorCodeItemMetadata("租户已禁用")]
Z1003,
/// <summary>
/// 租户库连接不能为空
/// </summary>
[ErrorCodeItemMetadata("租户库连接不能为空")]
Z1004,
/// <summary>
/// 身份标识已存在
/// </summary>
[ErrorCodeItemMetadata("身份标识已存在")]
O1000,
}

View File

@ -0,0 +1,32 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 性别枚举
/// </summary>
[Description("性别枚举")]
public enum GenderEnum
{
/// <summary>
/// 男
/// </summary>
[Description("男")]
Male = 1,
/// <summary>
/// 女
/// </summary>
[Description("女")]
Female = 2,
/// <summary>
/// 其他
/// </summary>
[Description("其他")]
Other = 3
}

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