😎清理代码及优化其他细节
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")]
|
||||||
@ -99,7 +97,6 @@ public class TestService : IDynamicApiController
|
|||||||
[ApiDescriptionSettings(Name = "SendMessageToRabbitMQ", Description = "测试")]
|
[ApiDescriptionSettings(Name = "SendMessageToRabbitMQ", Description = "测试")]
|
||||||
public async Task SendMessageToRabbitMQ([FromQuery] string input)
|
public async Task SendMessageToRabbitMQ([FromQuery] string input)
|
||||||
{
|
{
|
||||||
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' ">
|
||||||
|
|||||||
@ -125,7 +125,7 @@ public class DateTimeRangeAttribute : ValidationAttribute
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private string NowString => NowProvider().ToString("yyyy-MM-dd HH:mm:ss");
|
private string NowString => NowProvider().ToString("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 执行验证逻辑
|
/// 执行验证逻辑
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected override ValidationResult IsValid(object? value, ValidationContext validationContext)
|
protected override ValidationResult IsValid(object? value, ValidationContext validationContext)
|
||||||
|
|||||||
@ -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>
|
||||||
@ -132,8 +131,8 @@ public class HttpLoggingHandler : DelegatingHandler, ITransient
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static HttpRequestBuilder SetRemoteApiAttr(HttpRequestBuilder builder, string httpName, HttpRemoteApiAttribute attr)
|
public static HttpRequestBuilder SetRemoteApiAttr(HttpRequestBuilder builder, string httpName, HttpRemoteApiAttribute attr)
|
||||||
{
|
{
|
||||||
builder.WithHeader(IgnoreLogKey, attr.IgnoreLog, replace:true);
|
builder.WithHeader(IgnoreLogKey, attr.IgnoreLog, replace: true);
|
||||||
builder.WithHeader(ApiDescKey, attr.Desc, replace:true);
|
builder.WithHeader(ApiDescKey, attr.Desc, replace: true);
|
||||||
builder.SetHttpClientName(httpName);
|
builder.SetHttpClientName(httpName);
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
@ -31,12 +32,11 @@ public class RabbitMqConnection
|
|||||||
_channel = await _connection.CreateChannelAsync();
|
_channel = await _connection.CreateChannelAsync();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch(Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
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,7 +5,8 @@
|
|||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
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
|
||||||
{
|
{
|
||||||
|
|||||||
@ -9,7 +9,7 @@ namespace Admin.NET.Core;
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 当前登录用户信息
|
/// 当前登录用户信息
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class UserManager (
|
public class UserManager(
|
||||||
SysCacheService sysCacheService,
|
SysCacheService sysCacheService,
|
||||||
IHttpContextAccessor httpContextAccessor) : UserSessionDao, IScoped
|
IHttpContextAccessor httpContextAccessor) : UserSessionDao, IScoped
|
||||||
{
|
{
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -295,7 +295,7 @@ public static class SqlSugarSetup
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 超管不受任何过滤器限制
|
// 超管不受任何过滤器限制
|
||||||
if (userManager.Value.AccountType == AccountTypeEnum.SuperAdmin)return;
|
if (userManager.Value.AccountType == AccountTypeEnum.SuperAdmin) return;
|
||||||
|
|
||||||
// 配置假删除过滤器
|
// 配置假删除过滤器
|
||||||
dbProvider.QueryFilter.AddTableFilter<IDeletedFilter>(u => u.IsDelete == false);
|
dbProvider.QueryFilter.AddTableFilter<IDeletedFilter>(u => u.IsDelete == false);
|
||||||
|
|||||||
@ -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;
|
||||||
@ -88,7 +86,7 @@ public class Startup : AppStartup
|
|||||||
services.AddTaskQueue(builder =>
|
services.AddTaskQueue(builder =>
|
||||||
{
|
{
|
||||||
builder.NumRetries = 0; // 默认重试 0 次
|
builder.NumRetries = 0; // 默认重试 0 次
|
||||||
//builder.RetryTimeout = 1000; // 每次重试间隔 1000ms
|
//builder.RetryTimeout = 1000; // 每次重试间隔 1000ms
|
||||||
|
|
||||||
// 订阅 TaskQueue 意外未捕获异常
|
// 订阅 TaskQueue 意外未捕获异常
|
||||||
builder.UnobservedTaskExceptionHandler = (obj, args) =>
|
builder.UnobservedTaskExceptionHandler = (obj, args) =>
|
||||||
@ -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>
|
||||||
@ -39,7 +38,7 @@ public class WorkWxTagService(WorkWxBaseService baseService) : ITransient
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<BaseWorkWxOutput> Delete(long id)
|
public async Task<BaseWorkWxOutput> Delete(long id)
|
||||||
{
|
{
|
||||||
return await baseService.SendAsync<DeleteTagWorkWxInput, BaseWorkWxOutput>(new(){ TagId = id });
|
return await baseService.SendAsync<DeleteTagWorkWxInput, BaseWorkWxOutput>(new() { TagId = id });
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -49,7 +48,7 @@ public class WorkWxTagService(WorkWxBaseService baseService) : ITransient
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<TagMembersWorkWxOutput> Get(long id)
|
public async Task<TagMembersWorkWxOutput> Get(long id)
|
||||||
{
|
{
|
||||||
return await baseService.SendAsync<TagMembersWorkWxInput, TagMembersWorkWxOutput>(new(){ TagId = id });
|
return await baseService.SendAsync<TagMembersWorkWxInput, TagMembersWorkWxOutput>(new() { TagId = id });
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -786,7 +786,7 @@ public class JoinQrcodeWorkWxOutput : BaseWorkWxOutput
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(JoinQrcode))return null;
|
if (string.IsNullOrEmpty(JoinQrcode)) return null;
|
||||||
var match = Regex.Match(JoinQrcode, @"qr_size=(\d)");
|
var match = Regex.Match(JoinQrcode, @"qr_size=(\d)");
|
||||||
return match.Success ? int.Parse(match.Groups[1].Value) : null;
|
return match.Success ? int.Parse(match.Groups[1].Value) : null;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,7 +4,6 @@
|
|||||||
//
|
//
|
||||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||||
|
|
||||||
|
|
||||||
namespace Admin.NET.Plugin.WorkWeixin;
|
namespace Admin.NET.Plugin.WorkWeixin;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -150,7 +149,7 @@ public class WorkWxUserService(WorkWxBaseService baseService) : ITransient
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<UserIdWorkWxOutput> GetUserIdByEmail(string email, int? emailType = 1)
|
public async Task<UserIdWorkWxOutput> GetUserIdByEmail(string email, int? emailType = 1)
|
||||||
{
|
{
|
||||||
return await baseService.SendAsync<UserIdByEmailWorkWxInput, UserIdWorkWxOutput>(new(){ Email = email, EmailType = emailType });
|
return await baseService.SendAsync<UserIdByEmailWorkWxInput, UserIdWorkWxOutput>(new() { Email = email, EmailType = emailType });
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -161,6 +160,6 @@ public class WorkWxUserService(WorkWxBaseService baseService) : ITransient
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<UserIdListWorkWxOutput> GetUserIdList(string cursor = null, int? limit = 20)
|
public async Task<UserIdListWorkWxOutput> GetUserIdList(string cursor = null, int? limit = 20)
|
||||||
{
|
{
|
||||||
return await baseService.SendAsync<UserIdListWorkWxInput, UserIdListWorkWxOutput>(new(){ Cursor = cursor, Limit = limit });
|
return await baseService.SendAsync<UserIdListWorkWxInput, UserIdListWorkWxOutput>(new() { Cursor = cursor, Limit = limit });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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(
|
||||||
emit('update:modelValue', newValue);
|
() => state.active,
|
||||||
emit('change', newValue, state.data);
|
(newValue) => {
|
||||||
}, { immediate: true })
|
emit('update:modelValue', newValue);
|
||||||
watch(() => props.data, (newValue) => {
|
emit('change', newValue, state.data);
|
||||||
state.data = newValue ?? [];
|
},
|
||||||
console.log(state.data);
|
{ immediate: true }
|
||||||
}, { immediate: true })
|
);
|
||||||
|
watch(
|
||||||
|
() => props.data,
|
||||||
|
(newValue) => {
|
||||||
|
state.data = newValue ?? [];
|
||||||
|
console.log(state.data);
|
||||||
|
},
|
||||||
|
{ 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(
|
||||||
state.value = parseMultipleValue(newValue);
|
() => props.modelValue,
|
||||||
validateInitialValue();
|
(newValue) => {
|
||||||
});
|
state.value = parseMultipleValue(newValue);
|
||||||
|
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');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -19,11 +19,12 @@
|
|||||||
<el-form-item label="请求地址">
|
<el-form-item label="请求地址">
|
||||||
{{ data.requestUrl?.indexOf('?') == -1 ? data.requestUrl : data.requestUrl?.substring(0, data.requestUrl.indexOf('?')) }}
|
{{ data.requestUrl?.indexOf('?') == -1 ? data.requestUrl : data.requestUrl?.substring(0, data.requestUrl.indexOf('?')) }}
|
||||||
</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-form-item>
|
</el-row>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="请求头">
|
<el-form-item label="请求头">
|
||||||
<vue-json-pretty :data="data.requestHeaders" showLength showIcon showLineNumber showSelectController />
|
<vue-json-pretty :data="data.requestHeaders" showLength showIcon showLineNumber showSelectController />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -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">
|
||||||
@ -93,7 +94,7 @@
|
|||||||
<g-sys-dict v-model="row.isSuccessStatusCode" :code="'YesNoEnum'" />
|
<g-sys-dict v-model="row.isSuccessStatusCode" :code="'YesNoEnum'" />
|
||||||
</template>
|
</template>
|
||||||
<template #row_requestUrl="{ row, $index }">
|
<template #row_requestUrl="{ row, $index }">
|
||||||
<el-button v-if="row.requestUrl" class="ml5" icon="ele-CopyDocument" text type="primary" @click="(event: any) => handleCopyUrl(event, row.requestUrl)" />
|
<el-button v-if="row.requestUrl" class="ml5" icon="ele-CopyDocument" text type="primary" @click="(event: any) => handleCopyUrl(event, row.requestUrl)" />
|
||||||
{{ row.requestUrl }}
|
{{ row.requestUrl }}
|
||||||
</template>
|
</template>
|
||||||
<template #row_requestBody="{ row, $index }">
|
<template #row_requestBody="{ row, $index }">
|
||||||
@ -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';
|
||||||
@ -160,7 +162,7 @@ const options = useVxeTable<PageLogHttpOutput>(
|
|||||||
columns: [
|
columns: [
|
||||||
// { type: 'checkbox', width: 40, fixed: 'left' },
|
// { type: 'checkbox', width: 40, fixed: 'left' },
|
||||||
{ field: 'seq', type: 'seq', title: '序号', width: 60, fixed: 'left' },
|
{ field: 'seq', type: 'seq', title: '序号', width: 60, fixed: 'left' },
|
||||||
{ field: 'createTime', title: '创建时间', minWidth: 150, showOverflow: 'tooltip' },
|
{ field: 'createTime', title: '创建时间', minWidth: 150, showOverflow: 'tooltip' },
|
||||||
{ field: 'httpClientName', title: '客户端', minWidth: 110, showOverflow: 'tooltip' },
|
{ field: 'httpClientName', title: '客户端', minWidth: 110, showOverflow: 'tooltip' },
|
||||||
{ field: 'actionName', title: '模块名', minWidth: 110, showOverflow: 'tooltip' },
|
{ field: 'actionName', title: '模块名', minWidth: 110, showOverflow: 'tooltip' },
|
||||||
{ field: 'httpMethod', title: '请求方式', minWidth: 60, showOverflow: 'tooltip' },
|
{ field: 'httpMethod', title: '请求方式', minWidth: 60, showOverflow: 'tooltip' },
|
||||||
@ -173,10 +175,10 @@ const options = useVxeTable<PageLogHttpOutput>(
|
|||||||
{ field: 'responseHeaders', title: '响应头', minWidth: 150, showOverflow: 'tooltip' },
|
{ field: 'responseHeaders', title: '响应头', minWidth: 150, showOverflow: 'tooltip' },
|
||||||
{ field: 'responseBody', title: '响应体', minWidth: 150, showOverflow: 'tooltip', slots: { default: 'row_responseBody' } },
|
{ field: 'responseBody', title: '响应体', minWidth: 150, showOverflow: 'tooltip', slots: { default: 'row_responseBody' } },
|
||||||
{ field: 'exception', title: '异常信息', minWidth: 150, showOverflow: 'tooltip', slots: { default: 'row_exception' } },
|
{ field: 'exception', title: '异常信息', minWidth: 150, showOverflow: 'tooltip', slots: { default: 'row_exception' } },
|
||||||
{ field: 'startTime', title: '开始时间', minWidth: 150, showOverflow: 'tooltip', slots: { default: 'row_startTime' } },
|
{ field: 'startTime', title: '开始时间', minWidth: 150, showOverflow: 'tooltip', slots: { default: 'row_startTime' } },
|
||||||
{ field: 'endTime', title: '结束时间', minWidth: 150, showOverflow: 'tooltip', slots: { default: 'row_endTime' } },
|
{ field: 'endTime', title: '结束时间', minWidth: 150, showOverflow: 'tooltip', slots: { default: 'row_endTime' } },
|
||||||
{ field: 'elapsed', title: '耗时(毫秒)', minWidth: 90, showOverflow: 'tooltip' },
|
{ field: 'elapsed', title: '耗时(毫秒)', minWidth: 90, showOverflow: 'tooltip' },
|
||||||
{ field: 'createUserName', title: '创建用户', minWidth: 90, showOverflow: 'tooltip' },
|
{ field: 'createUserName', title: '创建用户', minWidth: 90, showOverflow: 'tooltip' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
// vxeGrid配置参数(此处可覆写任何参数),参考vxe-table官方文档
|
// vxeGrid配置参数(此处可覆写任何参数),参考vxe-table官方文档
|
||||||
@ -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;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -222,9 +226,9 @@ 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 () => {
|
||||||
@ -241,7 +245,7 @@ const resetQuery = async () => {
|
|||||||
|
|
||||||
// 获取主题颜色变量
|
// 获取主题颜色变量
|
||||||
const colors = ['--el-color-primary-light-9', '--el-color-primary-light-7', '--el-color-primary-light-5', '--el-color-primary-light-3', '--el-color-primary-light-1', '--el-color-primary'].map(
|
const colors = ['--el-color-primary-light-9', '--el-color-primary-light-7', '--el-color-primary-light-5', '--el-color-primary-light-3', '--el-color-primary-light-1', '--el-color-primary'].map(
|
||||||
(variable) => getComputedStyle(document.documentElement).getPropertyValue(variable).trim()
|
(variable) => getComputedStyle(document.documentElement).getPropertyValue(variable).trim()
|
||||||
);
|
);
|
||||||
const echartsOption = ref({
|
const echartsOption = ref({
|
||||||
title: {
|
title: {
|
||||||
@ -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