feat:改成使用element-plus-x官方的markdown渲染组件,所以删除了以前引入的组件

升级element-plus-x至1.3.beta版本
This commit is contained in:
PZ688 2025-07-23 01:35:09 +08:00
commit b33e24d5a7
158 changed files with 9546 additions and 1150 deletions

View File

@ -4,16 +4,17 @@
// SqlSugar PostgreSQL
// https://www.connectionstrings.com/
"DbConnection": {
"EnableConsoleSql": false, // SQL
"EnableConsoleSql": true, // SQL
"ConnectionConfigs": [
{
//"ConfigId": "1300000000001", // -
"DbType": "Sqlite", // MySqlSqlServerSqliteOraclePostgreSQLDmKdbndpOscarMySqlConnectorAccessOpenGaussQuestDBHGClickHouseGBaseOdbcCustom
"DbType": "Sqlite", // MySqlSqlServerSqliteOraclePostgreSQLDmKdbndpOscarMySqlConnectorAccessOpenGaussMongoDBQuestDBHGClickHouseGBaseOdbcCustom
"ConnectionString": "DataSource=./Admin.NET.db", // Sqlite
//"ConnectionString": "PORT=5432;DATABASE=xxx;HOST=localhost;PASSWORD=xxx;USER ID=xxx", // PostgreSQL
//"ConnectionString": "PORT=5432;DATABASE=xxx;HOST=localhost;PASSWORD=xxx;USER ID=xxx", // PostgreSQLKdbndpOpenGauss
//"ConnectionString": "Server=localhost;Database=xxx;Uid=xxx;Pwd=xxx;SslMode=None;AllowLoadLocalInfile=true;AllowUserVariables=true;", // MySql,
//"ConnectionString": "User Id=xxx; Password=xxx; Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))", // Oracle
//"ConnectionString": "Server=localhost;Database=xxx;User Id=xxx;Password=xxx;Encrypt=True;TrustServerCertificate=True;", // SqlServer
//"ConnectionString": "host=222.71.212.3;Port=27017;Database=testDB;Username= root;Password=123456;authSource=admin;replicaSet=", // MongoDB
//"SlaveConnectionConfigs": [ // /
// {

View File

@ -8,12 +8,13 @@
"ConnectionConfigs": [
{
//"ConfigId": "1300000000001", // -
"DbType": "Sqlite", // MySqlSqlServerSqliteOraclePostgreSQLDmKdbndpOscarMySqlConnectorAccessOpenGaussQuestDBHGClickHouseGBaseOdbcCustom
"DbType": "Sqlite", // MySqlSqlServerSqliteOraclePostgreSQLDmKdbndpOscarMySqlConnectorAccessOpenGaussMongoDBQuestDBHGClickHouseGBaseOdbcCustom
"ConnectionString": "DataSource=./Admin.NET.db", // Sqlite
//"ConnectionString": "PORT=5432;DATABASE=xxx;HOST=localhost;PASSWORD=xxx;USER ID=xxx", // PostgreSQL
//"ConnectionString": "PORT=5432;DATABASE=xxx;HOST=localhost;PASSWORD=xxx;USER ID=xxx", // PostgreSQLKdbndpOpenGauss
//"ConnectionString": "Server=localhost;Database=xxx;Uid=xxx;Pwd=xxx;SslMode=None;AllowLoadLocalInfile=true;AllowUserVariables=true;", // MySql,
//"ConnectionString": "User Id=xxx; Password=xxx; Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))", // Oracle
//"ConnectionString": "Server=localhost;Database=xxx;User Id=xxx;Password=xxx;Encrypt=True;TrustServerCertificate=True;", // SqlServer
//"ConnectionString": "host=222.71.212.3;Port=27017;Database=testDB;Username= root;Password=123456;authSource=admin;replicaSet=", // MongoDB
//"SlaveConnectionConfigs": [ // /
// {
@ -26,18 +27,18 @@
// }
//],
"DbSettings": {
"EnableInitDb": true, //
"EnableInitView": true, //
"EnableInitDb": false, //
"EnableInitView": false, //
"EnableDiffLog": false, //
"EnableUnderLine": false, // 线
"EnableConnEncrypt": false // SM2
},
"TableSettings": {
"EnableInitTable": true, //
"EnableInitTable": false, //
"EnableIncreTable": false // [IncreTable]
},
"SeedSettings": {
"EnableInitSeed": true, //
"EnableInitSeed": false, //
"EnableIncreSeed": false // [IncreSeed]
}
}

View File

@ -212,7 +212,10 @@ public class AppAuthService : IDynamicApiController, ITransient
// 职位
var pos = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysPos>>().GetByIdAsync(user.PosId);
// 角色集合
var roleIds = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysUserRole>>().AsQueryable().Where(u => u.UserId == user.Id).Select(u => u.RoleId).ToListAsync();
var roles = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysUserRole>>().AsQueryable()
.LeftJoin<SysRole>((u, a) => u.RoleId == a.Id)
.Where(u => u.UserId == user.Id)
.Select((u, a) => new RoleDto { Id = a.Id, Name = a.Name, Code = a.Code }).ToListAsync();
// 接口集合
var apis = (await _sysRoleService.GetUserApiList())[0];
@ -233,7 +236,7 @@ public class AppAuthService : IDynamicApiController, ITransient
OrgType = org?.Type,
PosName = pos?.Name,
Apis = apis,
RoleIds = roleIds
Roles = roles
};
}

View File

@ -37,7 +37,7 @@ public class TestService : IDynamicApiController
/// Redis事件测试 - Payload 🔖
/// </summary>
/// <returns></returns>
public async void EventTestAsync()
public async Task EventTestAsync()
{
await _eventPublisher.PublishAsync(CommonConst.SendErrorMail, "Admin.NET");
}

View File

@ -22,52 +22,53 @@
<ItemGroup>
<PackageReference Include="AlibabaCloud.SDK.Dysmsapi20170525" Version="4.0.0" />
<PackageReference Include="AlipaySDKNet.Standard" Version="4.9.600" />
<PackageReference Include="AlipaySDKNet.Standard" Version="4.9.627" />
<PackageReference Include="AngleSharp" Version="1.3.0" />
<PackageReference Include="AspectCore.Extensions.Reflection" Version="2.4.0" />
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.1" Aliases="BouncyCastleV2" />
<PackageReference Include="Elastic.Clients.Elasticsearch" Version="9.0.7" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.89" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.89" />
<PackageReference Include="Furion.Pure" Version="4.9.7.89" />
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.99" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.99" />
<PackageReference Include="Furion.Pure" Version="4.9.7.99" />
<PackageReference Include="Hardware.Info" Version="101.0.1.1" />
<PackageReference Include="Hashids.net" Version="1.7.0" />
<PackageReference Include="IPTools.China" Version="1.6.0" />
<PackageReference Include="IPTools.International" Version="1.6.0" />
<PackageReference Include="log4net" Version="3.1.0" />
<PackageReference Include="Magicodes.IE.Excel" Version="2.7.5.2" />
<PackageReference Include="Magicodes.IE.Pdf" Version="2.7.5.2" />
<PackageReference Include="Magicodes.IE.Word" Version="2.7.5.2" />
<PackageReference Include="MailKit" Version="4.12.1" />
<PackageReference Include="MiniExcel" Version="1.41.2" />
<PackageReference Include="Magicodes.IE.Excel" Version="2.7.6" />
<PackageReference Include="Magicodes.IE.Pdf" Version="2.7.6" />
<PackageReference Include="Magicodes.IE.Word" Version="2.7.6" />
<PackageReference Include="MailKit" Version="4.13.0" />
<PackageReference Include="MiniExcel" Version="1.41.3" />
<PackageReference Include="MiniWord" Version="0.9.2" />
<PackageReference Include="MQTTnet.Server" Version="5.0.1.1416" />
<PackageReference Include="MySqlBackup.NET.MySqlConnector" Version="2.3.9" />
<PackageReference Include="NewLife.Redis" Version="6.2.2025.601" />
<PackageReference Include="MySqlBackup.NET.MySqlConnector" Version="2.6.4" />
<PackageReference Include="NewLife.Redis" Version="6.3.2025.701" />
<PackageReference Include="Novell.Directory.Ldap.NETStandard" Version="4.0.0" />
<PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.2.0" />
<PackageReference Include="QRCoder" Version="1.6.0" />
<PackageReference Include="RabbitMQ.Client" Version="7.1.2" />
<PackageReference Include="SixLabors.ImageSharp.Web" Version="3.1.5" />
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="3.10.0" />
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="3.12.0" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.196" />
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="3.11.0" />
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="3.13.0" />
<PackageReference Include="SqlSugar.MongoDbCore" Version="5.1.4.229" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.198" />
<PackageReference Include="SSH.NET" Version="2025.0.0" />
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.6.6" />
<PackageReference Include="System.Net.Http" Version="4.3.4" />
<PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1259" />
<PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1273" />
<PackageReference Include="UAParser" Version="3.1.47" />
<PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
<PackageReference Include="microsoft.semantickernel" Version="1.57.0" />
<PackageReference Include="Microsoft.SemanticKernel.Agents.Core" Version="1.57.0" />
<PackageReference Include="microsoft.semantickernel" Version="1.60.0" />
<PackageReference Include="Microsoft.SemanticKernel.Agents.Core" Version="1.60.0" />
<PackageReference Include="Microsoft.SemanticKernel.Connectors.Amazon" Version="1.56.0-alpha" />
<PackageReference Include="Microsoft.SemanticKernel.Connectors.Google" Version="1.54.0-alpha" />
<PackageReference Include="Microsoft.SemanticKernel.Connectors.HuggingFace" Version="1.56.0-preview" />
<PackageReference Include="Microsoft.SemanticKernel.Connectors.Ollama" Version="1.54.0-alpha" />
<PackageReference Include="Microsoft.SemanticKernel.Connectors.Qdrant" Version="1.54.0-preview" />
<PackageReference Include="Microsoft.SemanticKernel.PromptTemplates.Handlebars" Version="1.57.0" />
<PackageReference Include="Microsoft.SemanticKernel.Yaml" Version="1.57.0" />
<PackageReference Include="Microsoft.SemanticKernel.PromptTemplates.Handlebars" Version="1.60.0" />
<PackageReference Include="Microsoft.SemanticKernel.Yaml" Version="1.60.0" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
@ -84,9 +85,9 @@
<PackageReference Include="AspNet.Security.OAuth.Gitee" Version="9.4.0" />
<PackageReference Include="AspNet.Security.OAuth.Weixin" Version="9.4.0" />
<PackageReference Include="Lazy.Captcha.Core" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="9.0.6" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="9.0.6" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="9.0.6" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="9.0.7" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="9.0.7" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="9.0.7" />
<PackageReference Include="My.Extensions.Localization.Json" Version="3.4.0" />
</ItemGroup>

View File

@ -32,7 +32,7 @@ public class SseService : ControllerBase
Response.Headers.Append("Cache-Control", "no-cache");
Response.Headers.Append("Connection", "keep-alive");
Response.Headers.Append("X-Accel-Buffering", "no"); // Nginx
var channel = _sseChannelManager.Register(id);
var deepThinkingChannel = _sseDeepThinkingChannelManager.Register(id);
try

View File

@ -24,6 +24,22 @@ public class MaskNewtonsoftJsonConverter : JsonConverter<string>
}
}
/// <summary>
/// 姓名掩码
/// </summary>
public class MaskNameNewtonsoftJsonConverter : 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().MaskName());
}
}
/// <summary>
/// 身份证掩码
/// </summary>

View File

@ -25,6 +25,22 @@ public class MaskSystemTextJsonConverter : JsonConverter<string>
}
}
/// <summary>
/// 姓名掩码
/// </summary>
public class MaskNameSystemTextJsonConverter : 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().MaskName());
}
}
/// <summary>
/// 身份证掩码
/// </summary>

View File

@ -110,4 +110,9 @@ public class CacheConst
/// Excel临时文件缓存
/// </summary>
public const string KeyExcelTemp = "sys_excel_temp:";
/// <summary>
/// 列配置缓存
/// </summary>
public const string KeyColumnCustom = "sys_column_custom:";
}

View File

@ -0,0 +1,54 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// Vxe表格列配置
/// </summary>
[SugarTable(null, "Vxe表格列配置")]
[SysTable]
[SugarIndex("i_{table}_u", nameof(UserId), OrderByType.Asc)]
[SugarIndex("i_{table}_g", nameof(GridId), OrderByType.Asc)]
public class SysColumnCustom : EntityTenantId
{
/// <summary>
/// 用户Id
/// </summary>
[SugarColumn(ColumnDescription = "用户Id")]
public long UserId { get; set; }
/// <summary>
/// 表格Id
/// </summary>
[SugarColumn(ColumnDescription = "表格Id", Length = 128)]
[MaxLength(128)]
public string GridId { get; set; }
/// <summary>
/// 冻结列状态数据
/// </summary>
[SugarColumn(ColumnDescription = "冻结列状态数据", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? FixedData { get; set; }
/// <summary>
/// 列宽状态数据
/// </summary>
[SugarColumn(ColumnDescription = "列宽状态数据", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? ResizableData { get; set; }
/// <summary>
/// 列顺序数据
/// </summary>
[SugarColumn(ColumnDescription = "列顺序数据", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? SortData { get; set; }
/// <summary>
/// 显示/隐藏列状态数据
/// </summary>
[SugarColumn(ColumnDescription = "显示/隐藏列状态数据", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? VisibleData { get; set; }
}

View File

@ -12,7 +12,7 @@ namespace Admin.NET.Core;
[SugarTable(null, "系统租户配置参数表")]
[SysTable]
[SugarIndex("i_{table}_n", nameof(Name), OrderByType.Asc)]
[SugarIndex("i_{table}_c", nameof(Code), OrderByType.Asc, IsUnique = true)]
[SugarIndex("i_{table}_c", nameof(Code), OrderByType.Asc, nameof(TenantId), OrderByType.Asc, IsUnique = true)]
public partial class SysConfigTenant : SysConfig, ITenantIdFilter
{
/// <summary>

View File

@ -11,7 +11,7 @@ namespace Admin.NET.Core;
/// </summary>
[SugarTable(null, "系统租户字典值表")]
[SysTable]
[SugarIndex("i_{table}_c", nameof(Code), OrderByType.Asc)]
[SugarIndex("i_{table}_c", nameof(Code), OrderByType.Asc, nameof(TenantId), OrderByType.Asc)]
public partial class SysDictDataTenant : SysDictData, ITenantIdFilter
{
/// <summary>

View File

@ -22,6 +22,6 @@ public partial class SysFileContent : EntityBase
/// <summary>
/// 文件内容
/// </summary>
[SugarColumn(ColumnDescription = "文件内容", ColumnDataType = "blob,bytea,binary", IsNullable = false)]
[SugarColumn(ColumnDescription = "文件内容", IsNullable = false)]
public byte[] Content { get; set; }
}

View File

@ -0,0 +1,93 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统报表配置表
/// </summary>
[SugarTable(null, "系统报表配置表")]
[SysTable]
public class SysReportConfig : EntityBase
{
/// <summary>
/// 名称
/// </summary>
[SugarColumn(ColumnDescription = "名称", Length = 254)]
[MaxLength(254)]
public string Name { get; set; }
/// <summary>
/// 描述
/// </summary>
[SugarColumn(ColumnDescription = "描述", Length = 512)]
[MaxLength(512)]
public string? Description { get; set; }
/// <summary>
/// 数据源类型
/// </summary>
[SugarColumn(ColumnDescription = "数据源类型")]
public ReportConfigDsTypeEnum DsType { get; set; }
/// <summary>
/// 数据源
/// </summary>
[SugarColumn(ColumnDescription = "数据源", Length = 64)]
[MaxLength(64)]
public string? DataSource { get; set; }
/// <summary>
/// 分组Id
/// </summary>
[SugarColumn(ColumnDescription = "分组Id")]
public long? GroupId { get; set; }
/// <summary>
/// 分组
/// </summary>
[Navigate(NavigateType.OneToOne, nameof(GroupId))]
public SysReportGroup Group { get; set; }
/// <summary>
/// 脚本语句
/// </summary>
[SugarColumn(ColumnDescription = "脚本语句", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? SqlScript { get; set; }
/// <summary>
/// 接口地址
/// </summary>
[SugarColumn(ColumnDescription = "接口地址", Length = 1024)]
[MaxLength(1024)]
public string? ApiUrl { get; set; }
/// <summary>
/// 接口请求方式
/// </summary>
[SugarColumn(ColumnDescription = "接口请求方式", Length = 16)]
[MaxLength(16)]
public string? ApiHttpMethod { get; set; }
/// <summary>
/// 接口参数
/// </summary>
[SugarColumn(ColumnDescription = "接口参数", Length = 1024)]
[MaxLength(1024)]
public string? ApiParams { get; set; }
/// <summary>
/// 参数
/// </summary>
[SugarColumn(ColumnDescription = "参数", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? Params { get; set; }
/// <summary>
/// 列表字段
/// </summary>
[SugarColumn(ColumnDescription = "列表字段", ColumnDataType = StaticConfig.CodeFirst_BigString)]
public string? Fields { get; set; }
}

View File

@ -0,0 +1,43 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 系统报表数据源
/// </summary>
[SugarTable(null, "系统报表数据源表")]
[SysTable]
public class SysReportDataSource : EntityBase
{
/// <summary>
/// 名称
/// </summary>
[SugarColumn(ColumnDescription = "名称", Length = 254)]
[MaxLength(254)]
public string Name { get; set; }
/// <summary>
/// 数据库类型
/// </summary>
[SugarColumn(ColumnDescription = "数据库类型", Length = 32)]
[MaxLength(32)]
public string DbType { get; set; }
/// <summary>
/// 连接字符串
/// </summary>
[SugarColumn(ColumnDescription = "连接字符串", Length = 512)]
[MaxLength(512)]
public string ConnectionString { get; set; }
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注", Length = 128)]
[MaxLength(128)]
public string? Remark { get; set; }
}

View File

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

View File

@ -44,8 +44,8 @@ public partial class SysRole : EntityTenant
/// <summary>
/// 是否是内置Y-是N-否)
/// </summary>
[SugarColumn(ColumnDescription = "是否是内置", DefaultValue = "1")]
public YesNoEnum SysFlag { get; set; } = YesNoEnum.Y;
[SugarColumn(ColumnDescription = "是否是内置", DefaultValue = "2")]
public YesNoEnum SysFlag { get; set; } = YesNoEnum.N;
/// <summary>
/// 备注

View File

@ -158,9 +158,9 @@ public enum ErrorCodeEnum
D1018,
/// <summary>
/// 禁止删除系统管理员角色
/// 禁止删除系统内置角色
/// </summary>
[ErrorCodeItemMetadata("禁止删除系统管理员角色")]
[ErrorCodeItemMetadata("禁止删除系统内置角色")]
D1019,
/// <summary>
@ -241,6 +241,12 @@ public enum ErrorCodeEnum
[ErrorCodeItemMetadata("手机号已存在")]
D1032,
/// <summary>
/// 无权操作此账号
/// </summary>
[ErrorCodeItemMetadata("无权操作此账号")]
D1033,
/// <summary>
/// 父机构不存在
/// </summary>
@ -314,7 +320,7 @@ public enum ErrorCodeEnum
D3000,
/// <summary>
/// 字典类型已存在
/// 字典类型已存在,名称或编码重复
/// </summary>
[ErrorCodeItemMetadata("字典类型已存在,名称或编码重复")]
D3001,
@ -846,4 +852,28 @@ public enum ErrorCodeEnum
/// </summary>
[ErrorCodeItemMetadata("身份标识已存在")]
O1000,
/// <summary>
/// 名称已存在
/// </summary>
[ErrorCodeItemMetadata("名称已存在")]
C1000,
/// <summary>
/// 数据源类型为 Sql 才允许执行
/// </summary>
[ErrorCodeItemMetadata("数据源类型为 Sql 才允许执行")]
C1001,
/// <summary>
/// 数据源不存在
/// </summary>
[ErrorCodeItemMetadata("数据源不存在")]
C1002,
/// <summary>
/// 编码已存在
/// </summary>
[ErrorCodeItemMetadata("编码已存在")]
C1003,
}

View File

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

View File

@ -57,8 +57,8 @@ public sealed class RedisEventSourceStorer : IEventSourceStorer, IDisposable
FullRedis redis = (FullRedis)cacheProvider.Cache;
var clusterOpt = App.GetConfig<ClusterOptions>("Cluster", true);
_queueBroadcast = redis.GetStream<string>(routeKey + ":broadcast");
_queueBroadcast.Group = clusterOpt.ServerId;//根据服务器标识分配到不同的分组里
_queueBroadcast.Expire = TimeSpan.FromSeconds(10);//消息10秒过期
_queueBroadcast.Group = clusterOpt.ServerId; //根据服务器标识分配到不同的分组里
_queueBroadcast.Expire = TimeSpan.FromSeconds(10); //消息10秒过期
_queueBroadcast.ConsumeAsync(OnConsumeBroadcast);
// 创建队列消息订阅者,只要有一个服务节点消费了消息即可
@ -98,6 +98,7 @@ public sealed class RedisEventSourceStorer : IEventSourceStorer, IDisposable
Console.WriteLine($"有消息要处理{ces.EventId},{ces.Payload}");
Console.ForegroundColor = oriColor;
}
await _channel.Writer.WriteAsync(ces, cancel);
}
@ -151,9 +152,9 @@ public sealed class RedisEventSourceStorer : IEventSourceStorer, IDisposable
/// <summary>
/// 释放非托管资源
/// </summary>
public async void Dispose()
public void Dispose()
{
await _eventConsumer.Stop();
_eventConsumer.Stop().GetAwaiter().GetResult();
GC.SuppressFinalize(this);
}
}

View File

@ -134,6 +134,19 @@ public static partial class ObjectExtension
};
}
/// <summary>
/// 姓名掩码
/// </summary>
/// <param name="name">姓名</param>
/// <param name="mask">掩码符</param>
/// <returns></returns>
public static string MaskName(this string name, char mask = '*')
{
if (string.IsNullOrEmpty(name) || name.Length < 2) return name;
return string.Concat(name.AsSpan(0, 1), mask.ToString(), name.AsSpan(2));
}
/// <summary>
/// 身份证号掩码
/// </summary>

View File

@ -145,12 +145,12 @@ public static class RepositoryExtension
typeAdapterConfig.ForType<T, BasePageInput>().IgnoreNullValues(true);
Mapper mapper = new(typeAdapterConfig); // 务必将mapper设为单实例
var nowPagerInput = mapper.Map<BasePageInput>(pageInput);
// 排序是否可用-排序字段和排序顺序都为非空才启用排序
if (!string.IsNullOrEmpty(nowPagerInput.Field) && !string.IsNullOrEmpty(nowPagerInput.Order))
// 排序是否可用-排序字段为非空才启用排序,排序顺序默认为倒
if (!string.IsNullOrEmpty(nowPagerInput.Field))
{
var col = queryable.Context.EntityMaintenance.GetEntityInfo<T>().Columns.FirstOrDefault(u => u.PropertyName.Equals(nowPagerInput.Field, StringComparison.CurrentCultureIgnoreCase));
var dbColumnName = col != null ? col.DbColumnName : nowPagerInput.Field;
orderStr = $"{prefix}{iSqlBuilder.GetTranslationColumnName(dbColumnName)} {(nowPagerInput.Order == nowPagerInput.DescStr ? "Desc" : "Asc")}";
nowPagerInput.Field = Regex.Replace(nowPagerInput.Field, @"[\s;()\-'@=/%]", ""); //过滤掉一些关键字符防止构造特殊SQL语句注入
var orderByDbName = queryable.Context.EntityMaintenance.GetDbColumnName<T>(nowPagerInput.Field);//防止注入,类中只要不存在属性名就会报错
orderStr = $"{prefix}{iSqlBuilder.GetTranslationColumnName(orderByDbName)} {(string.IsNullOrEmpty(nowPagerInput.Order) || nowPagerInput.Order.Equals(nowPagerInput.DescStr, StringComparison.OrdinalIgnoreCase) ? "Desc" : "Asc")}";
}
return queryable.OrderByIF(!string.IsNullOrWhiteSpace(orderStr), orderStr);
}

View File

@ -59,7 +59,7 @@ public class SysCodeGenTemplateSeedData : ISqlSugarEntitySeedData<SysCodeGenTemp
""Type"": 1,
""SysFlag"": 1,
""IsDefault"": true,
""OutputFile"": ""views/{PagePath}/{TableNameLower}/component/{TableNameLower}List.vue"",
""OutputFile"": ""views/{PagePath}/{TableNameLower}/component/list.vue"",
""Describe"": ""(WEB)"",
""OrderNo"": 100,
""CreateTime"": ""1900-01-01 00:00:00"",
@ -76,7 +76,7 @@ public class SysCodeGenTemplateSeedData : ISqlSugarEntitySeedData<SysCodeGenTemp
""Type"": 1,
""SysFlag"": 1,
""IsDefault"": true,
""OutputFile"": ""views/{PagePath}/{TableNameLower}/component/editDialog.vue"",
""OutputFile"": ""views/{PagePath}/{TableNameLower}/component/edit.vue"",
""Describe"": ""(WEB)"",
""OrderNo"": 100,
""CreateTime"": ""1900-01-01 00:00:00"",

View File

@ -31,6 +31,7 @@ public class SysDictDataSeedData : ISqlSugarEntitySeedData<SysDictData>
new SysDictData{ Id=1300000000109, DictTypeId=1300000000101, Label="文本域", Value="InputTextArea", OrderNo=100, Remark="文本域", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
new SysDictData{ Id=1300000000110, DictTypeId=1300000000101, Label="上传", Value="Upload", OrderNo=100, Remark="上传", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
new SysDictData{ Id=1300000000111, DictTypeId=1300000000101, Label="开关", Value="Switch", OrderNo=100, Remark="开关", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
new SysDictData{ Id=1300000000112, DictTypeId=1300000000101, Label="富文本", Value="RichTextEditor", OrderNo=100, Remark="富文本", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
new SysDictData{ Id=1300000000201, DictTypeId=1300000000102, Label="等于", Value="==", OrderNo=1, Remark="等于", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
new SysDictData{ Id=1300000000202, DictTypeId=1300000000102, Label="模糊", Value="like", OrderNo=1, Remark="模糊", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },

View File

@ -59,7 +59,7 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
new SysMenu{ Id=1310000000151, Pid=1310000000101, Title="职位管理", Path="/system/pos", Name="sysPos", Component="/system/pos/index",Icon="ele-Mug", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=130 },
new SysMenu{ Id=1310000000152, Pid=1310000000151, Title="查询", Permission="sysPos/page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000153, Pid=1310000000151, Title="列表", Permission="sysPos/list", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
//new SysMenu{ Id=1310000000153, Pid=1310000000151, Title="列表", Permission="sysPos/list", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000154, Pid=1310000000151, Title="编辑", Permission="sysPos/update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000155, Pid=1310000000151, Title="增加", Permission="sysPos/add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000156, Pid=1310000000151, Title="删除", Permission="sysPos/delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
@ -211,11 +211,25 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
new SysMenu{ Id=1310000000641, Pid=1310000000601, Title="系统接口", Path="/develop/api", Name="sysApi", Component="layout/routerView/iframe", IsIframe=true, OutLink="http://localhost:5005", Icon="ele-Help", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=140 },
new SysMenu{ Id=1310000000651, Pid=1310000000601, Title="接口压测", Path="/develop/stressTest", Name="sysStressTest", Component="/system/stressTest/index", Icon="ele-Compass", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2024-12-28 00:00:00"), OrderNo=150 },
new SysMenu{ Id=1310000000701, Pid=0, Title="帮助文档", Path="/doc", Name="doc", Component="Layout", Icon="ele-Notebook", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=14000 },
new SysMenu{ Id=1310000000711, Pid=1310000000701, Title="框架教程", Path="/doc/admin", Name="sysAdmin", Component="layout/routerView/link", IsIframe=false, IsKeepAlive=false, OutLink="https://adminnet.top/", Icon="ele-Sunny", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000721, Pid=1310000000701, Title="SqlSugar", Path="/doc/SqlSugar", Name="sysSqlSugar", Component="layout/routerView/link", IsIframe=false, IsKeepAlive=false, OutLink="https://www.donet5.com/Home/Doc", Icon="ele-Coin", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=130 },
new SysMenu{ Id=1310000000701, Pid=0, Title="报表开发", Path="/report", Name="report", Component="Layout", Icon="ele-Histogram", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=14000 },
new SysMenu{ Id=1310000000711, Pid=1310000000701, Title="数据源配置", Path="/report/reportDataSource", Name="sysReportDataSource", Component="/system/reportDataSource/index", Icon="ele-Filter", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000712, Pid=1310000000711, Title="查询", Permission="sysReportDataSource/page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000713, Pid=1310000000711, Title="编辑", Permission="sysReportDataSource/update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000714, Pid=1310000000711, Title="增加", Permission="sysReportDataSource/add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000715, Pid=1310000000711, Title="删除", Permission="sysReportDataSource/delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000716, Pid=1310000000711, Title="复制", Permission="sysReportDataSource/copy", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000721, Pid=1310000000701, Title="报表配置", Path="/report/reportConfig", Name="sysReportConfig", Component="/system/reportConfig/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=110 },
new SysMenu{ Id=1310000000731, Pid=1310000000721, Title="查询", Permission="sysReportConfig/page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000741, Pid=1310000000721, Title="编辑", Permission="sysReportConfig/update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000751, Pid=1310000000721, Title="增加", Permission="sysReportConfig/add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000761, Pid=1310000000721, Title="删除", Permission="sysReportConfig/delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000801, Pid=0, Title="关于项目", Path="/about", Name="about", Component="/about/index", Icon="ele-InfoFilled", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2023-03-12 00:00:00"), OrderNo=15000 },
];
new SysMenu{ Id=1320000000101, Pid=0, Title="帮助文档", Path="/doc", Name="doc", Component="Layout", Icon="ele-Notebook", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=15000 },
new SysMenu{ Id=1320000000111, Pid=1320000000101, Title="框架教程", Path="/doc/admin", Name="sysAdmin", Component="layout/routerView/link", IsIframe=false, IsKeepAlive=false, OutLink="https://adminnet.top/", Icon="ele-Sunny", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1320000000121, Pid=1320000000101, Title="SqlSugar", Path="/doc/SqlSugar", Name="sysSqlSugar", Component="layout/routerView/link", IsIframe=false, IsKeepAlive=false, OutLink="https://www.donet5.com/Home/Doc", Icon="ele-Coin", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=130 },
new SysMenu{ Id=1320000000201, Pid=0, Title="关于项目", Path="/about", Name="about", Component="/about/index", Icon="ele-InfoFilled", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2023-03-12 00:00:00"), OrderNo=16000 },
];
}
}

View File

@ -21,21 +21,12 @@ public class SysPosSeedData : ISqlSugarEntitySeedData<SysPos>
return
[
new SysPos{ Id=1300000000101, Name="党委书记", Code="dwsj", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="党委书记", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000102, Name="董事长", Code="dsz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="董事长", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000103, Name="副董事长", Code="fdsz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="副董事长", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000104, Name="总经理", Code="zjl", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="总经理", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000105, Name="副总经理", Code="fzjl", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="副总经理", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000106, Name="部门经理", Code="bmjl", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="部门经理", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000107, Name="部门副经理", Code="bmfjl", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="部门副经理", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000108, Name="主任", Code="zr", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="主任", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000109, Name="副主任", Code="fzr", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="副主任", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000110, Name="局长", Code="jz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="局长", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000111, Name="副局长", Code="fjz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="副局长", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000112, Name="科长", Code="kz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="科长", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000113, Name="副科长", Code="fkz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="副科长", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000114, Name="财务", Code="cw", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="财务", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000115, Name="职员", Code="zy", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="职员", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000116, Name="其他", Code="qt", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="其他", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000102, Name="局长", Code="jz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="局长", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000103, Name="副局长", Code="fjz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="副局长", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000104, Name="科长", Code="kz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="科长", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000105, Name="副科长", Code="fkz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="副科长", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000106, Name="职员", Code="zy", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="职员", TenantId=SqlSugarConst.DefaultTenantId },
new SysPos{ Id=1300000000107, Name="其他", Code="qt", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="其他", TenantId=SqlSugarConst.DefaultTenantId },
];
}
}

View File

@ -48,16 +48,17 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
new SysRoleMenu{ Id=1300000000147, RoleId=1300000000101, MenuId=1310000000137 },
new SysRoleMenu{ Id=1300000000148, RoleId=1300000000101, MenuId=1310000000138 },
new SysRoleMenu{ Id=1300000000149, RoleId=1300000000101, MenuId=1310000000139 },
new SysRoleMenu{ Id=1300000000150, RoleId=1300000000101, MenuId=1310000000140 },
// 机构管理
new SysRoleMenu{ Id=1300000000151, RoleId=1300000000101, MenuId=1310000000141 },
new SysRoleMenu{ Id=1300000000152, RoleId=1300000000101, MenuId=1310000000142 },
//new SysRoleMenu{ Id=1300000000152, RoleId=1300000000101, MenuId=1310000000142 },
new SysRoleMenu{ Id=1300000000153, RoleId=1300000000101, MenuId=1310000000143 },
new SysRoleMenu{ Id=1300000000154, RoleId=1300000000101, MenuId=1310000000144 },
new SysRoleMenu{ Id=1300000000155, RoleId=1300000000101, MenuId=1310000000145 },
// 职位管理
new SysRoleMenu{ Id=1300000000161, RoleId=1300000000101, MenuId=1310000000151 },
new SysRoleMenu{ Id=1300000000162, RoleId=1300000000101, MenuId=1310000000152 },
new SysRoleMenu{ Id=1300000000163, RoleId=1300000000101, MenuId=1310000000153 },
//new SysRoleMenu{ Id=1300000000163, RoleId=1300000000101, MenuId=1310000000153 },
new SysRoleMenu{ Id=1300000000164, RoleId=1300000000101, MenuId=1310000000154 },
new SysRoleMenu{ Id=1300000000165, RoleId=1300000000101, MenuId=1310000000155 },
new SysRoleMenu{ Id=1300000000166, RoleId=1300000000101, MenuId=1310000000156 },
@ -74,7 +75,6 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
new SysRoleMenu{ Id=1300000000184, RoleId=1300000000101, MenuId=1310000000174 },
new SysRoleMenu{ Id=1300000000185, RoleId=1300000000101, MenuId=1310000000175 },
new SysRoleMenu{ Id=1300000000186, RoleId=1300000000101, MenuId=1310000000176 },
new SysRoleMenu{ Id=1300000000187, RoleId=1300000000101, MenuId=1310000000177 },
// 三方账号
new SysRoleMenu{ Id=1300000000191, RoleId=1300000000101, MenuId=1310000000181 },
new SysRoleMenu{ Id=1300000000192, RoleId=1300000000101, MenuId=1310000000182 },
@ -93,8 +93,11 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
////// 平台管理
new SysRoleMenu{ Id=1300000000201, RoleId=1300000000101, MenuId=1310000000301 },
// 菜单管理
new SysRoleMenu{ Id=1300000000221, RoleId=1300000000101, MenuId=1310000000322 },
// 字典管理
new SysRoleMenu{ Id=1300000000221, RoleId=1300000000101, MenuId=1310000000321 },
new SysRoleMenu{ Id=1300000000222, RoleId=1300000000101, MenuId=1310000000323 },
new SysRoleMenu{ Id=1300000000223, RoleId=1300000000101, MenuId=1310000000324 },
new SysRoleMenu{ Id=1300000000224, RoleId=1300000000101, MenuId=1310000000325 },
// 配置参数
new SysRoleMenu{ Id=1300000000231, RoleId=1300000000101, MenuId=1310000000331 },
new SysRoleMenu{ Id=1300000000232, RoleId=1300000000101, MenuId=1310000000332 },
new SysRoleMenu{ Id=1300000000233, RoleId=1300000000101, MenuId=1310000000333 },
@ -161,6 +164,8 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
new SysRoleMenu{ Id=1300000001444, RoleId=1300000000101, MenuId=1310000000444 },
new SysRoleMenu{ Id=1300000001445, RoleId=1300000000101, MenuId=1310000000445 },
new SysRoleMenu{ Id=1300000001446, RoleId=1300000000101, MenuId=1310000000446 },
// 更新日志
new SysRoleMenu{ Id=1300000001451, RoleId=1300000000101, MenuId=1310000000451 },
////// 日志管理
new SysRoleMenu{ Id=1300000000301, RoleId=1300000000101, MenuId=1310000000501 },
new SysRoleMenu{ Id=1300000000311, RoleId=1300000000101, MenuId=1310000000511 },
@ -178,21 +183,20 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
new SysRoleMenu{ Id=1300000000341, RoleId=1300000000101, MenuId=1310000000541 },
new SysRoleMenu{ Id=1300000000342, RoleId=1300000000101, MenuId=1310000000542 },
new SysRoleMenu{ Id=1300000000343, RoleId=1300000000101, MenuId=1310000000543 },
new SysRoleMenu{ Id=1300000000351, RoleId=1300000000101, MenuId=1310000000551 },
new SysRoleMenu{ Id=1300000000352, RoleId=1300000000101, MenuId=1310000000552 },
new SysRoleMenu{ Id=1300000000353, RoleId=1300000000101, MenuId=1310000000553 },
////// 帮助文档
new SysRoleMenu{ Id=1300000000401, RoleId=1300000000101, MenuId=1310000000701 },
new SysRoleMenu{ Id=1300000000402, RoleId=1300000000101, MenuId=1310000000711 },
new SysRoleMenu{ Id=1300000000403, RoleId=1300000000101, MenuId=1310000000712 },
new SysRoleMenu{ Id=1300000000404, RoleId=1300000000101, MenuId=1310000000713 },
new SysRoleMenu{ Id=1300000000405, RoleId=1300000000101, MenuId=1310000000714 },
new SysRoleMenu{ Id=1300000000455, RoleId=1300000000101, MenuId=1310000000801 },
new SysRoleMenu{ Id=1300000000401, RoleId=1300000000101, MenuId=1320000000101 },
new SysRoleMenu{ Id=1300000000402, RoleId=1300000000101, MenuId=1320000000111 },
new SysRoleMenu{ Id=1300000000403, RoleId=1300000000101, MenuId=1320000000121 },
new SysRoleMenu{ Id=1300000000404, RoleId=1300000000101, MenuId=1320000000201 },
// 其他角色默认菜单
////// 数据面板【1300000000102】
new SysRoleMenu{ Id=1300000000501, RoleId=1300000000102, MenuId=1300000000101 },
new SysRoleMenu{ Id=1300000000502, RoleId=1300000000102, MenuId=1300000000111 },
new SysRoleMenu{ Id=1300000000503, RoleId=1300000000102, MenuId=1300000000121 },
// 机构管理
new SysRoleMenu{ Id=1300000000511, RoleId=1300000000102, MenuId=1310000000142 },
// 个人中心
new SysRoleMenu{ Id=1300000000521, RoleId=1300000000102, MenuId=1310000000161 },
new SysRoleMenu{ Id=1300000000522, RoleId=1300000000102, MenuId=1310000000162 },
@ -204,8 +208,6 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
new SysRoleMenu{ Id=1300000000601, RoleId=1300000000103, MenuId=1300000000101 },
new SysRoleMenu{ Id=1300000000602, RoleId=1300000000103, MenuId=1300000000111 },
new SysRoleMenu{ Id=1300000000603, RoleId=1300000000103, MenuId=1300000000121 },
// 机构管理
new SysRoleMenu{ Id=1300000000611, RoleId=1300000000103, MenuId=1310000000142 },
// 个人中心
new SysRoleMenu{ Id=1300000000621, RoleId=1300000000103, MenuId=1310000000161 },
new SysRoleMenu{ Id=1300000000622, RoleId=1300000000103, MenuId=1310000000162 },
@ -217,8 +219,6 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
new SysRoleMenu{ Id=1300000000701, RoleId=1300000000104, MenuId=1300000000101 },
new SysRoleMenu{ Id=1300000000702, RoleId=1300000000104, MenuId=1300000000111 },
new SysRoleMenu{ Id=1300000000703, RoleId=1300000000104, MenuId=1300000000121 },
// 机构管理
new SysRoleMenu{ Id=1300000000711, RoleId=1300000000104, MenuId=1310000000142 },
// 个人中心
new SysRoleMenu{ Id=1300000000721, RoleId=1300000000104, MenuId=1310000000161 },
new SysRoleMenu{ Id=1300000000722, RoleId=1300000000104, MenuId=1310000000162 },
@ -230,8 +230,6 @@ public class SysRoleMenuSeedData : ISqlSugarEntitySeedData<SysRoleMenu>
new SysRoleMenu{ Id=1300000000801, RoleId=1300000000105, MenuId=1300000000101 },
new SysRoleMenu{ Id=1300000000802, RoleId=1300000000105, MenuId=1300000000111 },
new SysRoleMenu{ Id=1300000000803, RoleId=1300000000105, MenuId=1300000000121 },
// 机构管理
new SysRoleMenu{ Id=1300000000811, RoleId=1300000000105, MenuId=1310000000142 },
// 个人中心
new SysRoleMenu{ Id=1300000000821, RoleId=1300000000105, MenuId=1310000000161 },
new SysRoleMenu{ Id=1300000000822, RoleId=1300000000105, MenuId=1310000000162 },

View File

@ -20,11 +20,11 @@ public class SysRoleSeedData : ISqlSugarEntitySeedData<SysRole>
{
return
[
new SysRole{ Id=1300000000101, Name="系统管理员", DataScope=DataScopeEnum.All, Code="sys_admin", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="系统管理员", TenantId=SqlSugarConst.DefaultTenantId },
new SysRole{ Id=1300000000102, Name="本部门及以下数据", DataScope=DataScopeEnum.DeptChild, Code="sys_deptChild", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="本部门及以下数据", TenantId=SqlSugarConst.DefaultTenantId },
new SysRole{ Id=1300000000103, Name="本部门数据", DataScope=DataScopeEnum.Dept, Code="sys_dept", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="本部门数据", TenantId=SqlSugarConst.DefaultTenantId },
new SysRole{ Id=1300000000104, Name="仅本人数据", DataScope=DataScopeEnum.Self, Code="sys_self", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="仅本人数据", TenantId=SqlSugarConst.DefaultTenantId },
new SysRole{ Id=1300000000105, Name="自定义数据", DataScope=DataScopeEnum.Define, Code="sys_define", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="自定义数据", TenantId=SqlSugarConst.DefaultTenantId },
new SysRole{ Id=1300000000101, Name="系统管理员", DataScope=DataScopeEnum.All, Code="sys_admin", SysFlag=YesNoEnum.Y, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="系统管理员", TenantId=SqlSugarConst.DefaultTenantId },
new SysRole{ Id=1300000000102, Name="本部门及以下数据", DataScope=DataScopeEnum.DeptChild, Code="sys_dept_child", SysFlag = YesNoEnum.Y, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="本部门及以下数据", TenantId=SqlSugarConst.DefaultTenantId },
new SysRole{ Id=1300000000103, Name="本部门数据", DataScope=DataScopeEnum.Dept, Code="sys_dept", SysFlag=YesNoEnum.Y, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="本部门数据", TenantId=SqlSugarConst.DefaultTenantId },
new SysRole{ Id=1300000000104, Name="仅本人数据", DataScope=DataScopeEnum.Self, Code="sys_self", SysFlag = YesNoEnum.Y, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="仅本人数据", TenantId=SqlSugarConst.DefaultTenantId },
new SysRole{ Id=1300000000105, Name="自定义数据", DataScope=DataScopeEnum.Define, Code="sys_define", SysFlag = YesNoEnum.Y, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="自定义数据", TenantId=SqlSugarConst.DefaultTenantId },
];
}
}

View File

@ -99,7 +99,7 @@ public class LoginUserOutput
/// <summary>
/// 角色集合
/// </summary>
public List<long> RoleIds { get; set; }
public List<RoleDto> Roles { get; set; }
/// <summary>
/// 水印文字
@ -110,4 +110,25 @@ public class LoginUserOutput
/// 最新密码修改时间
/// </summary>
public DateTime? LastChangePasswordTime;
}
/// <summary>
/// 角色
/// </summary>
public class RoleDto
{
/// <summary>
/// 角色Id
/// </summary>
public long Id { get; set; }
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
}

View File

@ -293,7 +293,10 @@ public class SysAuthService : IDynamicApiController, ITransient
// 职位
var pos = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysPos>>().GetByIdAsync(user.PosId);
// 角色集合
var roleIds = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysUserRole>>().AsQueryable().Where(u => u.UserId == user.Id).Select(u => u.RoleId).ToListAsync();
var roles = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysUserRole>>().AsQueryable()
.LeftJoin<SysRole>((u, a) => u.RoleId == a.Id)
.Where(u => u.UserId == user.Id)
.Select((u, a) => new RoleDto { Id = a.Id, Name = a.Name, Code = a.Code }).ToListAsync();
// 接口集合
var apis = (await App.GetRequiredService<SysRoleService>().GetUserApiList())[0];
// 个性化水印文字(若系统水印为空则不显示)
@ -319,7 +322,7 @@ public class SysAuthService : IDynamicApiController, ITransient
OrgType = org?.Type,
PosName = pos?.Name,
Apis = apis,
RoleIds = roleIds,
Roles = roles,
WatermarkText = watermarkText,
LastChangePasswordTime = user.LastChangePasswordTime
};
@ -341,7 +344,7 @@ public class SysAuthService : IDynamicApiController, ITransient
/// 退出系统 🔖
/// </summary>
[DisplayName("退出系统")]
public async void Logout()
public async Task Logout()
{
var httpContext = _httpContextAccessor.HttpContext ?? throw Oops.Oh(ErrorCodeEnum.D1016);

View File

@ -113,16 +113,8 @@ public class SysCodeGenConfigService : IDynamicApiController, ITransient
var types = new List<Type>();
if (_codeGenOptions.EntityAssemblyNames != null)
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (var assembly in assemblies)
{
var assemblyName = assembly.GetName().Name!;
if (_codeGenOptions.EntityAssemblyNames.Contains(assemblyName) || _codeGenOptions.EntityAssemblyNames.Any(name => assemblyName.Contains(name)))
{
Assembly asm = Assembly.Load(assemblyName);
types.AddRange(asm.GetExportedTypes().ToList());
}
}
types = App.EffectiveTypes.Where(u => u.IsClass).Where(u => _codeGenOptions.EntityAssemblyNames.Contains(u.Assembly.GetName().Name)
|| _codeGenOptions.EntityAssemblyNames.Any(name => u.Assembly.GetName().Name!.Contains(name))).ToList();
}
Type[] cosType = types.Where(u => u.IsDefined(typeof(SugarTable), false) && !u.GetCustomAttributes<IgnoreTableAttribute>().Any()).ToArray();

View File

@ -0,0 +1,65 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core.Service;
/// <summary>
/// 用户表格列配置基数输入参数
/// </summary>
public class BaseColumnCustomInput
{
/// <summary>
/// 表格Id
/// </summary>
[Required(ErrorMessage = "表格Id不能为空")]
public virtual string GridId { get; set; }
}
/// <summary>
/// 获取用户表格列配置输入参数
/// </summary>
public class GetColumnCustomInput : BaseColumnCustomInput
{
}
/// <summary>
/// 保存用户表格列配置输入参数
/// </summary>
public class StoreColumnCustomInput
{
/// <summary>
/// 表格Id
/// </summary>
[Required(ErrorMessage = "表格Id不能为空")]
public virtual string GridId { get; set; }
/// <summary>
/// 冻结列状态数据
/// </summary>
public virtual Dictionary<string, string>? FixedData { get; set; }
/// <summary>
/// 列宽状态数据
/// </summary>
public virtual Dictionary<string, int>? ResizableData { get; set; }
/// <summary>
/// 列顺序数据
/// </summary>
public virtual Dictionary<string, int>? SortData { get; set; }
/// <summary>
/// 显示/隐藏列状态数据
/// </summary>
public virtual Dictionary<string, bool>? VisibleData { get; set; }
}
/// <summary>
/// 重置用户表格列配置输入参数
/// </summary>
public class ResetColumnCustomInput : BaseColumnCustomInput
{
}

View File

@ -0,0 +1,43 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core.Service;
/// <summary>
/// 用户表格列配置输出参数
/// </summary>
public class ColumnCustomOutput
{
/// <summary>
/// 用户Id
/// </summary>
public virtual long UserId { get; set; }
/// <summary>
/// 表格Id
/// </summary>
public virtual string GridId { get; set; }
/// <summary>
/// 冻结列状态数据
/// </summary>
public virtual Dictionary<string, string>? FixedData { get; set; }
/// <summary>
/// 列宽状态数据
/// </summary>
public virtual Dictionary<string, int>? ResizableData { get; set; }
/// <summary>
/// 列顺序数据
/// </summary>
public virtual Dictionary<string, int>? SortData { get; set; }
/// <summary>
/// 显示/隐藏列状态数据
/// </summary>
public virtual Dictionary<string, bool>? VisibleData { get; set; }
}

View File

@ -0,0 +1,78 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core.Service;
/// <summary>
/// 表格列配置服务 🧩
/// </summary>
/// <param name="rep"></param>
/// <param name="um"></param>
/// <param name="cache"></param>
[ApiDescriptionSettings(Order = 440, Description = "代码生成模板配置")]
public class SysColumnCustomService(SqlSugarRepository<SysColumnCustom> rep, UserManager um, SysCacheService cache) : IDynamicApiController, ITransient
{
/// <summary>
/// 获取用户表格列配置信息 🔖
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[SuppressMonitor]
[DisplayName("获取用户表格列配置信息")]
public async Task<ColumnCustomOutput> GetDetail([FromQuery] GetColumnCustomInput input)
{
var key = $"{CacheConst.KeyColumnCustom}{um.UserId}:{input.GridId}";
var result = cache.Get<ColumnCustomOutput>(key);
if (result is null)
{
var temp = await rep.GetFirstAsync(e => e.UserId == um.UserId && e.GridId == input.GridId);
if (temp != null)
{
result = new ColumnCustomOutput
{
UserId = temp.UserId,
GridId = temp.GridId,
FixedData = string.IsNullOrEmpty(temp.FixedData) ? null : JSON.Deserialize<Dictionary<string, string>>(temp.FixedData),
ResizableData = string.IsNullOrEmpty(temp.ResizableData) ? null : JSON.Deserialize<Dictionary<string, int>>(temp.ResizableData),
SortData = string.IsNullOrEmpty(temp.SortData) ? null : JSON.Deserialize<Dictionary<string, int>>(temp.SortData),
VisibleData = string.IsNullOrEmpty(temp.VisibleData) ? null : JSON.Deserialize<Dictionary<string, bool>>(temp.VisibleData),
};
cache.Set(key, result, TimeSpan.FromDays(7));
}
}
return result;
}
/// <summary>
/// 保存用户表格列配置信息 🔖
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[DisplayName("保存用户表格列配置信息")]
public async Task Store(StoreColumnCustomInput input)
{
var temp = await rep.GetFirstAsync(e => e.UserId == um.UserId && e.GridId == input.GridId);
if (temp is null) temp = new SysColumnCustom { UserId = um.UserId, GridId = input.GridId };
else cache.Remove($"{CacheConst.KeyColumnCustom}{um.UserId}:{input.GridId}"); // 移除缓存
temp.FixedData = JSON.Serialize(input.FixedData);
temp.ResizableData = JSON.Serialize(input.ResizableData);
temp.SortData = JSON.Serialize(input.SortData);
temp.VisibleData = JSON.Serialize(input.VisibleData);
await rep.Context.Storageable(temp).ExecuteCommandAsync();
}
/// <summary>
/// 清除用户表格列配置信息 🔖
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[DisplayName("清除用户表格列配置信息")]
public async Task Reset(ResetColumnCustomInput input)
{
await rep.AsDeleteable().Where(e => e.UserId == um.UserId && e.GridId == input.GridId).ExecuteCommandAsync();
cache.Remove($"{CacheConst.KeyColumnCustom}{um.UserId}:{input.GridId}"); // 移除缓存
}
}

View File

@ -278,11 +278,11 @@ public class SysCommonService : IDynamicApiController, ITransient
var stressTestHarnessResult = await _httpRemoteService.SendAsync(HttpRequestBuilder.StressTestHarness(input.RequestUri)
.SetNumberOfRequests(input.NumberOfRequests) // 并发请求数量
.SetNumberOfRounds(input.NumberOfRounds) // 压测轮次
.SetMaxDegreeOfParallelism(input.MaxDegreeOfParallelism), // 最大并发度
builder => builder.WithHeaders(input.Headers)
.WithQueryParameters(input.QueryParameters)
.WithPathParameters(input.PathParameters)
.SetJsonContent(input.JsonContent));
.SetMaxDegreeOfParallelism(input.MaxDegreeOfParallelism) // 最大并发度
.WithRequest(builder => builder.WithHeaders(input.Headers)
.WithQueryParameters(input.QueryParameters)
.WithPathParameters(input.PathParameters)
.SetJsonContent(input.JsonContent)));
return stressTestHarnessResult;
}
}

View File

@ -15,7 +15,6 @@ public class SysDictDataService : IDynamicApiController, ITransient
private readonly SqlSugarRepository<SysDictData> _sysDictDataRep;
private readonly SysCacheService _sysCacheService;
private readonly UserManager _userManager;
public readonly ISugarQueryable<SysDictData> VSysDictData;
public SysDictDataService(SqlSugarRepository<SysDictData> sysDictDataRep,
SysCacheService sysCacheService,
@ -24,9 +23,6 @@ public class SysDictDataService : IDynamicApiController, ITransient
_sysDictDataRep = sysDictDataRep;
_sysCacheService = sysCacheService;
_userManager = userManager;
VSysDictData = _sysDictDataRep.Context.UnionAll(
_sysDictDataRep.AsQueryable(),
_sysDictDataRep.Change<SysDictDataTenant>().AsQueryable().Select<SysDictData>());
}
/// <summary>
@ -37,7 +33,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
[DisplayName("获取字典值分页列表")]
public async Task<SqlSugarPagedList<SysDictData>> Page(PageDictDataInput input)
{
return await VSysDictData
return await _sysDictDataRep.AsQueryable()
.Where(u => u.DictTypeId == input.DictTypeId)
.WhereIF(!string.IsNullOrEmpty(input.Code?.Trim()), u => u.Code.Contains(input.Code))
.WhereIF(!string.IsNullOrEmpty(input.Label?.Trim()), u => u.Label.Contains(input.Label))
@ -64,7 +60,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
[DisplayName("增加字典值")]
public async Task AddDictData(AddDictDataInput input)
{
var isExist = await VSysDictData.AnyAsync(u => u.Code == input.Code && u.DictTypeId == input.DictTypeId);
var isExist = await _sysDictDataRep.IsAnyAsync(u => u.Code == input.Code && u.DictTypeId == input.DictTypeId);
if (isExist) throw Oops.Oh(ErrorCodeEnum.D3003);
var dictType = await _sysDictDataRep.Change<SysDictType>().GetByIdAsync(input.DictTypeId);
@ -72,7 +68,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
_sysCacheService.Remove($"{CacheConst.KeyDict}{dictType.Code}");
dynamic dictData = dictType.IsTenant == YesNoEnum.Y ? input.Adapt<SysDictDataTenant>() : input.Adapt<SysDictData>();
var dictData = dictType.IsTenant == YesNoEnum.Y ? input.Adapt<SysDictDataTenant>() : input.Adapt<SysDictData>();
await _sysDictDataRep.Context.Insertable(dictData).ExecuteCommandAsync();
}
@ -86,17 +82,17 @@ public class SysDictDataService : IDynamicApiController, ITransient
[DisplayName("更新字典值")]
public async Task UpdateDictData(UpdateDictDataInput input)
{
var isExist = await VSysDictData.AnyAsync(u => u.Id == input.Id);
var isExist = await _sysDictDataRep.IsAnyAsync(u => u.Id == input.Id);
if (!isExist) throw Oops.Oh(ErrorCodeEnum.D3004);
isExist = await VSysDictData.AnyAsync(u => u.Code == input.Code && u.DictTypeId == input.DictTypeId && u.Id != input.Id);
isExist = await _sysDictDataRep.IsAnyAsync(u => u.Code == input.Code && u.DictTypeId == input.DictTypeId && u.Id != input.Id);
if (isExist) throw Oops.Oh(ErrorCodeEnum.D3003);
var dictType = await _sysDictDataRep.Change<SysDictType>().GetByIdAsync(input.DictTypeId);
if (dictType.SysFlag == YesNoEnum.Y && !_userManager.SuperAdmin) throw Oops.Oh(ErrorCodeEnum.D3009);
_sysCacheService.Remove($"{CacheConst.KeyDict}{dictType.Code}");
dynamic dictData = dictType.IsTenant == YesNoEnum.Y ? input.Adapt<SysDictDataTenant>() : input.Adapt<SysDictData>();
var dictData = dictType.IsTenant == YesNoEnum.Y ? input.Adapt<SysDictDataTenant>() : input.Adapt<SysDictData>();
await _sysDictDataRep.Context.Updateable(dictData).ExecuteCommandAsync();
}
@ -110,13 +106,13 @@ public class SysDictDataService : IDynamicApiController, ITransient
[DisplayName("删除字典值")]
public async Task DeleteDictData(DeleteDictDataInput input)
{
var dictData = await VSysDictData.FirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D3004);
var dictData = await _sysDictDataRep.GetByIdAsync(input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D3004);
var dictType = await _sysDictDataRep.Change<SysDictType>().GetByIdAsync(dictData.DictTypeId);
if (dictType.SysFlag == YesNoEnum.Y && !_userManager.SuperAdmin) throw Oops.Oh(ErrorCodeEnum.D3010);
_sysCacheService.Remove($"{CacheConst.KeyDict}{dictType.Code}");
dynamic entity = dictType.IsTenant == YesNoEnum.Y ? input.Adapt<SysDictDataTenant>() : input.Adapt<SysDictData>();
var entity = dictType.IsTenant == YesNoEnum.Y ? input.Adapt<SysDictDataTenant>() : input.Adapt<SysDictData>();
await _sysDictDataRep.Context.Deleteable(entity).ExecuteCommandAsync();
}
@ -128,7 +124,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
[DisplayName("获取字典值详情")]
public async Task<SysDictData> GetDetail([FromQuery] DictDataInput input)
{
return (await VSysDictData.FirstAsync(u => u.Id == input.Id))?.Adapt<SysDictData>();
return await _sysDictDataRep.GetByIdAsync(input.Id);
}
/// <summary>
@ -140,7 +136,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
[DisplayName("修改字典值状态")]
public async Task SetStatus(DictDataInput input)
{
var dictData = await VSysDictData.FirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D3004);
var dictData = await _sysDictDataRep.GetByIdAsync(input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D3004);
var dictType = await _sysDictDataRep.Change<SysDictType>().GetByIdAsync(dictData.DictTypeId);
if (dictType.SysFlag == YesNoEnum.Y && !_userManager.SuperAdmin) throw Oops.Oh(ErrorCodeEnum.D3009);
@ -148,7 +144,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
_sysCacheService.Remove($"{CacheConst.KeyDict}{dictType.Code}");
dictData.Status = input.Status;
dynamic entity = dictType.IsTenant == YesNoEnum.Y ? input.Adapt<SysDictDataTenant>() : input.Adapt<SysDictData>();
var entity = dictType.IsTenant == YesNoEnum.Y ? input.Adapt<SysDictDataTenant>() : input.Adapt<SysDictData>();
await _sysDictDataRep.Context.Updateable(entity).ExecuteCommandAsync();
}
@ -187,26 +183,42 @@ public class SysDictDataService : IDynamicApiController, ITransient
!string.IsNullOrWhiteSpace(code) && typeId != null)
throw Oops.Oh(ErrorCodeEnum.D3011);
var dictType = await _sysDictDataRep.Change<SysDictType>().AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(code), u => u.Code == code)
.WhereIF(typeId != null, u => u.Id == typeId)
.FirstAsync();
if (dictType == null) return null;
var dictDataList = _sysCacheService.Get<List<SysDictData>>($"{CacheConst.KeyDict}{dictType.Code}");
var dictDataList = _sysCacheService.Get<List<SysDictData>>($"{CacheConst.KeyDict}{code}");
if (dictDataList == null)
{
dictDataList = await VSysDictData.InnerJoin<SysDictType>((u, a) => u.DictTypeId == a.Id)
.Where(u => u.DictTypeId == dictType.Id)
.Select((u, a) => new SysDictData
{
Status = u.Status == StatusEnum.Enable && a.Status == StatusEnum.Enable ? StatusEnum.Enable : StatusEnum.Disable,
}, true)
.OrderBy(u => new { u.OrderNo, u.Code })
.ToListAsync();
_sysCacheService.Set($"{CacheConst.KeyDict}{dictType.Code}", dictDataList);
dictDataList = await _sysDictDataRep.Change<SysDictType>().AsQueryable()
.LeftJoin<SysDictData>((u, a) => u.Id == a.DictTypeId).ClearFilter()
.WhereIF(!string.IsNullOrWhiteSpace(code), u => u.Code == code)
.WhereIF(typeId != null && typeId > 0, u => u.Id == typeId)
.Where((u, a) => u.Status == StatusEnum.Enable && a.Status == StatusEnum.Enable)
.OrderBy((u, a) => new { a.OrderNo, a.Code })
.Select((u, a) => a).ToListAsync();
_sysCacheService.Set($"{CacheConst.KeyDict}{code}", dictDataList);
}
return dictDataList;
//// 判断字典是否存在
//var dictType = await _sysDictDataRep.Change<SysDictType>().AsQueryable()
// .WhereIF(!string.IsNullOrWhiteSpace(code), u => u.Code == code)
// .WhereIF(typeId != null, u => u.Id == typeId)
// .FirstAsync();
//if (dictType == null) return null;
//var dictDataList = _sysCacheService.Get<List<SysDictData>>($"{CacheConst.KeyDict}{dictType.Code}");
//if (dictDataList == null)
//{
// dictDataList = await _sysDictDataRep.AsQueryable()
// .InnerJoin<SysDictType>((u, a) => u.DictTypeId == a.Id)
// .Where(u => u.DictTypeId == dictType.Id)
// .Select((u, a) => new SysDictData
// {
// Status = u.Status == StatusEnum.Enable && a.Status == StatusEnum.Enable ? StatusEnum.Enable : StatusEnum.Disable,
// }, true)
// .OrderBy(u => new { u.OrderNo, u.Code })
// .ToListAsync();
// _sysCacheService.Set($"{CacheConst.KeyDict}{dictType.Code}", dictDataList);
//}
//return dictDataList;
}
/// <summary>

View File

@ -163,7 +163,7 @@ public class SysDictTypeService : IDynamicApiController, ITransient
public async Task<dynamic> GetAllDictList()
{
var ds = await _sysDictTypeRep.AsQueryable()
.InnerJoin(_sysDictDataService.VSysDictData, (u, a) => u.Id == a.DictTypeId)
.InnerJoin<SysDictData>((u, a) => u.Id == a.DictTypeId).ClearFilter()
.Where((u, a) => u.Status == StatusEnum.Enable && a.Status == StatusEnum.Enable)
.Select((u, a) => new { TypeCode = u.Code, a.Label, a.Value, a.Code, a.Remark, a.OrderNo, a.TagType, a.ExtData })
.ToListAsync();

View File

@ -4,7 +4,6 @@
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Aliyun.OSS.Util;
using Furion.AspNetCore;
using Microsoft.AspNetCore.Mvc.ModelBinding;
@ -43,7 +42,7 @@ public class SysFileService : IDynamicApiController, ITransient
{
_customFileProvider = _namedServiceProvider.GetService<ITransient>(nameof(SSHFileProvider));
}
else if (App.Configuration["Upload:EnableSaveFileToDb"].ToBoolean())
else if (_uploadOptions.EnableSaveDb)
{
_customFileProvider = _namedServiceProvider.GetService<ITransient>(nameof(DbFileProvider));
}
@ -138,6 +137,7 @@ public class SysFileService : IDynamicApiController, ITransient
/// <returns></returns>
[HttpGet("/upload/downloadfile")]
[DisplayName("根据文件Id和MD5下载")]
[AllowAnonymous]
public async Task<IActionResult> DownloadFile2([FromQuery] long id, [FromQuery] string fileMd5)
{
var file = await GetFile(id);
@ -269,10 +269,12 @@ public class SysFileService : IDynamicApiController, ITransient
// 判断是否重复上传的文件
var sizeKb = input.File.Length / 1024; // 大小KB
var fileMd5 = string.Empty;
// 不管要不要验证md5也把Md6计算出来方便统计重复的文件。
// 计算文件MD5长度为32的固定字符串
await using (var fileStream = input.File.OpenReadStream())
{
fileMd5 = OssUtils.ComputeContentMd5(fileStream, fileStream.Length);
byte[] bsFile = new byte[fileStream.Length];
_ = fileStream.Read(bsFile, 0, bsFile.Length);
fileMd5 = MD5Encryption.Encrypt(bsFile);
}
if (_uploadOptions.EnableMd5)
{
@ -409,5 +411,19 @@ public class SysFileService : IDynamicApiController, ITransient
await _sysFileRep.AsDeleteable().Where(u => u.DataId == dataId).ExecuteCommandAsync();
}
/// <summary>
/// 根据业务数据Id获取文件列表
/// </summary>
/// <param name="dataId"></param>
/// <param name="isClearFilter"></param>
/// <returns></returns>
[NonAction]
public async Task<List<SysFile>> GetFileListByDataId([FromQuery] long dataId, [FromQuery] bool isClearFilter = false)
{
return isClearFilter
? await _sysFileRep.CopyNew().AsQueryable().ClearFilter().Where(u => u.DataId == dataId).ToListAsync()
: await _sysFileRep.CopyNew().GetListAsync(u => u.DataId == dataId);
}
#endregion SysFile集合导航属性
}

View File

@ -23,19 +23,19 @@ public class JobClusterServer : IJobClusterServer
/// 当前作业调度器启动通知
/// </summary>
/// <param name="context">作业集群服务上下文</param>
public async void Start(JobClusterContext context)
public void Start(JobClusterContext context)
{
using var scope = _serviceScopeFactory.CreateScope();
var db = scope.ServiceProvider.GetRequiredService<ISqlSugarClient>().CopyNew();
// 在作业集群表中,如果 clusterId 不存在,则新增一条(否则更新一条),并设置 status 为 ClusterStatus.Waiting
if (await db.Queryable<SysJobCluster>().AnyAsync(u => u.ClusterId == context.ClusterId))
if (db.Queryable<SysJobCluster>().Any(u => u.ClusterId == context.ClusterId))
{
await db.Updateable<SysJobCluster>().SetColumns(u => u.Status == ClusterStatus.Waiting).Where(u => u.ClusterId == context.ClusterId).ExecuteCommandAsync();
db.Updateable<SysJobCluster>().SetColumns(u => u.Status == ClusterStatus.Waiting).Where(u => u.ClusterId == context.ClusterId).ExecuteCommand();
}
else
{
await db.Insertable(new SysJobCluster { ClusterId = context.ClusterId, Status = ClusterStatus.Waiting }).ExecuteCommandAsync();
db.Insertable(new SysJobCluster { ClusterId = context.ClusterId, Status = ClusterStatus.Waiting }).ExecuteCommand();
}
}
@ -72,7 +72,9 @@ public class JobClusterServer : IJobClusterServer
return;
}
}
catch { }
catch
{
}
}
}
@ -80,24 +82,24 @@ public class JobClusterServer : IJobClusterServer
/// 当前作业调度器停止通知
/// </summary>
/// <param name="context">作业集群服务上下文</param>
public async void Stop(JobClusterContext context)
public void Stop(JobClusterContext context)
{
// 在作业集群表中,更新 clusterId 的 status 为 ClusterStatus.Crashed
using var scope = _serviceScopeFactory.CreateScope();
var db = scope.ServiceProvider.GetRequiredService<ISqlSugarClient>().CopyNew();
await db.Updateable(new SysJobCluster { Status = ClusterStatus.Crashed }).Where(u => u.ClusterId == context.ClusterId).ExecuteCommandAsync();
db.Updateable(new SysJobCluster { Status = ClusterStatus.Crashed }).Where(u => u.ClusterId == context.ClusterId).ExecuteCommand();
}
/// <summary>
/// 当前作业调度器宕机
/// </summary>
/// <param name="context">作业集群服务上下文</param>
public async void Crash(JobClusterContext context)
public void Crash(JobClusterContext context)
{
// 在作业集群表中,更新 clusterId 的 status 为 ClusterStatus.Crashed
using var scope = _serviceScopeFactory.CreateScope();
var db = scope.ServiceProvider.GetRequiredService<ISqlSugarClient>().CopyNew();
await db.Updateable(new SysJobCluster { Status = ClusterStatus.Crashed }).Where(u => u.ClusterId == context.ClusterId).ExecuteCommandAsync();
db.Updateable(new SysJobCluster { Status = ClusterStatus.Crashed }).Where(u => u.ClusterId == context.ClusterId).ExecuteCommand();
}
/// <summary>

View File

@ -0,0 +1,63 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 报表配置分页输入参数
/// </summary>
public class PageReportConfigInput : BasePageInput
{
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 分组Id
/// </summary>
public long? GroupId { get; set; }
}
public class AddReportConfigInput : SysReportConfig
{
}
public class UpdateReportConfigInput : SysReportConfig
{
}
/// <summary>
/// 报表配置解析Sql输入参数
/// </summary>
public class ReportConfigParseSqlInput
{
/// <summary>
/// 数据源
/// </summary>
public string DataSource { get; set; }
/// <summary>
/// 脚本语句
/// </summary>
public string SqlScript { get; set; }
/// <summary>
/// 执行参数
/// </summary>
public Dictionary<string, object> ExecParams { get; set; } = [];
}
/// <summary>
/// 报表配置执行Sql脚本输入参数
/// </summary>
public class ReportConfigExecuteSqlScriptInput : BaseIdInput
{
/// <summary>
/// 执行参数
/// </summary>
public Dictionary<string, object> ExecParams { get; set; } = [];
}

View File

@ -0,0 +1,32 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Newtonsoft.Json;
namespace Admin.NET.Core;
/// <summary>
/// 报表配置输出参数
/// </summary>
public class ReportConfigOutput : SysReportConfig
{
/// <summary>
/// 分组名称
/// </summary>
public string GroupName { get; set; }
}
/// <summary>
/// 报表配置解析Sql输出参数
/// </summary>
public class ReportConfigParseSqlOutput
{
/// <summary>
/// 报表字段名称集合
/// </summary>
[JsonConverter(typeof(CamelCaseValueConverter))]
public List<string> FieldNames { get; set; }
}

View File

@ -0,0 +1,38 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 报表数据源详情
/// </summary>
public class SysReportDataSourceDetail
{
/// <summary>
/// Id
/// </summary>
public string Id { get; set; }
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 是否内置
/// </summary>
public bool IsBuildIn { get; set; }
/// <summary>
/// 数据库类型
/// </summary>
public SqlSugar.DbType DbType { get; set; }
/// <summary>
/// 连接字符串
/// </summary>
public string ConnectionString { get; set; }
}

View File

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

View File

@ -0,0 +1,28 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
/// <summary>
/// 报表数据源输出参数
/// </summary>
public class ReportDataSourceOutput
{
/// <summary>
/// Id
/// </summary>
public string Id { get; set; }
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 是否内置
/// </summary>
public bool IsBuildIn { get; set; }
}

View File

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

View File

@ -0,0 +1,89 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Newtonsoft.Json;
namespace Admin.NET.Core;
/// <summary>
/// 报表布局配置
/// </summary>
public class SysReportLayoutConfig
{
/// <summary>
/// 报表字段集合
/// </summary>
public List<SysReportField> Fields { get; set; }
/// <summary>
/// 报表参数集合
/// </summary>
public List<SysReportParam> Params { get; set; }
}
/// <summary>
/// 报表字段
/// </summary>
public class SysReportField
{
/// <summary>
/// 字段名
/// </summary>
[JsonConverter(typeof(CamelCaseValueConverter))]
public string FieldName { get; set; }
/// <summary>
/// 字段标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 是否合计
/// </summary>
public bool IsSummary { get; set; }
/// <summary>
/// 是否显示
/// </summary>
public bool Visible { get; set; }
/// <summary>
/// 分组标题
/// </summary>
public string GroupTitle { get; set; }
/// <summary>
/// 列宽度
/// </summary>
public int Width { get; set; }
}
/// <summary>
/// 报表参数
/// </summary>
public class SysReportParam
{
/// <summary>
/// 参数名
/// </summary>
[JsonConverter(typeof(CamelCaseValueConverter))]
public string ParamName { get; set; }
/// <summary>
/// 参数标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 输入控件类型
/// </summary>
public string InputCtrl { get; set; }
/// <summary>
/// 默认值
/// </summary>
public object DefaultValue { get; set; }
}

View File

@ -0,0 +1,426 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using OfficeOpenXml;
namespace Admin.NET.Core.Service;
/// <summary>
/// 系统报表配置服务
/// </summary>
[ApiDescriptionSettings(Order = 500, Description = "报表配置")]
public class SysReportConfigService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository<SysReportConfig> _reportConfigRep;
private readonly SysReportDataSourceService _sysReportDataSourceService;
private readonly SysTenantService _sysTenantService;
private readonly UserManager _userManager;
public SysReportConfigService(SqlSugarRepository<SysReportConfig> reportConfigRep,
SysReportDataSourceService sysReportDataSourceService,
SysTenantService sysTenantService,
UserManager userManager
)
{
_reportConfigRep = reportConfigRep;
_sysReportDataSourceService = sysReportDataSourceService;
_sysTenantService = sysTenantService;
_userManager = userManager;
}
/// <summary>
/// 获取报表配置分页列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[DisplayName("获取报表配置分页列表")]
public async Task<SqlSugarPagedList<ReportConfigOutput>> Page(PageReportConfigInput input)
{
return await _reportConfigRep.AsQueryable()
.LeftJoin<SysReportGroup>((u, a) => u.GroupId == a.Id)
.WhereIF(!string.IsNullOrWhiteSpace(input.Name), (u, a) => u.Name.Contains(input.Name.Trim()))
.WhereIF(input.GroupId is > 0, (u, a) => u.GroupId == input.GroupId)
.Select((u, a) => new ReportConfigOutput
{
GroupName = a.Name
}, true)
.OrderBuilder(input, "u.")
.ToPagedListAsync(input.Page, input.PageSize);
}
/// <summary>
/// 增加报表配置
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "Add"), HttpPost]
[DisplayName("增加报表配置")]
public async Task Add(AddReportConfigInput input)
{
var isExist = await _reportConfigRep.IsAnyAsync(u => u.Name == input.Name && u.Id != input.Id);
if (isExist)
throw Oops.Bah(ErrorCodeEnum.C1000);
await _reportConfigRep.InsertAsync(input.Adapt<SysReportConfig>());
}
/// <summary>
/// 更新报表配置
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[UnitOfWork]
[ApiDescriptionSettings(Name = "Update"), HttpPost]
[DisplayName("更新报表配置")]
public async Task Update(UpdateReportConfigInput input)
{
var isExist = await _reportConfigRep.IsAnyAsync(u => u.Name == input.Name && u.Id != input.Id);
if (isExist)
throw Oops.Bah(ErrorCodeEnum.C1000);
await _reportConfigRep.UpdateAsync(input.Adapt<SysReportConfig>());
}
/// <summary>
/// 删除报表配置
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[UnitOfWork]
[ApiDescriptionSettings(Name = "Delete"), HttpPost]
[DisplayName("删除报表配置")]
public async Task Delete(BaseIdInput input)
{
await _reportConfigRep.DeleteAsync(u => u.Id == input.Id);
}
/// <summary>
/// 复制报表配置
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[UnitOfWork]
[ApiDescriptionSettings(Name = "Copy"), HttpPost]
[DisplayName("复制报表配置")]
public async Task Copy(BaseIdInput input)
{
var entity = await _reportConfigRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Bah(ErrorCodeEnum.D1002);
entity.Id = YitIdHelper.NextId();
entity.Name = $"{entity.Name} - 副本";
entity.CreateTime = DateTime.Now;
entity.CreateUserId = null;
entity.CreateUserName = null;
entity.UpdateTime = null;
entity.UpdateUserId = null;
entity.UpdateUserName = null;
await Add(entity.Adapt<AddReportConfigInput>());
}
/// <summary>
/// 获取报表布局配置
/// </summary>
/// <param name="input">输入参数</param>
[ApiDescriptionSettings(Name = "GetLayoutConfig"), HttpGet]
[DisplayName("获取报表布局配置")]
public SysReportLayoutConfig GetLayoutConfig([FromQuery] BaseIdInput input)
{
var entity = _reportConfigRep.GetFirst(u => u.Id == input.Id);
return entity == null
? throw Oops.Bah(ErrorCodeEnum.D1002)
: new SysReportLayoutConfig
{
Fields = string.IsNullOrEmpty(entity.Fields) ? [] : JSON.Deserialize<List<SysReportField>>(entity.Fields),
Params = string.IsNullOrEmpty(entity.Params) ? [] : JSON.Deserialize<List<SysReportParam>>(entity.Params),
};
}
/// <summary>
/// 解析报表配置Sql
/// </summary>
/// <param name="input">输入参数</param>
[ApiDescriptionSettings(Name = "ParseSql"), HttpPost]
[DisplayName("解析报表配置Sql")]
public async Task<ReportConfigParseSqlOutput> ParseSql(ReportConfigParseSqlInput input)
{
var dataTable = await InnerExecuteSqlScript(input.DataSource, input.SqlScript, input.ExecParams);
var fieldNames = (from DataColumn column in dataTable.Columns select column.ColumnName).ToList();
return new ReportConfigParseSqlOutput
{
FieldNames = fieldNames
};
}
/// <summary>
/// 执行报表配置Sql脚本
/// </summary>
/// <param name="input">输入参数</param>
[ApiDescriptionSettings(Name = "ExecuteSqlScript"), HttpPost]
[DisplayName("执行报表配置Sql脚本")]
// 指定使用 CamelCaseDictionaryKey 的序列化配置选项,使字典的 Key 转换为驼峰样式
[UnifySerializerSetting("CamelCaseDictionaryKey")]
public async Task<List<Dictionary<string, object>>> ExecuteSqlScript(ReportConfigExecuteSqlScriptInput input)
{
var entity = await _reportConfigRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Bah(ErrorCodeEnum.D1002);
if (entity.DsType != ReportConfigDsTypeEnum.Sql)
throw Oops.Bah(ErrorCodeEnum.C1001);
var layoutConfig = GetLayoutConfig(input);
var execParams = new Dictionary<string, object>(input.ExecParams);
// 补充没有传入的参数,如果传入 null则填充空字符串不为 null sqlsugar 才会构造参数
foreach (var param in layoutConfig.Params)
{
execParams.TryAdd(param.ParamName, "");
execParams[param.ParamName] ??= "";
}
var dataTable = await InnerExecuteSqlScript(entity.DataSource, entity.SqlScript, execParams);
// 处理汇总字段
var summaryFieldNames = layoutConfig.Fields.Where(u => u.IsSummary).Select(u => u.FieldName).ToList();
if (summaryFieldNames.Count > 0)
{
var summaryInfo = new Dictionary<string, decimal>();
UnifyContext.Fill(summaryInfo);
foreach (var summaryFieldName in summaryFieldNames)
{
summaryInfo[summaryFieldName] = dataTable.AsEnumerable().Sum(row =>
{
decimal.TryParse(row[summaryFieldName] + "", out decimal summaryValue);
return summaryValue;
});
}
}
return dataTable.AsEnumerable().Select(UtilMethods.DataRowToDictionary).ToList();
}
/// <summary>
/// 执行Sql脚本内部实现
/// </summary>
/// <param name="dataSource"></param>
/// <param name="sqlScript"></param>
/// <param name="execParams"></param>
/// <returns></returns>
private async Task<DataTable> InnerExecuteSqlScript(string dataSource, string sqlScript, Dictionary<string, object> execParams)
{
var isSelectQuery = IsSelectQuery(sqlScript);
var dataSourceDetailList = await _sysReportDataSourceService.GetDataSourceListIncludeDetail();
var dataSourceDetail = dataSourceDetailList.FirstOrDefault(u => u.Id == dataSource) ?? throw Oops.Bah(ErrorCodeEnum.C1002);
ISqlSugarClient dbClient = GetDbClient(dataSourceDetail);
var newExecParams = BuildInParamsHandle(dbClient, sqlScript, execParams);
var parameters = newExecParams.Select(u => new SugarParameter(u.Key, u.Value)).ToList();
if (isSelectQuery)
{
// SELECT 查询
var dataTable = await dbClient.Ado.GetDataTableAsync(sqlScript, parameters);
return dataTable;
}
else
{
// 存储过程
var dataTable = await dbClient.Ado.UseStoredProcedure().GetDataTableAsync(sqlScript, parameters);
return dataTable;
}
}
/// <summary>
/// 获取 DbClient
/// </summary>
/// <param name="dataSourceDetail"></param>
/// <returns></returns>
private ISqlSugarClient GetDbClient(SysReportDataSourceDetail dataSourceDetail)
{
ISqlSugarClient dbClient = null;
if (dataSourceDetail.IsBuildIn)
{
// 获取内置数据库和租户的连接
dbClient = _sysTenantService.GetTenantDbConnectionScope(long.Parse(dataSourceDetail.Id));
}
else
{
if (SqlSugarSetup.ITenant.IsAnyConnection(dataSourceDetail.Id))
{
dbClient = SqlSugarSetup.ITenant.GetConnectionScope(dataSourceDetail.Id);
}
// dbClient 不存在或者连接字符串不一样,则重新设置
if (dbClient == null || dbClient.CurrentConnectionConfig.ConnectionString != dataSourceDetail.ConnectionString)
{
// 获取默认库连接配置
var dbOptions = App.GetOptions<DbConnectionOptions>();
var mainConnConfig = dbOptions.ConnectionConfigs.First(u => u.ConfigId.ToString() == SqlSugarConst.MainConfigId);
// 设置连接配置
var tenantConnConfig = new DbConnectionConfig
{
ConfigId = dataSourceDetail.Id,
DbType = dataSourceDetail.DbType,
IsAutoCloseConnection = true,
ConnectionString = dataSourceDetail.ConnectionString,
DbSettings = new DbSettings
{
EnableUnderLine = mainConnConfig.DbSettings.EnableUnderLine,
},
};
SqlSugarSetup.ITenant.AddConnection(tenantConnConfig);
dbClient = SqlSugarSetup.ITenant.GetConnectionScope(dataSourceDetail.Id);
}
}
return dbClient;
}
/// <summary>
/// 内置参数处理
/// </summary>
private Dictionary<string, object> BuildInParamsHandle(ISqlSugarClient dbClient, string sqlScript, Dictionary<string, object> execParams)
{
var newExecParams = new Dictionary<string, object>(execParams);
if (sqlScript.IndexOf("@curTenantId", StringComparison.Ordinal) > -1) newExecParams["@curTenantId"] = _userManager.TenantId;
if (sqlScript.IndexOf("@curUserId", StringComparison.Ordinal) > -1) newExecParams["@curUserId"] = _userManager.UserId;
return newExecParams;
}
private static bool IsSelectQuery(string sqlScript)
{
// 使用正则表达式判断是否包含 SELECT 关键字(忽略大小写)
var pattern = @"\bselect\b";
var isSelectQuery = Regex.IsMatch(sqlScript, pattern, RegexOptions.IgnoreCase);
return isSelectQuery;
}
/// <summary>
/// 导出报表到Excel
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="AppFriendlyException"></exception>
[ApiDescriptionSettings(Name = "ExportToExcel"), HttpPost]
[DisplayName("导出报表到Excel")]
public async Task<FileStreamResult> ExportToExcel(ReportConfigExecuteSqlScriptInput input)
{
var entity = await _reportConfigRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Bah(ErrorCodeEnum.D1002);
// 执行Sql脚本
var data = await ExecuteSqlScript(input);
// 重新创建忽略大小写的字典
data = data.Select(u => new Dictionary<string, object>(u, StringComparer.OrdinalIgnoreCase)).ToList();
var layoutConfig = GetLayoutConfig(input);
var fields = layoutConfig.Fields.Where(f => f.Visible).ToList();
// 按字段原始顺序处理分组
var orderedGroups = OrderedGroupFields(fields);
using var package = new ExcelPackage();
var worksheet = package.Workbook.Worksheets.Add("ReportData");
int currentRow = 1;
int startCol = 1;
if (orderedGroups.Any(u => u.Any(p => !string.IsNullOrEmpty(p.GroupTitle))))
{
foreach (var group in orderedGroups)
{
int colCount = group.Count();
worksheet.Cells[currentRow, startCol, currentRow, startCol + colCount - 1].Merge = true;
worksheet.Cells[currentRow, startCol].Value = group.First().GroupTitle;
startCol += colCount;
}
currentRow++;
}
// 处理列标题使用Title或FieldName
var curColIndex = 0;
foreach (var field in orderedGroups.SelectMany(group => group))
{
worksheet.Cells[currentRow, curColIndex + 1].Value = string.IsNullOrEmpty(field.Title) ? field.FieldName : field.Title;
curColIndex++;
}
currentRow++;
// 填充数据
foreach (var item in data)
{
curColIndex = 0;
foreach (var field in orderedGroups.SelectMany(group => group))
{
worksheet.Cells[currentRow, curColIndex + 1].Value = item[field.FieldName];
curColIndex++;
}
currentRow++;
}
// 处理汇总行
var summaryFields = fields.Where(f => f.IsSummary).ToList();
if (summaryFields.Count > 0)
{
worksheet.Cells[currentRow, 1].Value = "汇总";
foreach (var field in summaryFields)
{
int colIndex = fields.FindIndex(f => f.FieldName == field.FieldName) + 1;
decimal sum = data.Sum(r =>
{
decimal.TryParse(r[field.FieldName]?.ToString(), out decimal val);
return val;
});
worksheet.Cells[currentRow, colIndex].Value = sum;
}
currentRow++;
}
// 自动调整列宽
worksheet.Cells[1, 1, currentRow - 1, fields.Count].AutoFitColumns();
var stream = new MemoryStream();
package.SaveAs(stream);
stream.Position = 0;
var fileName = entity.Name + $"_{DateTime.Now:yyyyMMddHHmmss}.xlsx";
return new FileStreamResult(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = fileName };
}
/// <summary>
/// 按照字段原始顺序处理分组
/// </summary>
private List<IGrouping<string, SysReportField>> OrderedGroupFields(List<SysReportField> fields)
{
// GroupTitle 没有值,填充特定值作为独自分组
foreach (var field in fields.Where(field => string.IsNullOrWhiteSpace(field.GroupTitle)))
field.GroupTitle = $"-{field.FieldName}-";
// 按分组标题分组
var groupFields = fields.GroupBy(field => field.GroupTitle).ToList();
// 按字段原始顺序处理分组
var orderedGroups = new List<IGrouping<string, SysReportField>>();
foreach (var field in fields)
{
var group = groupFields.First(g => g.Key == field.GroupTitle);
if (orderedGroups.Any(u => u.Key == group.Key)) continue;
orderedGroups.Add(group);
}
// 还原 GroupTitle 为空
foreach (var field in fields.Where(field => field.GroupTitle == $"-{field.FieldName}-"))
field.GroupTitle = "";
return orderedGroups;
}
}

View File

@ -0,0 +1,181 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Furion.Localization;
namespace Admin.NET.Core.Service;
/// <summary>
/// 系统报表数据源服务
/// </summary>
[ApiDescriptionSettings(Order = 500, Description = "报表数据源")]
public class SysReportDataSourceService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository<SysReportDataSource> _reportDataSourceRep;
private readonly SqlSugarRepository<SysTenant> _tenantRep;
private readonly ISqlSugarClient _db;
public SysReportDataSourceService(SqlSugarRepository<SysReportDataSource> reportDataSourceRep,
SqlSugarRepository<SysTenant> tenantRep,
ISqlSugarClient db
)
{
_reportDataSourceRep = reportDataSourceRep;
_tenantRep = tenantRep;
_db = db;
}
/// <summary>
/// 获取报表数据源分页列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[DisplayName("获取报表数据源分页列表")]
public async Task<SqlSugarPagedList<SysReportDataSource>> Page(PageReportDataSourceInput input)
{
var list = await _reportDataSourceRep.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name.Trim()))
.Select(u => new SysReportDataSource(), true)
.OrderBuilder(input)
.ToPagedListAsync(input.Page, input.PageSize);
// // 清空连接字符串
// foreach (var item in list.Items) item.ConnectionString = "";
return list;
}
/// <summary>
/// 增加报表数据源
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "Add"), HttpPost]
[DisplayName("增加报表数据源")]
public async Task Add(AddReportDataSourceInput input)
{
var isExist = await _reportDataSourceRep.IsAnyAsync(u => u.Name == input.Name && u.Id != input.Id);
if (isExist)
throw Oops.Bah(ErrorCodeEnum.C1000);
await _reportDataSourceRep.InsertAsync(input.Adapt<SysReportDataSource>());
}
/// <summary>
/// 更新报表数据源
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[UnitOfWork]
[ApiDescriptionSettings(Name = "Update"), HttpPost]
[DisplayName("更新报表数据源")]
public async Task Update(UpdateReportDataSourceInput input)
{
var isExist = await _reportDataSourceRep.IsAnyAsync(u => u.Name == input.Name && u.Id != input.Id);
if (isExist)
throw Oops.Bah(ErrorCodeEnum.C1000);
var updateEntity = input.Adapt<SysReportDataSource>();
// // 如果连接字符串为空,则使用原来的值
// if (string.IsNullOrEmpty(updateEntity.ConnectionString))
// {
// var entity = await _rep.GetFirstAsync(u => u.Id == input.Id);
// updateEntity.ConnectionString = entity.ConnectionString;
// }
await _reportDataSourceRep.UpdateAsync(updateEntity);
}
/// <summary>
/// 删除报表数据源
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[UnitOfWork]
[ApiDescriptionSettings(Name = "Delete"), HttpPost]
[DisplayName("删除报表数据源")]
public async Task Delete(BaseIdInput input)
{
await _reportDataSourceRep.DeleteAsync(u => u.Id == input.Id);
}
/// <summary>
/// 获取包含详细信息的数据源列表
/// </summary>
/// <returns></returns>
[NonAction]
public async Task<List<SysReportDataSourceDetail>> GetDataSourceListIncludeDetail()
{
var list = new List<SysReportDataSourceDetail>();
// 从配置获取数据源
var configs = App.GetOptions<DbConnectionOptions>().ConnectionConfigs;
foreach (var config in configs)
{
var configId = config.ConfigId.ToString();
var db = _db.AsTenant().GetConnectionScope(configId);
list.Add(new SysReportDataSourceDetail
{
Id = configId,
Name = db.Ado.Connection.Database,
IsBuildIn = true,
DbType = config.DbType,
ConnectionString = db.Ado.Connection.ConnectionString,
});
}
// 从租户获取数据源
var tenantList = await _tenantRep.AsQueryable()
.LeftJoin<SysOrg>((u, o) => u.OrgId == o.Id).ClearFilter()
.Where((u, o) => u.TenantType == TenantTypeEnum.Db)
.Select((u, o) => new { u.Id, o.Name, u.DbType, u.Connection })
.ToListAsync();
foreach (var tenant in tenantList)
{
list.Add(new SysReportDataSourceDetail
{
Id = tenant.Id.ToString(),
Name = tenant.Name,
IsBuildIn = true,
DbType = tenant.DbType,
ConnectionString = tenant.Connection,
});
}
// 用户自定义
var dsList = await _reportDataSourceRep.GetListAsync();
foreach (var ds in dsList)
{
list.Add(new SysReportDataSourceDetail
{
Id = ds.Id.ToString(),
Name = ds.Name,
IsBuildIn = false,
DbType = Enum.Parse<SqlSugar.DbType>(ds.DbType),
ConnectionString = ds.ConnectionString,
});
}
foreach (var item in list.Where(item => item.IsBuildIn)) item.Name += L.Text["(内置)"];
return list;
}
/// <summary>
/// 获取报表数据源列表
/// </summary>
[DisplayName("获取报表数据源列表")]
public async Task<List<ReportDataSourceOutput>> GetDataSourceList()
{
return (await GetDataSourceListIncludeDetail()).Select(u => new ReportDataSourceOutput
{
Id = u.Id,
Name = u.Name,
IsBuildIn = u.IsBuildIn
}).ToList();
}
}

View File

@ -0,0 +1,77 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core.Service;
/// <summary>
/// 系统报表分组服务
/// </summary>
[ApiDescriptionSettings(Order = 500, Description = "报表分组")]
public class SysReportGroupService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository<SysReportGroup> _reportGroupRep;
public SysReportGroupService(SqlSugarRepository<SysReportGroup> reportGroupRep)
{
_reportGroupRep = reportGroupRep;
}
/// <summary>
/// 获取报表分组列表
/// </summary>
/// <returns></returns>
[DisplayName("获取报表分组列表")]
public async Task<List<SysReportGroup>> GetList()
{
return await _reportGroupRep.AsQueryable().OrderBy(u => u.Number).ToListAsync();
}
/// <summary>
/// 增加报表分组
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "Add"), HttpPost]
[DisplayName("增加报表分组")]
public async Task Add(AddReportGroupInput input)
{
var isExist = await _reportGroupRep.IsAnyAsync(u => u.Number == input.Number && u.Id != input.Id);
if (isExist)
throw Oops.Bah(ErrorCodeEnum.C1003);
await _reportGroupRep.InsertAsync(input.Adapt<SysReportGroup>());
}
/// <summary>
/// 更新报表分组
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[UnitOfWork]
[ApiDescriptionSettings(Name = "Update"), HttpPost]
[DisplayName("更新报表分组")]
public async Task Update(UpdateReportGroupInput input)
{
var isExist = await _reportGroupRep.IsAnyAsync(u => u.Number == input.Number && u.Id != input.Id);
if (isExist)
throw Oops.Bah(ErrorCodeEnum.C1003);
await _reportGroupRep.UpdateAsync(input.Adapt<SysReportGroup>());
}
/// <summary>
/// 删除报表分组
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[UnitOfWork]
[ApiDescriptionSettings(Name = "Delete"), HttpPost]
[DisplayName("删除报表分组")]
public async Task Delete(BaseIdInput input)
{
await _reportGroupRep.DeleteAsync(u => u.Id == input.Id);
}
}

View File

@ -80,7 +80,7 @@ public class SysRoleService : IDynamicApiController, ITransient
public async Task<List<RoleOutput>> GetList()
{
// 当前用户已拥有的角色集合
var roleIdList = _userManager.SuperAdmin ? new List<long>() : await _sysUserRoleService.GetUserRoleIdList(_userManager.UserId);
var roleIdList = _userManager.SuperAdmin ? [] : await _sysUserRoleService.GetUserRoleIdList(_userManager.UserId);
return await _sysRoleRep.AsQueryable()
.WhereIF(!_userManager.SuperAdmin, u => u.TenantId == _userManager.TenantId) // 若非超管,则只能操作本租户的角色
@ -106,7 +106,7 @@ public class SysRoleService : IDynamicApiController, ITransient
// 授权角色基础菜单集合
var menuIdList = new List<long>
{
1300000000111, 1300000000121, // 工作台
1300000000101, 1300000000111, 1300000000121, // 工作台
1310000000161, 1310000000162, 1310000000163, 1310000000164, 1310000000165, // 个人中心
};
await _sysRoleMenuService.GrantRoleMenu(new RoleMenuInput() { Id = roleId, MenuIdList = menuIdList });
@ -138,9 +138,9 @@ public class SysRoleService : IDynamicApiController, ITransient
[DisplayName("删除角色")]
public async Task DeleteRole(DeleteRoleInput input)
{
// 禁止删除系统管理员角色
// 禁止删除系统内置角色
var sysRole = await _sysRoleRep.GetByIdAsync(input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
if (sysRole.Code == CommonConst.SysAdminRole) throw Oops.Oh(ErrorCodeEnum.D1019);
if(sysRole.SysFlag == YesNoEnum.Y) throw Oops.Oh(ErrorCodeEnum.D1019);
// 若角色有用户则禁止删除
var userIds = await _sysUserRoleService.GetUserIdList(input.Id);

View File

@ -214,7 +214,8 @@ public class SysTenantService : IDynamicApiController, ITransient
TenantId = tenantId,
Name = tenantMark,
Code = CommonConst.SysAdminRole,
DataScope = DataScopeEnum.All,
DataScope = DataScopeEnum.All,
SysFlag = YesNoEnum.Y,
Remark = tenantMark
};
await _sysRoleRep.InsertAsync(newRole);

View File

@ -105,13 +105,16 @@ public class SysUserService : IDynamicApiController, ITransient
[ApiDescriptionSettings(Name = "Add"), HttpPost]
[DisplayName("增加用户")]
public virtual async Task<long> AddUser(AddUserInput input)
{
{
// 是否有权操作此账号
if (!_userManager.SuperAdmin && input.AccountType is AccountTypeEnum.SuperAdmin) throw Oops.Oh(ErrorCodeEnum.D1033);
var query = _sysUserRep.AsQueryable().ClearFilter();
if (await query.AnyAsync(u => u.Account == input.Account)) throw Oops.Oh(ErrorCodeEnum.D1003);
if (!string.IsNullOrWhiteSpace(input.Phone) && await query.AnyAsync(u => u.Phone == input.Phone)) throw Oops.Oh(ErrorCodeEnum.D1032);
var password = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SysPassword);
// 若没有设置密码则取默认密码
var password = !string.IsNullOrWhiteSpace(input.Password) ? input.Password : await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SysPassword);
var user = input.Adapt<SysUser>();
user.Password = CryptogramHelper.Encrypt(password);
var newUser = await _sysUserRep.AsInsertable(user).ExecuteReturnEntityAsync();
@ -138,13 +141,22 @@ public class SysUserService : IDynamicApiController, ITransient
[ApiDescriptionSettings(Name = "Update"), HttpPost]
[DisplayName("更新用户")]
public virtual async Task UpdateUser(UpdateUserInput input)
{
{
var query = _sysUserRep.AsQueryable().ClearFilter().Where(u => u.Id != input.Id);
if (await query.AnyAsync(u => u.Account == input.Account)) throw Oops.Oh(ErrorCodeEnum.D1003);
if (!string.IsNullOrWhiteSpace(input.Phone) && await query.AnyAsync(u => u.Phone == input.Phone)) throw Oops.Oh(ErrorCodeEnum.D1032);
var user = input.Adapt<SysUser>();
await _sysUserRep.AsUpdateable(user).IgnoreColumns(true).IgnoreColumns(u => new { u.Password, u.Status, u.TenantId }).ExecuteCommandAsync();
if (!string.IsNullOrWhiteSpace(input.Phone) && await query.AnyAsync(u => u.Phone == input.Phone)) throw Oops.Oh(ErrorCodeEnum.D1032);
// 若账号的角色和组织架构发生变化,则强制下线账号进行权限更新
var user = await _sysUserRep.GetByIdAsync(input.Id);
var roleIds = await _sysUserRoleService.GetUserRoleIdList(input.Id);
if (input.OrgId != user.OrgId || !input.RoleIdList.OrderBy(u => u).SequenceEqual(roleIds.OrderBy(u => u)))
{
// 强制下线账号和失效Token
await OfflineAndExpireToken(user);
}
// 更新用户
await _sysUserRep.AsUpdateable(input.Adapt<SysUser>()).IgnoreColumns(true).IgnoreColumns(u => new { u.Password, u.Status, u.TenantId }).ExecuteCommandAsync();
// 更新用户附属机构
await UpdateRoleAndExtOrg(input);
@ -152,14 +164,6 @@ public class SysUserService : IDynamicApiController, ITransient
// 删除用户机构缓存
SqlSugarFilter.DeleteUserOrgCache(input.Id, _sysUserRep.Context.CurrentConnectionConfig.ConfigId.ToString());
// 若账号的角色和组织架构发生变化,则强制下线账号进行权限更新
var roleIds = await _sysUserRoleService.GetUserRoleIdList(input.Id);
if (input.OrgId != user.OrgId || !input.RoleIdList.OrderBy(u => u).SequenceEqual(roleIds.OrderBy(u => u)))
{
// 强制下线账号和失效Token
await OfflineAndExpireToken(user);
}
// 更新域账号
await _sysUserLdapService.AddUserLdap(user.TenantId!.Value, user.Id, user.Account, input.DomainAccount);

View File

@ -43,6 +43,11 @@ public class UserManager : IScoped
/// </summary>
public string NickName => _httpContextAccessor.HttpContext?.User.FindFirst(ClaimConst.NickName)?.Value;
/// <summary>
/// 账号类型
/// </summary>
public AccountTypeEnum? AccountType => int.TryParse(_httpContextAccessor.HttpContext?.User.FindFirst(ClaimConst.AccountType)?.Value, out var val) ? (AccountTypeEnum?)val : null;
/// <summary>
/// 是否超级管理员
/// </summary>

File diff suppressed because it is too large Load Diff

View File

@ -23,6 +23,8 @@ public static class SqlSugarSetup
// 自定义雪花Id算法
StaticConfig.CustomSnowFlakeFunc = YitIdHelper.NextId;
// 注册 MongoDb
InstanceFactory.CustomAssemblies = [typeof(SqlSugar.MongoDb.MongoDbProvider).Assembly];
// 配置字符串表达式
StaticConfig.DynamicExpressionParserType = typeof(DynamicExpressionParser);
StaticConfig.DynamicExpressionParsingConfig = new ParsingConfig
@ -599,8 +601,16 @@ public static class SqlSugarSetup
var sql = viewType.GetMethod(nameof(ISqlSugarView.GetQueryableSqlString))?.Invoke(Activator.CreateInstance(viewType), [dbProvider]) as string;
if (string.IsNullOrWhiteSpace(sql)) throw new Exception("视图初始化Sql语句不能为空");
// 创建视图
dbProvider.Ado.ExecuteCommand($"CREATE VIEW {entityInfo.DbTableName} AS " + Environment.NewLine + " " + sql);
try
{
// 创建视图
dbProvider.Ado.ExecuteCommand($"CREATE VIEW {entityInfo.DbTableName} AS " + Environment.NewLine + " " + sql);
}
catch (Exception ex)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"初始化视图 {viewType.FullName,-58} ({config.ConfigId} - 失败,{ex.Message})");
}
// 停止计时
stopWatch.Stop();

View File

@ -52,7 +52,7 @@ public static class CommonHelper
string noLetters = Regex.Replace(version, "[a-zA-Z]", "");
// 2. 按 '.' 分割版本号
string[] parts = noLetters.Split(['.'], StringSplitOptions.RemoveEmptyEntries);
string[] parts = noLetters.Split('.', StringSplitOptions.RemoveEmptyEntries);
// 3. 确保至少有3部分不足则补 "0"
if (parts.Length < 3)

View File

@ -31,7 +31,7 @@ public class PathTreeBuilder
foreach (var path in paths)
{
var parts = path.Split(['/'], StringSplitOptions.RemoveEmptyEntries);
var parts = path.Split('/', StringSplitOptions.RemoveEmptyEntries);
TreeNode currentNode = root;
foreach (var part in parts)

View File

@ -0,0 +1,45 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
namespace Admin.NET.Core;
/// <summary>
/// 首字母小写(驼峰样式)转换
/// </summary>
public class CamelCaseValueConverter : JsonConverter
{
private static readonly CamelCaseNamingStrategy NamingStrategy = new(true, true);
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (value == null)
{
writer.WriteNull();
return;
}
if (typeof(IEnumerable<string>).IsAssignableFrom(value.GetType()))
serializer.Serialize(writer, ((IEnumerable<string>)value).Select(u => NamingStrategy.GetPropertyName(u, false)));
else
writer.WriteValue(NamingStrategy.GetPropertyName(value + "", false));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return reader.Value;
}
public override bool CanConvert(Type objectType)
{
if (objectType == typeof(string) || typeof(IEnumerable<string>).IsAssignableFrom(objectType))
return true;
return false;
}
}

View File

@ -12,7 +12,7 @@
<ItemGroup>
<PackageReference Include="IGeekFan.AspNetCore.Knife4jUI" Version="0.0.16" />
<PackageReference Include="MQTTnet.AspNetCore" Version="5.0.1.1416" />
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="9.0.6" />
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="9.0.7" />
</ItemGroup>
<ItemGroup>

View File

@ -24,6 +24,7 @@ using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Hosting;
using MQTTnet.AspNetCore;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using OnceMi.AspNetCore.OSS;
using RabbitMQ.Client;
using SixLabors.ImageSharp.Web.DependencyInjection;
@ -59,6 +60,10 @@ public class Startup : AppStartup
// 若请求 Url 包含 token 参数,则设置 Token 值
if (httpContext.Request.Query.ContainsKey("token"))
context.Token = httpContext.Request.Query["token"];
// 若请求 Url 包含 access_token 参数,则设置 Token 值
// 兼容 SignalR 通过 accessTokenFactory 传入的 token 值 .withUrl("/hubs/xxx", { accessTokenFactory: () => this.loginToken })
if (httpContext.Request.Query.ContainsKey("access_token"))
context.Token = httpContext.Request.Query["access_token"];
return Task.CompletedTask;
}
};
@ -133,6 +138,12 @@ public class Startup : AppStartup
//options.JsonSerializerOptions.Converters.AddDateTimeTypeConverters("yyyy-MM-dd HH:mm:ss", localized: true); // 时间格式
});
// 增加字典Key小写处理序列化配置选项
var camelCaseDictionaryKeyContractJsonSetting = new JsonSerializerSettings();
SetNewtonsoftJsonSetting(camelCaseDictionaryKeyContractJsonSetting);
camelCaseDictionaryKeyContractJsonSetting.ContractResolver = new CamelCasePropertyNamesContractResolver(); // 首字母小写(驼峰样式),字典 Key 也会转换为驼峰样式
services.AddUnifyJsonOptions("CamelCaseDictionaryKey", camelCaseDictionaryKeyContractJsonSetting);
// SqlSugar
services.AddSqlSugar();
@ -412,7 +423,7 @@ public class Startup : AppStartup
app.UseScheduleUI(options =>
{
options.RequestPath = "/schedule"; // 必须以 / 开头且不以 / 结尾
options.DisableOnProduction = true; // 是否在生产环境中关闭
options.DisableOnProduction = false; // 是否在生产环境中关闭
options.DisplayEmptyTriggerJobs = true; // 是否显示空作业触发器的作业
options.DisplayHead = false; // 是否显示页头
options.DefaultExpandAllJobs = false; // 是否默认展开所有作业

View File

@ -64,7 +64,7 @@ public partial class @(@Model.ClassName)Mid
@:.WhereIF(!string.IsNullOrWhiteSpace(input.@column.PropertyName), u => u.@(@column.PropertyName) @column.QueryType input.@(@column.PropertyName))
}
}else if(@column.NetType?.TrimEnd('?') == "int" || @column.NetType?.TrimEnd('?') == "long"){
@:.WhereIF(input.@column.PropertyName>0, u => u.@(@column.PropertyName) @column.QueryType input.@(@column.PropertyName))
@:.WhereIF(input.@column.PropertyName>0, u => (int)u.@(@column.PropertyName) @column.QueryType input.@(@column.PropertyName))
}else if(@column.NetType?.TrimEnd('?') == "DateTime" && @column.QueryType == "~"){
@:.WhereIF(input.@(@column.PropertyName)Range != null && input.@(@column.PropertyName)Range.Length == 2, u => u.@(@column.PropertyName) >= input.@(@column.PropertyName)Range[0] && u.@(@column.PropertyName) <= input.@(@column.PropertyName)Range[1])
}else if(@column.NetType?.TrimEnd('?').EndsWith("Enum") == true) {

View File

@ -82,7 +82,7 @@ public partial class @(@Model.ClassName)Service : IDynamicApiController, ITransi
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "page", Description = "分页查询", Order = 1000), HttpPost]
[ApiDescriptionSettings(Name = "Page", Description = "分页查询", Order = 1000), HttpPost]
[DisplayName("分页查询@(@Model.BusName)")]
public async Task<SqlSugarPagedList<@(@Model.ClassName)Output>> Page(Page@(@Model.ClassName)Input input)
{
@ -98,7 +98,7 @@ public partial class @(@Model.ClassName)Service : IDynamicApiController, ITransi
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "add", Description = "增加@(@Model.BusName)", Order = 990), HttpPost]
[ApiDescriptionSettings(Name = "Add", Description = "增加@(@Model.BusName)", Order = 990), HttpPost]
[DisplayName("增加@(@Model.BusName)")]
public async Task<object> Add(Add@(@Model.ClassName)Input input)
{
@ -120,7 +120,7 @@ public partial class @(@Model.ClassName)Service : IDynamicApiController, ITransi
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "delete", Description = "删除(@Model.BusName)", Order = 980), HttpPost]
[ApiDescriptionSettings(Name = "Delete", Description = "删除(@Model.BusName)", Order = 980), HttpPost]
[DisplayName("删除@(@Model.BusName)")]
public async Task Delete(Delete@(@Model.ClassName)Input input)
{
@ -138,7 +138,7 @@ if (@column.ColumnKey == "True"){
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "update", Description = "更新@(@Model.BusName)", Order = 970), HttpPost]
[ApiDescriptionSettings(Name = "Update", Description = "更新@(@Model.BusName)", Order = 970), HttpPost]
[DisplayName("更新@(@Model.BusName)")]
public async Task Update(Update@(@Model.ClassName)Input input)
{
@ -160,7 +160,7 @@ if (@column.ColumnKey == "True"){
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "detail", Description = "获取@(@Model.BusName)", Order = 960), HttpGet]
[ApiDescriptionSettings(Name = "Detail", Description = "获取@(@Model.BusName)", Order = 960), HttpGet]
[DisplayName("获取@(@Model.BusName)")]
public async Task<@(@Model.ClassName)> Detail([FromQuery] QueryById@(@Model.ClassName)Input input)
{
@ -170,7 +170,7 @@ if (@column.ColumnKey == "True"){
}
}
}
/*HJ:不要,有分页了,列表多余的
/// <summary>
/// 获取@(@Model.BusName)列表
/// </summary>
@ -182,7 +182,9 @@ if (@column.ColumnKey == "True"){
{
return await @(@Model.ClassName)Mid.GetQuery(_@(@Model.LowerClassName)Rep, input).OrderBuilder(input).ToListAsync();
}
*/
/*HJ:不要这应该在视图里,或者用ReZero里用
/// <summary>
/// 获取@(@Model.BusName)
/// </summary>
@ -216,7 +218,9 @@ if (@column.ColumnKey == "True"){
});
return await querystats.ToListAsync();
}
*/
/*HJ:不要危险度大,容易SQL注入,且不符合规范
/// <summary>
/// 根据输入参数获取@(@Model.BusName)统计
/// 支持双模式聚合配置:
@ -299,6 +303,8 @@ if (@column.ColumnKey == "True"){
@:return await query.ToListAsync();
}
}
*/
@foreach (var column in Model.TableField){
if(@column.EffectType == "ForeignKey" && (@column.WhetherAddUpdate == "Y" || column.QueryWhether == "Y")){
@ -328,24 +334,84 @@ if(@column.EffectType == "Upload"){
@:/// </summary>
@:/// <param name="file"></param>
@:/// <returns></returns>
@:[ApiDescriptionSettings(Name = "upload@(@column.PropertyName)", Description = "上传@(@column.ColumnComment)", Order = 930), HttpPost]
@:[ApiDescriptionSettings(Name = "Upload@(@column.PropertyName)", Description = "上传@(@column.ColumnComment)", Order = 930), HttpPost]
@:[DisplayName("上传@(@column.ColumnComment)")]
@:public async Task<SysFile> Upload@(@column.PropertyName)([Required] IFormFile file)
@:{
@:var service = App.GetRequiredService<SysFileService>();
@:return await service.UploadFile(new UploadFileInput { File = file, Path = "upload/@(@column.PropertyName)" });
@:return await service.UploadFile(new UploadFileInput { File = file}, "upload/@(@column.PropertyName)" );
@:}
}
}
@foreach (var column in Model.TableField){
if(@column.EffectType == "ApiTreeSelector" && !definedObjects.ContainsKey("@(@column.FkEntityName)Tree")){
@{definedObjects.Add("@(@column.FkEntityName)Tree", 1);}
@:[ApiDescriptionSettings(Name = "@(LowerFirstLetter(@column.FkEntityName))Tree", Description = "获取@(@column.ColumnComment)列表", Order = 920), HttpGet]
@:[DisplayName("获取@(@column.FkEntityName)Tree")]
@:public async Task<dynamic> @(@column.FkEntityName)Tree()
@:/// <summary>
@:/// 获取@(@Model.BusName)树列表
@:/// </summary>
@:/// <param name="input"></param>
@:/// <returns></returns>
@:[ApiDescriptionSettings(Name = "Tree", Description = "获取@(@Model.BusName)树列表", Order = 960), HttpPost]
@:[DisplayName("获取@(@Model.BusName)树列表")]
@:public async Task<dynamic> Tree(Page@(@Model.ClassName)Input input)
@:{
@:return await _@(@Model.LowerClassName)Rep.Context.Queryable<@(@column.FkEntityName)>().Select<@(@column.FkEntityName)Output>().ToTreeAsync(u => u.Children, u => u.@(@column.PidColumn), 0);
@:// 有筛选条件时返回list列表防止构造不出树
@:var isSearch=false;
foreach (var columnTree in Model.TableField){
if (@columnTree.QueryWhether == "Y"){
if (@columnTree.NetType?.TrimEnd('?') == "string"){
@:if(!string.IsNullOrWhiteSpace(input.@columnTree.PropertyName))isSearch=true;
}else if((@columnTree.NetType?.TrimEnd('?') == "int" || @columnTree.NetType?.TrimEnd('?') == "long")){
@:if(input.@columnTree.PropertyName>0)isSearch=true;
}else if((@columnTree.NetType?.TrimEnd('?') == "DateTime" && @columnTree.QueryType == "~")){
@:if(input.@(@columnTree.PropertyName)Range != null)isSearch=true;
} }}
@:if (isSearch||!string.IsNullOrEmpty(input.SearchKey?.Trim()))
@:{
@:return await _@(@Model.LowerClassName)Rep.AsQueryable()
@{string conditionFlag = "";}
@if (haveLikeCdt) {
@:.WhereIF(!string.IsNullOrEmpty(input.SearchKey?.Trim()), u =>
@foreach (var columnTree in Model.TableField){
if (@columnTree.QueryWhether == "Y" && columnTree.QueryType == "like"){
@:@(conditionFlag)u.@(@columnTree.PropertyName).Contains(input.SearchKey.Trim())
conditionFlag="|| ";
}
}
@:)
}
foreach (var columnTree in Model.TableField){
if (@columnTree.QueryWhether == "Y"){if (@columnTree.NetType?.TrimEnd('?') == "string"){if(@columnTree.QueryType == "like"){
@:.WhereIF(!string.IsNullOrWhiteSpace(input.@columnTree.PropertyName), u => u.@(@columnTree.PropertyName).Contains(input.@(@columnTree.PropertyName).Trim()))
}else{
@:.WhereIF(!string.IsNullOrWhiteSpace(input.@columnTree.PropertyName), u => u.@(@columnTree.PropertyName) @columnTree.QueryType input.@(@columnTree.PropertyName))
}}else if(@columnTree.NetType?.TrimEnd('?') == "int" || @columnTree.NetType?.TrimEnd('?') == "long"){
@:.WhereIF(input.@columnTree.PropertyName>0, u => (int)u.@(@columnTree.PropertyName) @columnTree.QueryType input.@(@columnTree.PropertyName))
}else if(@columnTree.NetType?.TrimEnd('?') == "DateTime" && @columnTree.QueryType == "~"){
@:.WhereIF(input.@(@columnTree.PropertyName)Range != null && input.@(@columnTree.PropertyName)Range.Length == 2, u => u.@(@columnTree.PropertyName) >= input.@(@columnTree.PropertyName)Range[0] && u.@(@columnTree.PropertyName) <= input.@(@columnTree.PropertyName)Range[1])
}else if(@columnTree.NetType?.TrimEnd('?').EndsWith("Enum") == true) {
@:.WhereIF(input.@(@columnTree.PropertyName).HasValue, u => u.@(@columnTree.PropertyName) @columnTree.QueryType input.@(@columnTree.PropertyName))
}}}
//HJ @:.OrderBy(u => u.OrderNo)
@:.OrderByDescending(u => u.Id)
@:.Distinct().ToListAsync();
@:}
@:// 无筛选条件时返回树列表
@:return await _@(@Model.LowerClassName)Rep.AsQueryable()
//HJ @:.OrderBy(u => u.OrderNo)
@:.OrderByDescending(u => u.Id)
@:.ToTreeAsync(u => u.Children, u => u.Pid, 0, u => u.Id);
@:}
}
}

View File

@ -202,39 +202,33 @@
import { onMounted, reactive, ref } from 'vue';
import { ElMessageBox, ElMessage } from "element-plus";
import { useUserInfo } from '/@@/stores/userInfo';
import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table';
import { useVxeTable } from '/@@/hooks/useVxeTableOptionsHook';
import { Local } from '/@@/utils/storage';
import { auth } from '/@@/utils/authFunction';
import EditDialog from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/edit.vue';
import ModifyRecord from '/@@/components/table/modifyRecord.vue';
@if(@Model.TableField.Any(x=>x.EffectType == "DatePicker")){
@:// 日历控件
@:import { formatDate } from '/@@/utils/formatTime';
}
@if(@Model.PrintType != "off"){
@:// 推荐设置操作 width 为 200
@://打印控件
@:import { hiprint } from 'vue-plugin-hiprint';
@:import { SysPrintApi } from '/@@/api-services/api';
@:import { SysPrint } from '/@@/api-services/models';
}
// 子窗口
@if(@Model.PrintType != "off") {
@:import { SysPrintApi } from '/@@/api-monkey/api';
@:import { SysPrint } from '/@@/api-monkey/models';
@:import PrintDialog from '/@@/views/system/print/component/hiprint/preview.vue';
}
import EditDialog from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/editDialog.vue';
import ModifyRecord from '/@@/components/table/modifyRecord.vue';
@if (@Model.IsApiService) {
// 接口函数
@://接口控件
@:import { getAPI } from '/@@/utils/axios-utils';
// 接口
@:import { @(@Model.ClassName)Api } from '/@@/api-services/api';
// 模型
@:import { @(@Model.ClassName), @(@Model.ClassName)Input, @(@Model.ClassName)Output } from '/@@/api-services/models';
} else {
//下面这个是废弃的
@:import { page@(@Model.ClassName), delete@(@Model.ClassName), get@(@Model.ClassName)TotalSum } from '/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)';
foreach (var column in Model.QueryWhetherList){
if(@column.EffectType == "ForeignKey"){
@ -246,24 +240,26 @@ foreach (var column in Model.QueryWhetherList){
}
}
// 子窗口对象
//基础变量
const xGrid = ref<VxeGridInstance>();
@if(@Model.PrintType != "off") {
@:const printDialogRef = ref<InstanceType<typeof PrintDialog>>();
}
const editDialogRef = ref<InstanceType<typeof EditDialog>>();
const userStore = useUserInfo();
@if(@Model.PrintType != "off") {
@://打印控件
@:const printDialogRef = ref<InstanceType<typeof PrintDialog>>();
}
@if(@Model.TableField.Any(x=>x.EffectType == "ConstSelector")){
@://常量控件
@:const codeToName = userStore.codeToName;
}
@if(@Model.TableField.Any(x=>x.EffectType == "DictSelector") || @Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
@//字典枚举控件
@:const dc = userStore.getDictItemByValue;
@:const dv = userStore.getDictItemByLabel;
@:const dl = userStore.getDictDataByCode;
}
// 变量
// 变量赋值
const state = reactive({
showAdvanceQueryUI: false,
queryParams: {
@ -338,9 +334,9 @@ const checkTableColumnVisible = (tableColumnName: any) => {
}
}
@if(@Model.TableField.Any(t => t.ColumnName == "CreateTime") && @Model.TableField.Any(t => t.ColumnName == "UpdateTime") && @Model.TableField.Any(t => t.ColumnName == "CreateUserId")){
@:{ title: '修改记录', width: 100, showOverflow: 'tooltip', slots: { default: 'row_record' } },
@:{ field: 'record', title: '修改记录', width: 100, showOverflow: 'tooltip', slots: { default: 'row_record' } },
}
{ title: '操作', fixed: 'right', width: 180, showOverflow: true, slots: { default: 'row_buttons' } },
{ field: 'buttons', title: '操作', fixed: 'right', width: 180, showOverflow: true, slots: { default: 'row_buttons' } },
],
@if(@Model.TableField.Any(x=>x.Statistical == "Y")){
@:footerMethod: ({ columns, data }) => {
@ -426,6 +422,7 @@ const listhandleQuery= async (qparams: any) => {
if(qparams) state.queryParams=qparams;
await handleQuery(true);
};
// 重置操作
const resetQuery = async () => {
state.queryParams.searchKey = undefined;
@ -523,6 +520,10 @@ const handleDelete = (row: any) => {
state.localPageParam.defaultSort = { field: field, order: order!, descStr: 'desc' };
Local.set(localPageParamKey, state.localPageParam);
},
// 双击行事件
async cellDblclick({ row }) {
if (auth('@(@Model.LowerClassName)/update')) await handleEdit(row);
},
};
@foreach (var column in Model.QueryWhetherList) {
@ -564,13 +565,3 @@ const listClick = (row: any,column:any) => {
defineExpose({ listhandleQuery });
</script>
<style lang="scss" scoped>
:deep(.el-input),
:deep(.el-select),
:deep(.el-input-number) {
width: 100%;
}
:deep(.el-slider .el-input-number){
width: auto;
}
</style>

View File

@ -52,7 +52,7 @@
<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" class="mb5" v-if="state.showAdvanceQueryUI">
<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
<el-select v-model="state.queryParams.@(@column.LowerPropertyName)" filterable placeholder="请选择@(@column.ColumnComment)" clearable @@keyup.enter.native="handleQuery(true)" >
<el-option v-for="(item,index) in dl('@(@column.DictTypeCode)')" :key="index" :value="item.code" :label="`${item.name||''} [${item.code}] ${item.value}`" />
<el-option v-for="(item,index) in dl('@(@column.DictTypeCode)')" :key="index" :value="item.value" :label="`${item.label} [${item.code}] ${item.value}`" />
</el-select>
</el-form-item>
</el-col>
@ -60,7 +60,7 @@
<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" class="mb5" v-if="state.showAdvanceQueryUI">
<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
<el-select v-model="state.queryParams.@(@column.LowerPropertyName)" filterable placeholder="请选择@(@column.ColumnComment)" clearable @@keyup.enter.native="handleQuery(true)" >
<el-option v-for="(item,index) in dl('@(@column.DictTypeCode)')" :key="index" :value="item.value" :label="`${item.name} [${item.code}] ${item.value}`" />
<el-option v-for="(item,index) in dl('@(@column.DictTypeCode)')" :key="index" :value="item.value" :label="`${item.label} [${item.code}] ${item.value}`" />
</el-select>
</el-form-item>
</el-col>
@ -179,9 +179,9 @@
}
}
}
<!-- <template #row_record="{ row }">
<template #row_record="{ row }">
<ModifyRecord :data="row" />
</template> -->
</template>
<template #row_buttons="{ row }">
@if(@Model.PrintType != "off") {
<el-tooltip content="打印" placement="top">
@ -203,43 +203,34 @@
<EditDialog ref="editDialogRef" :title="state.title" @@reloadTable="handleQuery" />
</template>
<script lang="ts" setup name="@(@Model.LowerClassName)list">
<script lang="ts" setup name="@(@Model.LowerClassName)">
import { onMounted, reactive, ref } from 'vue';
import { ElMessageBox, ElMessage } from "element-plus";
import { useUserInfo } from '/@@/stores/userInfo';
import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table';
import { useVxeTable } from '/@@/hooks/useVxeTableOptionsHook';
import { Local } from '/@@/utils/storage';
import EditDialog from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/edit.vue';
import ModifyRecord from '/@@/components/table/modifyRecord.vue';
@if(@Model.TableField.Any(x=>x.EffectType == "DatePicker")){
@://日期控件
@:import { formatDate } from '/@@/utils/formatTime';
}
@if(@Model.PrintType != "off"){
@:// 推荐设置操作 width 为 200
@:import { hiprint } from 'vue-plugin-hiprint';
@:import { SysPrintApi } from '/@@/api-services/api';
@:import { SysPrint } from '/@@/api-services/models';
}
// 子窗口
@if(@Model.PrintType != "off") {
@:import { SysPrintApi } from '/@@/api-monkey/api';
@:import { SysPrint } from '/@@/api-monkey/models';
@:import PrintDialog from '/@@/views/system/print/component/hiprint/preview.vue';
}
import EditDialog from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/editDialog.vue';
import ModifyRecord from '/@@/components/table/modifyRecord.vue';
@if (@Model.IsApiService) {
// 接口函数
@:// 接口函数
@:import { getAPI } from '/@@/utils/axios-utils';
// 接口
@:import { @(@Model.ClassName)Api } from '/@@/api-services/api';
// 模型
@:import { @(@Model.ClassName), @(@Model.ClassName)Input, @(@Model.ClassName)Output } from '/@@/api-services/models';
} else {
@://HJ: 废弃,没有使用和适配
@:import { treelist@(@Model.ClassName), delete@(@Model.ClassName) } from '/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)';
@:import { @(@Model.ClassName) } from '/@@/api/models/@(@Model.LowerClassName)';
foreach (var column in Model.QueryWhetherList){
@ -251,15 +242,13 @@ foreach (var column in Model.QueryWhetherList){
}
}
}
// 子窗口对象
const xGrid = ref<VxeGridInstance>();
const editDialogRef = ref<InstanceType<typeof EditDialog>>();
const userStore = useUserInfo();
@if(@Model.PrintType != "off") {
@:const printDialogRef = ref<InstanceType<typeof PrintDialog>>();
}
const editDialogRef = ref<InstanceType<typeof EditDialog>>();
const userStore = useUserInfo();
@if(@Model.TableField.Any(x=>x.EffectType == "ConstSelector")){
@:const codeToName = userStore.codeToName;
}
@ -267,8 +256,9 @@ const userStore = useUserInfo();
@:const dc = userStore.getDictItemByValue;
@:const dv = userStore.getDictItemByLabel;
@:const dl = userStore.getDictDataByCode;
}
// 变量
// 变量初始化
const state = reactive({
showAdvanceQueryUI: false,
treeData: [] as Array<@(@Model.ClassName)>, // 树所有数据
@ -342,9 +332,9 @@ const checkTableColumnVisible = (tableColumnName: any) => {
}
}
@if(@Model.TableField.Any(t => t.ColumnName == "CreateTime") && @Model.TableField.Any(t => t.ColumnName == "UpdateTime") && @Model.TableField.Any(t => t.ColumnName == "CreateUserId")){
@:{ title: '修改记录', width: 100, showOverflow: 'tooltip', slots: { default: 'row_record' } },
@:{ field: 'record',title: '修改记录', width: 100, showOverflow: 'tooltip', slots: { default: 'row_record' } },
}
{ title: '操作', fixed: 'right', width: 180, showOverflow: true, slots: { default: 'row_buttons' } },
{ field: 'buttons',title: '操作', fixed: 'right', width: 180, showOverflow: true, slots: { default: 'row_buttons' } },
],
},
// vxeGrid配置参数(此处可覆写任何参数)参考vxe-table官方文档
@ -378,7 +368,7 @@ onMounted(() => {
const handleQueryApi = async () => {
const params = Object.assign(state.queryParams);
@if (@Model.IsApiService) {
@:return getAPI(@(@Model.ClassName)Api).api@(@Model.ClassName)GetTreeListPost(params);
@:return getAPI(@(@Model.ClassName)Api).api@(@Model.ClassName)TreePost(params);
} else {
@:return treelist@(@Model.ClassName)(params);
}
@ -392,12 +382,14 @@ const handleQuery = async (updateTree: boolean = false) => {
options.loading = false;
// 是否更新左侧树
if (updateTree == true) {
emits('list-reload');
//HJ 暂无该功能 emits('list-reload');
}
// 若无选择节点并且查询条件为空时,更新编辑页面机构列表树
if (state.queryParams.id == 0 && state.queryParams.name == undefined && state.queryParams.code == undefined && state.queryParams.type == undefined && updateTree == false)
state.treeData = res.data.result ?? [];
};
// 列表点击事件
const listhandleQuery= async (qparams: any,key:string,val:any) => {
console.log('listhandleQuery--', JSON.stringify(qparams));
state.key=key;
@ -405,6 +397,7 @@ const listhandleQuery= async (qparams: any,key:string,val:any) => {
if(qparams) state.queryParams=qparams;
await handleQuery(true);
};
// 重置操作
const resetQuery = async () => {
state.queryParams.searchKey = undefined;
@ -482,6 +475,7 @@ const handleDelete = (row: any) => {
})
.catch(() => {});
};
// 表格事件
@if (@Model.IsApiService) {
@:const gridEvents: VxeGridListeners<@(@Model.ClassName)> = {
@ -536,6 +530,7 @@ const handleDelete = (row: any) => {
@:get@(@column.FkEntityName)TreeData();
}
}
// 全部展开
const handleExpand = () => {
xGrid.value?.setAllTreeExpand(true);
@ -545,22 +540,13 @@ const handleExpand = () => {
const handleFold = () => {
xGrid.value?.clearTreeExpand();
};
// 与父组件的交互逻辑
const emits = defineEmits(['list-click']);
const listClick = (row: any,column:any) => {
emits('list-click', row,column);
};
// 将属性或者函数暴露给父组件
defineExpose({ listhandleQuery });
</script>
<style lang="scss" scoped>
:deep(.el-input),
:deep(.el-select),
:deep(.el-input-number) {
width: 100%;
}
:deep(.el-slider .el-input-number){
width: auto;
}
</style>

View File

@ -134,7 +134,7 @@
@::src="state.ruleForm.@(@column.LowerPropertyName)"
@:@@click="state.ruleForm.@(@column.LowerPropertyName)=''"
@:style="width: 100%; height: 100%; object-fit: contain"/>
@:<el-icon v-else><Plus /></el-icon>
@:<el-icon v-else></el-icon>
</el-upload>
</el-form-item>
</el-col>
@ -146,6 +146,13 @@
</el-select>
</el-form-item>
</el-col>
}else if(@column.EffectType == "RichTextEditor"){
//HJ:添加富文本插件
@:<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
@:<el-form-item label="@column.ColumnComment" prop="@(@column.LowerPropertyName)">
@:<Editor v-model:get-html="state.ruleForm.@(@column.LowerPropertyName)" />
</el-form-item>
</el-col>
}else{
}
}
@ -163,30 +170,25 @@
</div>
</template>
<style lang="scss" scoped>
:deep(.el-select),
:deep(.el-input-number) {
width: 100%;
}
:deep(.el-slider .el-input-number){
width: auto;
}
</style>
<script lang="ts" setup>
<script lang="ts" setup name="@(@Model.LowerClassName)">
import { ref,onMounted, reactive } from "vue";
import { ElMessage } from "element-plus";
import type { FormRules } from "element-plus";
import { useUserInfo } from '/@@/stores/userInfo';
@if(@Model.TableField.Any(x=>x.EffectType == "RichTextEditor")){
@://HJ:添加富文本插件
@:import Editor from '/@@/components/editor/index.vue';
}
@if (@Model.IsApiService) {
// 接口函数
@://接口控件
@:import { getAPI } from '/@@/utils/axios-utils';
// 接口
@:import { @(@Model.ClassName)Api } from '/@@/api-services/api';
// 模型
@:import { Update@(@Model.ClassName)Input } from '/@@/api-services/models';
} else {
}
else{
@://HJ:废弃,不要用这个接口 Begin
@:import {
@if(Model.RemoteVerify){
@:exists@(RemoteField),
@ -200,14 +202,16 @@ import { useUserInfo } from '/@@/stores/userInfo';
@:add@(@Model.ClassName),
@:update@(@Model.ClassName),
@:detail@(@Model.ClassName) } from "/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)";
if(@Model.TableField.Any(x=>x.EffectType == "Upload")){
@:import { Plus } from "@@element-plus/icons-vue";
@:import { UploadRequestOptions } from "element-plus";
@:import { @string.Join(",",Model.TableField.Where(x=>x.EffectType == "Upload").Select(x=>"upload"+x.PropertyName).ToList()) } from '/@@/api/@(@Model.PagePath)/@(@Model.LowerClassName)';
}
@://HJ:废弃,不要用这个接口 END
}
@if(@Model.TableField.Any(x=>x.EffectType == "DatePicker")){
@://日期控件
@:import { formatDate } from '/@@/utils/formatTime';
}
@foreach (var column in Model.TableField){
@ -216,6 +220,7 @@ if(@column.EffectType == "ApiTreeSelector" && !definedObjects.ContainsKey("impor
}
}
@if(@Model.TableField.Any(x=>x.EffectType == "EnumSelector")){
@://枚举控件
@:import { SysEnumApi } from '/@@/api-services/api';
}
@ -412,7 +417,7 @@ if(@column.EffectType == "ApiTreeSelector" && !definedObjects.ContainsKey("defin
@{definedObjects.Add("define_get@(@column.FkEntityName)TreeData", 1);}
@:const @LowerFirstLetter(@column.FkEntityName)TreeData = ref<any>([]);
@:const get@(@column.FkEntityName)TreeData = async () => {
@:let list = await get@(@column.FkEntityName)Tree();
@:let list = await getAPI(@(@Model.ClassName)Api).api@(@Model.ClassName)TreePost();
@:@LowerFirstLetter(@column.FkEntityName)TreeData.value = list.data.result ?? [];
@:};
@:get@(@column.FkEntityName)TreeData();
@ -435,9 +440,9 @@ if(@column.EffectType == "Upload"){
@:// 上传@(@column.ColumnComment)
@:const upload@(@column.PropertyName)Handle = async (options: UploadRequestOptions) => {
@if (@Model.IsApiService) {
@:let res = await getAPI(@(@Model.ClassName)Api).api@(@Model.ClassName)Upload@(@column.FkEntityName)PostForm(options);
@:let res = await getAPI(@(@Model.ClassName)Api).api@(@Model.ClassName)Upload@(@column.PropertyName)PostForm(options.file);
} else {
@:let res = await upload@(@column.PropertyName)(options);
@:let res = await upload@(@column.PropertyName)(options.file);
}
@:state.ruleForm.@(column.LowerPropertyName) = res.data.result?.url;
@:};

View File

@ -25,10 +25,9 @@
<script lang="ts" setup name="@(@Model.LowerClassName)">
import { onMounted, reactive, ref } from 'vue';
import { ElMessageBox, ElMessage } from "element-plus";
import IndexList from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/@(@Model.LowerClassName)List.vue';
import IndexList from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/list.vue';
const indexListRef = ref<InstanceType<typeof IndexList>>();
// 变量
// 变量初始化
const state = reactive({
queryParams: {
searchKey: undefined,
@ -39,10 +38,9 @@ const state = reactive({
}
}
});
// 页面初始化
// 页面初始化,列表控件初始化不请求数据,这里要请求一下
onMounted(() => {
indexListRef.value?.listhandleQuery(state.queryParams);//列表控件初始化不请求数据,这里要请求一下
indexListRef.value?.listhandleQuery(state.queryParams);
});
// 主表List组件点击
const handleIndexChange = async (row: any,column: any) => {
@ -51,13 +49,3 @@ const handleIndexChange = async (row: any,column: any) => {
};
</script>
<style lang="scss" scoped>
:deep(.el-input),
:deep(.el-select),
:deep(.el-input-number) {
width: 100%;
}
:deep(.el-slider .el-input-number){
width: auto;
}
</style>

View File

@ -25,8 +25,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="PaddleOCRSharp" Version="5.0.0.1" />
<PackageReference Include="Paddle.Runtime.win_x64" Version="3.0.0" />
<PackageReference Include="PaddleOCRSharp" Version="5.1.0" />
<PackageReference Include="Paddle.Runtime.win_x64" Version="3.1.0.1" />
</ItemGroup>
<ItemGroup>

View File

@ -10,9 +10,9 @@
</div>
## 🎁框架介绍
基于 .NET 8 (Furion/SqlSugar) 实现的通用权限开发框架,前端采用 Vue3/Element-plus代码简洁、易扩展。整合最新技术模块插件式开发前后端分离开箱即用。集成多租户、缓存、数据校验、鉴权、事件总线、动态API、通讯、远程请求、任务调度、打印等众多黑科技。
Admin.NET 是基于 .NET6 (Furion/SqlSugar) 实现的通用权限开发框架,前端采用 Vue3+Element-plus+Vite5整合众多优秀技术和框架模块插件式开发。集成多租户、缓存、数据校验、鉴权、事件总线、动态API、通讯、远程请求、任务调度、打印等众多黑科技。代码结构简单清晰,注释详尽,易于上手与二次开发,即便是复杂业务逻辑也能迅速实现,真正实现“开箱即用”。
前后端分离架构模式内置国密算法SM2/SM4软件层面完全符合等保测评和信创要求同时实现国产化机型、操作系统麒麟、中间件、数据库达梦、人大金仓等等适配
面向中小企业快速开发平台框架框架采用主流技术开发设计前后端分离架构模式。完美适配国产化软硬件环境支持国产中间件、国产数据库、麒麟操作系统、Windows、Linux部署使用集成国密加解密插件使用SM2、SM3、SM4等国密算法进行签名、数据完整性保护软件层面全面遵循等级保护测评要求完全符合等保、密评要求。
```
超高人气的框架(Furion)配合高性能超简单的ORM(SqlSugar)加持,阅历痛点,相见恨晚!让 .NET 开发更简单,更通用,更流行!
@ -22,8 +22,9 @@
1. 支持各种数据库,后台配置文件自行修改(自动生成数据库及种子数据)
2. 前端运行步骤1、安装依赖pnpm install 2、运行pnpm run dev 3、打包pnpm run build
3. QQ交流群1[87333204](https://jq.qq.com/?_wv=1027&k=1t8iqf0G) QQ交流群2[252381476](https://jq.qq.com/?_wv=1027&k=IkzihDcL)
4. 演示环境1http://101.43.53.74:5005/dist/index.html
5. [GitHub 镜像地址](https://github.com/zuohuaijun/Admin.NET.git) [Gitee 镜像地址](https://gitee.com/zuohuaijun/Admin.NET.git)
4. 演示环境1https://demo.adminnet.top 账号superadmin 密码Admin.NET++010101
5. [GitHub 镜像地址](https://github.com/zuohuaijun/Admin.NET.git) [Gitee 镜像地址](https://gitee.com/zuohuaijun/Admin.NET.git) [GitCode 镜像地址](https://gitcode.com/zuohuaijun/Admin.NET.git)
6. 在线文档 [https://adminnet.top/](https://adminnet.top/)
## 📙开发流程
```bash

View File

@ -2,7 +2,7 @@
"name": "admin.net.pro",
"type": "module",
"version": "2.4.33",
"lastBuildTime": "2025.06.20",
"lastBuildTime": "2025.07.21",
"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
"author": "zuohuaijun",
"license": "MIT",
@ -24,9 +24,9 @@
"@vue-office/docx": "^1.6.2",
"@vue-office/excel": "^1.7.14",
"@vue-office/pdf": "^2.0.9",
"@vueuse/core": "^13.4.0",
"@vueuse/core": "^13.5.0",
"@vxe-ui/plugin-export-xlsx": "^4.2.2",
"@vxe-ui/plugin-render-element": "^4.0.11",
"@vxe-ui/plugin-render-element": "^4.0.13",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"animate.css": "^4.1.1",
@ -38,9 +38,9 @@
"echarts": "^5.6.0",
"echarts-gl": "^2.0.9",
"echarts-wordcloud": "^2.1.0",
"element-plus": "^2.10.2",
"element-plus": "^2.10.4",
"exceljs": "^4.4.0",
"ezuikit-js": "^8.1.10",
"ezuikit-js": "^8.1.12",
"flag-icons": "^7.5.0",
"franc": "^6.2.0",
"gcoord": "^1.0.7",
@ -51,10 +51,10 @@
"jwchat": "^2.0.3",
"lodash-es": "^4.17.21",
"magic-string": "^0.30.17",
"md-editor-v3": "^5.7.0",
"md-editor-v3": "^5.8.2",
"mitt": "^3.0.1",
"monaco-editor": "^0.52.2",
"mqtt": "^5.13.1",
"mqtt": "^5.13.3",
"nprogress": "^0.2.0",
"ol": "^10.6.1",
"pinia": "^3.0.3",
@ -64,9 +64,10 @@
"qs": "^6.14.0",
"relation-graph": "^2.2.11",
"screenfull": "^6.0.2",
"sm-crypto-v2": "^1.12.0",
"sm-crypto-v2": "^1.13.0",
"sortablejs": "^1.15.6",
"splitpanes": "^4.0.4",
"sql-formatter": "^15.6.6",
"uuid": "^11.1.0",
"vcrontab-3": "^3.3.22",
"vform3-builds": "^3.0.10",
@ -74,47 +75,54 @@
"vue-clipboard3": "^2.0.0",
"vue-demi": "0.14.10",
"vue-draggable-plus": "^0.6.0",
<<<<<<< HEAD
"vue-element-plus-x": "^1.3.11-beta",
=======
"vue-element-plus-x": "^1.3.0",
>>>>>>> 4030299f0e33e91ec524278c23382aadee7fbed3
"vue-grid-layout": "3.0.0-beta1",
"vue-i18n": "^11.1.5",
"vue-json-pretty": "^2.4.0",
"vue-markdown-shiki": "^2.0.0",
"vue-i18n": "^11.1.10",
"vue-json-pretty": "^2.5.0",
"vue-plugin-hiprint": "^0.0.60",
"vue-router": "^4.5.1",
"vue-signature-pad": "^3.0.2",
"vue3-tree-org": "^4.2.2",
"vxe-pc-ui": "^4.6.27",
"vxe-table": "^4.13.44",
"xe-utils": "^3.7.5",
"vxe-pc-ui": "^4.7.17",
"vxe-table": "^4.14.4",
"xe-utils": "^3.7.8",
"xlsx-js-style": "^1.2.0"
},
"devDependencies": {
"@iconify/vue": "^5.0.0",
"@plugin-web-update-notification/vite": "^2.0.0",
"@types/lodash-es": "^4.17.12",
"@types/node": "^22.15.32",
"@types/node": "^22.15.35",
"@types/nprogress": "^0.2.3",
"@types/sortablejs": "^1.15.8",
"@typescript-eslint/eslint-plugin": "^8.34.1",
"@typescript-eslint/parser": "^8.34.1",
"@vitejs/plugin-vue": "^5.2.4",
"@vitejs/plugin-vue-jsx": "^4.2.0",
"@typescript-eslint/eslint-plugin": "^8.37.0",
"@typescript-eslint/parser": "^8.37.0",
"@vitejs/plugin-vue": "^6.0.0",
"@vitejs/plugin-vue-jsx": "^5.0.1",
"@vue/compiler-sfc": "^3.5.17",
"code-inspector-plugin": "^0.20.12",
"eslint": "^9.29.0",
"eslint-plugin-vue": "^10.2.0",
"globals": "^16.2.0",
"less": "^4.3.0",
"prettier": "^3.5.3",
"code-inspector-plugin": "^0.20.17",
"eslint": "^9.31.0",
"eslint-plugin-vue": "^10.3.0",
"globals": "^16.3.0",
"less": "^4.4.0",
"prettier": "^3.6.2",
"rollup-plugin-visualizer": "^6.0.3",
"sass": "^1.89.2",
"terser": "^5.43.1",
"typescript": "^5.8.3",
"vite": "^6.3.5",
"vite": "^7.0.5",
"vite-plugin-cdn-import": "^1.0.1",
<<<<<<< HEAD
"vite-plugin-compression2": "^2.0.1",
=======
"vite-plugin-compression2": "^2.2.0",
>>>>>>> 4030299f0e33e91ec524278c23382aadee7fbed3
"vite-plugin-vue-setup-extend": "^0.4.0",
"vue-eslint-parser": "^10.1.3"
"vue-eslint-parser": "^10.2.0"
},
"pnpm": {
"onlyBuiltDependencies": [
@ -129,7 +137,10 @@
"esbuild",
"json-editor-vue",
"vue-demi"
]
],
"overrides": {
"rollup": "4.43.0"
}
},
"browserslist": [
"> 1%",

View File

@ -22,6 +22,7 @@ export * from './apis/sys-cache-api';
export * from './apis/sys-code-gen-api';
export * from './apis/sys-code-gen-config-api';
export * from './apis/sys-code-gen-template-api';
export * from './apis/sys-column-custom-api';
export * from './apis/sys-common-api';
export * from './apis/sys-config-api';
export * from './apis/sys-config-tenant-api';
@ -54,6 +55,9 @@ export * from './apis/sys-pos-api';
export * from './apis/sys-print-api';
export * from './apis/sys-proc-api';
export * from './apis/sys-region-api';
export * from './apis/sys-report-config-api';
export * from './apis/sys-report-data-source-api';
export * from './apis/sys-report-group-api';
export * from './apis/sys-role-api';
export * from './apis/sys-schedule-api';
export * from './apis/sys-server-api';

View File

@ -0,0 +1,310 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';
import { Configuration } from '../configuration';
// Some imports not used depending on template conditions
// @ts-ignore
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
import { AdminNETResultColumnCustomOutput } from '../models';
import { ResetColumnCustomInput } from '../models';
import { StoreColumnCustomInput } from '../models';
/**
* SysColumnCustomApi - axios parameter creator
* @export
*/
export const SysColumnCustomApiAxiosParamCreator = function (configuration?: Configuration) {
return {
/**
*
* @summary 🔖
* @param {string} gridId Id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysColumnCustomDetailGet: async (gridId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
// verify required parameter 'gridId' is not null or undefined
if (gridId === null || gridId === undefined) {
throw new RequiredError('gridId','Required parameter gridId was null or undefined when calling apiSysColumnCustomDetailGet.');
}
const localVarPath = `/api/sysColumnCustom/detail`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
if (gridId !== undefined) {
localVarQueryParameter['GridId'] = gridId;
}
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary 🔖
* @param {ResetColumnCustomInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysColumnCustomResetPost: async (body?: ResetColumnCustomInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysColumnCustom/reset`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary 🔖
* @param {StoreColumnCustomInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysColumnCustomStorePost: async (body?: StoreColumnCustomInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysColumnCustom/store`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
}
};
/**
* SysColumnCustomApi - functional programming interface
* @export
*/
export const SysColumnCustomApiFp = function(configuration?: Configuration) {
return {
/**
*
* @summary 🔖
* @param {string} gridId Id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysColumnCustomDetailGet(gridId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultColumnCustomOutput>>> {
const localVarAxiosArgs = await SysColumnCustomApiAxiosParamCreator(configuration).apiSysColumnCustomDetailGet(gridId, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary 🔖
* @param {ResetColumnCustomInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysColumnCustomResetPost(body?: ResetColumnCustomInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
const localVarAxiosArgs = await SysColumnCustomApiAxiosParamCreator(configuration).apiSysColumnCustomResetPost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary 🔖
* @param {StoreColumnCustomInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysColumnCustomStorePost(body?: StoreColumnCustomInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
const localVarAxiosArgs = await SysColumnCustomApiAxiosParamCreator(configuration).apiSysColumnCustomStorePost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
}
};
/**
* SysColumnCustomApi - factory interface
* @export
*/
export const SysColumnCustomApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
return {
/**
*
* @summary 🔖
* @param {string} gridId Id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysColumnCustomDetailGet(gridId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultColumnCustomOutput>> {
return SysColumnCustomApiFp(configuration).apiSysColumnCustomDetailGet(gridId, options).then((request) => request(axios, basePath));
},
/**
*
* @summary 🔖
* @param {ResetColumnCustomInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysColumnCustomResetPost(body?: ResetColumnCustomInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
return SysColumnCustomApiFp(configuration).apiSysColumnCustomResetPost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary 🔖
* @param {StoreColumnCustomInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysColumnCustomStorePost(body?: StoreColumnCustomInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
return SysColumnCustomApiFp(configuration).apiSysColumnCustomStorePost(body, options).then((request) => request(axios, basePath));
},
};
};
/**
* SysColumnCustomApi - object-oriented interface
* @export
* @class SysColumnCustomApi
* @extends {BaseAPI}
*/
export class SysColumnCustomApi extends BaseAPI {
/**
*
* @summary 🔖
* @param {string} gridId Id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysColumnCustomApi
*/
public async apiSysColumnCustomDetailGet(gridId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultColumnCustomOutput>> {
return SysColumnCustomApiFp(this.configuration).apiSysColumnCustomDetailGet(gridId, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary 🔖
* @param {ResetColumnCustomInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysColumnCustomApi
*/
public async apiSysColumnCustomResetPost(body?: ResetColumnCustomInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
return SysColumnCustomApiFp(this.configuration).apiSysColumnCustomResetPost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary 🔖
* @param {StoreColumnCustomInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysColumnCustomApi
*/
public async apiSysColumnCustomStorePost(body?: StoreColumnCustomInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
return SysColumnCustomApiFp(this.configuration).apiSysColumnCustomStorePost(body, options).then((request) => request(this.axios, this.basePath));
}
}

View File

@ -0,0 +1,816 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';
import { Configuration } from '../configuration';
// Some imports not used depending on template conditions
// @ts-ignore
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
import { AddReportConfigInput } from '../models';
import { AdminNETResultFileStreamResult } from '../models';
import { AdminNETResultListDictionaryStringObject } from '../models';
import { AdminNETResultReportConfigParseSqlOutput } from '../models';
import { AdminNETResultSqlSugarPagedListReportConfigOutput } from '../models';
import { AdminNETResultSysReportLayoutConfig } from '../models';
import { BaseIdInput } from '../models';
import { PageReportConfigInput } from '../models';
import { ReportConfigExecuteSqlScriptInput } from '../models';
import { ReportConfigParseSqlInput } from '../models';
import { UpdateReportConfigInput } from '../models';
/**
* SysReportConfigApi - axios parameter creator
* @export
*/
export const SysReportConfigApiAxiosParamCreator = function (configuration?: Configuration) {
return {
/**
*
* @summary
* @param {AddReportConfigInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportConfigAddPost: async (body?: AddReportConfigInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportConfig/add`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportConfigCopyPost: async (body?: BaseIdInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportConfig/copy`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportConfigDeletePost: async (body?: BaseIdInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportConfig/delete`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary Sql脚本
* @param {ReportConfigExecuteSqlScriptInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportConfigExecuteSqlScriptPost: async (body?: ReportConfigExecuteSqlScriptInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportConfig/executeSqlScript`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary Excel
* @param {ReportConfigExecuteSqlScriptInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportConfigExportToExcelPost: async (body?: ReportConfigExecuteSqlScriptInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportConfig/exportToExcel`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {number} id Id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportConfigGetLayoutConfigGet: async (id: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
// verify required parameter 'id' is not null or undefined
if (id === null || id === undefined) {
throw new RequiredError('id','Required parameter id was null or undefined when calling apiSysReportConfigGetLayoutConfigGet.');
}
const localVarPath = `/api/sysReportConfig/getLayoutConfig`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
if (id !== undefined) {
localVarQueryParameter['Id'] = id;
}
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {PageReportConfigInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportConfigPagePost: async (body?: PageReportConfigInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportConfig/page`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary Sql
* @param {ReportConfigParseSqlInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportConfigParseSqlPost: async (body?: ReportConfigParseSqlInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportConfig/parseSql`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {UpdateReportConfigInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportConfigUpdatePost: async (body?: UpdateReportConfigInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportConfig/update`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
}
};
/**
* SysReportConfigApi - functional programming interface
* @export
*/
export const SysReportConfigApiFp = function(configuration?: Configuration) {
return {
/**
*
* @summary
* @param {AddReportConfigInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigAddPost(body?: AddReportConfigInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
const localVarAxiosArgs = await SysReportConfigApiAxiosParamCreator(configuration).apiSysReportConfigAddPost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigCopyPost(body?: BaseIdInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
const localVarAxiosArgs = await SysReportConfigApiAxiosParamCreator(configuration).apiSysReportConfigCopyPost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigDeletePost(body?: BaseIdInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
const localVarAxiosArgs = await SysReportConfigApiAxiosParamCreator(configuration).apiSysReportConfigDeletePost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary Sql脚本
* @param {ReportConfigExecuteSqlScriptInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigExecuteSqlScriptPost(body?: ReportConfigExecuteSqlScriptInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultListDictionaryStringObject>>> {
const localVarAxiosArgs = await SysReportConfigApiAxiosParamCreator(configuration).apiSysReportConfigExecuteSqlScriptPost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary Excel
* @param {ReportConfigExecuteSqlScriptInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigExportToExcelPost(body?: ReportConfigExecuteSqlScriptInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultFileStreamResult>>> {
const localVarAxiosArgs = await SysReportConfigApiAxiosParamCreator(configuration).apiSysReportConfigExportToExcelPost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary
* @param {number} id Id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigGetLayoutConfigGet(id: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultSysReportLayoutConfig>>> {
const localVarAxiosArgs = await SysReportConfigApiAxiosParamCreator(configuration).apiSysReportConfigGetLayoutConfigGet(id, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary
* @param {PageReportConfigInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigPagePost(body?: PageReportConfigInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultSqlSugarPagedListReportConfigOutput>>> {
const localVarAxiosArgs = await SysReportConfigApiAxiosParamCreator(configuration).apiSysReportConfigPagePost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary Sql
* @param {ReportConfigParseSqlInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigParseSqlPost(body?: ReportConfigParseSqlInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultReportConfigParseSqlOutput>>> {
const localVarAxiosArgs = await SysReportConfigApiAxiosParamCreator(configuration).apiSysReportConfigParseSqlPost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary
* @param {UpdateReportConfigInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigUpdatePost(body?: UpdateReportConfigInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
const localVarAxiosArgs = await SysReportConfigApiAxiosParamCreator(configuration).apiSysReportConfigUpdatePost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
}
};
/**
* SysReportConfigApi - factory interface
* @export
*/
export const SysReportConfigApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
return {
/**
*
* @summary
* @param {AddReportConfigInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigAddPost(body?: AddReportConfigInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
return SysReportConfigApiFp(configuration).apiSysReportConfigAddPost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigCopyPost(body?: BaseIdInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
return SysReportConfigApiFp(configuration).apiSysReportConfigCopyPost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigDeletePost(body?: BaseIdInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
return SysReportConfigApiFp(configuration).apiSysReportConfigDeletePost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary Sql脚本
* @param {ReportConfigExecuteSqlScriptInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigExecuteSqlScriptPost(body?: ReportConfigExecuteSqlScriptInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultListDictionaryStringObject>> {
return SysReportConfigApiFp(configuration).apiSysReportConfigExecuteSqlScriptPost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary Excel
* @param {ReportConfigExecuteSqlScriptInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigExportToExcelPost(body?: ReportConfigExecuteSqlScriptInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultFileStreamResult>> {
return SysReportConfigApiFp(configuration).apiSysReportConfigExportToExcelPost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {number} id Id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigGetLayoutConfigGet(id: number, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultSysReportLayoutConfig>> {
return SysReportConfigApiFp(configuration).apiSysReportConfigGetLayoutConfigGet(id, options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {PageReportConfigInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigPagePost(body?: PageReportConfigInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultSqlSugarPagedListReportConfigOutput>> {
return SysReportConfigApiFp(configuration).apiSysReportConfigPagePost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary Sql
* @param {ReportConfigParseSqlInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigParseSqlPost(body?: ReportConfigParseSqlInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultReportConfigParseSqlOutput>> {
return SysReportConfigApiFp(configuration).apiSysReportConfigParseSqlPost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {UpdateReportConfigInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportConfigUpdatePost(body?: UpdateReportConfigInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
return SysReportConfigApiFp(configuration).apiSysReportConfigUpdatePost(body, options).then((request) => request(axios, basePath));
},
};
};
/**
* SysReportConfigApi - object-oriented interface
* @export
* @class SysReportConfigApi
* @extends {BaseAPI}
*/
export class SysReportConfigApi extends BaseAPI {
/**
*
* @summary
* @param {AddReportConfigInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportConfigApi
*/
public async apiSysReportConfigAddPost(body?: AddReportConfigInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
return SysReportConfigApiFp(this.configuration).apiSysReportConfigAddPost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportConfigApi
*/
public async apiSysReportConfigCopyPost(body?: BaseIdInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
return SysReportConfigApiFp(this.configuration).apiSysReportConfigCopyPost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportConfigApi
*/
public async apiSysReportConfigDeletePost(body?: BaseIdInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
return SysReportConfigApiFp(this.configuration).apiSysReportConfigDeletePost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary Sql脚本
* @param {ReportConfigExecuteSqlScriptInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportConfigApi
*/
public async apiSysReportConfigExecuteSqlScriptPost(body?: ReportConfigExecuteSqlScriptInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultListDictionaryStringObject>> {
return SysReportConfigApiFp(this.configuration).apiSysReportConfigExecuteSqlScriptPost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary Excel
* @param {ReportConfigExecuteSqlScriptInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportConfigApi
*/
public async apiSysReportConfigExportToExcelPost(body?: ReportConfigExecuteSqlScriptInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultFileStreamResult>> {
return SysReportConfigApiFp(this.configuration).apiSysReportConfigExportToExcelPost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {number} id Id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportConfigApi
*/
public async apiSysReportConfigGetLayoutConfigGet(id: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultSysReportLayoutConfig>> {
return SysReportConfigApiFp(this.configuration).apiSysReportConfigGetLayoutConfigGet(id, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {PageReportConfigInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportConfigApi
*/
public async apiSysReportConfigPagePost(body?: PageReportConfigInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultSqlSugarPagedListReportConfigOutput>> {
return SysReportConfigApiFp(this.configuration).apiSysReportConfigPagePost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary Sql
* @param {ReportConfigParseSqlInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportConfigApi
*/
public async apiSysReportConfigParseSqlPost(body?: ReportConfigParseSqlInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultReportConfigParseSqlOutput>> {
return SysReportConfigApiFp(this.configuration).apiSysReportConfigParseSqlPost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {UpdateReportConfigInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportConfigApi
*/
public async apiSysReportConfigUpdatePost(body?: UpdateReportConfigInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
return SysReportConfigApiFp(this.configuration).apiSysReportConfigUpdatePost(body, options).then((request) => request(this.axios, this.basePath));
}
}

View File

@ -0,0 +1,467 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';
import { Configuration } from '../configuration';
// Some imports not used depending on template conditions
// @ts-ignore
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
import { AddReportDataSourceInput } from '../models';
import { AdminNETResultListReportDataSourceOutput } from '../models';
import { AdminNETResultSqlSugarPagedListSysReportDataSource } from '../models';
import { BaseIdInput } from '../models';
import { PageReportDataSourceInput } from '../models';
import { UpdateReportDataSourceInput } from '../models';
/**
* SysReportDataSourceApi - axios parameter creator
* @export
*/
export const SysReportDataSourceApiAxiosParamCreator = function (configuration?: Configuration) {
return {
/**
*
* @summary
* @param {AddReportDataSourceInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportDataSourceAddPost: async (body?: AddReportDataSourceInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportDataSource/add`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportDataSourceDataSourceListGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportDataSource/dataSourceList`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportDataSourceDeletePost: async (body?: BaseIdInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportDataSource/delete`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {PageReportDataSourceInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportDataSourcePagePost: async (body?: PageReportDataSourceInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportDataSource/page`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {UpdateReportDataSourceInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportDataSourceUpdatePost: async (body?: UpdateReportDataSourceInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportDataSource/update`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
}
};
/**
* SysReportDataSourceApi - functional programming interface
* @export
*/
export const SysReportDataSourceApiFp = function(configuration?: Configuration) {
return {
/**
*
* @summary
* @param {AddReportDataSourceInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportDataSourceAddPost(body?: AddReportDataSourceInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
const localVarAxiosArgs = await SysReportDataSourceApiAxiosParamCreator(configuration).apiSysReportDataSourceAddPost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportDataSourceDataSourceListGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultListReportDataSourceOutput>>> {
const localVarAxiosArgs = await SysReportDataSourceApiAxiosParamCreator(configuration).apiSysReportDataSourceDataSourceListGet(options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportDataSourceDeletePost(body?: BaseIdInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
const localVarAxiosArgs = await SysReportDataSourceApiAxiosParamCreator(configuration).apiSysReportDataSourceDeletePost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary
* @param {PageReportDataSourceInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportDataSourcePagePost(body?: PageReportDataSourceInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultSqlSugarPagedListSysReportDataSource>>> {
const localVarAxiosArgs = await SysReportDataSourceApiAxiosParamCreator(configuration).apiSysReportDataSourcePagePost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary
* @param {UpdateReportDataSourceInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportDataSourceUpdatePost(body?: UpdateReportDataSourceInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
const localVarAxiosArgs = await SysReportDataSourceApiAxiosParamCreator(configuration).apiSysReportDataSourceUpdatePost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
}
};
/**
* SysReportDataSourceApi - factory interface
* @export
*/
export const SysReportDataSourceApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
return {
/**
*
* @summary
* @param {AddReportDataSourceInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportDataSourceAddPost(body?: AddReportDataSourceInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
return SysReportDataSourceApiFp(configuration).apiSysReportDataSourceAddPost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportDataSourceDataSourceListGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultListReportDataSourceOutput>> {
return SysReportDataSourceApiFp(configuration).apiSysReportDataSourceDataSourceListGet(options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportDataSourceDeletePost(body?: BaseIdInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
return SysReportDataSourceApiFp(configuration).apiSysReportDataSourceDeletePost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {PageReportDataSourceInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportDataSourcePagePost(body?: PageReportDataSourceInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultSqlSugarPagedListSysReportDataSource>> {
return SysReportDataSourceApiFp(configuration).apiSysReportDataSourcePagePost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {UpdateReportDataSourceInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportDataSourceUpdatePost(body?: UpdateReportDataSourceInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
return SysReportDataSourceApiFp(configuration).apiSysReportDataSourceUpdatePost(body, options).then((request) => request(axios, basePath));
},
};
};
/**
* SysReportDataSourceApi - object-oriented interface
* @export
* @class SysReportDataSourceApi
* @extends {BaseAPI}
*/
export class SysReportDataSourceApi extends BaseAPI {
/**
*
* @summary
* @param {AddReportDataSourceInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportDataSourceApi
*/
public async apiSysReportDataSourceAddPost(body?: AddReportDataSourceInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
return SysReportDataSourceApiFp(this.configuration).apiSysReportDataSourceAddPost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportDataSourceApi
*/
public async apiSysReportDataSourceDataSourceListGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultListReportDataSourceOutput>> {
return SysReportDataSourceApiFp(this.configuration).apiSysReportDataSourceDataSourceListGet(options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportDataSourceApi
*/
public async apiSysReportDataSourceDeletePost(body?: BaseIdInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
return SysReportDataSourceApiFp(this.configuration).apiSysReportDataSourceDeletePost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {PageReportDataSourceInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportDataSourceApi
*/
public async apiSysReportDataSourcePagePost(body?: PageReportDataSourceInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultSqlSugarPagedListSysReportDataSource>> {
return SysReportDataSourceApiFp(this.configuration).apiSysReportDataSourcePagePost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {UpdateReportDataSourceInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportDataSourceApi
*/
public async apiSysReportDataSourceUpdatePost(body?: UpdateReportDataSourceInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
return SysReportDataSourceApiFp(this.configuration).apiSysReportDataSourceUpdatePost(body, options).then((request) => request(this.axios, this.basePath));
}
}

View File

@ -0,0 +1,382 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';
import { Configuration } from '../configuration';
// Some imports not used depending on template conditions
// @ts-ignore
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
import { AddReportGroupInput } from '../models';
import { AdminNETResultListSysReportGroup } from '../models';
import { BaseIdInput } from '../models';
import { UpdateReportGroupInput } from '../models';
/**
* SysReportGroupApi - axios parameter creator
* @export
*/
export const SysReportGroupApiAxiosParamCreator = function (configuration?: Configuration) {
return {
/**
*
* @summary
* @param {AddReportGroupInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportGroupAddPost: async (body?: AddReportGroupInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportGroup/add`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportGroupDeletePost: async (body?: BaseIdInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportGroup/delete`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportGroupListGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportGroup/list`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {UpdateReportGroupInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportGroupUpdatePost: async (body?: UpdateReportGroupInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportGroup/update`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
}
};
/**
* SysReportGroupApi - functional programming interface
* @export
*/
export const SysReportGroupApiFp = function(configuration?: Configuration) {
return {
/**
*
* @summary
* @param {AddReportGroupInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportGroupAddPost(body?: AddReportGroupInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
const localVarAxiosArgs = await SysReportGroupApiAxiosParamCreator(configuration).apiSysReportGroupAddPost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportGroupDeletePost(body?: BaseIdInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
const localVarAxiosArgs = await SysReportGroupApiAxiosParamCreator(configuration).apiSysReportGroupDeletePost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportGroupListGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultListSysReportGroup>>> {
const localVarAxiosArgs = await SysReportGroupApiAxiosParamCreator(configuration).apiSysReportGroupListGet(options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary
* @param {UpdateReportGroupInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportGroupUpdatePost(body?: UpdateReportGroupInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
const localVarAxiosArgs = await SysReportGroupApiAxiosParamCreator(configuration).apiSysReportGroupUpdatePost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
}
};
/**
* SysReportGroupApi - factory interface
* @export
*/
export const SysReportGroupApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
return {
/**
*
* @summary
* @param {AddReportGroupInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportGroupAddPost(body?: AddReportGroupInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
return SysReportGroupApiFp(configuration).apiSysReportGroupAddPost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportGroupDeletePost(body?: BaseIdInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
return SysReportGroupApiFp(configuration).apiSysReportGroupDeletePost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportGroupListGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultListSysReportGroup>> {
return SysReportGroupApiFp(configuration).apiSysReportGroupListGet(options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {UpdateReportGroupInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportGroupUpdatePost(body?: UpdateReportGroupInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
return SysReportGroupApiFp(configuration).apiSysReportGroupUpdatePost(body, options).then((request) => request(axios, basePath));
},
};
};
/**
* SysReportGroupApi - object-oriented interface
* @export
* @class SysReportGroupApi
* @extends {BaseAPI}
*/
export class SysReportGroupApi extends BaseAPI {
/**
*
* @summary
* @param {AddReportGroupInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportGroupApi
*/
public async apiSysReportGroupAddPost(body?: AddReportGroupInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
return SysReportGroupApiFp(this.configuration).apiSysReportGroupAddPost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {BaseIdInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportGroupApi
*/
public async apiSysReportGroupDeletePost(body?: BaseIdInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
return SysReportGroupApiFp(this.configuration).apiSysReportGroupDeletePost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportGroupApi
*/
public async apiSysReportGroupListGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultListSysReportGroup>> {
return SysReportGroupApiFp(this.configuration).apiSysReportGroupListGet(options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {UpdateReportGroupInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportGroupApi
*/
public async apiSysReportGroupUpdatePost(body?: UpdateReportGroupInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
return SysReportGroupApiFp(this.configuration).apiSysReportGroupUpdatePost(body, options).then((request) => request(this.axios, this.basePath));
}
}

View File

@ -0,0 +1,180 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import { ReportConfigDsTypeEnum } from './report-config-ds-type-enum';
import { SysReportGroup } from './sys-report-group';
/**
*
*
* @export
* @interface AddReportConfigInput
*/
export interface AddReportConfigInput {
/**
* Id
*
* @type {number}
* @memberof AddReportConfigInput
*/
id?: number;
/**
*
*
* @type {Date}
* @memberof AddReportConfigInput
*/
createTime?: Date;
/**
*
*
* @type {Date}
* @memberof AddReportConfigInput
*/
updateTime?: Date | null;
/**
* Id
*
* @type {number}
* @memberof AddReportConfigInput
*/
createUserId?: number | null;
/**
*
*
* @type {string}
* @memberof AddReportConfigInput
*/
createUserName?: string | null;
/**
* Id
*
* @type {number}
* @memberof AddReportConfigInput
*/
updateUserId?: number | null;
/**
*
*
* @type {string}
* @memberof AddReportConfigInput
*/
updateUserName?: string | null;
/**
*
*
* @type {boolean}
* @memberof AddReportConfigInput
*/
isDelete?: boolean;
/**
*
*
* @type {string}
* @memberof AddReportConfigInput
*/
name?: string | null;
/**
*
*
* @type {string}
* @memberof AddReportConfigInput
*/
description?: string | null;
/**
* @type {ReportConfigDsTypeEnum}
* @memberof AddReportConfigInput
*/
dsType?: ReportConfigDsTypeEnum;
/**
*
*
* @type {string}
* @memberof AddReportConfigInput
*/
dataSource?: string | null;
/**
* Id
*
* @type {number}
* @memberof AddReportConfigInput
*/
groupId?: number | null;
/**
* @type {SysReportGroup}
* @memberof AddReportConfigInput
*/
group?: SysReportGroup;
/**
*
*
* @type {string}
* @memberof AddReportConfigInput
*/
sqlScript?: string | null;
/**
*
*
* @type {string}
* @memberof AddReportConfigInput
*/
apiUrl?: string | null;
/**
*
*
* @type {string}
* @memberof AddReportConfigInput
*/
apiHttpMethod?: string | null;
/**
*
*
* @type {string}
* @memberof AddReportConfigInput
*/
apiParams?: string | null;
/**
*
*
* @type {string}
* @memberof AddReportConfigInput
*/
params?: string | null;
/**
*
*
* @type {string}
* @memberof AddReportConfigInput
*/
fields?: string | null;
}

View File

@ -0,0 +1,118 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
/**
*
*
* @export
* @interface AddReportDataSourceInput
*/
export interface AddReportDataSourceInput {
/**
* Id
*
* @type {number}
* @memberof AddReportDataSourceInput
*/
id?: number;
/**
*
*
* @type {Date}
* @memberof AddReportDataSourceInput
*/
createTime?: Date;
/**
*
*
* @type {Date}
* @memberof AddReportDataSourceInput
*/
updateTime?: Date | null;
/**
* Id
*
* @type {number}
* @memberof AddReportDataSourceInput
*/
createUserId?: number | null;
/**
*
*
* @type {string}
* @memberof AddReportDataSourceInput
*/
createUserName?: string | null;
/**
* Id
*
* @type {number}
* @memberof AddReportDataSourceInput
*/
updateUserId?: number | null;
/**
*
*
* @type {string}
* @memberof AddReportDataSourceInput
*/
updateUserName?: string | null;
/**
*
*
* @type {boolean}
* @memberof AddReportDataSourceInput
*/
isDelete?: boolean;
/**
*
*
* @type {string}
* @memberof AddReportDataSourceInput
*/
name?: string | null;
/**
*
*
* @type {string}
* @memberof AddReportDataSourceInput
*/
dbType?: string | null;
/**
*
*
* @type {string}
* @memberof AddReportDataSourceInput
*/
connectionString?: string | null;
/**
*
*
* @type {string}
* @memberof AddReportDataSourceInput
*/
remark?: string | null;
}

View File

@ -0,0 +1,102 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
/**
*
*
* @export
* @interface AddReportGroupInput
*/
export interface AddReportGroupInput {
/**
* Id
*
* @type {number}
* @memberof AddReportGroupInput
*/
id?: number;
/**
*
*
* @type {Date}
* @memberof AddReportGroupInput
*/
createTime?: Date;
/**
*
*
* @type {Date}
* @memberof AddReportGroupInput
*/
updateTime?: Date | null;
/**
* Id
*
* @type {number}
* @memberof AddReportGroupInput
*/
createUserId?: number | null;
/**
*
*
* @type {string}
* @memberof AddReportGroupInput
*/
createUserName?: string | null;
/**
* Id
*
* @type {number}
* @memberof AddReportGroupInput
*/
updateUserId?: number | null;
/**
*
*
* @type {string}
* @memberof AddReportGroupInput
*/
updateUserName?: string | null;
/**
*
*
* @type {boolean}
* @memberof AddReportGroupInput
*/
isDelete?: boolean;
/**
*
*
* @type {string}
* @memberof AddReportGroupInput
*/
number?: string | null;
/**
*
*
* @type {string}
* @memberof AddReportGroupInput
*/
name?: string | null;
}

View File

@ -0,0 +1,69 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import { ColumnCustomOutput } from './column-custom-output';
/**
*
*
* @export
* @interface AdminNETResultColumnCustomOutput
*/
export interface AdminNETResultColumnCustomOutput {
/**
*
*
* @type {number}
* @memberof AdminNETResultColumnCustomOutput
*/
code?: number;
/**
* successwarningerror
*
* @type {string}
* @memberof AdminNETResultColumnCustomOutput
*/
type?: string | null;
/**
*
*
* @type {string}
* @memberof AdminNETResultColumnCustomOutput
*/
message?: string | null;
/**
* @type {ColumnCustomOutput}
* @memberof AdminNETResultColumnCustomOutput
*/
result?: ColumnCustomOutput;
/**
*
*
* @type {any}
* @memberof AdminNETResultColumnCustomOutput
*/
extras?: any | null;
/**
*
*
* @type {Date}
* @memberof AdminNETResultColumnCustomOutput
*/
time?: Date;
}

View File

@ -0,0 +1,70 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
/**
*
*
* @export
* @interface AdminNETResultFileStreamResult
*/
export interface AdminNETResultFileStreamResult {
/**
*
*
* @type {number}
* @memberof AdminNETResultFileStreamResult
*/
code?: number;
/**
* successwarningerror
*
* @type {string}
* @memberof AdminNETResultFileStreamResult
*/
type?: string | null;
/**
*
*
* @type {string}
* @memberof AdminNETResultFileStreamResult
*/
message?: string | null;
/**
*
*
* @type {Blob}
* @memberof AdminNETResultFileStreamResult
*/
result?: Blob | null;
/**
*
*
* @type {any}
* @memberof AdminNETResultFileStreamResult
*/
extras?: any | null;
/**
*
*
* @type {Date}
* @memberof AdminNETResultFileStreamResult
*/
time?: Date;
}

View File

@ -0,0 +1,70 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
/**
*
*
* @export
* @interface AdminNETResultListDictionaryStringObject
*/
export interface AdminNETResultListDictionaryStringObject {
/**
*
*
* @type {number}
* @memberof AdminNETResultListDictionaryStringObject
*/
code?: number;
/**
* successwarningerror
*
* @type {string}
* @memberof AdminNETResultListDictionaryStringObject
*/
type?: string | null;
/**
*
*
* @type {string}
* @memberof AdminNETResultListDictionaryStringObject
*/
message?: string | null;
/**
*
*
* @type {Array<{ [key: string]: any; }>}
* @memberof AdminNETResultListDictionaryStringObject
*/
result?: Array<{ [key: string]: any; }> | null;
/**
*
*
* @type {any}
* @memberof AdminNETResultListDictionaryStringObject
*/
extras?: any | null;
/**
*
*
* @type {Date}
* @memberof AdminNETResultListDictionaryStringObject
*/
time?: Date;
}

View File

@ -0,0 +1,71 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import { ReportDataSourceOutput } from './report-data-source-output';
/**
*
*
* @export
* @interface AdminNETResultListReportDataSourceOutput
*/
export interface AdminNETResultListReportDataSourceOutput {
/**
*
*
* @type {number}
* @memberof AdminNETResultListReportDataSourceOutput
*/
code?: number;
/**
* successwarningerror
*
* @type {string}
* @memberof AdminNETResultListReportDataSourceOutput
*/
type?: string | null;
/**
*
*
* @type {string}
* @memberof AdminNETResultListReportDataSourceOutput
*/
message?: string | null;
/**
*
*
* @type {Array<ReportDataSourceOutput>}
* @memberof AdminNETResultListReportDataSourceOutput
*/
result?: Array<ReportDataSourceOutput> | null;
/**
*
*
* @type {any}
* @memberof AdminNETResultListReportDataSourceOutput
*/
extras?: any | null;
/**
*
*
* @type {Date}
* @memberof AdminNETResultListReportDataSourceOutput
*/
time?: Date;
}

View File

@ -0,0 +1,71 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import { SysReportGroup } from './sys-report-group';
/**
*
*
* @export
* @interface AdminNETResultListSysReportGroup
*/
export interface AdminNETResultListSysReportGroup {
/**
*
*
* @type {number}
* @memberof AdminNETResultListSysReportGroup
*/
code?: number;
/**
* successwarningerror
*
* @type {string}
* @memberof AdminNETResultListSysReportGroup
*/
type?: string | null;
/**
*
*
* @type {string}
* @memberof AdminNETResultListSysReportGroup
*/
message?: string | null;
/**
*
*
* @type {Array<SysReportGroup>}
* @memberof AdminNETResultListSysReportGroup
*/
result?: Array<SysReportGroup> | null;
/**
*
*
* @type {any}
* @memberof AdminNETResultListSysReportGroup
*/
extras?: any | null;
/**
*
*
* @type {Date}
* @memberof AdminNETResultListSysReportGroup
*/
time?: Date;
}

View File

@ -0,0 +1,69 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import { ReportConfigParseSqlOutput } from './report-config-parse-sql-output';
/**
*
*
* @export
* @interface AdminNETResultReportConfigParseSqlOutput
*/
export interface AdminNETResultReportConfigParseSqlOutput {
/**
*
*
* @type {number}
* @memberof AdminNETResultReportConfigParseSqlOutput
*/
code?: number;
/**
* successwarningerror
*
* @type {string}
* @memberof AdminNETResultReportConfigParseSqlOutput
*/
type?: string | null;
/**
*
*
* @type {string}
* @memberof AdminNETResultReportConfigParseSqlOutput
*/
message?: string | null;
/**
* @type {ReportConfigParseSqlOutput}
* @memberof AdminNETResultReportConfigParseSqlOutput
*/
result?: ReportConfigParseSqlOutput;
/**
*
*
* @type {any}
* @memberof AdminNETResultReportConfigParseSqlOutput
*/
extras?: any | null;
/**
*
*
* @type {Date}
* @memberof AdminNETResultReportConfigParseSqlOutput
*/
time?: Date;
}

View File

@ -0,0 +1,69 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import { SqlSugarPagedListReportConfigOutput } from './sql-sugar-paged-list-report-config-output';
/**
*
*
* @export
* @interface AdminNETResultSqlSugarPagedListReportConfigOutput
*/
export interface AdminNETResultSqlSugarPagedListReportConfigOutput {
/**
*
*
* @type {number}
* @memberof AdminNETResultSqlSugarPagedListReportConfigOutput
*/
code?: number;
/**
* successwarningerror
*
* @type {string}
* @memberof AdminNETResultSqlSugarPagedListReportConfigOutput
*/
type?: string | null;
/**
*
*
* @type {string}
* @memberof AdminNETResultSqlSugarPagedListReportConfigOutput
*/
message?: string | null;
/**
* @type {SqlSugarPagedListReportConfigOutput}
* @memberof AdminNETResultSqlSugarPagedListReportConfigOutput
*/
result?: SqlSugarPagedListReportConfigOutput;
/**
*
*
* @type {any}
* @memberof AdminNETResultSqlSugarPagedListReportConfigOutput
*/
extras?: any | null;
/**
*
*
* @type {Date}
* @memberof AdminNETResultSqlSugarPagedListReportConfigOutput
*/
time?: Date;
}

View File

@ -0,0 +1,69 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import { SqlSugarPagedListSysReportDataSource } from './sql-sugar-paged-list-sys-report-data-source';
/**
*
*
* @export
* @interface AdminNETResultSqlSugarPagedListSysReportDataSource
*/
export interface AdminNETResultSqlSugarPagedListSysReportDataSource {
/**
*
*
* @type {number}
* @memberof AdminNETResultSqlSugarPagedListSysReportDataSource
*/
code?: number;
/**
* successwarningerror
*
* @type {string}
* @memberof AdminNETResultSqlSugarPagedListSysReportDataSource
*/
type?: string | null;
/**
*
*
* @type {string}
* @memberof AdminNETResultSqlSugarPagedListSysReportDataSource
*/
message?: string | null;
/**
* @type {SqlSugarPagedListSysReportDataSource}
* @memberof AdminNETResultSqlSugarPagedListSysReportDataSource
*/
result?: SqlSugarPagedListSysReportDataSource;
/**
*
*
* @type {any}
* @memberof AdminNETResultSqlSugarPagedListSysReportDataSource
*/
extras?: any | null;
/**
*
*
* @type {Date}
* @memberof AdminNETResultSqlSugarPagedListSysReportDataSource
*/
time?: Date;
}

View File

@ -0,0 +1,69 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import { SysReportLayoutConfig } from './sys-report-layout-config';
/**
*
*
* @export
* @interface AdminNETResultSysReportLayoutConfig
*/
export interface AdminNETResultSysReportLayoutConfig {
/**
*
*
* @type {number}
* @memberof AdminNETResultSysReportLayoutConfig
*/
code?: number;
/**
* successwarningerror
*
* @type {string}
* @memberof AdminNETResultSysReportLayoutConfig
*/
type?: string | null;
/**
*
*
* @type {string}
* @memberof AdminNETResultSysReportLayoutConfig
*/
message?: string | null;
/**
* @type {SysReportLayoutConfig}
* @memberof AdminNETResultSysReportLayoutConfig
*/
result?: SysReportLayoutConfig;
/**
*
*
* @type {any}
* @memberof AdminNETResultSysReportLayoutConfig
*/
extras?: any | null;
/**
*
*
* @type {Date}
* @memberof AdminNETResultSysReportLayoutConfig
*/
time?: Date;
}

View File

@ -0,0 +1,70 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
/**
*
*
* @export
* @interface ColumnCustomOutput
*/
export interface ColumnCustomOutput {
/**
* Id
*
* @type {number}
* @memberof ColumnCustomOutput
*/
userId?: number;
/**
* Id
*
* @type {string}
* @memberof ColumnCustomOutput
*/
gridId?: string | null;
/**
*
*
* @type {{ [key: string]: string; }}
* @memberof ColumnCustomOutput
*/
fixedData?: { [key: string]: string; } | null;
/**
*
*
* @type {{ [key: string]: number; }}
* @memberof ColumnCustomOutput
*/
resizableData?: { [key: string]: number; } | null;
/**
*
*
* @type {{ [key: string]: number; }}
* @memberof ColumnCustomOutput
*/
sortData?: { [key: string]: number; } | null;
/**
* /
*
* @type {{ [key: string]: boolean; }}
* @memberof ColumnCustomOutput
*/
visibleData?: { [key: string]: boolean; } | null;
}

View File

@ -14,6 +14,9 @@ export * from './add-plugin-input';
export * from './add-pos-input';
export * from './add-print-input';
export * from './add-region-input';
export * from './add-report-config-input';
export * from './add-report-data-source-input';
export * from './add-report-group-input';
export * from './add-role-input';
export * from './add-schedule-input';
export * from './add-subscribe-message-template-input';
@ -24,11 +27,13 @@ export * from './address-family';
export * from './admin-netresult-boolean';
export * from './admin-netresult-captcha-output';
export * from './admin-netresult-chat-output';
export * from './admin-netresult-column-custom-output';
export * from './admin-netresult-create-pay-transaction-native-output';
export * from './admin-netresult-create-pay-transaction-output';
export * from './admin-netresult-data-set';
export * from './admin-netresult-data-table';
export * from './admin-netresult-dictionary-string-string';
export * from './admin-netresult-file-stream-result';
export * from './admin-netresult-generate-qrimage-output';
export * from './admin-netresult-generate-signature-output';
export * from './admin-netresult-get-refund-domestic-refund-by-out-refund-number-response';
@ -50,6 +55,7 @@ export * from './admin-netresult-list-db-backup-output';
export * from './admin-netresult-list-db-column-output';
export * from './admin-netresult-list-db-output';
export * from './admin-netresult-list-db-table-info';
export * from './admin-netresult-list-dictionary-string-object';
export * from './admin-netresult-list-enum-entity';
export * from './admin-netresult-list-enum-type-output';
export * from './admin-netresult-list-int64';
@ -58,6 +64,7 @@ export * from './admin-netresult-list-log-vis-output';
export * from './admin-netresult-list-menu-output';
export * from './admin-netresult-list-nu-get-package';
export * from './admin-netresult-list-pos-output';
export * from './admin-netresult-list-report-data-source-output';
export * from './admin-netresult-list-role-output';
export * from './admin-netresult-list-role-table-output';
export * from './admin-netresult-list-stat-log-output';
@ -75,6 +82,7 @@ export * from './admin-netresult-list-sys-menu';
export * from './admin-netresult-list-sys-notice';
export * from './admin-netresult-list-sys-org';
export * from './admin-netresult-list-sys-region';
export * from './admin-netresult-list-sys-report-group';
export * from './admin-netresult-list-sys-schedule';
export * from './admin-netresult-list-sys-user';
export * from './admin-netresult-list-sys-user-ext-org';
@ -87,6 +95,7 @@ export * from './admin-netresult-login-user-output';
export * from './admin-netresult-model-list-output';
export * from './admin-netresult-notice-output';
export * from './admin-netresult-object';
export * from './admin-netresult-report-config-parse-sql-output';
export * from './admin-netresult-sm-key-pair-output';
export * from './admin-netresult-sql-sugar-paged-list-chat-list-output';
export * from './admin-netresult-sql-sugar-paged-list-job-detail-output';
@ -94,6 +103,7 @@ export * from './admin-netresult-sql-sugar-paged-list-oauth-user-output';
export * from './admin-netresult-sql-sugar-paged-list-open-access-output';
export * from './admin-netresult-sql-sugar-paged-list-page-pos-output';
export * from './admin-netresult-sql-sugar-paged-list-page-role-output';
export * from './admin-netresult-sql-sugar-paged-list-report-config-output';
export * from './admin-netresult-sql-sugar-paged-list-sys-code-gen';
export * from './admin-netresult-sql-sugar-paged-list-sys-config';
export * from './admin-netresult-sql-sugar-paged-list-sys-config-tenant';
@ -113,6 +123,7 @@ export * from './admin-netresult-sql-sugar-paged-list-sys-online-user';
export * from './admin-netresult-sql-sugar-paged-list-sys-plugin';
export * from './admin-netresult-sql-sugar-paged-list-sys-print';
export * from './admin-netresult-sql-sugar-paged-list-sys-region';
export * from './admin-netresult-sql-sugar-paged-list-sys-report-data-source';
export * from './admin-netresult-sql-sugar-paged-list-sys-upgrade';
export * from './admin-netresult-sql-sugar-paged-list-sys-wechat-pay';
export * from './admin-netresult-sql-sugar-paged-list-tenant-output';
@ -133,6 +144,7 @@ export * from './admin-netresult-sys-log-msg';
export * from './admin-netresult-sys-log-op';
export * from './admin-netresult-sys-notice';
export * from './admin-netresult-sys-print';
export * from './admin-netresult-sys-report-layout-config';
export * from './admin-netresult-sys-schedule';
export * from './admin-netresult-sys-upgrade';
export * from './admin-netresult-sys-user';
@ -170,6 +182,7 @@ export * from './chat-output';
export * from './cluster-status';
export * from './code-gen-config';
export * from './code-gen-type-enum';
export * from './column-custom-output';
export * from './column-ouput';
export * from './column-relation';
export * from './compare-info';
@ -354,6 +367,8 @@ export * from './page-pos-input';
export * from './page-pos-output';
export * from './page-print-input';
export * from './page-region-input';
export * from './page-report-config-input';
export * from './page-report-data-source-input';
export * from './page-role-input';
export * from './page-role-output';
export * from './page-sys-wechat-pay-input';
@ -373,8 +388,16 @@ export * from './public-message-input';
export * from './query-region-input';
export * from './ram-info';
export * from './refund-request-input';
export * from './report-config-ds-type-enum';
export * from './report-config-execute-sql-script-input';
export * from './report-config-output';
export * from './report-config-parse-sql-input';
export * from './report-config-parse-sql-output';
export * from './report-data-source-output';
export * from './reset-column-custom-input';
export * from './reset-pwd-user-input';
export * from './role-api-input';
export * from './role-dto';
export * from './role-input';
export * from './role-menu-input';
export * from './role-org-input';
@ -404,6 +427,7 @@ export * from './sql-sugar-paged-list-oauth-user-output';
export * from './sql-sugar-paged-list-open-access-output';
export * from './sql-sugar-paged-list-page-pos-output';
export * from './sql-sugar-paged-list-page-role-output';
export * from './sql-sugar-paged-list-report-config-output';
export * from './sql-sugar-paged-list-sys-code-gen';
export * from './sql-sugar-paged-list-sys-config';
export * from './sql-sugar-paged-list-sys-config-tenant';
@ -423,12 +447,14 @@ export * from './sql-sugar-paged-list-sys-online-user';
export * from './sql-sugar-paged-list-sys-plugin';
export * from './sql-sugar-paged-list-sys-print';
export * from './sql-sugar-paged-list-sys-region';
export * from './sql-sugar-paged-list-sys-report-data-source';
export * from './sql-sugar-paged-list-sys-upgrade';
export * from './sql-sugar-paged-list-sys-wechat-pay';
export * from './sql-sugar-paged-list-tenant-output';
export * from './sql-sugar-paged-list-user-output';
export * from './stat-log-output';
export * from './status-enum';
export * from './store-column-custom-input';
export * from './stress-test-harness-result';
export * from './stress-test-input';
export * from './struct-layout-attribute';
@ -469,6 +495,11 @@ export * from './sys-org';
export * from './sys-plugin';
export * from './sys-print';
export * from './sys-region';
export * from './sys-report-data-source';
export * from './sys-report-field';
export * from './sys-report-group';
export * from './sys-report-layout-config';
export * from './sys-report-param';
export * from './sys-schedule';
export * from './sys-tenant-upload-carousel-file-body';
export * from './sys-upgrade';
@ -512,6 +543,9 @@ export * from './update-plugin-input';
export * from './update-pos-input';
export * from './update-print-input';
export * from './update-region-input';
export * from './update-report-config-input';
export * from './update-report-data-source-input';
export * from './update-report-group-input';
export * from './update-role-input';
export * from './update-schedule-input';
export * from './update-sys-ldap-input';

View File

@ -13,6 +13,7 @@
*/
import { AccountTypeEnum } from './account-type-enum';
import { RoleDto } from './role-dto';
/**
*
*
@ -158,10 +159,10 @@ export interface LoginUserOutput {
/**
*
*
* @type {Array<number>}
* @type {Array<RoleDto>}
* @memberof LoginUserOutput
*/
roleIds?: Array<number> | null;
roles?: Array<RoleDto> | null;
/**
*

View File

@ -0,0 +1,100 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import { Filter } from './filter';
import { Search } from './search';
/**
*
*
* @export
* @interface PageReportConfigInput
*/
export interface PageReportConfigInput {
/**
* @type {Search}
* @memberof PageReportConfigInput
*/
search?: Search;
/**
*
*
* @type {string}
* @memberof PageReportConfigInput
*/
keyword?: string | null;
/**
* @type {Filter}
* @memberof PageReportConfigInput
*/
filter?: Filter;
/**
*
*
* @type {number}
* @memberof PageReportConfigInput
*/
page?: number;
/**
*
*
* @type {number}
* @memberof PageReportConfigInput
*/
pageSize?: number;
/**
*
*
* @type {string}
* @memberof PageReportConfigInput
*/
field?: string | null;
/**
*
*
* @type {string}
* @memberof PageReportConfigInput
*/
order?: string | null;
/**
*
*
* @type {string}
* @memberof PageReportConfigInput
*/
descStr?: string | null;
/**
*
*
* @type {string}
* @memberof PageReportConfigInput
*/
name?: string | null;
/**
* Id
*
* @type {number}
* @memberof PageReportConfigInput
*/
groupId?: number | null;
}

View File

@ -0,0 +1,92 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import { Filter } from './filter';
import { Search } from './search';
/**
*
*
* @export
* @interface PageReportDataSourceInput
*/
export interface PageReportDataSourceInput {
/**
* @type {Search}
* @memberof PageReportDataSourceInput
*/
search?: Search;
/**
*
*
* @type {string}
* @memberof PageReportDataSourceInput
*/
keyword?: string | null;
/**
* @type {Filter}
* @memberof PageReportDataSourceInput
*/
filter?: Filter;
/**
*
*
* @type {number}
* @memberof PageReportDataSourceInput
*/
page?: number;
/**
*
*
* @type {number}
* @memberof PageReportDataSourceInput
*/
pageSize?: number;
/**
*
*
* @type {string}
* @memberof PageReportDataSourceInput
*/
field?: string | null;
/**
*
*
* @type {string}
* @memberof PageReportDataSourceInput
*/
order?: string | null;
/**
*
*
* @type {string}
* @memberof PageReportDataSourceInput
*/
descStr?: string | null;
/**
*
*
* @type {string}
* @memberof PageReportDataSourceInput
*/
name?: string | null;
}

View File

@ -0,0 +1,24 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
/**
* <br />&nbsp;Sql Sql = 0<br />&nbsp;Api Api = 1<br />
* @export
* @enum {string}
*/
export enum ReportConfigDsTypeEnum {
NUMBER_0 = 0,
NUMBER_1 = 1
}

View File

@ -0,0 +1,38 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
/**
* Sql脚本输入参数
*
* @export
* @interface ReportConfigExecuteSqlScriptInput
*/
export interface ReportConfigExecuteSqlScriptInput {
/**
* Id
*
* @type {number}
* @memberof ReportConfigExecuteSqlScriptInput
*/
id: number;
/**
*
*
* @type {{ [key: string]: any; }}
* @memberof ReportConfigExecuteSqlScriptInput
*/
execParams?: { [key: string]: any; } | null;
}

View File

@ -0,0 +1,188 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import { ReportConfigDsTypeEnum } from './report-config-ds-type-enum';
import { SysReportGroup } from './sys-report-group';
/**
*
*
* @export
* @interface ReportConfigOutput
*/
export interface ReportConfigOutput {
/**
* Id
*
* @type {number}
* @memberof ReportConfigOutput
*/
id?: number;
/**
*
*
* @type {Date}
* @memberof ReportConfigOutput
*/
createTime?: Date;
/**
*
*
* @type {Date}
* @memberof ReportConfigOutput
*/
updateTime?: Date | null;
/**
* Id
*
* @type {number}
* @memberof ReportConfigOutput
*/
createUserId?: number | null;
/**
*
*
* @type {string}
* @memberof ReportConfigOutput
*/
createUserName?: string | null;
/**
* Id
*
* @type {number}
* @memberof ReportConfigOutput
*/
updateUserId?: number | null;
/**
*
*
* @type {string}
* @memberof ReportConfigOutput
*/
updateUserName?: string | null;
/**
*
*
* @type {boolean}
* @memberof ReportConfigOutput
*/
isDelete?: boolean;
/**
*
*
* @type {string}
* @memberof ReportConfigOutput
*/
name?: string | null;
/**
*
*
* @type {string}
* @memberof ReportConfigOutput
*/
description?: string | null;
/**
* @type {ReportConfigDsTypeEnum}
* @memberof ReportConfigOutput
*/
dsType?: ReportConfigDsTypeEnum;
/**
*
*
* @type {string}
* @memberof ReportConfigOutput
*/
dataSource?: string | null;
/**
* Id
*
* @type {number}
* @memberof ReportConfigOutput
*/
groupId?: number | null;
/**
* @type {SysReportGroup}
* @memberof ReportConfigOutput
*/
group?: SysReportGroup;
/**
*
*
* @type {string}
* @memberof ReportConfigOutput
*/
sqlScript?: string | null;
/**
*
*
* @type {string}
* @memberof ReportConfigOutput
*/
apiUrl?: string | null;
/**
*
*
* @type {string}
* @memberof ReportConfigOutput
*/
apiHttpMethod?: string | null;
/**
*
*
* @type {string}
* @memberof ReportConfigOutput
*/
apiParams?: string | null;
/**
*
*
* @type {string}
* @memberof ReportConfigOutput
*/
params?: string | null;
/**
*
*
* @type {string}
* @memberof ReportConfigOutput
*/
fields?: string | null;
/**
*
*
* @type {string}
* @memberof ReportConfigOutput
*/
groupName?: string | null;
}

View File

@ -0,0 +1,46 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
/**
* Sql输入参数
*
* @export
* @interface ReportConfigParseSqlInput
*/
export interface ReportConfigParseSqlInput {
/**
*
*
* @type {string}
* @memberof ReportConfigParseSqlInput
*/
dataSource?: string | null;
/**
*
*
* @type {string}
* @memberof ReportConfigParseSqlInput
*/
sqlScript?: string | null;
/**
*
*
* @type {{ [key: string]: any; }}
* @memberof ReportConfigParseSqlInput
*/
execParams?: { [key: string]: any; } | null;
}

View File

@ -0,0 +1,30 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
/**
* Sql输出参数
*
* @export
* @interface ReportConfigParseSqlOutput
*/
export interface ReportConfigParseSqlOutput {
/**
*
*
* @type {Array<string>}
* @memberof ReportConfigParseSqlOutput
*/
fieldNames?: Array<string> | null;
}

View File

@ -0,0 +1,46 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
/**
*
*
* @export
* @interface ReportDataSourceOutput
*/
export interface ReportDataSourceOutput {
/**
* Id
*
* @type {string}
* @memberof ReportDataSourceOutput
*/
id?: string | null;
/**
*
*
* @type {string}
* @memberof ReportDataSourceOutput
*/
name?: string | null;
/**
*
*
* @type {boolean}
* @memberof ReportDataSourceOutput
*/
isBuildIn?: boolean;
}

View File

@ -0,0 +1,30 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
/**
*
*
* @export
* @interface ResetColumnCustomInput
*/
export interface ResetColumnCustomInput {
/**
* Id
*
* @type {string}
* @memberof ResetColumnCustomInput
*/
gridId: string;
}

View File

@ -0,0 +1,46 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
/**
*
*
* @export
* @interface RoleDto
*/
export interface RoleDto {
/**
* Id
*
* @type {number}
* @memberof RoleDto
*/
id?: number;
/**
*
*
* @type {string}
* @memberof RoleDto
*/
name?: string | null;
/**
*
*
* @type {string}
* @memberof RoleDto
*/
code?: string | null;
}

View File

@ -0,0 +1,79 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
import { ReportConfigOutput } from './report-config-output';
/**
*
*
* @export
* @interface SqlSugarPagedListReportConfigOutput
*/
export interface SqlSugarPagedListReportConfigOutput {
/**
*
*
* @type {number}
* @memberof SqlSugarPagedListReportConfigOutput
*/
page?: number;
/**
*
*
* @type {number}
* @memberof SqlSugarPagedListReportConfigOutput
*/
pageSize?: number;
/**
*
*
* @type {number}
* @memberof SqlSugarPagedListReportConfigOutput
*/
total?: number;
/**
*
*
* @type {number}
* @memberof SqlSugarPagedListReportConfigOutput
*/
totalPages?: number;
/**
*
*
* @type {Array<ReportConfigOutput>}
* @memberof SqlSugarPagedListReportConfigOutput
*/
items?: Array<ReportConfigOutput> | null;
/**
*
*
* @type {boolean}
* @memberof SqlSugarPagedListReportConfigOutput
*/
hasPrevPage?: boolean;
/**
*
*
* @type {boolean}
* @memberof SqlSugarPagedListReportConfigOutput
*/
hasNextPage?: boolean;
}

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