diff --git a/Admin.NET/Admin.NET.Core/Option/SMSOptions.cs b/Admin.NET/Admin.NET.Core/Option/SMSOptions.cs index 692c35286f22a354eeed944d1bb6f198a6785864..524e08b633744ef0e3b3f7032d0e2dd14ac31314 100644 --- a/Admin.NET/Admin.NET.Core/Option/SMSOptions.cs +++ b/Admin.NET/Admin.NET.Core/Option/SMSOptions.cs @@ -88,9 +88,9 @@ public sealed class CustomSMSSettings /// /// API 接口地址模板 - /// 支持占位符: {mobile} - 手机号, {content} - 短信内容, {code} - 验证码 - /// 示例: https://api.xxxx.com/sms?u=xxxx&key=59e03f49c3dbb5033&m={mobile}&c={content} + /// 支持占位符: {mobile} - 手机号, {content} - 短信内容, {code} - 验证码 /// + /// 示例: https://api.xxxx.com/sms?u=xxxx&key=59e03f49c3dbb5033&m={mobile}&c={content} public string ApiUrl { get; set; } /// @@ -106,9 +106,11 @@ public sealed class CustomSMSSettings /// /// POST 请求的数据模板(支持占位符) - /// JSON 格式示例: {"mobile":"{mobile}","content":"{content}","apikey":"your_key"} - /// Form 格式示例: mobile={mobile}&content={content}&apikey=your_key /// + /// + /// JSON 格式示例: {"mobile":"{mobile}","content":"{content}","apikey":"your_key"}
+ /// Form 格式示例: mobile={mobile}&content={content}&apikey=your_key + ///
public string PostData { get; set; } /// diff --git a/Admin.NET/Admin.NET.Core/Service/DataBase/SysDatabaseService.cs b/Admin.NET/Admin.NET.Core/Service/DataBase/SysDatabaseService.cs index 9d9e38a732055206d3f6039506cb012d34695668..13d3cda189c0eeeb9936117b17702fdd778c1dc1 100644 --- a/Admin.NET/Admin.NET.Core/Service/DataBase/SysDatabaseService.cs +++ b/Admin.NET/Admin.NET.Core/Service/DataBase/SysDatabaseService.cs @@ -175,15 +175,21 @@ public class SysDatabaseService : IDynamicApiController, ITransient public void UpdateColumn(UpdateDbColumnInput input) { var db = _db.AsTenant().GetConnectionScope(input.ConfigId); - db.DbMaintenance.RenameColumn(input.TableName, input.OldColumnName, input.ColumnName); - if (!string.IsNullOrWhiteSpace(input.DefaultValue)) + + // 前端未修改列名时,不进行重命名操作,避免报错 + if (input.OldColumnName != input.ColumnName) { - db.DbMaintenance.AddDefaultValue(input.TableName, input.ColumnName, input.DefaultValue); + db.DbMaintenance.RenameColumn(input.TableName, input.OldColumnName, input.ColumnName); } - if (db.DbMaintenance.IsAnyColumnRemark(input.ColumnName, input.TableName)) + + if (!string.IsNullOrWhiteSpace(input.DefaultValue)) { - db.DbMaintenance.DeleteColumnRemark(input.ColumnName, input.TableName); + db.DbMaintenance.AddDefaultValue(input.TableName, input.ColumnName, input.DefaultValue); } + //if (db.DbMaintenance.IsAnyColumnRemark(input.ColumnName, input.TableName)) + //{ + // db.DbMaintenance.DeleteColumnRemark(input.ColumnName, input.TableName); + //} db.DbMaintenance.AddColumnRemark(input.ColumnName, input.TableName, string.IsNullOrWhiteSpace(input.Description) ? input.ColumnName : input.Description); } diff --git a/Admin.NET/Admin.NET.Core/Service/Dict/Dto/DictTypeInput.cs b/Admin.NET/Admin.NET.Core/Service/Dict/Dto/DictTypeInput.cs index 10682d5dcf6d0260762b053583bbbd0f98cb89cb..960e6a9474cf3b5397a709fa1985f15ed6b2a80d 100644 --- a/Admin.NET/Admin.NET.Core/Service/Dict/Dto/DictTypeInput.cs +++ b/Admin.NET/Admin.NET.Core/Service/Dict/Dto/DictTypeInput.cs @@ -25,6 +25,10 @@ public class PageDictTypeInput : BasePageInput public class AddDictTypeInput : SysDictType { + /// + /// 是否是租户字典(Y-是,N-否) + /// + public override YesNoEnum IsTenant { get; set; } = YesNoEnum.Y; /// /// 是否是内置字典(Y-是,N-否) /// diff --git a/Admin.NET/Admin.NET.Core/Service/Dict/SysDictDataService.cs b/Admin.NET/Admin.NET.Core/Service/Dict/SysDictDataService.cs index cba2d427553854142f288ce7172970482918e76b..7487e96cd6eb7d59583f048427d67639d5c30c02 100644 --- a/Admin.NET/Admin.NET.Core/Service/Dict/SysDictDataService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Dict/SysDictDataService.cs @@ -29,7 +29,9 @@ public class SysDictDataService : IDynamicApiController, ITransient _sysLangTextCacheService = sysLangTextCacheService; VSysDictData = _sysDictDataRep.Context.UnionAll( _sysDictDataRep.AsQueryable(), - _sysDictDataRep.Change().AsQueryable().WhereIF(_userManager.SuperAdmin, d => d.TenantId == _userManager.TenantId).Select()); + _sysDictDataRep.Change().AsQueryable() + //.WhereIF(_userManager.SuperAdmin, d => d.TenantId == _userManager.TenantId) + .Select()); } /// diff --git a/Admin.NET/Admin.NET.Core/Service/Dict/SysDictTypeService.cs b/Admin.NET/Admin.NET.Core/Service/Dict/SysDictTypeService.cs index b8fa231c6d2249749ff8170198bdc5a2a8db9af3..6315d2930c73c1ac2daad32ac43a7ae9a5593b16 100644 --- a/Admin.NET/Admin.NET.Core/Service/Dict/SysDictTypeService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Dict/SysDictTypeService.cs @@ -130,6 +130,8 @@ public class SysDictTypeService : IDynamicApiController, ITransient var isExist = await _sysDictTypeRep.IsAnyAsync(u => u.Code == input.Code); if (isExist) throw Oops.Oh(ErrorCodeEnum.D3001); + if (_userManager.SuperAdmin) input.IsTenant = YesNoEnum.N; // 超级管理员添加的字典类型默认非租户级 + await _sysDictTypeRep.InsertAsync(input.Adapt()); } diff --git a/Admin.NET/Admin.NET.Core/Utils/GiteeHelper.cs b/Admin.NET/Admin.NET.Core/Utils/GiteeHelper.cs index 3f369e4d86b3e574d00bb6a72b50dccb8ef4e8aa..54f3fc645376b9a496b44391e7114db4bf316684 100644 --- a/Admin.NET/Admin.NET.Core/Utils/GiteeHelper.cs +++ b/Admin.NET/Admin.NET.Core/Utils/GiteeHelper.cs @@ -37,7 +37,7 @@ public class GiteeHelper /// 构建Query参数 /// /// - private static string BuilderQueryString([NotNull] object obj) + private static string BuilderQueryString([System.Diagnostics.CodeAnalysis.NotNull] object obj) { if (obj == null) return string.Empty; var query = HttpUtility.ParseQueryString(string.Empty); diff --git a/Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/DingTalkService.cs b/Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/DingTalkService.cs index af274298b8b9cea1419ca8e1843ace2661d95beb..66331968e0d8687795d980561fafb45648af15fa 100644 --- a/Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/DingTalkService.cs +++ b/Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/Service/DingTalkService.cs @@ -86,6 +86,7 @@ public class DingTalkService : IDynamicApiController, IScoped /// /// [DisplayName("给指定用户发送钉钉互动卡片")] + [Obsolete] public async Task DingTalkSendInteractiveCards( string token, DingTalkSendInteractiveCardsInput input diff --git a/Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Proxy/AppChat/Dto/AppChatHttpInput.cs b/Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Proxy/AppChat/Dto/AppChatHttpInput.cs index a5655e81dd8bba512f652a068cb3c3c855b1ad11..e6649388762f92b29248fe66c03147a8c6f81ca6 100644 --- a/Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Proxy/AppChat/Dto/AppChatHttpInput.cs +++ b/Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Proxy/AppChat/Dto/AppChatHttpInput.cs @@ -32,7 +32,7 @@ public class CreatAppChatInput /// [JsonProperty("userlist")] [JsonPropertyName("userlist")] - [NotEmpty(ErrorMessage = "群成员列表不能为空")] + [Core.NotEmpty(ErrorMessage = "群成员列表不能为空")] public List UserList { get; set; } /// diff --git a/Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Proxy/AppChat/IWorkWeixinAppChatHttp.cs b/Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Proxy/AppChat/IWorkWeixinAppChatHttp.cs index 89ac90c6a5ff51df8b4df17cf904c11c7561a7c8..2a8256d0a19e15e4417b1d0108945dece7309655 100644 --- a/Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Proxy/AppChat/IWorkWeixinAppChatHttp.cs +++ b/Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Proxy/AppChat/IWorkWeixinAppChatHttp.cs @@ -17,7 +17,7 @@ public interface IWorkWeixinAppChatHttp : IHttpDeclarative /// /// /// - /// + /// [Post("https://qyapi.weixin.qq.com/cgi-bin/appchat/create")] Task Create([Query("access_token")] string accessToken, [Body] CreatAppChatInput body); @@ -27,7 +27,7 @@ public interface IWorkWeixinAppChatHttp : IHttpDeclarative /// /// /// - /// + /// [Post("https://qyapi.weixin.qq.com/cgi-bin/appchat/update")] Task Update([Query("access_token")] string accessToken, [Body] UpdateAppChatInput body); @@ -37,7 +37,7 @@ public interface IWorkWeixinAppChatHttp : IHttpDeclarative /// /// /// - /// + /// [Get("https://qyapi.weixin.qq.com/cgi-bin/appchat/get")] Task Get([Query("access_token")] string accessToken, [Query("chatid")] string chatId); @@ -47,7 +47,7 @@ public interface IWorkWeixinAppChatHttp : IHttpDeclarative /// /// /// - /// + /// [Post("https://qyapi.weixin.qq.com/cgi-bin/appchat/send")] Task Send([Query("access_token")] string accessToken, [Body] SendBaseAppChatInput body); } \ No newline at end of file diff --git a/Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Proxy/Auth/IWorkWeixinAuthHttp.cs b/Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Proxy/Auth/IWorkWeixinAuthHttp.cs index 9db100e1e7feda1035b58f729f02b553bf3dbde6..118a08e36e3187aef6f2e03a78cebe47dca877e4 100644 --- a/Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Proxy/Auth/IWorkWeixinAuthHttp.cs +++ b/Admin.NET/Plugins/Admin.NET.Plugin.WorkWeixin/Proxy/Auth/IWorkWeixinAuthHttp.cs @@ -17,7 +17,7 @@ public interface IWorkWeixinAuthHttp : IHttpDeclarative /// 企业ID /// 应用的凭证密钥 /// - /// + /// [Post("https://qyapi.weixin.qq.com/cgi-bin/gettoken")] Task GetToken([Query("corpid")] string corpId, [Query("corpsecret")] string corpSecret); } \ No newline at end of file diff --git a/Web/src/theme/element.scss b/Web/src/theme/element.scss index ce0c9d7c0a8a2d8b52a2002b431b36d06e99d937..09c9c9993347149585d643539b80986208a9efb1 100644 --- a/Web/src/theme/element.scss +++ b/Web/src/theme/element.scss @@ -346,9 +346,11 @@ padding: 0 !important; margin: 0 auto !important; position: absolute; + max-height: 100vh; .el-dialog__body { padding: 18px !important; + max-height: calc(100vh - 37px); } } } @@ -386,6 +388,7 @@ padding: 8px; border-radius: var(--el-dialog-border-radius) var(--el-dialog-border-radius) 0 0; background: var(--el-color-primary); + color: #fff; height: 37px; line-height: 21px; diff --git a/Web/src/theme/media/scrollbar.scss b/Web/src/theme/media/scrollbar.scss index 912ecc72654838f335cbe45bc5655333f73125b2..54baa7f3c58c7e3e5347068a73f5538cbd6ed208 100644 --- a/Web/src/theme/media/scrollbar.scss +++ b/Web/src/theme/media/scrollbar.scss @@ -41,6 +41,7 @@ } ::-webkit-scrollbar-track-piece { background-color: var(--next-bg-main-color); + border-radius: 4px; } // 滚动条的设置 ::-webkit-scrollbar-thumb { diff --git a/Web/src/views/system/database/component/addTable.vue b/Web/src/views/system/database/component/addTable.vue index c9922b270b9901e599e3cbd94943ccf498b14ffb..f9602a1eae86255b7528e159f5bbf8939fe2a4f8 100644 --- a/Web/src/views/system/database/component/addTable.vue +++ b/Web/src/views/system/database/component/addTable.vue @@ -50,7 +50,7 @@ @@ -183,13 +183,13 @@ function addPrimaryColumn() { function addColumn() { state.tableData.push({ columnDescription: '', - dataType: 'varchar', + //dataType: 'varchar', dbColumnName: '', decimalDigits: 0, isIdentity: 0, isNullable: 1, isPrimarykey: 0, - length: 32, + //length: 32, key: colIndex, editable: true, isNew: true, @@ -310,6 +310,17 @@ function handleColDelete(index: number) { state.tableData.splice(index, 1); } +// 列类型选择变化 +function handleColTypeChange(record: EditRecordRow) { + if (['varchar', 'char', 'nvarchar', 'nchar'].includes(record.dataType as string)) { + if ([0, undefined, null].includes(record.length)) { + record.length = 32; + } + } else { + record.length = 0; + } +} + // 上移 function handleColUp(record: EditRecordRow, index: number) { if (record.isNew) { diff --git a/Web/src/views/system/stressTest/index.vue b/Web/src/views/system/stressTest/index.vue index b4ba11eb61badd07446f139e51bce7974ec9e852..08afffe1797e4286d68461031d0d1ce7dd883794 100644 --- a/Web/src/views/system/stressTest/index.vue +++ b/Web/src/views/system/stressTest/index.vue @@ -1,47 +1,40 @@