😎清理代码及优化其他细节
This commit is contained in:
parent
65ec0e551b
commit
efe5388be1
@ -12,7 +12,6 @@
|
|||||||
"EventBus": {
|
"EventBus": {
|
||||||
// 事件源存储器类型,默认内存存储(Redis则需要配合缓存相关配置)
|
// 事件源存储器类型,默认内存存储(Redis则需要配合缓存相关配置)
|
||||||
"EventSourceType": "Memory", // Memory、Redis、RabbitMQ、Kafka
|
"EventSourceType": "Memory", // Memory、Redis、RabbitMQ、Kafka
|
||||||
|
|
||||||
"Kafka": {
|
"Kafka": {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,5 +22,5 @@ global using System;
|
|||||||
global using System.Collections.Generic;
|
global using System.Collections.Generic;
|
||||||
global using System.ComponentModel;
|
global using System.ComponentModel;
|
||||||
global using System.ComponentModel.DataAnnotations;
|
global using System.ComponentModel.DataAnnotations;
|
||||||
global using System.Threading.Tasks;
|
|
||||||
global using System.Linq;
|
global using System.Linq;
|
||||||
|
global using System.Threading.Tasks;
|
||||||
@ -5,6 +5,7 @@
|
|||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
namespace Admin.NET.Application;
|
namespace Admin.NET.Application;
|
||||||
|
|
||||||
public class RabbitMqHandler : IMessageHandler
|
public class RabbitMqHandler : IMessageHandler
|
||||||
{
|
{
|
||||||
public string QueueName => "admin.net.rabbitmq";//队列名称
|
public string QueueName => "admin.net.rabbitmq";//队列名称
|
||||||
|
|||||||
@ -5,7 +5,6 @@
|
|||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
using Admin.NET.Plugin.WorkWeixin;
|
using Admin.NET.Plugin.WorkWeixin;
|
||||||
using AngleSharp.Dom;
|
|
||||||
using Furion.Localization;
|
using Furion.Localization;
|
||||||
using Furion.Logging;
|
using Furion.Logging;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
@ -31,7 +30,6 @@ public class TestService : IDynamicApiController
|
|||||||
_workWxUserService = workWxUserService;
|
_workWxUserService = workWxUserService;
|
||||||
_logger = loggerFactory.CreateLogger(CommonConst.SysLogCategoryName); // 日志过滤标识(会写入数据库)
|
_logger = loggerFactory.CreateLogger(CommonConst.SysLogCategoryName); // 日志过滤标识(会写入数据库)
|
||||||
_producer = producer;
|
_producer = producer;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("helloWord")]
|
[HttpGet("helloWord")]
|
||||||
@ -101,5 +99,4 @@ public class TestService : IDynamicApiController
|
|||||||
{
|
{
|
||||||
await _producer.SendMessage("admin.net.rabbitmq", $"Hello {input}!");
|
await _producer.SendMessage("admin.net.rabbitmq", $"Hello {input}!");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -27,15 +27,15 @@
|
|||||||
<PackageReference Include="AspectCore.Extensions.Reflection" Version="2.4.0" />
|
<PackageReference Include="AspectCore.Extensions.Reflection" Version="2.4.0" />
|
||||||
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
|
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
|
||||||
<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.2" Aliases="BouncyCastleV2" />
|
<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.2" Aliases="BouncyCastleV2" />
|
||||||
<PackageReference Include="Elastic.Clients.Elasticsearch" Version="9.1.4" />
|
<PackageReference Include="Elastic.Clients.Elasticsearch" Version="9.1.5" />
|
||||||
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.110" />
|
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.7.112" />
|
||||||
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.110" />
|
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.7.112" />
|
||||||
<PackageReference Include="Furion.Pure" Version="4.9.7.110" />
|
<PackageReference Include="Furion.Pure" Version="4.9.7.112" />
|
||||||
<PackageReference Include="Hardware.Info" Version="101.0.1.1" />
|
<PackageReference Include="Hardware.Info" Version="101.0.1.1" />
|
||||||
<PackageReference Include="Hashids.net" Version="1.7.0" />
|
<PackageReference Include="Hashids.net" Version="1.7.0" />
|
||||||
<PackageReference Include="IPTools.China" Version="1.6.0" />
|
<PackageReference Include="IPTools.China" Version="1.6.0" />
|
||||||
<PackageReference Include="IPTools.International" Version="1.6.0" />
|
<PackageReference Include="IPTools.International" Version="1.6.0" />
|
||||||
<PackageReference Include="log4net" Version="3.1.0" />
|
<PackageReference Include="log4net" Version="3.2.0" />
|
||||||
<PackageReference Include="Magicodes.IE.Excel" Version="2.7.6" />
|
<PackageReference Include="Magicodes.IE.Excel" Version="2.7.6" />
|
||||||
<PackageReference Include="Magicodes.IE.Pdf" Version="2.7.6" />
|
<PackageReference Include="Magicodes.IE.Pdf" Version="2.7.6" />
|
||||||
<PackageReference Include="Magicodes.IE.Word" Version="2.7.6" />
|
<PackageReference Include="Magicodes.IE.Word" Version="2.7.6" />
|
||||||
@ -52,23 +52,23 @@
|
|||||||
<PackageReference Include="SixLabors.ImageSharp.Web" Version="3.2.0" />
|
<PackageReference Include="SixLabors.ImageSharp.Web" Version="3.2.0" />
|
||||||
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="3.11.0" />
|
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="3.11.0" />
|
||||||
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="3.13.0" />
|
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="3.13.0" />
|
||||||
<PackageReference Include="SqlSugar.MongoDbCore" Version="5.1.4.248" />
|
<PackageReference Include="SqlSugar.MongoDbCore" Version="5.1.4.253" />
|
||||||
<PackageReference Include="SqlSugarCore" Version="5.1.4.199" />
|
<PackageReference Include="SqlSugarCore" Version="5.1.4.200" />
|
||||||
<PackageReference Include="SSH.NET" Version="2025.0.0" />
|
<PackageReference Include="SSH.NET" Version="2025.0.0" />
|
||||||
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.6.7" />
|
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.6.7" />
|
||||||
<PackageReference Include="System.Net.Http" Version="4.3.4" />
|
<PackageReference Include="System.Net.Http" Version="4.3.4" />
|
||||||
<PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1273" />
|
<PackageReference Include="TencentCloudSDK.Sms" Version="3.0.1273" />
|
||||||
<PackageReference Include="UAParser" Version="3.1.47" />
|
<PackageReference Include="UAParser" Version="3.1.47" />
|
||||||
<PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
|
<PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
|
||||||
<PackageReference Include="microsoft.semantickernel" Version="1.62.0" />
|
<PackageReference Include="microsoft.semantickernel" Version="1.63.0" />
|
||||||
<PackageReference Include="Microsoft.SemanticKernel.Agents.Core" Version="1.62.0" />
|
<PackageReference Include="Microsoft.SemanticKernel.Agents.Core" Version="1.63.0" />
|
||||||
<PackageReference Include="Microsoft.SemanticKernel.Connectors.Amazon" Version="1.56.0-alpha" />
|
<PackageReference Include="Microsoft.SemanticKernel.Connectors.Amazon" Version="1.56.0-alpha" />
|
||||||
<PackageReference Include="Microsoft.SemanticKernel.Connectors.Google" Version="1.54.0-alpha" />
|
<PackageReference Include="Microsoft.SemanticKernel.Connectors.Google" Version="1.54.0-alpha" />
|
||||||
<PackageReference Include="Microsoft.SemanticKernel.Connectors.HuggingFace" Version="1.56.0-preview" />
|
<PackageReference Include="Microsoft.SemanticKernel.Connectors.HuggingFace" Version="1.56.0-preview" />
|
||||||
<PackageReference Include="Microsoft.SemanticKernel.Connectors.Ollama" Version="1.54.0-alpha" />
|
<PackageReference Include="Microsoft.SemanticKernel.Connectors.Ollama" Version="1.54.0-alpha" />
|
||||||
<PackageReference Include="Microsoft.SemanticKernel.Connectors.Qdrant" Version="1.54.0-preview" />
|
<PackageReference Include="Microsoft.SemanticKernel.Connectors.Qdrant" Version="1.54.0-preview" />
|
||||||
<PackageReference Include="Microsoft.SemanticKernel.PromptTemplates.Handlebars" Version="1.62.0" />
|
<PackageReference Include="Microsoft.SemanticKernel.PromptTemplates.Handlebars" Version="1.63.0" />
|
||||||
<PackageReference Include="Microsoft.SemanticKernel.Yaml" Version="1.62.0" />
|
<PackageReference Include="Microsoft.SemanticKernel.Yaml" Version="1.63.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
|
<ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
|
||||||
|
|||||||
@ -42,5 +42,4 @@ public class CommonConst
|
|||||||
/// 远程请求请求头参数键值前缀
|
/// 远程请求请求头参数键值前缀
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string HttpRemoteHeaderKeyPrefix = "__HTTP_CLIENT_";
|
public const string HttpRemoteHeaderKeyPrefix = "__HTTP_CLIENT_";
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -69,7 +69,6 @@ public partial class SysDictType : EntityBase
|
|||||||
[SugarColumn(ColumnDescription = "是否是枚举转换字典", DefaultValue = "2")]
|
[SugarColumn(ColumnDescription = "是否是枚举转换字典", DefaultValue = "2")]
|
||||||
public virtual YesNoEnum IsEnum { get; set; } = YesNoEnum.N;
|
public virtual YesNoEnum IsEnum { get; set; } = YesNoEnum.N;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 字典值集合
|
/// 字典值集合
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -132,5 +132,4 @@ public partial class SysLogVis : EntityTenantId
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[SugarColumn(ColumnDescription = "创建者姓名", Length = 64, IsOnlyIgnoreUpdate = true)]
|
[SugarColumn(ColumnDescription = "创建者姓名", Length = 64, IsOnlyIgnoreUpdate = true)]
|
||||||
public virtual string? CreateUserName { get; set; }
|
public virtual string? CreateUserName { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -9,7 +9,8 @@ namespace Admin.NET.Core;
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Http远程服务扩展
|
/// Http远程服务扩展
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class HttpRemotesExtension {
|
public static class HttpRemotesExtension
|
||||||
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 添加Http远程服务
|
/// 添加Http远程服务
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -28,7 +29,8 @@ public static class HttpRemotesExtension {
|
|||||||
foreach (var kv in opt.Headers) client.DefaultRequestHeaders.Add(kv.Key, kv.Value);
|
foreach (var kv in opt.Headers) client.DefaultRequestHeaders.Add(kv.Key, kv.Value);
|
||||||
})
|
})
|
||||||
.AddHttpMessageHandler<HttpLoggingHandler>()
|
.AddHttpMessageHandler<HttpLoggingHandler>()
|
||||||
.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler {
|
.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
|
||||||
|
{
|
||||||
UseCookies = opt.UseCookies
|
UseCookies = opt.UseCookies
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,8 +4,6 @@
|
|||||||
//
|
//
|
||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
using Furion.Shapeless;
|
|
||||||
|
|
||||||
namespace Admin.NET.Core;
|
namespace Admin.NET.Core;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -8,7 +8,6 @@ using System.Net.Http.Headers;
|
|||||||
|
|
||||||
namespace Admin.NET.Core;
|
namespace Admin.NET.Core;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// http日志处理
|
/// http日志处理
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -4,9 +4,7 @@
|
|||||||
//
|
//
|
||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
using Furion.ConfigurableOptions;
|
namespace Admin.NET.Core;
|
||||||
|
|
||||||
namespace Admin.NET.Application;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 远程请求配置
|
/// 远程请求配置
|
||||||
@ -3,9 +3,12 @@
|
|||||||
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
||||||
//
|
//
|
||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
namespace Admin.NET.Core;
|
namespace Admin.NET.Core;
|
||||||
|
|
||||||
public interface IMessageHandler
|
public interface IMessageHandler
|
||||||
{
|
{
|
||||||
string QueueName { get; }
|
string QueueName { get; }
|
||||||
|
|
||||||
Task HandleMessageAsync(string message);
|
Task HandleMessageAsync(string message);
|
||||||
}
|
}
|
||||||
@ -3,7 +3,9 @@
|
|||||||
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
||||||
//
|
//
|
||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
namespace Admin.NET.Core;
|
namespace Admin.NET.Core;
|
||||||
|
|
||||||
public static class RabbitMQExtention
|
public static class RabbitMQExtention
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
using RabbitMQ.Client;
|
using RabbitMQ.Client;
|
||||||
|
|
||||||
namespace Admin.NET.Core;
|
namespace Admin.NET.Core;
|
||||||
|
|
||||||
public class RabbitMqConnection
|
public class RabbitMqConnection
|
||||||
{
|
{
|
||||||
private IConnection _connection;
|
private IConnection _connection;
|
||||||
@ -36,7 +37,6 @@ public class RabbitMqConnection
|
|||||||
Console.WriteLine($"RabbitMQ 连接失败: {ex.Message}");
|
Console.WriteLine($"RabbitMQ 连接失败: {ex.Message}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
|
|||||||
@ -3,10 +3,12 @@
|
|||||||
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
||||||
//
|
//
|
||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
using RabbitMQ.Client;
|
using RabbitMQ.Client;
|
||||||
using RabbitMQ.Client.Events;
|
using RabbitMQ.Client.Events;
|
||||||
|
|
||||||
namespace Admin.NET.Core;
|
namespace Admin.NET.Core;
|
||||||
|
|
||||||
public class RabbitMqConsumer : BackgroundService
|
public class RabbitMqConsumer : BackgroundService
|
||||||
{
|
{
|
||||||
private readonly RabbitMqConnection _connection;
|
private readonly RabbitMqConnection _connection;
|
||||||
@ -19,6 +21,7 @@ public class RabbitMqConsumer : BackgroundService
|
|||||||
_handler = handler ?? throw new ArgumentNullException(nameof(handler));
|
_handler = handler ?? throw new ArgumentNullException(nameof(handler));
|
||||||
_logger = loggerFactory.CreateLogger(CommonConst.SysLogCategoryName); // 日志过滤标识(会写入数据库)
|
_logger = loggerFactory.CreateLogger(CommonConst.SysLogCategoryName); // 日志过滤标识(会写入数据库)
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||||
{
|
{
|
||||||
if (!await _connection.TryConnectAsync())
|
if (!await _connection.TryConnectAsync())
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
namespace Admin.NET.Core;
|
namespace Admin.NET.Core;
|
||||||
|
|
||||||
public class RabbitMqOptions : IConfigurableOptions
|
public class RabbitMqOptions : IConfigurableOptions
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
using RabbitMQ.Client;
|
using RabbitMQ.Client;
|
||||||
|
|
||||||
namespace Admin.NET.Core;
|
namespace Admin.NET.Core;
|
||||||
|
|
||||||
public class RabbitMqProducer
|
public class RabbitMqProducer
|
||||||
{
|
{
|
||||||
private readonly RabbitMqConnection _connection;
|
private readonly RabbitMqConnection _connection;
|
||||||
|
|||||||
@ -21,10 +21,10 @@ public class SysOrgSeedData : ISqlSugarEntitySeedData<SysOrg>
|
|||||||
return
|
return
|
||||||
[
|
[
|
||||||
new SysOrg{ Id=SqlSugarConst.DefaultTenantId, Pid=0, Name="系统默认", Code="1001", Type="101", Level=1, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="系统默认", TenantId=SqlSugarConst.DefaultTenantId },
|
new SysOrg{ Id=SqlSugarConst.DefaultTenantId, Pid=0, Name="系统默认", Code="1001", Type="101", Level=1, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="系统默认", TenantId=SqlSugarConst.DefaultTenantId },
|
||||||
new SysOrg{ Id=SqlSugarConst.DefaultTenantId + 1, Pid=SqlSugarConst.DefaultTenantId, Name="市场部", Code="100101", Level=2, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="市场部", TenantId=SqlSugarConst.DefaultTenantId },
|
new SysOrg{ Id=SqlSugarConst.DefaultTenantId + 10, Pid=SqlSugarConst.DefaultTenantId, Name="市场部", Code="100101", Level=2, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="市场部", TenantId=SqlSugarConst.DefaultTenantId },
|
||||||
new SysOrg{ Id=SqlSugarConst.DefaultTenantId + 2, Pid=SqlSugarConst.DefaultTenantId, Name="开发部", Code="100102", Level=2, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="开发部", TenantId=SqlSugarConst.DefaultTenantId },
|
new SysOrg{ Id=SqlSugarConst.DefaultTenantId + 20, Pid=SqlSugarConst.DefaultTenantId, Name="开发部", Code="100102", Level=2, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="开发部", TenantId=SqlSugarConst.DefaultTenantId },
|
||||||
new SysOrg{ Id=SqlSugarConst.DefaultTenantId + 3, Pid=SqlSugarConst.DefaultTenantId, Name="售后部", Code="100103", Level=2, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="售后部", TenantId=SqlSugarConst.DefaultTenantId },
|
new SysOrg{ Id=SqlSugarConst.DefaultTenantId + 30, Pid=SqlSugarConst.DefaultTenantId, Name="售后部", Code="100103", Level=2, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="售后部", TenantId=SqlSugarConst.DefaultTenantId },
|
||||||
new SysOrg{ Id=SqlSugarConst.DefaultTenantId + 4, Pid=SqlSugarConst.DefaultTenantId, Name="其他", Code="10010301", Level=3, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="其他", TenantId=SqlSugarConst.DefaultTenantId },
|
new SysOrg{ Id=SqlSugarConst.DefaultTenantId + 40, Pid=SqlSugarConst.DefaultTenantId, Name="其他", Code="10010301", Level=3, CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="其他", TenantId=SqlSugarConst.DefaultTenantId },
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -20,13 +20,13 @@ public class SysPosSeedData : ISqlSugarEntitySeedData<SysPos>
|
|||||||
{
|
{
|
||||||
return
|
return
|
||||||
[
|
[
|
||||||
new SysPos{ Id=1300000000101, Name="党委书记", Code="dwsj", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="党委书记", TenantId=SqlSugarConst.DefaultTenantId },
|
new SysPos{ Id=SqlSugarConst.DefaultTenantId, Name="党委书记", Code="dwsj", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="党委书记", TenantId=SqlSugarConst.DefaultTenantId },
|
||||||
new SysPos{ Id=1300000000102, Name="局长", Code="jz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="局长", TenantId=SqlSugarConst.DefaultTenantId },
|
new SysPos{ Id=SqlSugarConst.DefaultTenantId + 10, Name="局长", Code="jz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="局长", TenantId=SqlSugarConst.DefaultTenantId },
|
||||||
new SysPos{ Id=1300000000103, Name="副局长", Code="fjz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="副局长", TenantId=SqlSugarConst.DefaultTenantId },
|
new SysPos{ Id=SqlSugarConst.DefaultTenantId + 20, Name="副局长", Code="fjz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="副局长", TenantId=SqlSugarConst.DefaultTenantId },
|
||||||
new SysPos{ Id=1300000000104, Name="科长", Code="kz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="科长", TenantId=SqlSugarConst.DefaultTenantId },
|
new SysPos{ Id=SqlSugarConst.DefaultTenantId + 30, Name="科长", Code="kz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="科长", TenantId=SqlSugarConst.DefaultTenantId },
|
||||||
new SysPos{ Id=1300000000105, Name="副科长", Code="fkz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="副科长", TenantId=SqlSugarConst.DefaultTenantId },
|
new SysPos{ Id=SqlSugarConst.DefaultTenantId + 40, Name="副科长", Code="fkz", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="副科长", TenantId=SqlSugarConst.DefaultTenantId },
|
||||||
new SysPos{ Id=1300000000106, Name="职员", Code="zy", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="职员", TenantId=SqlSugarConst.DefaultTenantId },
|
new SysPos{ Id=SqlSugarConst.DefaultTenantId + 50, Name="职员", Code="zy", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="职员", TenantId=SqlSugarConst.DefaultTenantId },
|
||||||
new SysPos{ Id=1300000000107, Name="其他", Code="qt", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="其他", TenantId=SqlSugarConst.DefaultTenantId },
|
new SysPos{ Id=SqlSugarConst.DefaultTenantId + 60, Name="其他", Code="qt", CreateTime=DateTime.Parse("2022-02-10 00:00:00"), Remark="其他", TenantId=SqlSugarConst.DefaultTenantId },
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -26,6 +26,11 @@ public class PageDictDataInput : BasePageInput
|
|||||||
/// 编码
|
/// 编码
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Code { get; set; }
|
public string Code { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 值
|
||||||
|
/// </summary>
|
||||||
|
public string Value { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AddDictDataInput : SysDictData
|
public class AddDictDataInput : SysDictData
|
||||||
|
|||||||
@ -35,6 +35,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
|
|||||||
{
|
{
|
||||||
return await _sysDictDataRep.AsQueryable()
|
return await _sysDictDataRep.AsQueryable()
|
||||||
.Where(u => u.DictTypeId == input.DictTypeId)
|
.Where(u => u.DictTypeId == input.DictTypeId)
|
||||||
|
.WhereIF(!string.IsNullOrEmpty(input.Value?.Trim()), u => u.Code.Contains(input.Value))
|
||||||
.WhereIF(!string.IsNullOrEmpty(input.Code?.Trim()), u => u.Code.Contains(input.Code))
|
.WhereIF(!string.IsNullOrEmpty(input.Code?.Trim()), u => u.Code.Contains(input.Code))
|
||||||
.WhereIF(!string.IsNullOrEmpty(input.Label?.Trim()), u => u.Label.Contains(input.Label))
|
.WhereIF(!string.IsNullOrEmpty(input.Label?.Trim()), u => u.Label.Contains(input.Label))
|
||||||
.OrderBy(u => new { u.OrderNo, u.Code })
|
.OrderBy(u => new { u.OrderNo, u.Code })
|
||||||
|
|||||||
@ -100,7 +100,6 @@ public class PageLogHttpOutput
|
|||||||
/// 创建用户
|
/// 创建用户
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string CreateUserName { get; set; }
|
public string CreateUserName { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -85,6 +85,7 @@ public class SysUserService : IDynamicApiController, ITransient
|
|||||||
.WhereIF(!string.IsNullOrWhiteSpace(input.RealName), u => u.RealName.Contains(input.RealName))
|
.WhereIF(!string.IsNullOrWhiteSpace(input.RealName), u => u.RealName.Contains(input.RealName))
|
||||||
.WhereIF(!string.IsNullOrWhiteSpace(input.PosName), (u, a, b) => b.Name.Contains(input.PosName))
|
.WhereIF(!string.IsNullOrWhiteSpace(input.PosName), (u, a, b) => b.Name.Contains(input.PosName))
|
||||||
.WhereIF(!string.IsNullOrWhiteSpace(input.Phone), u => u.Phone.Contains(input.Phone))
|
.WhereIF(!string.IsNullOrWhiteSpace(input.Phone), u => u.Phone.Contains(input.Phone))
|
||||||
|
.WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), u => u.Account.Contains(input.Keyword) || u.RealName.Contains(input.Keyword) || u.Phone.Contains(input.Keyword) || u.JobNum.Contains(input.Keyword))
|
||||||
.OrderBy(u => new { u.OrderNo, u.Id })
|
.OrderBy(u => new { u.OrderNo, u.Id })
|
||||||
.Select((u, a, b) => new UserOutput
|
.Select((u, a, b) => new UserOutput
|
||||||
{
|
{
|
||||||
|
|||||||
@ -17,7 +17,6 @@ public class SysWechatService : IDynamicApiController, ITransient
|
|||||||
private readonly WechatApiClient _wechatApiClient;
|
private readonly WechatApiClient _wechatApiClient;
|
||||||
private readonly SysAuthService _sysAuthService;
|
private readonly SysAuthService _sysAuthService;
|
||||||
|
|
||||||
|
|
||||||
public SysWechatService(
|
public SysWechatService(
|
||||||
UserManager userManager,
|
UserManager userManager,
|
||||||
SysAuthService sysAuthService,
|
SysAuthService sysAuthService,
|
||||||
|
|||||||
@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
using NewLife.IO;
|
using NewLife.IO;
|
||||||
using NewLife.Reflection;
|
using NewLife.Reflection;
|
||||||
using SixLabors.ImageSharp.Processing;
|
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
|
||||||
namespace Admin.NET.Core;
|
namespace Admin.NET.Core;
|
||||||
|
|||||||
@ -4,12 +4,12 @@
|
|||||||
//
|
//
|
||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using Furion;
|
using Furion;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
namespace Admin.NET.Web.Core;
|
namespace Admin.NET.Web.Core;
|
||||||
|
|
||||||
|
|||||||
@ -4,13 +4,13 @@
|
|||||||
//
|
//
|
||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Http.Features;
|
using Microsoft.AspNetCore.Http.Features;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace Admin.NET.Web.Core;
|
namespace Admin.NET.Web.Core;
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,6 @@
|
|||||||
//
|
//
|
||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
using Admin.NET.Application;
|
|
||||||
using Admin.NET.Core;
|
using Admin.NET.Core;
|
||||||
using AspNetCoreRateLimit;
|
using AspNetCoreRateLimit;
|
||||||
using Furion;
|
using Furion;
|
||||||
|
|||||||
@ -33,8 +33,6 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
|
||||||
using System.Net.Http;
|
|
||||||
using System.Text.Encodings.Web;
|
using System.Text.Encodings.Web;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
@ -148,6 +146,7 @@ public class Startup : AppStartup
|
|||||||
// NewtonsoftJson 序列化设置
|
// NewtonsoftJson 序列化设置
|
||||||
static void SetNewtonsoftJsonSetting(JsonSerializerSettings setting)
|
static void SetNewtonsoftJsonSetting(JsonSerializerSettings setting)
|
||||||
{
|
{
|
||||||
|
setting.DateTimeZoneHandling = DateTimeZoneHandling.Local;
|
||||||
//setting.ContractResolver = new DefaultContractResolver(); // 序列化属性名大写(属性原样输出)
|
//setting.ContractResolver = new DefaultContractResolver(); // 序列化属性名大写(属性原样输出)
|
||||||
setting.DateFormatString = "yyyy-MM-dd HH:mm:ss"; // 时间格式化
|
setting.DateFormatString = "yyyy-MM-dd HH:mm:ss"; // 时间格式化
|
||||||
//setting.Converters.AddDateTimeTypeConverters("yyyy-MM-dd HH:mm:ss", localized: true); // 时间格式化
|
//setting.Converters.AddDateTimeTypeConverters("yyyy-MM-dd HH:mm:ss", localized: true); // 时间格式化
|
||||||
|
|||||||
@ -5,7 +5,6 @@
|
|||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
using Admin.NET.Core;
|
using Admin.NET.Core;
|
||||||
using Furion.DataEncryption;
|
|
||||||
using Furion.JsonSerialization;
|
using Furion.JsonSerialization;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
@ -19,6 +18,7 @@ namespace Admin.NET.Plugin.ReZero.Service;
|
|||||||
public class SuperApiAop : DefaultSuperApiAop
|
public class SuperApiAop : DefaultSuperApiAop
|
||||||
{
|
{
|
||||||
private static readonly Lazy<UserManager> _userManager = new(() => App.GetService<UserManager>());
|
private static readonly Lazy<UserManager> _userManager = new(() => App.GetService<UserManager>());
|
||||||
|
|
||||||
public override async Task OnExecutingAsync(InterfaceContext aopContext)
|
public override async Task OnExecutingAsync(InterfaceContext aopContext)
|
||||||
{
|
{
|
||||||
////if (aopContext.InterfaceType == InterfaceType.DynamicApi)
|
////if (aopContext.InterfaceType == InterfaceType.DynamicApi)
|
||||||
|
|||||||
@ -8,11 +8,6 @@ global using Admin.NET.Core;
|
|||||||
global using Admin.NET.Core.Service;
|
global using Admin.NET.Core.Service;
|
||||||
global using Furion;
|
global using Furion;
|
||||||
global using Furion.DependencyInjection;
|
global using Furion.DependencyInjection;
|
||||||
global using Furion.EventBus;
|
|
||||||
global using Furion.HttpRemote;
|
global using Furion.HttpRemote;
|
||||||
global using Lazy.Captcha.Core;
|
|
||||||
global using Microsoft.AspNetCore.Http;
|
|
||||||
global using Microsoft.AspNetCore.Mvc;
|
|
||||||
global using Newtonsoft.Json;
|
global using Newtonsoft.Json;
|
||||||
global using System.ComponentModel.DataAnnotations;
|
global using System.ComponentModel.DataAnnotations;
|
||||||
global using System.Text.Json.Serialization;
|
|
||||||
@ -4,7 +4,6 @@
|
|||||||
//
|
//
|
||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
|
|
||||||
namespace Admin.NET.Plugin.WorkWeixin;
|
namespace Admin.NET.Plugin.WorkWeixin;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -4,7 +4,6 @@
|
|||||||
//
|
//
|
||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
|
|
||||||
namespace Admin.NET.Plugin.WorkWeixin;
|
namespace Admin.NET.Plugin.WorkWeixin;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -4,7 +4,6 @@
|
|||||||
//
|
//
|
||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
|
|
||||||
namespace Admin.NET.Plugin.WorkWeixin;
|
namespace Admin.NET.Plugin.WorkWeixin;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -4,7 +4,6 @@
|
|||||||
//
|
//
|
||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
|
|
||||||
namespace Admin.NET.Plugin.WorkWeixin;
|
namespace Admin.NET.Plugin.WorkWeixin;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -4,14 +4,12 @@
|
|||||||
//
|
//
|
||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Text;
|
|
||||||
using Admin.NET.Plugin.WorkWeixin.Const;
|
using Admin.NET.Plugin.WorkWeixin.Const;
|
||||||
using Furion.FriendlyException;
|
using Furion.FriendlyException;
|
||||||
using Furion.JsonSerialization;
|
using Furion.JsonSerialization;
|
||||||
using Furion.Logging;
|
using Furion.Logging;
|
||||||
using Microsoft.Extensions.Options;
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace Admin.NET.Plugin.WorkWeixin;
|
namespace Admin.NET.Plugin.WorkWeixin;
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
"name": "admin.net.pro",
|
"name": "admin.net.pro",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "2.4.33",
|
"version": "2.4.33",
|
||||||
"lastBuildTime": "2025.08.19",
|
"lastBuildTime": "2025.08.28",
|
||||||
"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
|
"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
|
||||||
"author": "zuohuaijun",
|
"author": "zuohuaijun",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@ -26,7 +26,7 @@
|
|||||||
"@vue-office/docx": "^1.6.3",
|
"@vue-office/docx": "^1.6.3",
|
||||||
"@vue-office/excel": "^1.7.14",
|
"@vue-office/excel": "^1.7.14",
|
||||||
"@vue-office/pdf": "^2.0.10",
|
"@vue-office/pdf": "^2.0.10",
|
||||||
"@vueuse/core": "^13.7.0",
|
"@vueuse/core": "^13.8.0",
|
||||||
"@vxe-ui/plugin-export-xlsx": "^4.3.0",
|
"@vxe-ui/plugin-export-xlsx": "^4.3.0",
|
||||||
"@vxe-ui/plugin-render-element": "^4.1.0",
|
"@vxe-ui/plugin-render-element": "^4.1.0",
|
||||||
"@wangeditor/editor": "^5.1.23",
|
"@wangeditor/editor": "^5.1.23",
|
||||||
@ -39,7 +39,7 @@
|
|||||||
"cropperjs": "^1.6.2",
|
"cropperjs": "^1.6.2",
|
||||||
"crypto-js": "^4.2.0",
|
"crypto-js": "^4.2.0",
|
||||||
"echarts": "^6.0.0",
|
"echarts": "^6.0.0",
|
||||||
"element-plus": "^2.10.7",
|
"element-plus": "^2.11.1",
|
||||||
"exceljs": "^4.4.0",
|
"exceljs": "^4.4.0",
|
||||||
"flag-icons": "^7.5.0",
|
"flag-icons": "^7.5.0",
|
||||||
"franc": "^6.2.0",
|
"franc": "^6.2.0",
|
||||||
@ -48,7 +48,7 @@
|
|||||||
"json-editor-vue": "^0.18.1",
|
"json-editor-vue": "^0.18.1",
|
||||||
"jsplumb": "^2.15.6",
|
"jsplumb": "^2.15.6",
|
||||||
"lodash-es": "^4.17.21",
|
"lodash-es": "^4.17.21",
|
||||||
"magic-string": "^0.30.17",
|
"magic-string": "^0.30.18",
|
||||||
"md-editor-v3": "^5.8.4",
|
"md-editor-v3": "^5.8.4",
|
||||||
"mitt": "^3.0.1",
|
"mitt": "^3.0.1",
|
||||||
"monaco-editor": "^0.52.2",
|
"monaco-editor": "^0.52.2",
|
||||||
@ -69,7 +69,7 @@
|
|||||||
"uuid": "^11.1.0",
|
"uuid": "^11.1.0",
|
||||||
"vcrontab-3": "^3.3.22",
|
"vcrontab-3": "^3.3.22",
|
||||||
"vform3-builds": "^3.0.10",
|
"vform3-builds": "^3.0.10",
|
||||||
"vue": "^3.5.18",
|
"vue": "^3.5.20",
|
||||||
"vue-clipboard3": "^2.0.0",
|
"vue-clipboard3": "^2.0.0",
|
||||||
"vue-demi": "0.14.10",
|
"vue-demi": "0.14.10",
|
||||||
"vue-draggable-plus": "^0.6.0",
|
"vue-draggable-plus": "^0.6.0",
|
||||||
@ -81,8 +81,8 @@
|
|||||||
"vue-router": "^4.5.1",
|
"vue-router": "^4.5.1",
|
||||||
"vue-signature-pad": "^3.0.2",
|
"vue-signature-pad": "^3.0.2",
|
||||||
"vue3-tree-org": "^4.2.2",
|
"vue3-tree-org": "^4.2.2",
|
||||||
"vxe-pc-ui": "^4.8.22",
|
"vxe-pc-ui": "^4.9.5",
|
||||||
"vxe-table": "^4.15.10",
|
"vxe-table": "^4.16.1",
|
||||||
"xe-utils": "^3.7.8",
|
"xe-utils": "^3.7.8",
|
||||||
"xlsx-js-style": "^1.2.0"
|
"xlsx-js-style": "^1.2.0"
|
||||||
},
|
},
|
||||||
@ -90,25 +90,25 @@
|
|||||||
"@iconify/vue": "^5.0.0",
|
"@iconify/vue": "^5.0.0",
|
||||||
"@plugin-web-update-notification/vite": "^2.0.1",
|
"@plugin-web-update-notification/vite": "^2.0.1",
|
||||||
"@types/lodash-es": "^4.17.12",
|
"@types/lodash-es": "^4.17.12",
|
||||||
"@types/node": "^22.17.2",
|
"@types/node": "^22.18.0",
|
||||||
"@types/nprogress": "^0.2.3",
|
"@types/nprogress": "^0.2.3",
|
||||||
"@types/sortablejs": "^1.15.8",
|
"@types/sortablejs": "^1.15.8",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.40.0",
|
"@typescript-eslint/eslint-plugin": "^8.41.0",
|
||||||
"@typescript-eslint/parser": "^8.40.0",
|
"@typescript-eslint/parser": "^8.41.0",
|
||||||
"@vitejs/plugin-vue": "^6.0.1",
|
"@vitejs/plugin-vue": "^6.0.1",
|
||||||
"@vitejs/plugin-vue-jsx": "^5.0.1",
|
"@vitejs/plugin-vue-jsx": "^5.1.0",
|
||||||
"@vue/compiler-sfc": "^3.5.18",
|
"@vue/compiler-sfc": "^3.5.20",
|
||||||
"cli-progress": "^3.12.0",
|
"cli-progress": "^3.12.0",
|
||||||
"code-inspector-plugin": "^1.2.2",
|
"code-inspector-plugin": "^1.2.6",
|
||||||
"colors": "^1.4.0",
|
"colors": "^1.4.0",
|
||||||
"dotenv": "^17.2.1",
|
"dotenv": "^17.2.1",
|
||||||
"eslint": "^9.33.0",
|
"eslint": "^9.34.0",
|
||||||
"eslint-plugin-vue": "^10.4.0",
|
"eslint-plugin-vue": "^10.4.0",
|
||||||
"globals": "^16.3.0",
|
"globals": "^16.3.0",
|
||||||
"less": "^4.4.1",
|
"less": "^4.4.1",
|
||||||
"prettier": "^3.6.2",
|
"prettier": "^3.6.2",
|
||||||
"rollup-plugin-visualizer": "^6.0.3",
|
"rollup-plugin-visualizer": "^6.0.3",
|
||||||
"sass": "^1.90.0",
|
"sass": "^1.91.0",
|
||||||
"terser": "^5.43.1",
|
"terser": "^5.43.1",
|
||||||
"typescript": "^5.9.2",
|
"typescript": "^5.9.2",
|
||||||
"vite": "^7.1.3",
|
"vite": "^7.1.3",
|
||||||
|
|||||||
@ -105,4 +105,12 @@ export interface PageDictDataInput {
|
|||||||
* @memberof PageDictDataInput
|
* @memberof PageDictDataInput
|
||||||
*/
|
*/
|
||||||
code?: string | null;
|
code?: string | null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 值
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof PageDictDataInput
|
||||||
|
*/
|
||||||
|
value?: string | null;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -67,7 +67,7 @@ const props = defineProps({
|
|||||||
* @example [5, -2]
|
* @example [5, -2]
|
||||||
*/
|
*/
|
||||||
offset: {
|
offset: {
|
||||||
type: (Array as unknown) as PropType<[number, number]>,
|
type: Array as unknown as PropType<[number, number]>,
|
||||||
default: [5, -2] as const,
|
default: [5, -2] as const,
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
@ -87,25 +87,32 @@ const state = reactive({
|
|||||||
data: props.data,
|
data: props.data,
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(() => state.active, (newValue) => {
|
watch(
|
||||||
|
() => state.active,
|
||||||
|
(newValue) => {
|
||||||
emit('update:modelValue', newValue);
|
emit('update:modelValue', newValue);
|
||||||
emit('change', newValue, state.data);
|
emit('change', newValue, state.data);
|
||||||
}, { immediate: true })
|
},
|
||||||
watch(() => props.data, (newValue) => {
|
{ immediate: true }
|
||||||
|
);
|
||||||
|
watch(
|
||||||
|
() => props.data,
|
||||||
|
(newValue) => {
|
||||||
state.data = newValue ?? [];
|
state.data = newValue ?? [];
|
||||||
console.log(state.data);
|
console.log(state.data);
|
||||||
}, { immediate: true })
|
},
|
||||||
|
{ immediate: true }
|
||||||
|
);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-tabs v-model="state.active" class="ml5 mt5" v-bind="$attrs">
|
<el-tabs v-model="state.active" class="ml5 mt5" v-bind="$attrs">
|
||||||
<el-tab-pane v-for="(item, index) in state.data" :key="index" :label="item.label" :name="item.value" :disabled="item.disabled" v-show="item.visible === undefined || item.visible">
|
<el-tab-pane v-for="(item, index) in state.data" :key="index" :label="item.label" :name="item.value" :disabled="item.disabled" v-show="item.visible === undefined || item.visible">
|
||||||
<template #label v-if="(props.hideZero && item.count || !props.hideZero)">
|
<template #label v-if="(props.hideZero && item.count) || !props.hideZero">
|
||||||
<el-badge :value="item.count ?? 0" :max="props.max" :offset="props.offset">{{ item.label }}</el-badge>
|
<el-badge :value="item.count ?? 0" :max="props.max" :offset="props.offset">{{ item.label }}</el-badge>
|
||||||
</template>
|
</template>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</template>
|
</template>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss"></style>
|
||||||
</style>
|
|
||||||
|
|||||||
@ -15,18 +15,20 @@
|
|||||||
<p class="tip">账号列表</p>
|
<p class="tip">账号列表</p>
|
||||||
<div style="margin-top: 10px">
|
<div style="margin-top: 10px">
|
||||||
<el-form :model="state.queryParams" ref="queryRef" :inline="true">
|
<el-form :model="state.queryParams" ref="queryRef" :inline="true">
|
||||||
<el-form-item label="账号名称">
|
<el-form-item label="关键字">
|
||||||
<el-input v-model="state.queryParams.account" placeholder="请输入账号名称" clearable style="width: 150px" @keyup.enter="handleQuery" />
|
<el-input v-model="state.queryParams.keyword" clearable style="width: 150px" @keyup.enter="handleQuery" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button-group>
|
<el-button-group>
|
||||||
<el-button type="primary" icon="ele-Search" @click="handleQuery"> 查询 </el-button>
|
<el-button type="primary" icon="ele-Search" @click="handleQuery"> 查询 </el-button>
|
||||||
<el-button icon="ele-Refresh" @click="resetQuery"> 重置 </el-button>
|
<el-button icon="ele-Refresh" @click="resetQuery"> 重置 </el-button>
|
||||||
</el-button-group>
|
</el-button-group>
|
||||||
|
|
||||||
|
<el-button type="primary" icon="ele-DArrowRight" plain style="margin-left: 10px" @click="handleSelectAllUser"> 全选 </el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-card class="full-table" shadow="hover">
|
<el-card class="full-table" shadow="hover">
|
||||||
<el-table ref="refTable" :data="userList" style="height: calc(60vh - 96px)">
|
<el-table ref="refTable" :data="userList" style="height: calc(70vh - 96px)">
|
||||||
<el-table-column label="操作" width="60" align="center">
|
<el-table-column label="操作" width="60" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button link type="primary" @click="handleSelectUser(scope.row)">
|
<el-button link type="primary" @click="handleSelectUser(scope.row)">
|
||||||
@ -37,6 +39,8 @@
|
|||||||
<el-table-column label="账号名称" prop="account" align="center" :show-overflow-tooltip="true" />
|
<el-table-column label="账号名称" prop="account" align="center" :show-overflow-tooltip="true" />
|
||||||
<el-table-column label="真实姓名" prop="realName" align="center" :show-overflow-tooltip="true" />
|
<el-table-column label="真实姓名" prop="realName" align="center" :show-overflow-tooltip="true" />
|
||||||
<el-table-column label="联系方式" prop="phone" align="center" :show-overflow-tooltip="true" />
|
<el-table-column label="联系方式" prop="phone" align="center" :show-overflow-tooltip="true" />
|
||||||
|
<el-table-column label="岗位" prop="posName" align="center" :show-overflow-tooltip="true" />
|
||||||
|
<el-table-column label="工号" prop="jobNum" align="center" :show-overflow-tooltip="true" />
|
||||||
<el-table-column label="所属机构" prop="orgName" align="center" :show-overflow-tooltip="true" />
|
<el-table-column label="所属机构" prop="orgName" align="center" :show-overflow-tooltip="true" />
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
@ -66,6 +70,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="账号名称" prop="account" :show-overflow-tooltip="true" />
|
<el-table-column label="账号名称" prop="account" :show-overflow-tooltip="true" />
|
||||||
<el-table-column label="真实姓名" prop="realName" :show-overflow-tooltip="true" />
|
<el-table-column label="真实姓名" prop="realName" :show-overflow-tooltip="true" />
|
||||||
|
<el-table-column label="工号" prop="jobNum" align="center" :show-overflow-tooltip="true" />
|
||||||
</el-table>
|
</el-table>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@ -166,16 +171,13 @@ async function handleQuery() {
|
|||||||
|
|
||||||
// 选择授权账号操作
|
// 选择授权账号操作
|
||||||
function handleSelectUser(row: { id: string }) {
|
function handleSelectUser(row: { id: string }) {
|
||||||
if (!row || row.id == '') {
|
if (!row || row.id == '') return;
|
||||||
ElMessage.error('请选择账号');
|
|
||||||
return;
|
if (!checkedUsersList.value.some((c: { id: any }) => c.id == row.id)) {
|
||||||
}
|
|
||||||
if (checkedUsersList.value.some((c: { id: any }) => c.id == row.id)) {
|
|
||||||
ElMessage.error('账号已被选中');
|
|
||||||
} else {
|
|
||||||
checkedUsersList.value.push(row);
|
checkedUsersList.value.push(row);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 移除选中账号操作
|
// 移除选中账号操作
|
||||||
function handleRemove(row: { id: any }) {
|
function handleRemove(row: { id: any }) {
|
||||||
if (checkedUsersList.value.some((c: { id: any }) => c.id == row.id)) {
|
if (checkedUsersList.value.some((c: { id: any }) => c.id == row.id)) {
|
||||||
@ -185,6 +187,17 @@ function handleRemove(row: { id: any }) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 全选
|
||||||
|
function handleSelectAllUser() {
|
||||||
|
if (userList == null || userList.value.length < 1) return;
|
||||||
|
|
||||||
|
userList.value.forEach((item: any) => {
|
||||||
|
if (!checkedUsersList.value.some((c: { id: any }) => c.id == item.id)) {
|
||||||
|
checkedUsersList.value.push(item);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// 确认/保存
|
// 确认/保存
|
||||||
let saveDialog = () => {
|
let saveDialog = () => {
|
||||||
let checkedList = [...checkedUsersList.value].map((item) => ({
|
let checkedList = [...checkedUsersList.value].map((item) => ({
|
||||||
|
|||||||
@ -296,7 +296,7 @@ const getDataList = (): DictItem[] => {
|
|||||||
|
|
||||||
return data.map((item: any) => ({
|
return data.map((item: any) => ({
|
||||||
...item,
|
...item,
|
||||||
label: item[props.propLabel] ?? [item.name, item.desc].filter(x => x).join("-"),
|
label: item[props.propLabel] ?? [item.name, item.desc].filter((x) => x).join('-'),
|
||||||
value: item[props.propValue] ?? item.code,
|
value: item[props.propValue] ?? item.code,
|
||||||
}));
|
}));
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -491,12 +491,12 @@ const validateInitialValue = () => {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (props.renderAs === 'tag' || !state.value) return resolve(undefined);
|
if (props.renderAs === 'tag' || !state.value) return resolve(undefined);
|
||||||
if (Array.isArray(state.value)) {
|
if (Array.isArray(state.value)) {
|
||||||
const errorValues = state.value.filter(val => state.dictData.find(e => e[props.propValue] == val) === undefined);
|
const errorValues = state.value.filter((val) => state.dictData.find((e) => e[props.propValue] == val) === undefined);
|
||||||
if (errorValues && errorValues.length > 0) {
|
if (errorValues && errorValues.length > 0) {
|
||||||
reject(`[g-sys-dict] 未匹配到选项值:${JSON.stringify(errorValues)}`);
|
reject(`[g-sys-dict] 未匹配到选项值:${JSON.stringify(errorValues)}`);
|
||||||
}
|
}
|
||||||
} else if (state.value) {
|
} else if (state.value) {
|
||||||
if (!state.dictData.find(e => e[props.propValue] === state.value)) {
|
if (!state.dictData.find((e) => e[props.propValue] === state.value)) {
|
||||||
reject(`[g-sys-dict] 未匹配到选项值:${state.value}`);
|
reject(`[g-sys-dict] 未匹配到选项值:${state.value}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -515,10 +515,13 @@ const state = reactive({
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 监听数据变化
|
// 监听数据变化
|
||||||
watch(() => props.modelValue, (newValue) => {
|
watch(
|
||||||
|
() => props.modelValue,
|
||||||
|
(newValue) => {
|
||||||
state.value = parseMultipleValue(newValue);
|
state.value = parseMultipleValue(newValue);
|
||||||
validateInitialValue();
|
validateInitialValue();
|
||||||
});
|
}
|
||||||
|
);
|
||||||
watch(() => [userStore.dictList, userStore.constList, state], initData, { immediate: true });
|
watch(() => [userStore.dictList, userStore.constList, state], initData, { immediate: true });
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -85,6 +85,7 @@ export default {
|
|||||||
account: 'Account',
|
account: 'Account',
|
||||||
realName: 'Real Name',
|
realName: 'Real Name',
|
||||||
jobTitle: 'Job Title',
|
jobTitle: 'Job Title',
|
||||||
|
jobNumb: 'Job Number',
|
||||||
phoneNumber: 'Phone Number',
|
phoneNumber: 'Phone Number',
|
||||||
resetPassword: 'Reset',
|
resetPassword: 'Reset',
|
||||||
unlockAccount: 'Unlock',
|
unlockAccount: 'Unlock',
|
||||||
|
|||||||
@ -87,6 +87,7 @@ export default {
|
|||||||
pinyin: '簡拼',
|
pinyin: '簡拼',
|
||||||
allPinyin: '全拼',
|
allPinyin: '全拼',
|
||||||
jobTitle: '职位名称',
|
jobTitle: '职位名称',
|
||||||
|
jobNumb: '工号',
|
||||||
phoneNumber: '手机号码',
|
phoneNumber: '手机号码',
|
||||||
resetPassword: '重置密码',
|
resetPassword: '重置密码',
|
||||||
unlockAccount: '解除锁定',
|
unlockAccount: '解除锁定',
|
||||||
|
|||||||
@ -116,10 +116,8 @@ import { useRoutesList } from '/@/stores/routesList';
|
|||||||
import other from '/@/utils/other';
|
import other from '/@/utils/other';
|
||||||
import mittBus from '/@/utils/mitt';
|
import mittBus from '/@/utils/mitt';
|
||||||
import { Local, Session } from '/@/utils/storage';
|
import { Local, Session } from '/@/utils/storage';
|
||||||
import { decryptJWT } from '/@/utils/request';
|
|
||||||
import Push from 'push.js';
|
import Push from 'push.js';
|
||||||
import { signalR } from '/@/views/system/onlineUser/signalR';
|
import { signalR } from '/@/views/system/onlineUser/signalR';
|
||||||
// 多语言
|
|
||||||
import { languageList, getCountryCode } from '/@/i18n';
|
import { languageList, getCountryCode } from '/@/i18n';
|
||||||
import '/node_modules/flag-icons/css/flag-icons.min.css';
|
import '/node_modules/flag-icons/css/flag-icons.min.css';
|
||||||
|
|
||||||
@ -346,8 +344,7 @@ const receiveNotice = (msg: any) => {
|
|||||||
// 修改密码
|
// 修改密码
|
||||||
const changePassword = async () => {
|
const changePassword = async () => {
|
||||||
// 若是超管则不进行强制修改密码和有效期验证
|
// 若是超管则不进行强制修改密码和有效期验证
|
||||||
let userToken = decryptJWT(Local.get('access-token'));
|
if (userInfos.value.accountType == 999) return;
|
||||||
if (userToken.AccountType == 999) return;
|
|
||||||
|
|
||||||
// 开启强制修改密码
|
// 开启强制修改密码
|
||||||
var enabledForceChangePassword = themeConfig.value.forceChangePassword ?? true;
|
var enabledForceChangePassword = themeConfig.value.forceChangePassword ?? true;
|
||||||
|
|||||||
@ -69,16 +69,21 @@
|
|||||||
<el-card shadow="hover" :body-style="{ padding: '5px 5px 0 5px', display: 'flex', width: '100%', height: '100%', alignItems: 'start' }">
|
<el-card shadow="hover" :body-style="{ padding: '5px 5px 0 5px', display: 'flex', width: '100%', height: '100%', alignItems: 'start' }">
|
||||||
<el-form :model="state.queryParamsDictData" :show-message="false" :inlineMessage="true" label-width="auto" style="flex: 1 1 0%">
|
<el-form :model="state.queryParamsDictData" :show-message="false" :inlineMessage="true" label-width="auto" style="flex: 1 1 0%">
|
||||||
<el-row :gutter="10">
|
<el-row :gutter="10">
|
||||||
<el-col class="mb5" :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
|
<el-col class="mb5" :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
|
||||||
<el-form-item label="字典值" prop="value">
|
<el-form-item label="字典值" prop="value">
|
||||||
<el-input v-model="state.queryParamsDictData.value" placeholder="字典值" clearable @keyup.enter.native="handleQueryDictData(true)" />
|
<el-input v-model="state.queryParamsDictData.value" placeholder="字典值" clearable @keyup.enter.native="handleQueryDictData(true)" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col class="mb5" :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
|
<el-col class="mb5" :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
|
||||||
<el-form-item label="编码" prop="code">
|
<el-form-item label="编码" prop="code">
|
||||||
<el-input v-model="state.queryParamsDictData.code" placeholder="编码" clearable @keyup.enter.native="handleQueryDictData(true)" />
|
<el-input v-model="state.queryParamsDictData.code" placeholder="编码" clearable @keyup.enter.native="handleQueryDictData(true)" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-col class="mb5" :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
|
||||||
|
<el-form-item label="文本" prop="code">
|
||||||
|
<el-input v-model="state.queryParamsDictData.label" placeholder="文本" clearable @keyup.enter.native="handleQueryDictData(true)" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-divider style="height: calc(100% - 5px); margin: 0 10px" direction="vertical" />
|
<el-divider style="height: calc(100% - 5px); margin: 0 10px" direction="vertical" />
|
||||||
@ -169,6 +174,7 @@ const state = reactive({
|
|||||||
dictTypeId: undefined,
|
dictTypeId: undefined,
|
||||||
value: undefined,
|
value: undefined,
|
||||||
code: undefined,
|
code: undefined,
|
||||||
|
label: undefined,
|
||||||
},
|
},
|
||||||
localPageParamDictType: {
|
localPageParamDictType: {
|
||||||
pageSize: 50 as number,
|
pageSize: 50 as number,
|
||||||
@ -344,6 +350,7 @@ const handleQueryDictData = async (reset = false) => {
|
|||||||
const resetQueryDictData = async () => {
|
const resetQueryDictData = async () => {
|
||||||
state.queryParamsDictData.value = undefined;
|
state.queryParamsDictData.value = undefined;
|
||||||
state.queryParamsDictData.code = undefined;
|
state.queryParamsDictData.code = undefined;
|
||||||
|
state.queryParamsDictData.label = undefined;
|
||||||
await xGridDictData.value?.commitProxy('reload');
|
await xGridDictData.value?.commitProxy('reload');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -21,7 +21,8 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="Query参数" v-if="data.requestUrl?.indexOf('?') != -1">
|
<el-form-item label="Query参数" v-if="data.requestUrl?.indexOf('?') != -1">
|
||||||
<el-row v-for="(value, key, index) in queryObject">
|
<el-row v-for="(value, key, index) in queryObject">
|
||||||
<span class="query-key">{{ key }}</span> = <span class="query-value">{{ value }}</span>&
|
<span class="query-key">{{ key }}</span> = <span class="query-value">{{ value }}</span
|
||||||
|
>&
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="请求头">
|
<el-form-item label="请求头">
|
||||||
@ -50,17 +51,19 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, reactive, computed } from 'vue';
|
import { ref, reactive, computed } from 'vue';
|
||||||
import { StringToObj } from '/@/utils/json-utils';
|
import { StringToObj } from '/@/utils/json-utils';
|
||||||
import { SysLogHttp } from '/@/api-services/system/models';
|
import { SysLogHttp } from '/@/api-services/system/models';
|
||||||
import VueJsonPretty from 'vue-json-pretty';
|
import VueJsonPretty from 'vue-json-pretty';
|
||||||
|
|
||||||
|
const data = ref<SysLogHttp>({});
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
visible: false,
|
visible: false,
|
||||||
selectedTabName: '0',
|
selectedTabName: '0',
|
||||||
});
|
});
|
||||||
const data = ref<SysLogHttp>({});
|
|
||||||
const openDialog = (row: any) => {
|
const openDialog = (row: any) => {
|
||||||
state.visible = true;
|
state.visible = true;
|
||||||
state.selectedTabName = '0';
|
state.selectedTabName = '0';
|
||||||
@ -74,10 +77,12 @@ const openDialog = (row: any) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const queryObject = computed(() => Object.fromEntries(new URLSearchParams(new URL(data.value?.requestUrl ?? '').search)) ?? {});
|
const queryObject = computed(() => Object.fromEntries(new URLSearchParams(new URL(data.value?.requestUrl ?? '').search)) ?? {});
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
openDialog,
|
openDialog,
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
.query-value {
|
.query-value {
|
||||||
color: #13ce66;
|
color: #13ce66;
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
<el-card shadow="hover" :body-style="{ padding: '5px 5px 0 5px' }">
|
<el-card shadow="hover" :body-style="{ padding: '5px 5px 0 5px' }">
|
||||||
<scEcharts v-if="echartsOption.series.data" height="200px" :option="echartsOption" @clickData="clickData"></scEcharts>
|
<scEcharts v-if="echartsOption.series.data" height="200px" :option="echartsOption" @clickData="clickData"></scEcharts>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card shadow="hover" :body-style="{ padding: '5px', display: 'flex', width: '100%', height: '100%', alignItems: 'start' }">
|
<el-card shadow="hover" :body-style="{ padding: '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-form :model="state.queryParams" ref="queryForm" :show-message="false" :inlineMessage="true" label-width="auto" style="flex: 1 1 0%">
|
||||||
<el-row :gutter="10">
|
<el-row :gutter="10">
|
||||||
@ -121,6 +122,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<!-- 请求日志 -->
|
||||||
<script lang="ts" setup name="sysLogHttp">
|
<script lang="ts" setup name="sysLogHttp">
|
||||||
import { ElMessage } from 'element-plus';
|
import { ElMessage } from 'element-plus';
|
||||||
import { Local } from '/@/utils/storage';
|
import { Local } from '/@/utils/storage';
|
||||||
@ -196,7 +198,9 @@ const options = useVxeTable<PageLogHttpOutput>(
|
|||||||
|
|
||||||
// 页面初始化
|
// 页面初始化
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
state.clientNameList = await getAPI(SysLogHttpApi).apiSysLogHttpHttpClientNameGet().then(res => res.data.result ?? []);
|
state.clientNameList = await getAPI(SysLogHttpApi)
|
||||||
|
.apiSysLogHttpHttpClientNameGet()
|
||||||
|
.then((res) => res.data.result ?? []);
|
||||||
state.localPageParam = Local.get(localPageParamKey) || state.localPageParam;
|
state.localPageParam = Local.get(localPageParamKey) || state.localPageParam;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -224,7 +228,7 @@ const handleQuery = async (reset = false) => {
|
|||||||
const handleCopyUrl = (event: PointerEvent, url: string) => {
|
const handleCopyUrl = (event: PointerEvent, url: string) => {
|
||||||
event.stopPropagation(); // 阻止事件冒泡
|
event.stopPropagation(); // 阻止事件冒泡
|
||||||
commonFun.copyText(url);
|
commonFun.copyText(url);
|
||||||
}
|
};
|
||||||
|
|
||||||
// 重置操作
|
// 重置操作
|
||||||
const resetQuery = async () => {
|
const resetQuery = async () => {
|
||||||
@ -345,4 +349,5 @@ const gridEvents: VxeGridListeners<PageLogHttpOutput> = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<style scoped></style>
|
|
||||||
|
<style lang="scss" scoped></style>
|
||||||
|
|||||||
@ -44,9 +44,9 @@
|
|||||||
:check-strictly="!state.strictly"
|
:check-strictly="!state.strictly"
|
||||||
>
|
>
|
||||||
<template #default="{ node }">
|
<template #default="{ node }">
|
||||||
<el-icon v-if="node.level == 1" size="16" style="margin-right: 3px; display: inline; vertical-align: middle"><ele-School /></el-icon>
|
<el-icon v-if="node.level == 1" size="16" style="margin-right: 3px; display: inline; vertical-align: middle; color: var(--el-color-primary)"><ele-School /></el-icon>
|
||||||
<el-icon v-else-if="node.level == 2" size="16" style="margin-right: 3px; display: inline; vertical-align: middle"><ele-Refrigerator /></el-icon>
|
<el-icon v-else-if="node.level == 2" size="16" style="margin-right: 3px; display: inline; vertical-align: middle; color: var(--el-color-primary)"><ele-Refrigerator /></el-icon>
|
||||||
<el-icon v-else size="16" style="margin-right: 3px; display: inline; vertical-align: middle"><ele-CollectionTag /></el-icon>
|
<el-icon v-else size="16" style="margin-right: 3px; display: inline; vertical-align: middle; color: var(--el-color-primary)"><ele-CollectionTag /></el-icon>
|
||||||
{{ node.label }}
|
{{ node.label }}
|
||||||
</template>
|
</template>
|
||||||
</el-tree>
|
</el-tree>
|
||||||
|
|||||||
@ -145,7 +145,7 @@ const options = useVxeTable<PageRoleOutput>(
|
|||||||
{ field: 'orderNo', title: i18n.t('message.list.orderNo'), width: 80, showOverflow: 'tooltip' },
|
{ field: 'orderNo', title: i18n.t('message.list.orderNo'), width: 80, showOverflow: 'tooltip' },
|
||||||
{ field: 'status', title: i18n.t('message.list.status'), width: 80, showOverflow: 'tooltip', slots: { default: 'row_status' } },
|
{ field: 'status', title: i18n.t('message.list.status'), width: 80, showOverflow: 'tooltip', slots: { default: 'row_status' } },
|
||||||
{ field: 'record', title: i18n.t('message.list.record'), width: 100, showOverflow: 'tooltip', slots: { default: 'row_record' } },
|
{ field: 'record', title: i18n.t('message.list.record'), width: 100, showOverflow: 'tooltip', slots: { default: 'row_record' } },
|
||||||
{ field: 'buttons', title: i18n.t('message.list.operation'), fixed: 'right', width: 540, showOverflow: true, slots: { default: 'row_buttons' } },
|
{ field: 'buttons', title: i18n.t('message.list.operation'), fixed: 'right', width: 520, showOverflow: true, slots: { default: 'row_buttons' } },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
// vxeGrid配置参数(此处可覆写任何参数),参考vxe-table官方文档
|
// vxeGrid配置参数(此处可覆写任何参数),参考vxe-table官方文档
|
||||||
|
|||||||
@ -138,6 +138,8 @@ const closeDialog = () => {
|
|||||||
|
|
||||||
// 预览
|
// 预览
|
||||||
const preview = () => {
|
const preview = () => {
|
||||||
|
if (state.ruleForm.formater == '') return;
|
||||||
|
|
||||||
getAPI(SysSerialApi)
|
getAPI(SysSerialApi)
|
||||||
.apiSysSerialPreviewPost(state.ruleForm)
|
.apiSysSerialPreviewPost(state.ruleForm)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
|
|||||||
@ -135,7 +135,9 @@ const options = useVxeTable<PageSerialOutput>(
|
|||||||
// 页面初始化
|
// 页面初始化
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
state.localPageParam = Local.get(localPageParamKey) || state.localPageParam;
|
state.localPageParam = Local.get(localPageParamKey) || state.localPageParam;
|
||||||
state.typeData = await getAPI(SysSerialApi).apiSysSerialTypeListGet().then(res => res.data.result ?? []);
|
state.typeData = await getAPI(SysSerialApi)
|
||||||
|
.apiSysSerialTypeListGet()
|
||||||
|
.then((res) => res.data.result ?? []);
|
||||||
handleQuery(true);
|
handleQuery(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -69,7 +69,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
||||||
<el-form-item :label="$t('message.list.jobTitle')" prop="posId" :rules="[{ required: true, message: $t('message.list.jobTitleRequired'), trigger: 'blur' }]">
|
<el-form-item :label="$t('message.list.jobTitle')">
|
||||||
<el-select v-model="state.ruleForm.posId" :placeholder="$t('message.list.jobTitle')" class="w100">
|
<el-select v-model="state.ruleForm.posId" :placeholder="$t('message.list.jobTitle')" class="w100">
|
||||||
<el-option v-for="d in state.posData" :key="d.id" :label="d.name" :value="d.id" />
|
<el-option v-for="d in state.posData" :key="d.id" :label="d.name" :value="d.id" />
|
||||||
</el-select>
|
</el-select>
|
||||||
@ -118,11 +118,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
||||||
<el-form-item
|
<el-form-item :label="$t('message.list.jobTitle')">
|
||||||
:label="$t('message.list.jobTitle')"
|
|
||||||
:prop="`extOrgIdList[${k}].posId`"
|
|
||||||
:rules="[{ required: true, message: $t('message.list.positionRequired'), trigger: 'blur' }]"
|
|
||||||
>
|
|
||||||
<el-select v-model="state.ruleForm.extOrgIdList[k].posId" :placeholder="$t('message.list.jobTitle')" class="w100">
|
<el-select v-model="state.ruleForm.extOrgIdList[k].posId" :placeholder="$t('message.list.jobTitle')" class="w100">
|
||||||
<el-option v-for="d in state.posData" :key="d.id" :label="d.name" :value="d.id" />
|
<el-option v-for="d in state.posData" :key="d.id" :label="d.name" :value="d.id" />
|
||||||
</el-select>
|
</el-select>
|
||||||
|
|||||||
@ -109,10 +109,10 @@ import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table';
|
|||||||
import { useVxeTable } from '/@/hooks/useVxeTableOptionsHook';
|
import { useVxeTable } from '/@/hooks/useVxeTableOptionsHook';
|
||||||
import { Local } from '/@/utils/storage';
|
import { Local } from '/@/utils/storage';
|
||||||
import XEUtils from 'xe-utils';
|
import XEUtils from 'xe-utils';
|
||||||
import { Splitpanes, Pane } from 'splitpanes';
|
|
||||||
import 'splitpanes/dist/splitpanes.css';
|
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import { auth } from '/@/utils/authFunction';
|
import { auth } from '/@/utils/authFunction';
|
||||||
|
import { Splitpanes, Pane } from 'splitpanes';
|
||||||
|
import 'splitpanes/dist/splitpanes.css';
|
||||||
|
|
||||||
import OrgTree from '/@/views/system/org/component/orgTree.vue';
|
import OrgTree from '/@/views/system/org/component/orgTree.vue';
|
||||||
import EditUser from '/@/views/system/user/component/editUser.vue';
|
import EditUser from '/@/views/system/user/component/editUser.vue';
|
||||||
@ -153,27 +153,23 @@ const options = useVxeTable<UserOutput>(
|
|||||||
columns: [
|
columns: [
|
||||||
// { type: 'checkbox', width: 40, fixed: 'left' },
|
// { type: 'checkbox', width: 40, fixed: 'left' },
|
||||||
{ field: 'seq', type: 'seq', title: t('message.list.seq'), width: 60, fixed: 'left' },
|
{ field: 'seq', type: 'seq', title: t('message.list.seq'), width: 60, fixed: 'left' },
|
||||||
|
|
||||||
// { field: 'avatar', title: t('message.list.avatar'), minWidth: 80, showOverflow: 'tooltip', slots: { default: 'row_avatar' } },
|
// { field: 'avatar', title: t('message.list.avatar'), minWidth: 80, showOverflow: 'tooltip', slots: { default: 'row_avatar' } },
|
||||||
{ field: 'account', title: t('message.list.account'), minWidth: 120, showOverflow: 'tooltip' },
|
{ field: 'account', title: t('message.list.account'), minWidth: 100, showOverflow: 'tooltip' },
|
||||||
{ field: 'nickName', title: t('message.list.nickname'), minWidth: 120, showOverflow: 'tooltip' },
|
{ field: 'nickName', title: t('message.list.nickname'), minWidth: 100, showOverflow: 'tooltip' },
|
||||||
|
{ field: 'realName', title: t('message.list.realName'), minWidth: 100, showOverflow: 'tooltip' },
|
||||||
{ field: 'realName', title: t('message.list.realName'), minWidth: 120, showOverflow: 'tooltip' },
|
{ field: 'phone', title: t('message.list.phoneNumber'), minWidth: 100, showOverflow: 'tooltip' },
|
||||||
{ field: 'phone', title: t('message.list.phoneNumber'), minWidth: 120, showOverflow: 'tooltip' },
|
// { field: 'birthday', title: t('message.list.birthDate'), minWidth: 100, showOverflow: 'tooltip', formatter: ({ cellValue }: any) => XEUtils.toDateString(cellValue, 'yyyy-MM-dd') },
|
||||||
|
{ field: 'sex', title: t('message.list.gender'), showOverflow: 'tooltip', slots: { default: 'row_sex' } },
|
||||||
{ field: 'birthday', title: t('message.list.birthDate'), minWidth: 100, showOverflow: 'tooltip', formatter: ({ cellValue }: any) => XEUtils.toDateString(cellValue, 'yyyy-MM-dd') },
|
|
||||||
{ field: 'sex', title: t('message.list.gender'), minWidth: 70, showOverflow: 'tooltip', slots: { default: 'row_sex' } },
|
|
||||||
|
|
||||||
{ field: 'accountType', title: t('message.list.accountType'), minWidth: 100, showOverflow: 'tooltip', slots: { default: 'row_accountType' } },
|
|
||||||
{ field: 'roleName', title: t('message.list.roleSet'), minWidth: 130, showOverflow: 'tooltip' },
|
{ field: 'roleName', title: t('message.list.roleSet'), minWidth: 130, showOverflow: 'tooltip' },
|
||||||
{ field: 'orgName', title: t('message.list.organization'), minWidth: 120, showOverflow: 'tooltip' },
|
{ field: 'orgName', title: t('message.list.organization'), minWidth: 120, showOverflow: 'tooltip' },
|
||||||
|
{ field: 'posName', title: t('message.list.jobTitle'), minWidth: 100, showOverflow: 'tooltip' },
|
||||||
{ field: 'posName', title: t('message.list.jobTitle'), minWidth: 120, showOverflow: 'tooltip' },
|
{ field: 'jobNum', title: t('message.list.jobNumb'), minWidth: 100, showOverflow: 'tooltip' },
|
||||||
|
{ field: 'accountType', title: t('message.list.accountType'), minWidth: 100, showOverflow: 'tooltip', slots: { default: 'row_accountType' } },
|
||||||
{ field: 'status', title: t('message.list.status'), width: 80, showOverflow: 'tooltip', slots: { default: 'row_status' } },
|
{ field: 'status', title: t('message.list.status'), width: 80, showOverflow: 'tooltip', slots: { default: 'row_status' } },
|
||||||
{ field: 'orderNo', title: t('message.list.orderNo'), width: 80, showOverflow: 'tooltip' },
|
{ field: 'orderNo', title: t('message.list.orderNo'), showOverflow: 'tooltip' },
|
||||||
|
|
||||||
{ field: 'record', title: t('message.list.record'), width: 100, showOverflow: 'tooltip', slots: { default: 'row_record' } },
|
{ field: 'record', title: t('message.list.record'), width: 100, showOverflow: 'tooltip', slots: { default: 'row_record' } },
|
||||||
{ field: 'buttons', title: t('message.list.operation'), fixed: 'right', width: 300, showOverflow: true, slots: { default: 'row_buttons' } },
|
{ field: 'buttons', title: t('message.list.operation'), fixed: 'right', width: 260, showOverflow: true, slots: { default: 'row_buttons' } },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
// vxeGrid配置参数(此处可覆写任何参数),参考vxe-table官方文档
|
// vxeGrid配置参数(此处可覆写任何参数),参考vxe-table官方文档
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user