feat: 报表配置功能

This commit is contained in:
写意 2025-06-21 17:26:21 +08:00
parent 7ae8e5e00f
commit a4799a5093
62 changed files with 6791 additions and 0 deletions

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>
/// 首字母小写驼峰样式Converter
/// </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

@ -0,0 +1,87 @@
// 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 = 255)]
public string Name { get; set; }
/// <summary>
/// 描述
/// </summary>
[SugarColumn(ColumnDescription = "描述", Length = 500)]
public string? Description { get; set; }
/// <summary>
/// 数据源类型
/// </summary>
[SugarColumn(ColumnDescription = "数据源类型")]
public ReportConfigDsTypeEnum DsType { get; set; }
/// <summary>
/// 数据源
/// </summary>
[SugarColumn(ColumnDescription = "数据源")]
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 = 4000)]
public string? ApiUrl { get; set; }
/// <summary>
/// 接口请求方式
/// </summary>
[SugarColumn(ColumnDescription = "接口请求方式", Length = 10)]
public string? ApiHttpMethod { get; set; }
/// <summary>
/// 接口参数
/// </summary>
[SugarColumn(ColumnDescription = "接口参数", Length = 4000)]
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,39 @@
// 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 = 255)]
public string Name { get; set; }
/// <summary>
/// 数据库类型
/// </summary>
[SugarColumn(ColumnDescription = "数据库类型", Length = 20)]
public string DbType { get; set; }
/// <summary>
/// 连接字符串
/// </summary>
[SugarColumn(ColumnDescription = "连接字符串", Length = 2000)]
public string ConnectionString { get; set; }
/// <summary>
/// 备注
/// </summary>
[SugarColumn(ColumnDescription = "备注", Length = 500)]
public string? Memo { get; set; }
}

View File

@ -0,0 +1,27 @@
// 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 = 80)]
public string Number { get; set; }
/// <summary>
/// 名称
/// </summary>
[SugarColumn(ColumnDescription = "名称", Length = 255)]
public string Name { get; set; }
}

View File

@ -846,4 +846,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

@ -216,6 +216,19 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
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=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=1310000000901, Pid=0, Title="报表开发", Path="/report", Name="report", Component="Layout", Icon="iconfont icon-ico_shuju", Type=MenuTypeEnum.Dir, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=14500 },
new SysMenu{ Id=1310000000911, Pid=1310000000901, Title="数据源配置", Path="/report/sysReportDataSource", Name="sysReportDataSource", Component="/system/reportDataSource/index", Icon="ele-Document", Type=MenuTypeEnum.Menu, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000912, Pid=1310000000911, Title="查询", Permission="sysReportDataSource/page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000913, Pid=1310000000911, Title="编辑", Permission="sysReportDataSource/update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000914, Pid=1310000000911, Title="增加", Permission="sysReportDataSource/add", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000915, Pid=1310000000911, Title="删除", Permission="sysReportDataSource/delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000916, Pid=1310000000911, Title="复制", Permission="sysReportDataSource/copy", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000921, Pid=1310000000901, Title="报表配置", Path="/report/sysReportConfig", 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=1310000000922, Pid=1310000000921, Title="查询", Permission="sysReportConfig/page", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000923, Pid=1310000000921, Title="编辑", Permission="sysReportConfig/update", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000924, Pid=1310000000921, Title="增加", Permission="sysReportConfig/v", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
new SysMenu{ Id=1310000000925, Pid=1310000000921, Title="删除", Permission="sysReportConfig/delete", Type=MenuTypeEnum.Btn, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), OrderNo=100 },
];
}
}

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; } = new();
}
/// <summary>
/// 报表配置执行Sql脚本输入参数
/// </summary>
public class ReportConfigExecuteSqlScriptInput : BaseIdInput
{
/// <summary>
/// 执行参数
/// </summary>
public Dictionary<string, object> ExecParams { get; set; } = new();
}

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,310 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core.Service;
/// <summary>
/// 报表配置服务
/// </summary>
[ApiDescriptionSettings(Order = 500, Description = "报表配置")]
public class SysReportConfigService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository<SysReportConfig> _rep;
private readonly SysReportDataSourceService _sysReportDataSourceService;
private readonly SysTenantService _sysTenantService;
private readonly UserManager _userManager;
/// <summary>
/// 报表配置服务构造函数
/// </summary>
public SysReportConfigService(SqlSugarRepository<SysReportConfig> rep,
SysReportDataSourceService sysReportDataSourceService,
SysTenantService sysTenantService,
UserManager userManager
)
{
_rep = rep;
_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 _rep.AsQueryable()
.LeftJoin<SysReportGroup>((c, g) => c.GroupId == g.Id)
.WhereIF(!string.IsNullOrWhiteSpace(input.Name), (c, g) => c.Name.Contains(input.Name.Trim()))
.WhereIF(input.GroupId is > 0, (c, g) => c.GroupId == input.GroupId)
.Select((c, g) => new ReportConfigOutput
{
GroupName = g.Name
}, true)
.OrderBuilder(input)
.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 _rep.IsAnyAsync(u => u.Name == input.Name && u.Id != input.Id);
if (isExist)
throw Oops.Bah(ErrorCodeEnum.C1000);
await _rep.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 _rep.IsAnyAsync(u => u.Name == input.Name && u.Id != input.Id);
if (isExist)
throw Oops.Bah(ErrorCodeEnum.C1000);
await _rep.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 _rep.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 _rep.GetFirstAsync(u => u.Id == input.Id);
if (entity == null)
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 = _rep.GetFirst(u => u.Id == input.Id);
if (entity == null) throw Oops.Bah(ErrorCodeEnum.D1002);
return 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 _rep.GetFirstAsync(u => u.Id == input.Id);
if (entity == null) 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;
}
}

View File

@ -0,0 +1,185 @@
// 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> _rep;
private readonly SqlSugarRepository<SysTenant> _tenantRep;
private readonly ISqlSugarClient _db;
/// <summary>
/// 报表数据源服务构造函数
/// </summary>
public SysReportDataSourceService(SqlSugarRepository<SysReportDataSource> rep,
SqlSugarRepository<SysTenant> tenantRep,
ISqlSugarClient db
)
{
_rep = rep;
_tenantRep = tenantRep;
_db = db;
}
/// <summary>
/// 获取报表数据源分页列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[DisplayName("获取报表数据源分页列表")]
public async Task<SqlSugarPagedList<SysReportDataSource>> Page(PageReportDataSourceInput input)
{
var list = await _rep.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 _rep.IsAnyAsync(u => u.Name == input.Name && u.Id != input.Id);
if (isExist)
throw Oops.Bah(ErrorCodeEnum.C1000);
await _rep.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 _rep.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 _rep.UpdateAsync(updateEntity);
}
/// <summary>
/// 删除报表数据源
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[UnitOfWork]
[ApiDescriptionSettings(Name = "Delete"), HttpPost]
[DisplayName("删除报表数据源")]
public async Task Delete(BaseIdInput input)
{
await _rep.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 _rep.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>
[ApiDescriptionSettings(Name = "GetDataSourceList"), HttpGet]
[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,81 @@
// 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> _rep;
/// <summary>
/// 报表分组服务构造函数
/// </summary>
public SysReportGroupService(SqlSugarRepository<SysReportGroup> rep)
{
_rep = rep;
}
/// <summary>
/// 获取报表分组列表
/// </summary>
/// <returns></returns>
[ApiDescriptionSettings(Name = "GetList"), HttpGet]
[DisplayName("获取报表分组列表")]
public async Task<List<SysReportGroup>> GetList()
{
return await _rep.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 _rep.IsAnyAsync(u => u.Number == input.Number && u.Id != input.Id);
if (isExist)
throw Oops.Bah(ErrorCodeEnum.C1003);
await _rep.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 _rep.IsAnyAsync(u => u.Number == input.Number && u.Id != input.Id);
if (isExist)
throw Oops.Bah(ErrorCodeEnum.C1003);
await _rep.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 _rep.DeleteAsync(u => u.Id == input.Id);
}
}

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;
@ -133,6 +134,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();

View File

@ -67,6 +67,7 @@
"sm-crypto-v2": "^1.12.0",
"sortablejs": "^1.15.6",
"splitpanes": "^4.0.4",
"sql-formatter": "^15.6.5",
"uuid": "^11.1.0",
"vcrontab-3": "^3.3.22",
"vform3-builds": "^3.0.10",

View File

@ -54,6 +54,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,732 @@
/* 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 { 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
* @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
* @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
* @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
* @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 {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 {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysReportDataSourceGetDataSourceListGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportDataSource/getDataSourceList`;
// 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 {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 {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 {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportDataSourceGetDataSourceListGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultListReportDataSourceOutput>>> {
const localVarAxiosArgs = await SysReportDataSourceApiAxiosParamCreator(configuration).apiSysReportDataSourceGetDataSourceListGet(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 {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 {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysReportDataSourceGetDataSourceListGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultListReportDataSourceOutput>> {
return SysReportDataSourceApiFp(configuration).apiSysReportDataSourceGetDataSourceListGet(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 {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 {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysReportDataSourceApi
*/
public async apiSysReportDataSourceGetDataSourceListGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultListReportDataSourceOutput>> {
return SysReportDataSourceApiFp(this.configuration).apiSysReportDataSourceGetDataSourceListGet(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}
*/
apiSysReportGroupGetListGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysReportGroup/getList`;
// 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 apiSysReportGroupGetListGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultListSysReportGroup>>> {
const localVarAxiosArgs = await SysReportGroupApiAxiosParamCreator(configuration).apiSysReportGroupGetListGet(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 apiSysReportGroupGetListGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultListSysReportGroup>> {
return SysReportGroupApiFp(configuration).apiSysReportGroupGetListGet(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 apiSysReportGroupGetListGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultListSysReportGroup>> {
return SysReportGroupApiFp(this.configuration).apiSysReportGroupGetListGet(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
*/
memo?: 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,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

@ -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';
@ -50,6 +53,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 +62,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 +80,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 +93,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 +101,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 +121,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 +142,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';
@ -354,6 +364,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,6 +385,12 @@ 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-pwd-user-input';
export * from './role-api-input';
export * from './role-input';
@ -404,6 +422,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,6 +442,7 @@ 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';
@ -469,6 +489,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 +537,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

@ -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,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;
}

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 { SysReportDataSource } from './sys-report-data-source';
/**
*
*
* @export
* @interface SqlSugarPagedListSysReportDataSource
*/
export interface SqlSugarPagedListSysReportDataSource {
/**
*
*
* @type {number}
* @memberof SqlSugarPagedListSysReportDataSource
*/
page?: number;
/**
*
*
* @type {number}
* @memberof SqlSugarPagedListSysReportDataSource
*/
pageSize?: number;
/**
*
*
* @type {number}
* @memberof SqlSugarPagedListSysReportDataSource
*/
total?: number;
/**
*
*
* @type {number}
* @memberof SqlSugarPagedListSysReportDataSource
*/
totalPages?: number;
/**
*
*
* @type {Array<SysReportDataSource>}
* @memberof SqlSugarPagedListSysReportDataSource
*/
items?: Array<SysReportDataSource> | null;
/**
*
*
* @type {boolean}
* @memberof SqlSugarPagedListSysReportDataSource
*/
hasPrevPage?: boolean;
/**
*
*
* @type {boolean}
* @memberof SqlSugarPagedListSysReportDataSource
*/
hasNextPage?: boolean;
}

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 SysReportDataSource
*/
export interface SysReportDataSource {
/**
* Id
*
* @type {number}
* @memberof SysReportDataSource
*/
id?: number;
/**
*
*
* @type {Date}
* @memberof SysReportDataSource
*/
createTime?: Date;
/**
*
*
* @type {Date}
* @memberof SysReportDataSource
*/
updateTime?: Date | null;
/**
* Id
*
* @type {number}
* @memberof SysReportDataSource
*/
createUserId?: number | null;
/**
*
*
* @type {string}
* @memberof SysReportDataSource
*/
createUserName?: string | null;
/**
* Id
*
* @type {number}
* @memberof SysReportDataSource
*/
updateUserId?: number | null;
/**
*
*
* @type {string}
* @memberof SysReportDataSource
*/
updateUserName?: string | null;
/**
*
*
* @type {boolean}
* @memberof SysReportDataSource
*/
isDelete?: boolean;
/**
*
*
* @type {string}
* @memberof SysReportDataSource
*/
name?: string | null;
/**
*
*
* @type {string}
* @memberof SysReportDataSource
*/
dbType?: string | null;
/**
*
*
* @type {string}
* @memberof SysReportDataSource
*/
connectionString?: string | null;
/**
*
*
* @type {string}
* @memberof SysReportDataSource
*/
memo?: string | null;
}

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 SysReportField
*/
export interface SysReportField {
/**
*
*
* @type {string}
* @memberof SysReportField
*/
fieldName?: string | null;
/**
*
*
* @type {string}
* @memberof SysReportField
*/
title?: string | null;
/**
*
*
* @type {boolean}
* @memberof SysReportField
*/
isSummary?: boolean;
/**
*
*
* @type {boolean}
* @memberof SysReportField
*/
visible?: boolean;
/**
*
*
* @type {string}
* @memberof SysReportField
*/
groupTitle?: string | null;
/**
*
*
* @type {number}
* @memberof SysReportField
*/
width?: number;
}

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 SysReportGroup
*/
export interface SysReportGroup {
/**
* Id
*
* @type {number}
* @memberof SysReportGroup
*/
id?: number;
/**
*
*
* @type {Date}
* @memberof SysReportGroup
*/
createTime?: Date;
/**
*
*
* @type {Date}
* @memberof SysReportGroup
*/
updateTime?: Date | null;
/**
* Id
*
* @type {number}
* @memberof SysReportGroup
*/
createUserId?: number | null;
/**
*
*
* @type {string}
* @memberof SysReportGroup
*/
createUserName?: string | null;
/**
* Id
*
* @type {number}
* @memberof SysReportGroup
*/
updateUserId?: number | null;
/**
*
*
* @type {string}
* @memberof SysReportGroup
*/
updateUserName?: string | null;
/**
*
*
* @type {boolean}
* @memberof SysReportGroup
*/
isDelete?: boolean;
/**
*
*
* @type {string}
* @memberof SysReportGroup
*/
number?: string | null;
/**
*
*
* @type {string}
* @memberof SysReportGroup
*/
name?: string | null;
}

View File

@ -0,0 +1,40 @@
/* 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 { SysReportField } from './sys-report-field';
import { SysReportParam } from './sys-report-param';
/**
*
*
* @export
* @interface SysReportLayoutConfig
*/
export interface SysReportLayoutConfig {
/**
*
*
* @type {Array<SysReportField>}
* @memberof SysReportLayoutConfig
*/
fields?: Array<SysReportField> | null;
/**
*
*
* @type {Array<SysReportParam>}
* @memberof SysReportLayoutConfig
*/
params?: Array<SysReportParam> | null;
}

View File

@ -0,0 +1,54 @@
/* 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 SysReportParam
*/
export interface SysReportParam {
/**
*
*
* @type {string}
* @memberof SysReportParam
*/
paramName?: string | null;
/**
*
*
* @type {string}
* @memberof SysReportParam
*/
title?: string | null;
/**
*
*
* @type {string}
* @memberof SysReportParam
*/
inputCtrl?: string | null;
/**
*
*
* @type {any}
* @memberof SysReportParam
*/
defaultValue?: any | null;
}

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 UpdateReportConfigInput
*/
export interface UpdateReportConfigInput {
/**
* Id
*
* @type {number}
* @memberof UpdateReportConfigInput
*/
id?: number;
/**
*
*
* @type {Date}
* @memberof UpdateReportConfigInput
*/
createTime?: Date;
/**
*
*
* @type {Date}
* @memberof UpdateReportConfigInput
*/
updateTime?: Date | null;
/**
* Id
*
* @type {number}
* @memberof UpdateReportConfigInput
*/
createUserId?: number | null;
/**
*
*
* @type {string}
* @memberof UpdateReportConfigInput
*/
createUserName?: string | null;
/**
* Id
*
* @type {number}
* @memberof UpdateReportConfigInput
*/
updateUserId?: number | null;
/**
*
*
* @type {string}
* @memberof UpdateReportConfigInput
*/
updateUserName?: string | null;
/**
*
*
* @type {boolean}
* @memberof UpdateReportConfigInput
*/
isDelete?: boolean;
/**
*
*
* @type {string}
* @memberof UpdateReportConfigInput
*/
name?: string | null;
/**
*
*
* @type {string}
* @memberof UpdateReportConfigInput
*/
description?: string | null;
/**
* @type {ReportConfigDsTypeEnum}
* @memberof UpdateReportConfigInput
*/
dsType?: ReportConfigDsTypeEnum;
/**
*
*
* @type {string}
* @memberof UpdateReportConfigInput
*/
dataSource?: string | null;
/**
* Id
*
* @type {number}
* @memberof UpdateReportConfigInput
*/
groupId?: number | null;
/**
* @type {SysReportGroup}
* @memberof UpdateReportConfigInput
*/
group?: SysReportGroup;
/**
*
*
* @type {string}
* @memberof UpdateReportConfigInput
*/
sqlScript?: string | null;
/**
*
*
* @type {string}
* @memberof UpdateReportConfigInput
*/
apiUrl?: string | null;
/**
*
*
* @type {string}
* @memberof UpdateReportConfigInput
*/
apiHttpMethod?: string | null;
/**
*
*
* @type {string}
* @memberof UpdateReportConfigInput
*/
apiParams?: string | null;
/**
*
*
* @type {string}
* @memberof UpdateReportConfigInput
*/
params?: string | null;
/**
*
*
* @type {string}
* @memberof UpdateReportConfigInput
*/
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 UpdateReportDataSourceInput
*/
export interface UpdateReportDataSourceInput {
/**
* Id
*
* @type {number}
* @memberof UpdateReportDataSourceInput
*/
id?: number;
/**
*
*
* @type {Date}
* @memberof UpdateReportDataSourceInput
*/
createTime?: Date;
/**
*
*
* @type {Date}
* @memberof UpdateReportDataSourceInput
*/
updateTime?: Date | null;
/**
* Id
*
* @type {number}
* @memberof UpdateReportDataSourceInput
*/
createUserId?: number | null;
/**
*
*
* @type {string}
* @memberof UpdateReportDataSourceInput
*/
createUserName?: string | null;
/**
* Id
*
* @type {number}
* @memberof UpdateReportDataSourceInput
*/
updateUserId?: number | null;
/**
*
*
* @type {string}
* @memberof UpdateReportDataSourceInput
*/
updateUserName?: string | null;
/**
*
*
* @type {boolean}
* @memberof UpdateReportDataSourceInput
*/
isDelete?: boolean;
/**
*
*
* @type {string}
* @memberof UpdateReportDataSourceInput
*/
name?: string | null;
/**
*
*
* @type {string}
* @memberof UpdateReportDataSourceInput
*/
dbType?: string | null;
/**
*
*
* @type {string}
* @memberof UpdateReportDataSourceInput
*/
connectionString?: string | null;
/**
*
*
* @type {string}
* @memberof UpdateReportDataSourceInput
*/
memo?: 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 UpdateReportGroupInput
*/
export interface UpdateReportGroupInput {
/**
* Id
*
* @type {number}
* @memberof UpdateReportGroupInput
*/
id?: number;
/**
*
*
* @type {Date}
* @memberof UpdateReportGroupInput
*/
createTime?: Date;
/**
*
*
* @type {Date}
* @memberof UpdateReportGroupInput
*/
updateTime?: Date | null;
/**
* Id
*
* @type {number}
* @memberof UpdateReportGroupInput
*/
createUserId?: number | null;
/**
*
*
* @type {string}
* @memberof UpdateReportGroupInput
*/
createUserName?: string | null;
/**
* Id
*
* @type {number}
* @memberof UpdateReportGroupInput
*/
updateUserId?: number | null;
/**
*
*
* @type {string}
* @memberof UpdateReportGroupInput
*/
updateUserName?: string | null;
/**
*
*
* @type {boolean}
* @memberof UpdateReportGroupInput
*/
isDelete?: boolean;
/**
*
*
* @type {string}
* @memberof UpdateReportGroupInput
*/
number?: string | null;
/**
*
*
* @type {string}
* @memberof UpdateReportGroupInput
*/
name?: string | null;
}

View File

@ -85,6 +85,19 @@ export const dynamicRoutes: Array<RouteRecordRaw> = [
icon: 'ele-View',
},
},
{
path: '/report/view/:reportConfigId/:tagsViewName?',
name: 'sysReportView',
component: () => import('/@/views/system/reportConfig/component/reportView.vue'),
meta: {
title: '报表查看',
isHide: true,
isKeepAlive: true,
isAffix: false,
isIframe: false,
icon: '',
},
},
];
/**

View File

@ -0,0 +1,594 @@
<template>
<div>
<el-dialog v-model="state.isShowDialog" draggable :close-on-click-modal="false" width="90%">
<template #header>
<div style="color: #fff">
<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>
<span> {{ props.title }} </span>
</div>
</template>
<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="130" :rules="rules">
<el-row :gutter="10">
<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8" class="mb20">
<el-form-item :label="$t('名称')" prop="name">
<el-input v-model="state.ruleForm.name" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8" class="mb20">
<el-form-item :label="$t('分组')" prop="groupId">
<el-select v-model="state.ruleForm.groupId" filterable clearable>
<el-option v-for="item in state.groupList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8" class="mb20">
<el-form-item :label="$t('描述')" prop="description">
<el-input v-model="state.ruleForm.description" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8" class="mb20">
<el-form-item :label="$t('数据源类型')" prop="dsType">
<g-sys-dict v-model="state.ruleForm.dsType" code="ReportConfigDsTypeEnum" render-as="select" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8" class="mb20" v-if="state.ruleForm.dsType === ReportConfigDsTypeEnum.NUMBER_0">
<el-form-item :label="$t('数据源')" prop="dataSource">
<el-select v-model="state.ruleForm.dataSource" class="w100">
<el-option v-for="item in state.dataSourceList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" :style="[state.ruleForm.dsType === ReportConfigDsTypeEnum.NUMBER_0 ? '' : 'display:none;']">
<el-form-item :label="$t('脚本语句')" prop="sqlScript">
<div ref="sqlScriptMonacoEditorRef" style="width: 100%; height: 300px; border: 1px solid var(--el-border-color)"></div>
<el-button ref="parseSqlButtonRef" type="success" plain style="margin-top: 8px" @click="parseSqlClick">{{ $t('解析Sql') }}</el-button>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8" class="mb20" v-if="state.ruleForm.dsType === ReportConfigDsTypeEnum.NUMBER_1">
<el-form-item :label="$t('接口地址')" prop="apiUrl">
<el-input v-model="state.ruleForm.apiUrl" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8" class="mb20" v-if="state.ruleForm.dsType === ReportConfigDsTypeEnum.NUMBER_1">
<el-form-item :label="$t('接口请求方式')" prop="apiHttpMethod">
<el-select v-model="state.ruleForm.apiHttpMethod" class="w100">
<el-option key="Get" label="Get" value="Get" />
<el-option key="Post" label="Post" value="Post" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" :style="[state.ruleForm.dsType === ReportConfigDsTypeEnum.NUMBER_1 ? '' : 'display:none;']">
<el-form-item :label="$t('接口参数')" prop="apiParams">
<div ref="apiParamsMonacoEditorRef" style="width: 100%; height: 300px; border: 1px solid var(--el-border-color)"></div>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-tabs v-model="state.activeName" class="report-config-tab">
<el-tab-pane :label="$t('字段')" name="field">
<vxe-grid ref="vFieldGrid" v-bind="fieldConfig.gridOptions" :data="state.fieldListData">
<template #toolbar_buttons>
<el-space>
<el-button type="primary" size="small" icon="ele-Plus" @click="() => add(vFieldGrid!, beforeAddField)">{{ $t('新增') }}</el-button>
<el-button size="small" @click="() => insert(vFieldGrid!)">{{ $t('插入') }}</el-button>
<el-button type="danger" size="small" icon="ele-Minus" plain @click="() => remove(vFieldGrid!)">{{ $t('删除') }}</el-button>
</el-space>
</template>
<template #toolbar_tools> </template>
<template #row_isSummary="{ row }">
{{ row.isSummary ? '√' : '' }}
</template>
<template #row_visible="{ row }">
{{ row.visible ? '√' : '' }}
</template>
</vxe-grid>
</el-tab-pane>
<el-tab-pane :label="$t('参数')" name="param">
<div style="display: flex; height: 100%">
<vxe-grid ref="vParamGrid" style="flex: 1" v-bind="paramConfig.gridOptions" :data="state.paramListData">
<template #toolbar_buttons>
<el-space>
<el-button type="primary" size="small" icon="ele-Plus" @click="() => add(vParamGrid!)">{{ $t('新增') }}</el-button>
<el-button size="small" @click="() => insert(vParamGrid!)">{{ $t('插入') }}</el-button>
<el-button type="danger" size="small" icon="ele-Minus" plain @click="() => remove(vParamGrid!)">{{ $t('删除') }}</el-button>
</el-space>
</template>
<template #toolbar_tools> </template>
</vxe-grid>
<el-card style="margin-left: 4px" :header="$t('内置参数')" headerClass="sys-report-config-param-build-in-card-header">
<el-row style="width: 240px" v-for="(item, index) in buildInParams" :key="index">
<el-col :span="11">{{ item.name }}</el-col>
<el-col :span="13">{{ item.description }}</el-col>
</el-row>
</el-card>
</div>
</el-tab-pane>
</el-tabs>
<template #footer>
<span class="dialog-footer">
<el-button icon="ele-CircleCloseFilled" @click="cancel">{{ $t(' ') }}</el-button>
<el-button type="primary" icon="ele-CircleCheckFilled" @click="submit">{{ $t(' ') }}</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script setup lang="ts" name="sysReportConfigEditForm">
import { computed, onMounted, reactive, ref } from 'vue';
import { ElInput, ElMessage } from 'element-plus';
import { getAPI } from '/@/utils/axios-utils';
import { ReportConfigDsTypeEnum, ReportDataSourceOutput, SysReportField, SysReportGroup, SysReportParam, UpdateReportConfigInput } from '/@/api-services';
import { SysReportConfigApi, SysReportDataSourceApi, SysReportGroupApi } from '/@/api-services/api';
import { VxeGrid } from 'vxe-table';
import { useI18n } from 'vue-i18n';
import * as monaco from 'monaco-editor';
import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker';
import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker';
import { format } from 'sql-formatter';
import { useVxeTable } from '/@/hooks/useVxeTableOptionsHook';
import { sqlSugarDbTypes } from '../inputCtrlType';
const { t } = useI18n();
const props = defineProps({
title: String,
});
const emits = defineEmits(['handleQuery']);
const ruleFormRef = ref();
const vFieldGrid = ref<InstanceType<typeof VxeGrid>>();
const vParamGrid = ref<InstanceType<typeof VxeGrid>>();
const sqlScriptMonacoEditorRef = ref();
const apiParamsMonacoEditorRef = ref();
const parseSqlButtonRef = ref<InstanceType<typeof ElInput>>();
// TODO: monaco
// monaco worker
self.MonacoEnvironment = {
getWorker: function (workerId: string, label: string) {
if (label === 'json') {
return new jsonWorker();
}
return new editorWorker();
},
};
// monaco sql
monaco.languages.registerDocumentFormattingEditProvider('sql', {
provideDocumentFormattingEdits: (model: monaco.editor.ITextModel): monaco.languages.ProviderResult<monaco.languages.TextEdit[]> => {
return [
{
text: formatSql(model.getValue()),
range: model.getFullModelRange(),
},
];
},
});
/** 格式化 Sql */
const formatSql = (value: string): string => {
return format(value, {
tabWidth: 4,
useTabs: false,
keywordCase: 'upper',
dataTypeCase: 'upper',
functionCase: 'upper',
logicalOperatorNewline: 'before',
language: 'transactsql',
});
};
// monacoEditor
var sqlScriptMonacoEditor: monaco.editor.IStandaloneCodeEditor;
const initSqlScriptMonacoEditor = () => {
sqlScriptMonacoEditor = monaco.editor.create(sqlScriptMonacoEditorRef.value, {
theme: 'vs', // vs vs-dark hc-black
value: '', //
language: 'sql',
formatOnPaste: true,
wordWrap: 'on', //
wrappingIndent: 'indent',
folding: true, //
foldingHighlight: true, // 线
foldingStrategy: 'indentation', // auto | indentation
showFoldingControls: 'always', // always | mouSEOver
disableLayerHinting: true, //
emptySelectionClipboard: false, //
selectionClipboard: false, //
automaticLayout: true, //
codeLens: false, //
scrollBeyondLastLine: false, //
colorDecorators: true, //
accessibilitySupport: 'auto', // "auto" | "off" | "on"
lineNumbers: 'on', // "on" | "off" | "relative" | "interval" | function
lineNumbersMinChars: 5, // number
//enableSplitViewResizing: false,
readOnly: false, // true | false
renderLineHighlight: 'none', // "all" | "line" | "none" | "gutter"
minimap: {
//
size: 'fill',
enabled: false,
},
});
//
sqlScriptMonacoEditor.addOverlayWidget({
getId: function () {
return 'monaco.editor.neuz.parseSqlButton';
},
getDomNode: function () {
return parseSqlButtonRef.value?.$el;
},
getPosition: function () {
return {
preference: monaco.editor.OverlayWidgetPositionPreference.TOP_RIGHT_CORNER,
};
},
});
};
// monacoEditor
var apiParamsMonacoEditor: monaco.editor.IStandaloneCodeEditor;
const initApiParamsMonacoEditor = () => {
apiParamsMonacoEditor = monaco.editor.create(apiParamsMonacoEditorRef.value, {
theme: 'vs', // vs vs-dark hc-black
value: '', //
language: 'json',
formatOnPaste: true,
wordWrap: 'on', //
wrappingIndent: 'indent',
folding: true, //
foldingHighlight: true, // 线
foldingStrategy: 'indentation', // auto | indentation
showFoldingControls: 'always', // always | mouSEOver
disableLayerHinting: true, //
emptySelectionClipboard: false, //
selectionClipboard: false, //
automaticLayout: true, //
codeLens: false, //
scrollBeyondLastLine: false, //
colorDecorators: true, //
accessibilitySupport: 'auto', // "auto" | "off" | "on"
lineNumbers: 'on', // "on" | "off" | "relative" | "interval" | function
lineNumbersMinChars: 5, // number
//enableSplitViewResizing: false,
readOnly: false, // true | false
renderLineHighlight: 'none', // "all" | "line" | "none" | "gutter"
});
};
/** 后端内置参数 */
const buildInParams = [
{ name: '@curTenantId', description: '当前租户Id' },
{ name: '@curUserId', description: '当前用户Id' },
];
const fieldConfig = reactive({
gridOptions: useVxeTable<SysReportField>(
{
id: 'sysReportConfigEditForm_fields',
columns: [
{ type: 'checkbox', width: 36, fixed: 'left' },
{ field: 'fieldName', title: t('字段名'), width: 200, editRender: { name: 'ElInput', props: { size: 'small' } }, dragSort: true },
{ field: 'title', title: t('字段标题'), width: 200, editRender: { name: 'ElInput', props: { size: 'small' } } },
{ field: 'isSummary', title: t('是否合计'), width: 90, editRender: { name: 'ElSwitch', props: { size: 'small' } }, slots: { default: 'row_isSummary' } },
{ field: 'visible', title: t('是否显示'), width: 90, editRender: { name: 'ElSwitch', props: { size: 'small' } }, slots: { default: 'row_visible' } },
{ field: 'groupTitle', title: t('分组标题'), width: 200, editRender: { name: 'ElInput', props: { size: 'small' } } },
{ field: 'width', title: t('列宽'), width: 80, editRender: { name: 'ElInputNumber', props: { size: 'small', min: 0, controlsPosition: 'right' } } },
],
},
{
align: 'left',
columnConfig: {
width: 130, //
},
toolbarConfig: {
refresh: false,
import: false,
export: false,
print: false,
zoom: false,
custom: false,
},
rowConfig: {
drag: true,
},
editConfig: {
trigger: 'click',
mode: 'row',
// showStatus: true,
autoClear: false,
},
keyboardConfig: {
isArrow: true,
},
editRules: {
fieldName: [{ required: true, message: t('字段名不能为空') }],
},
}
),
});
const paramConfig = reactive({
gridOptions: useVxeTable<SysReportField>(
{
id: 'sysReportConfigEditForm_param',
columns: [
{ type: 'checkbox', width: 36, fixed: 'left' },
{ field: 'paramName', title: t('参数名'), editRender: { name: 'ElInput', props: { size: 'small' } } },
{ field: 'title', title: t('参数标题'), editRender: { name: 'ElInput', props: { size: 'small' } } },
{
field: 'inputCtrl',
title: t('输入控件类型'),
editRender: {
name: 'ElSelect',
options: sqlSugarDbTypes,
props: { size: 'small', filterable: true },
},
},
{ field: 'defaultValue', title: t('默认值'), editRender: { name: 'ElInput', props: { size: 'small' } } },
],
},
{
align: 'left',
columnConfig: {
width: 130, //
},
toolbarConfig: {
refresh: false,
import: false,
export: false,
print: false,
zoom: false,
custom: false,
},
editConfig: {
trigger: 'click',
mode: 'row',
// showStatus: true,
autoClear: false,
},
keyboardConfig: {
isArrow: true,
},
editRules: {
paramName: [{ required: true, message: t('参数名不能为空') }],
title: [{ required: true, message: t('参数标题不能为空') }],
inputCtrl: [{ required: true, message: t('输入控件类型不能为空') }],
},
}
),
});
const state = reactive({
isShowDialog: false,
ruleForm: {} as UpdateReportConfigInput,
activeName: 'field',
/** 字段列表数据 */
fieldListData: [] as SysReportField[],
/** 参数列表数据 */
paramListData: [] as SysReportParam[],
/** 数据源列表数据 */
dataSourceList: [] as ReportDataSourceOutput[],
/** 分组列表数据 */
groupList: [] as SysReportGroup[],
});
const rules = computed(() => {
const data = {
name: [{ required: true, message: t('名称不能为空') }],
dsType: [{ required: true, message: t('数据源类型不能为空') }],
} as any;
if (state.ruleForm.dsType == ReportConfigDsTypeEnum.NUMBER_0) {
data.dataSource = [{ required: true, message: t('数据源不能为空') }];
} else {
data.apiUrl = [{ required: true, message: t('接口地址不能为空') }];
data.apiHttpMethod = [{ required: true, message: t('接口请求方式不能为空') }];
}
return data;
});
onMounted(() => {
getAPI(SysReportDataSourceApi)
.apiSysReportDataSourceGetDataSourceListGet()
.then((result) => {
if (result.data.type !== 'success') {
return;
}
state.dataSourceList = result.data.result!;
});
getAPI(SysReportGroupApi)
.apiSysReportGroupGetListGet()
.then((res) => {
state.groupList = res.data.result!;
});
});
//
const openDialog = (row: any) => {
state.ruleForm = JSON.parse(JSON.stringify(row));
state.fieldListData = state.ruleForm.fields ? JSON.parse(state.ruleForm.fields) : [];
state.paramListData = state.ruleForm.params ? JSON.parse(state.ruleForm.params) : [];
state.isShowDialog = true;
ruleFormRef.value?.resetFields();
const defaultSqlValue = `-- SELECT * FROM xxx WHERE number = @number AND createTime >= @time AND tenantId=@curTenantId
-- sp_name`;
//
setTimeout(() => {
if (sqlScriptMonacoEditor == null || sqlScriptMonacoEditor == undefined) initSqlScriptMonacoEditor();
sqlScriptMonacoEditor!.setValue(state.ruleForm.sqlScript == undefined || state.ruleForm.sqlScript == null || state.ruleForm.sqlScript == '' ? defaultSqlValue : state.ruleForm.sqlScript);
if (apiParamsMonacoEditor == null || apiParamsMonacoEditor == undefined) initApiParamsMonacoEditor();
apiParamsMonacoEditor!.setValue(state.ruleForm.apiParams ?? '');
}, 100);
};
//
const closeDialog = () => {
emits('handleQuery');
state.isShowDialog = false;
};
//
const cancel = () => {
state.isShowDialog = false;
};
//
const submit = () => {
ruleFormRef.value.validate(async (valid: boolean) => {
if (!valid) return;
//
const fieldFullData = vFieldGrid.value!.getFullData();
const paramFullData = vParamGrid.value!.getFullData();
const record = state.ruleForm;
record.sqlScript = sqlScriptMonacoEditor.getValue();
record.apiParams = apiParamsMonacoEditor.getValue();
record.fields = JSON.stringify(fieldFullData);
record.params = JSON.stringify(paramFullData);
if (state.ruleForm.id != undefined && state.ruleForm.id > 0) {
await getAPI(SysReportConfigApi).apiSysReportConfigUpdatePost(record);
} else {
await getAPI(SysReportConfigApi).apiSysReportConfigAddPost(record);
}
closeDialog();
});
};
/** 在新增字段前执行 */
const beforeAddField = (row: SysReportField): Promise<void> => {
row.isSummary = false;
row.visible = true;
row.width = 0;
return Promise.resolve();
};
/** 解析SQL */
const parseSqlClick = () => {
const paramFullData = vParamGrid.value!.getFullData();
const execParams: Record<string, string> = {};
for (const item of paramFullData) {
if (item.paramName) {
execParams[item.paramName] = '';
}
}
return getAPI(SysReportConfigApi)
.apiSysReportConfigParseSqlPost({ dataSource: state.ruleForm.dataSource, sqlScript: sqlScriptMonacoEditor.getValue(), execParams: execParams })
.then((res) => {
ElMessage.success('解析成功');
const fieldList = vFieldGrid.value!.getFullData();
const fieldNames = res.data.result?.fieldNames ?? [];
fieldNames.forEach((fieldName: string) => {
if (fieldList.some((field) => field.fieldName === fieldName)) return;
const field: SysReportField = { fieldName: fieldName, isSummary: false, visible: true, width: 0 };
vFieldGrid.value!.insertAt(field, -1);
});
});
};
/** 新增行 */
const add = async (grid: InstanceType<typeof VxeGrid>, beforeAdd: ((row: any) => Promise<void>) | undefined = undefined): Promise<void> => {
try {
const newRow = {};
beforeAdd && (await beforeAdd(newRow));
const { row } = await grid.insertAt(newRow, -1);
await grid.setEditRow(row, true);
} catch (err: any) {
console.log(err);
ElMessage.error(err.message || err);
}
};
/** 插入行 */
const insert = async (grid: InstanceType<typeof VxeGrid>): Promise<void> => {
try {
const newRow = {};
const curRow = grid.getCurrentRecord();
const { row } = await grid.insertAt(newRow, curRow);
await grid.setEditRow(row, true);
} catch (err: any) {
console.log(err);
ElMessage.error(err.message || err);
}
};
/** 删除行 */
const remove = async (grid: InstanceType<typeof VxeGrid>): Promise<void> => {
try {
let checkedRows = grid.getCheckboxRecords();
if (checkedRows === null || checkedRows.length === 0) {
if (checkedRows === null) {
checkedRows = [];
}
const curRow = grid.getCurrentRecord();
if (curRow !== null) checkedRows.push(curRow);
}
if (!checkedRows || checkedRows.length === 0) return;
await Promise.all(
checkedRows.map(async (row: any): Promise<void> => {
await grid.remove(row);
})
);
await grid.clearCheckboxRow();
await grid.clearCurrentRow();
} catch (err: any) {
console.log(err);
ElMessage.error(err.message || err);
}
};
//
defineExpose({ openDialog });
</script>
<style lang="scss" scoped>
:deep(.el-dialog__body) {
height: calc(100vh - 18px) !important;
display: flex;
flex-direction: column;
}
:deep(.el-tabs) {
height: 100%;
display: flex;
.el-tabs__content {
flex: 1;
.el-tab-pane {
height: 100%;
display: flex;
flex-direction: column;
}
}
}
.report-config-tab {
flex: 1;
}
</style>
<style lang="scss">
.sys-report-config-param-build-in-card-header {
padding: 8px;
}
</style>

View File

@ -0,0 +1,81 @@
<template>
<el-dialog v-model="state.isShowDialog" draggable :close-on-click-modal="false" width="600px">
<template #header>
<div style="color: #fff">
<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>
<span> {{ props.title }} </span>
</div>
</template>
<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto">
<el-row :gutter="10">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item :label="$t('编码')" prop="number" :rules="[{ required: true, message: $t('名称不能为空'), trigger: 'blur' }]">
<el-input v-model="state.ruleForm.number" clearable />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item :label="$t('名称')" prop="name" :rules="[{ required: true, message: $t('名称不能为空'), trigger: 'blur' }]">
<el-input v-model="state.ruleForm.name" clearable />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button icon="ele-CircleCloseFilled" @click="cancel">{{ $t(' ') }}</el-button>
<el-button type="primary" icon="ele-CircleCheckFilled" @click="submit">{{ $t(' ') }}</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="sysReportGroupEditForm">
import { reactive, ref } from 'vue';
import { getAPI } from '/@/utils/axios-utils';
import { UpdateReportGroupInput } from '/@/api-services';
import { SysReportGroupApi } from '/@/api-services/api';
const props = defineProps({
title: String,
});
const emits = defineEmits(['handleQuery']);
const ruleFormRef = ref();
const state = reactive({
isShowDialog: false,
ruleForm: {} as UpdateReportGroupInput,
});
//
const openDialog = (row: any) => {
state.ruleForm = JSON.parse(JSON.stringify(row));
state.isShowDialog = true;
ruleFormRef.value?.resetFields();
};
//
const closeDialog = () => {
emits('handleQuery');
state.isShowDialog = false;
};
//
const cancel = () => {
state.isShowDialog = false;
};
//
const submit = () => {
ruleFormRef.value.validate(async (valid: boolean) => {
if (!valid) return;
if (state.ruleForm.id != undefined && state.ruleForm.id > 0) {
await getAPI(SysReportGroupApi).apiSysReportGroupUpdatePost(state.ruleForm);
} else {
await getAPI(SysReportGroupApi).apiSysReportGroupAddPost(state.ruleForm);
}
closeDialog();
});
};
//
defineExpose({ openDialog });
</script>

View File

@ -0,0 +1,170 @@
<template>
<div class="group-panel" v-loading="state.isLoading">
<el-button-group class="group-panel-buttonGroup">
<el-button icon="el-icon-circle-plus-outline" size="small" @click="createFormShow">{{ $t('新增分组') }}</el-button>
<el-dropdown split-button @command="handleCommand" size="small" @click="editFormShow">
{{ $t('编辑分组') }}
<template v-slot:dropdown>
<el-dropdown-menu>
<el-dropdown-item command="del" :icon="Minus">{{ $t('删除分组') }}</el-dropdown-item>
<el-dropdown-item command="refresh" :icon="RefreshRight">{{ $t('刷新') }}</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</el-button-group>
<el-card :loading="true" class="group-panel-tree" shadow="never">
<el-scrollbar>
<div v-if="state.groupTree">
<el-tree
ref="groupTree"
:data="state.groupTree"
:props="state.defaultProps"
:default-expand-all="true"
:expand-on-click-node="false"
:highlight-current="true"
@node-click="(group: SysReportGroup) => emit('nodeClick', group)"
/>
</div>
<div v-else>
<el-empty />
</div>
</el-scrollbar>
</el-card>
<EditReportGroup ref="editReportGroup" :title="state.title" @handleQuery="handleQuery"></EditReportGroup>
</div>
</template>
<script setup lang="ts" name="sysReportGroup">
import { onMounted, reactive, ref } from 'vue';
import EditReportGroup from './editReportGroup.vue';
import { Minus, RefreshRight } from '@element-plus/icons-vue';
import { ElMessage, ElMessageBox, ElTree } from 'element-plus';
import { getAPI } from '/@/utils/axios-utils';
import { SysReportGroup, SysReportGroupApi } from '/@/api-services';
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
// /
const emit = defineEmits(['nodeClick']);
const groupTree = ref<InstanceType<typeof ElTree>>();
const editReportGroup = ref<InstanceType<typeof EditReportGroup>>();
const state = reactive({
/** 是否加载中 */
isLoading: false,
title: '',
groupTree: [],
defaultProps: {
children: 'children',
label: 'label',
},
});
onMounted(() => {
getGroupTree();
});
const getGroupTree = () => {
state.isLoading = true;
getAPI(SysReportGroupApi)
.apiSysReportGroupGetListGet()
.then((res) => {
getTree(res.data.result ?? []);
let rootGroup = [{ id: 0, label: t('全部'), value: 0, children: [] }];
rootGroup[0].children = res.data.result as [];
state.groupTree = rootGroup as [];
})
.finally(() => {
state.isLoading = false;
});
};
const getTree = (tree: SysReportGroup[]): [] => {
tree.forEach((r: any) => {
r.label = `${r.number}[${r.name}]`;
r.value = r.id;
});
return [];
};
const handleCommand = (cmd: string) => {
switch (cmd) {
//
case 'refresh':
getGroupTree();
break;
//
case 'del':
const currData = groupTree.value!.getCurrentNode();
if (currData) {
reportGroupDelete(currData.id, currData.label);
}
break;
}
};
const createFormShow = () => {
state.title = t('新增分组');
editReportGroup.value?.openDialog({});
};
const editFormShow = () => {
const currData = groupTree.value!.getCurrentNode();
if (!currData) {
ElMessage.error(t('请选择分组后编辑'));
return;
}
if (currData.id == 0) {
ElMessage.error(t('请选择有效的分组节点'));
return;
}
state.title = t('编辑分组');
editReportGroup.value?.openDialog(currData);
};
const reportGroupDelete = (recordId: number, label: string) => {
if (recordId == 0) {
ElMessage.error(t('请选择有效的分组节点'));
return;
}
ElMessageBox.confirm(t('确认删除?', { label: label }), t('提示'), {
confirmButtonText: t('确定'),
cancelButtonText: t('取消'),
type: 'warning',
}).then(() => {
getAPI(SysReportGroupApi)
.apiSysReportGroupDeletePost({ id: recordId })
.then((res) => {
ElMessage.success(t('删除成功'));
getGroupTree();
});
});
};
const handleQuery = () => {
getGroupTree();
};
</script>
<style scoped lang="scss">
.group-panel {
background-color: var(--el-fill-color-blank);
display: flex;
flex-direction: column;
height: 100%;
.group-panel-buttonGroup {
width: 100%;
}
.group-panel-tree {
flex: 1;
:deep(.el-card__body) {
padding: 0px;
height: 100%;
}
}
}
</style>

View File

@ -0,0 +1,230 @@
<template>
<div>
<el-card class="full-table" shadow="hover">
<vxe-grid ref="xGrid" v-bind="options" :loading="state.isLoading">
<template #top>
<TableSearch ref="tableSearch" :search="state.search" @search="onSearch" v-model="state.queryParams" />
</template>
<template #toolbar_buttons>
<!-- <el-button @click="handleExport"> {{ $t('导出') }} </el-button> -->
</template>
</vxe-grid>
</el-card>
</div>
</template>
<script setup lang="ts" name="sysReportView">
import { onBeforeMount, reactive, ref, watch } from 'vue';
import { VxeGridInstance, VxeGridPropTypes, VxeTableDefines, VxeTablePropTypes } from 'vxe-table';
import TableSearch from '/@/components/table/search.vue';
import { SysReportConfigApi } from '/@/api-services/api';
import { getAPI } from '/@/utils/axios-utils';
import { downloadByData, getFileName } from '/@/utils/download';
import { ElMessageBox } from 'element-plus';
import { useI18n } from 'vue-i18n';
import { useRoute } from 'vue-router';
import { SysReportField, SysReportLayoutConfig, SysReportParam } from '/@/api-services';
import { useVxeTable } from '/@/hooks/useVxeTableOptionsHook';
const { t } = useI18n();
const xGrid = ref<VxeGridInstance>();
const tableSearch = ref<InstanceType<typeof TableSearch>>();
//
const route = useRoute();
const reportConfigId: string = route.params.reportConfigId as string;
const state = reactive({
search: [] as Array<TableSearchType>,
/** 查询参数 */
queryParams: {} as EmptyObjectType,
/** 是否加载中 */
isLoading: false,
/** 布局配置 */
layoutConfig: {} as SysReportLayoutConfig,
/** 汇总信息 */
totalInfo: {},
});
/** 监听 totalInfo 改变 */
watch(
() => state.totalInfo,
(val) => {
options.showFooter = Object.keys(state.totalInfo).length > 0;
}
);
onBeforeMount(() => {
//
getAPI(SysReportConfigApi)
.apiSysReportConfigGetLayoutConfigGet(Number(reportConfigId))
.then((res) => {
state.layoutConfig = res.data.result!;
if (state.layoutConfig.fields) {
options.columns!.push({ type: 'seq', width: 50 });
const columns = state.layoutConfig.fields.map((r) => {
return convertSysReportFieldToVxeColumn(r);
});
// Id
let groupIndex = 0;
const newColumn: VxeTableDefines.ColumnOptions[] = [];
state.layoutConfig.fields!.forEach((r) => {
const column = columns.find((c) => c.field === r.fieldName)!;
//
if (!r.groupTitle) {
newColumn.push(column);
return;
}
//
let groupColumn = newColumn.find((c) => c.field?.startsWith('group') && c.title === r.groupTitle);
if (!groupColumn) {
groupColumn = { field: 'group' + groupIndex++, title: r.groupTitle, children: [] };
newColumn.push(groupColumn);
}
//
groupColumn.children!.push(column);
});
options.columns!.push(...newColumn);
}
if (state.layoutConfig.params) {
state.search = state.layoutConfig.params!.map((r) => {
return convertSysReportParamToTableSearchType(r);
});
//
state.layoutConfig.params!.forEach((r) => {
if (r.defaultValue) state.queryParams[r.paramName!] = r.defaultValue;
});
}
});
});
/** 表尾数据获取函数 */
const footerMethod: VxeTablePropTypes.FooterMethod<any> = ({ columns }) => {
return [
columns!.map((column, columnIndex) => {
if (columnIndex === 0) return t('合计');
if (state.totalInfo && (state.totalInfo as any)[column.field] !== undefined) return (state.totalInfo as any)[column.field];
return '';
}),
];
};
//
const options = useVxeTable<any>(
{
id: `sysReportView_${reportConfigId}`,
name: '报表查看',
columns: [],
},
// vxeGrid()vxe-table
{
//
proxyConfig: { autoLoad: true, ajax: { query: ({ page, sort }) => handleQueryApi(page, sort) } },
columnConfig: {
width: 120, //
},
pagerConfig: { enabled: false },
showFooter: false,
footerMethod: footerMethod,
// Top Table
layouts: ['Top', 'Form', 'Toolbar', 'Table', 'Bottom', 'Pager'],
}
);
// api
const handleQueryApi = async (page: VxeGridPropTypes.ProxyAjaxQueryPageParams, sort: VxeGridPropTypes.ProxyAjaxQuerySortCheckedParams) => {
return getAPI(SysReportConfigApi)
.apiSysReportConfigExecuteSqlScriptPost({ id: Number(reportConfigId), execParams: state.queryParams })
.then((res) => {
state.totalInfo = res.data.extras;
return res;
});
};
//
const handleQuery = async (reset = false) => {
options.loading = true;
reset ? await xGrid.value?.commitProxy('reload') : await xGrid.value?.commitProxy('query');
options.loading = false;
};
/** 搜索点击时表单回调 */
const onSearch = (data: EmptyObjectType) => {
handleQuery(true);
};
/**导出 */
const handleExport = () => {
ElMessageBox.confirm(t('确定导出?'), t('提示'), {
confirmButtonText: t('确定'),
cancelButtonText: t('取消'),
type: 'warning',
}).then(() => {
// TODO:
// getAPI(SysReportConfigApi)
// .apiSysReportConfigExportPost(Object.assign(queryParamHandle(state.queryParam)), { responseType: 'blob' })
// .then((res) => {
// var fileName = getFileName(res.headers);
// downloadByData(res.data as any, fileName);
// });
});
};
/**
* SysReportField 转换成 ColumnOptions
* @param column 报表字段
*/
const convertSysReportFieldToVxeColumn = (column: SysReportField): VxeTableDefines.ColumnOptions => {
return {
field: column.fieldName,
title: column.title ?? column.fieldName,
width: column.width ? column.width : undefined,
visible: column.visible,
} as VxeTableDefines.ColumnOptions;
};
/**
* SysReportParam 转换成 TableSearchType
* @param column 报表参数
* @returns
*/
const convertSysReportParamToTableSearchType = (column: SysReportParam) => {
//
let type: string = '';
switch (column.inputCtrl as unknown as string) {
case 'Input':
type = 'input';
break;
case 'Date':
type = 'date';
break;
case 'Select':
type = 'select';
break;
default:
console.warn(`控件类型:${column.inputCtrl} 未支持,默认使用 input 控件`);
type = 'input';
break;
}
// //
// let options: SelectOptionType[] = [];
// if (column.options && column.options.length > 0) {
// options = column.options.map((o) => ({ label: o.title!, value: o.value! }));
// }
return {
label: column.title,
prop: column.paramName,
type: type,
// options: options,
} as TableSearchType;
};
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,245 @@
<template>
<div>
<splitpanes class="default-theme" style="height: 100%">
<pane size="16" class="pane-left">
<ReportGroupPanel @nodeClick="handleGroupNodeClick" />
</pane>
<pane size="84" class="pane-right">
<el-card shadow="hover" :body-style="{ padding: '5px 5px 0 5px', display: 'flex', width: '100%', height: '100%', alignItems: 'start' }">
<el-form :model="state.queryParams" ref="queryForm" :show-message="false" :inlineMessage="true" label-width="auto" style="flex: 1 1 0%">
<el-row :gutter="10">
<el-col class="mb5" :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
<el-form-item :label="$t('名称')" prop="name">
<el-input v-model="state.queryParams.name" clearable @keyup.enter.native="handleQuery(true)" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-divider style="height: calc(100% - 5px); margin: 0 10px" direction="vertical" />
<el-row>
<el-col>
<el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery(true)" v-auth="'sysReportConfig/page'" :loading="options.loading"> {{ $t('查询') }} </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> {{ $t('重置') }} </el-button>
</el-button-group>
</el-col>
</el-row>
</el-card>
<el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons>
<el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysReportConfig/add'"> {{ $t('新增') }} </el-button>
</template>
<template #toolbar_tools> </template>
<template #empty>
<el-empty :image-size="200" />
</template>
<template #row_dsType="{ row }">
<g-sys-dict v-model="row.dsType" code="ReportConfigDsTypeEnum" />
</template>
<template #row_dataSource="{ row }">
<span> {{ state.dataSourceList.find((r) => r.id == row.dataSource)?.name }}</span>
</template>
<template #row_record="{ row }">
<ModifyRecord :data="row" />
</template>
<template #row_buttons="{ row }">
<el-tooltip :content="$t('编辑')" placement="top">
<el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysReportConfig/update'" :disabled="row.status === 1" />
</el-tooltip>
<el-tooltip :content="$t('删除')" placement="top">
<el-button icon="ele-Delete" size="small" text type="danger" @click="handleDelete(row)" v-auth="'sysReportConfig/delete'" :disabled="row.status === 1" />
</el-tooltip>
<el-button icon="ele-CopyDocument" size="small" text type="primary" @click="copy(row)"> {{ $t('复制') }} </el-button>
<el-button icon="ele-ScaleToOriginal" size="small" text type="primary" @click="preview(row)"> {{ $t('预览') }} </el-button>
</template>
</vxe-grid>
</el-card>
</pane>
</splitpanes>
<EditReportConfig ref="editRef" :title="state.title" @handleQuery="handleQuery" />
</div>
</template>
<script setup lang="ts" name="sysReportConfig">
import { onMounted, reactive, ref } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus';
import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table';
import { useVxeTable } from '/@/hooks/useVxeTableOptionsHook';
import { Local } from '/@/utils/storage';
import ReportGroupPanel from './component/reportGroupPanel/index.vue';
import EditReportConfig from '/@/views/system/reportConfig/component/editReportConfig.vue';
import { Splitpanes, Pane } from 'splitpanes';
import 'splitpanes/dist/splitpanes.css';
import ModifyRecord from '/@/components/table/modifyRecord.vue';
import { useI18n } from 'vue-i18n';
import { getAPI } from '/@/utils/axios-utils';
import { PageReportConfigInput, ReportConfigDsTypeEnum, ReportConfigOutput, ReportDataSourceOutput, SysReportConfigApi, SysReportDataSourceApi, SysReportGroup } from '/@/api-services';
import { useRouter } from 'vue-router';
const { t } = useI18n();
const router = useRouter();
const xGrid = ref<VxeGridInstance>();
const editRef = ref<InstanceType<typeof EditReportConfig>>();
const state = reactive({
queryParams: {
name: undefined,
} as EmptyObjectType,
localPageParam: {
pageSize: 50 as number,
defaultSort: { field: 'id', order: 'asc', descStr: 'desc' },
},
title: '',
/** 已选择的分组Id */
selectedGroupId: 0,
/** 数据源列表数据 */
dataSourceList: [] as ReportDataSourceOutput[],
});
onMounted(() => {
getAPI(SysReportDataSourceApi)
.apiSysReportDataSourceGetDataSourceListGet()
.then((result) => {
if (result.data.type !== 'success') {
return;
}
state.dataSourceList = result.data.result!;
});
});
//
const localPageParamKey = 'localPageParam:sysReportConfig';
//
const options = useVxeTable<ReportConfigOutput>(
{
id: 'sysReportConfig',
name: '报表数据源',
columns: [
{ field: 'seq', type: 'seq', title: '序号', width: 60, fixed: 'left' },
{ field: 'name', title: '名称', width: 200, showOverflow: 'tooltip' },
{ field: 'dsType', title: '数据源类型', width: 100, showOverflow: 'tooltip', slots: { default: 'row_dsType' } },
{ field: 'dataSource', title: '数据源', width: 200, showOverflow: 'tooltip', slots: { default: 'row_dataSource' } },
{ field: 'groupName', title: '分组名称', width: 150, showOverflow: 'tooltip' },
{ field: 'record', title: '修改记录', width: 100, showOverflow: 'tooltip', slots: { default: 'row_record' } },
{ field: 'buttons', title: '操作', fixed: 'right', width: 200, showOverflow: true, slots: { default: 'row_buttons' } },
],
},
// vxeGrid()vxe-table
{
//
proxyConfig: { autoLoad: true, ajax: { query: ({ page, sort }) => handleQueryApi(page, sort) } },
//
sortConfig: { defaultSort: Local.get(localPageParamKey)?.defaultSort || state.localPageParam.defaultSort },
//
pagerConfig: { pageSize: Local.get(localPageParamKey)?.pageSize || state.localPageParam.pageSize },
//
toolbarConfig: { export: false, print: false },
columnConfig: {
width: 120, //
},
}
);
//
onMounted(() => {
state.localPageParam = Local.get(localPageParamKey) || state.localPageParam;
});
// api
const handleQueryApi = async (page: VxeGridPropTypes.ProxyAjaxQueryPageParams, sort: VxeGridPropTypes.ProxyAjaxQuerySortCheckedParams) => {
state.queryParams.groupId = state.selectedGroupId;
const params = Object.assign(state.queryParams, { page: page.currentPage, pageSize: page.pageSize, field: sort.field, order: sort.order, descStr: 'desc' }) as PageReportConfigInput;
return getAPI(SysReportConfigApi).apiSysReportConfigPagePost(params);
};
//
const handleQuery = async (reset = false) => {
options.loading = true;
reset ? await xGrid.value?.commitProxy('reload') : await xGrid.value?.commitProxy('query');
options.loading = false;
};
//
const resetQuery = async () => {
state.queryParams = {} as any;
state.queryParams.groupId = state.selectedGroupId;
await xGrid.value?.commitProxy('reload');
};
//
const handleAdd = () => {
state.title = t('添加报表数据源');
editRef.value?.openDialog({ dsType: ReportConfigDsTypeEnum.NUMBER_0 });
};
//
const handleEdit = (row: any) => {
state.title = t('编辑报表数据源');
editRef.value?.openDialog(row);
};
//
const handleDelete = (row: any) => {
ElMessageBox.confirm(t('确定删除?'), t('提示'), {
confirmButtonText: t('确定'),
cancelButtonText: t('取消'),
type: 'warning',
}).then(async () => {
await getAPI(SysReportConfigApi).apiSysReportConfigDeletePost({ id: row.id });
handleQuery();
ElMessage.success(t('删除成功'));
});
};
//
const gridEvents: VxeGridListeners<ReportConfigOutput> = {
// pager-config
async pageChange({ pageSize }) {
state.localPageParam.pageSize = pageSize;
Local.set(localPageParamKey, state.localPageParam);
},
//
async sortChange({ field, order }) {
state.localPageParam.defaultSort = { field: field, order: order!, descStr: 'desc' };
Local.set(localPageParamKey, state.localPageParam);
},
};
const handleGroupNodeClick = (g: SysReportGroup) => {
state.selectedGroupId = g.id!;
handleQuery(true);
};
/** 复制 */
const copy = (row: any) => {
ElMessageBox.confirm(t('确定复制?'), t('提示'), {
confirmButtonText: t('确定'),
cancelButtonText: t('取消'),
type: 'warning',
}).then(async () => {
await getAPI(SysReportConfigApi).apiSysReportConfigCopyPost({ id: row.id });
handleQuery();
ElMessage.success(t('复制成功'));
});
};
/** 预览 */
const preview = (row: any) => {
router.push(`/report/view/${row.id}/${encodeURIComponent(row.name)}`);
};
</script>
<style scoped lang="scss">
.pane-left {
display: flex;
flex-direction: column;
}
.pane-right {
display: flex;
flex-direction: column;
}
</style>

View File

@ -0,0 +1,5 @@
export const sqlSugarDbTypes = [
{ label: '输入框', value: 'Input' },
{ label: '日期选择器', value: 'Date' },
{ label: '选择器', value: 'Select' },
];

View File

@ -0,0 +1,95 @@
<template>
<el-dialog v-model="state.isShowDialog" draggable :close-on-click-modal="false" width="600px">
<template #header>
<div style="color: #fff">
<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>
<span> {{ props.title }} </span>
</div>
</template>
<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto">
<el-row :gutter="10">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item :label="$t('名称')" prop="name" :rules="[{ required: true, message: $t('名称不能为空'), trigger: 'blur' }]">
<el-input v-model="state.ruleForm.name" clearable />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item :label="$t('数据库类型')" prop="dbType" :rules="[{ required: true, message: $t('数据库类型不能为空'), trigger: 'blur' }]">
<el-select v-model="state.ruleForm.dbType">
<el-option v-for="item in sqlSugarDbTypes" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item :label="$t('连接字符串')" prop="connectionString">
<el-input v-model="state.ruleForm.connectionString" type="textarea" :autosize="{ minRows: 6 }" :placeholder="$t('编辑时置空则不更新值')" />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item :label="$t('备注')" prop="memo">
<el-input v-model="state.ruleForm.memo" clearable />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button icon="ele-CircleCloseFilled" @click="cancel">{{ $t(' ') }}</el-button>
<el-button type="primary" icon="ele-CircleCheckFilled" @click="submit">{{ $t(' ') }}</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="sysReportDataSourceEditForm">
import { reactive, ref } from 'vue';
import { ElInput } from 'element-plus';
import { getAPI } from '/@/utils/axios-utils';
import { UpdateReportDataSourceInput } from '/@/api-services';
import { SysReportDataSourceApi } from '/@/api-services/api';
import { sqlSugarDbTypes } from '.././sqlSugarDbType';
const props = defineProps({
title: String,
});
const emits = defineEmits(['handleQuery']);
const ruleFormRef = ref();
const state = reactive({
isShowDialog: false,
ruleForm: {} as UpdateReportDataSourceInput,
});
//
const openDialog = (row: any) => {
state.ruleForm = JSON.parse(JSON.stringify(row));
state.isShowDialog = true;
ruleFormRef.value?.resetFields();
};
//
const closeDialog = () => {
emits('handleQuery');
state.isShowDialog = false;
};
//
const cancel = () => {
state.isShowDialog = false;
};
//
const submit = () => {
ruleFormRef.value.validate(async (valid: boolean) => {
if (!valid) return;
if (state.ruleForm.id != undefined && state.ruleForm.id > 0) {
await getAPI(SysReportDataSourceApi).apiSysReportDataSourceUpdatePost(state.ruleForm);
} else {
await getAPI(SysReportDataSourceApi).apiSysReportDataSourceAddPost(state.ruleForm);
}
closeDialog();
});
};
//
defineExpose({ openDialog });
</script>

View File

@ -0,0 +1,180 @@
<template>
<div>
<el-card shadow="hover" :body-style="{ padding: '5px 5px 0 5px', display: 'flex', width: '100%', height: '100%', alignItems: 'start' }">
<el-form :model="state.queryParams" ref="queryForm" :show-message="false" :inlineMessage="true" label-width="auto" style="flex: 1 1 0%">
<el-row :gutter="10">
<el-col class="mb5" :xs="24" :sm="12" :md="8" :lg="6" :xl="6">
<el-form-item :label="$t('名称')" prop="name">
<el-input v-model="state.queryParams.name" clearable @keyup.enter.native="handleQuery(true)" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-divider style="height: calc(100% - 5px); margin: 0 10px" direction="vertical" />
<el-row>
<el-col>
<el-button-group>
<el-button type="primary" icon="ele-Search" @click="handleQuery(true)" v-auth="'sysReportDataSource/page'" :loading="options.loading"> {{ $t('查询') }} </el-button>
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> {{ $t('重置') }} </el-button>
</el-button-group>
</el-col>
</el-row>
</el-card>
<el-card class="full-table" shadow="hover" style="margin-top: 5px">
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
<template #toolbar_buttons>
<el-button type="primary" icon="ele-Plus" @click="handleAdd" v-auth="'sysReportDataSource/add'"> {{ $t('新增') }} </el-button>
</template>
<template #toolbar_tools> </template>
<template #empty>
<el-empty :image-size="200" />
</template>
<template #row_dbType="{ row }">
<el-tag> {{ sqlSugarDbTypes.find((r) => r.value == row.dbType)?.label }} </el-tag>
</template>
<template #row_record="{ row }">
<ModifyRecord :data="row" />
</template>
<template #row_buttons="{ row }">
<el-tooltip :content="$t('编辑')" placement="top">
<el-button icon="ele-Edit" size="small" text type="primary" @click="handleEdit(row)" v-auth="'sysReportDataSource/update'" :disabled="row.status === 1" />
</el-tooltip>
<el-tooltip :content="$t('删除')" placement="top">
<el-button icon="ele-Delete" size="small" text type="danger" @click="handleDelete(row)" v-auth="'sysReportDataSource/delete'" :disabled="row.status === 1" />
</el-tooltip>
</template>
</vxe-grid>
</el-card>
<EditReportDataSource ref="editRef" :title="state.title" @handleQuery="handleQuery" />
</div>
</template>
<script setup lang="ts" name="sysReportDataSource">
import { onMounted, reactive, ref } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus';
import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table';
import { useVxeTable } from '/@/hooks/useVxeTableOptionsHook';
import { Local } from '/@/utils/storage';
import EditReportDataSource from '/@/views/system/reportDataSource/component/editReportDataSource.vue';
import ModifyRecord from '/@/components/table/modifyRecord.vue';
import { useI18n } from 'vue-i18n';
import { getAPI } from '/@/utils/axios-utils';
import { PageReportDataSourceInput, SysReportDataSource, SysReportDataSourceApi } from '/@/api-services';
import { sqlSugarDbTypes } from './sqlSugarDbType';
const { t } = useI18n();
const xGrid = ref<VxeGridInstance>();
const editRef = ref<InstanceType<typeof EditReportDataSource>>();
const state = reactive({
queryParams: {
name: undefined,
},
localPageParam: {
pageSize: 50 as number,
defaultSort: { field: 'id', order: 'asc', descStr: 'desc' },
},
title: '',
});
//
const localPageParamKey = 'localPageParam:sysReportDataSource';
//
const options = useVxeTable<SysReportDataSource>(
{
id: 'sysReportDataSource',
name: '报表数据源',
columns: [
{ field: 'seq', type: 'seq', title: '序号', width: 60, fixed: 'left' },
{ field: 'name', title: '名称', width: 200, showOverflow: 'tooltip' },
{ field: 'dbType', title: '数据库类型', width: 100, showOverflow: 'tooltip', slots: { default: 'row_dbType' } },
{ field: 'connectionString', title: '连接字符串', width: 400, showOverflow: 'tooltip' },
{ field: 'memo', title: '备注', width: 200, showOverflow: 'tooltip' },
{ field: 'record', title: '修改记录', width: 100, showOverflow: 'tooltip', slots: { default: 'row_record' } },
{ field: 'buttons', title: '操作', fixed: 'right', width: 100, showOverflow: true, slots: { default: 'row_buttons' } },
],
},
// vxeGrid()vxe-table
{
//
proxyConfig: { autoLoad: true, ajax: { query: ({ page, sort }) => handleQueryApi(page, sort) } },
//
sortConfig: { defaultSort: Local.get(localPageParamKey)?.defaultSort || state.localPageParam.defaultSort },
//
pagerConfig: { pageSize: Local.get(localPageParamKey)?.pageSize || state.localPageParam.pageSize },
//
toolbarConfig: { export: false, print: false },
columnConfig: {
width: 120, //
},
}
);
//
onMounted(() => {
state.localPageParam = Local.get(localPageParamKey) || state.localPageParam;
});
// api
const handleQueryApi = async (page: VxeGridPropTypes.ProxyAjaxQueryPageParams, sort: VxeGridPropTypes.ProxyAjaxQuerySortCheckedParams) => {
const params = Object.assign(state.queryParams, { page: page.currentPage, pageSize: page.pageSize, field: sort.field, order: sort.order, descStr: 'desc' }) as PageReportDataSourceInput;
return getAPI(SysReportDataSourceApi).apiSysReportDataSourcePagePost(params);
};
//
const handleQuery = async (reset = false) => {
options.loading = true;
reset ? await xGrid.value?.commitProxy('reload') : await xGrid.value?.commitProxy('query');
options.loading = false;
};
//
const resetQuery = async () => {
state.queryParams = {} as any;
await xGrid.value?.commitProxy('reload');
};
//
const handleAdd = () => {
state.title = t('添加报表数据源');
editRef.value?.openDialog({});
};
//
const handleEdit = (row: any) => {
state.title = t('编辑报表数据源');
editRef.value?.openDialog(row);
};
//
const handleDelete = (row: any) => {
ElMessageBox.confirm(t('确定删除?'), t('提示'), {
confirmButtonText: t('确定'),
cancelButtonText: t('取消'),
type: 'warning',
})
.then(async () => {
await getAPI(SysReportDataSourceApi).apiSysReportDataSourceDeletePost({ id: row.id });
handleQuery();
ElMessage.success(t('删除成功'));
})
.catch(() => {});
};
//
const gridEvents: VxeGridListeners<SysReportDataSource> = {
// pager-config
async pageChange({ pageSize }) {
state.localPageParam.pageSize = pageSize;
Local.set(localPageParamKey, state.localPageParam);
},
//
async sortChange({ field, order }) {
state.localPageParam.defaultSort = { field: field, order: order!, descStr: 'desc' };
Local.set(localPageParamKey, state.localPageParam);
},
};
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,26 @@
export const sqlSugarDbTypes = [
{ label: 'MySql', value: '0' },
{ label: 'SqlServer', value: '1' },
{ label: 'Sqlite', value: '2' },
{ label: 'Oracle', value: '3' },
{ label: 'PostgreSQL', value: '4' },
{ label: 'Dm', value: '5' },
{ label: 'Kdbndp', value: '6' },
{ label: 'Oscar', value: '7' },
{ label: 'MySqlConnector', value: '8' },
{ label: 'Access', value: '9' },
{ label: 'OpenGauss', value: '10' },
{ label: 'QuestDB', value: '11' },
{ label: 'HG', value: '12' },
{ label: 'ClickHouse', value: '13' },
{ label: 'GBase', value: '14' },
{ label: 'Odbc', value: '15' },
{ label: 'OceanBaseForOracle', value: '16' },
{ label: 'TDengine', value: '17' },
{ label: 'GaussDB', value: '18' },
{ label: 'OceanBase', value: '19' },
{ label: 'Tidb', value: '20' },
{ label: 'Vastbase', value: '21' },
{ label: 'PolarDB', value: '22' },
{ label: 'Doris', value: '23' },
];