From 0931e1f3432b99c3b5e966d8f16c198fb2852ded Mon Sep 17 00:00:00 2001 From: fuenmao <980740792@qq.com> Date: Mon, 24 Aug 2026 16:36:47 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=B8=E5=85=B3bug=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Company/Dto/OnboardingCompanyInput.cs | 5 +++ .../Company/OnboardingCompanyService.cs | 5 ++- .../OnboardingEntryConfigService.cs | 31 +++++++++++++++++-- .../Position/Dto/OnboardingPositionInput.cs | 5 +++ .../Position/OnboardingPositionService.cs | 5 ++- .../SimpleAdmin.Application.xml | 15 +++++++++ 6 files changed, 57 insertions(+), 9 deletions(-) diff --git a/SimpleAdmin.Application/Services/Onboarding/Company/Dto/OnboardingCompanyInput.cs b/SimpleAdmin.Application/Services/Onboarding/Company/Dto/OnboardingCompanyInput.cs index 1a8a2c5..1f12c77 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Company/Dto/OnboardingCompanyInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Company/Dto/OnboardingCompanyInput.cs @@ -5,6 +5,11 @@ namespace SimpleAdmin.Application; /// public class OnboardingCompanyPageInput : BasePageInput { + /// + /// 公司业务编码。 + /// + public virtual string CompanyCode { get; set; } + /// /// 公司名称。 /// diff --git a/SimpleAdmin.Application/Services/Onboarding/Company/OnboardingCompanyService.cs b/SimpleAdmin.Application/Services/Onboarding/Company/OnboardingCompanyService.cs index c765e43..16bca1b 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Company/OnboardingCompanyService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Company/OnboardingCompanyService.cs @@ -11,9 +11,8 @@ public class OnboardingCompanyService : DbRepository, IOnboardingComp public async Task> Page(OnboardingCompanyPageInput input) { return await Context.Queryable() - .WhereIF( - !string.IsNullOrWhiteSpace(input.CompanyName), - it => it.CompanyName.Contains(input.CompanyName) || it.CompanyCode.Contains(input.CompanyName)) + .WhereIF(!string.IsNullOrWhiteSpace(input.CompanyCode), it => it.CompanyCode.Contains(input.CompanyCode)) + .WhereIF(!string.IsNullOrWhiteSpace(input.CompanyName), it => it.CompanyName.Contains(input.CompanyName)) .WhereIF(!string.IsNullOrWhiteSpace(input.Status), it => it.Status == input.Status) .OrderByIF(!string.IsNullOrWhiteSpace(input.SortField), $"{input.SortField} {input.SortOrder}") .OrderBy(it => it.CreateTime) diff --git a/SimpleAdmin.Application/Services/Onboarding/EntryConfig/OnboardingEntryConfigService.cs b/SimpleAdmin.Application/Services/Onboarding/EntryConfig/OnboardingEntryConfigService.cs index 2baeb23..6c3977c 100644 --- a/SimpleAdmin.Application/Services/Onboarding/EntryConfig/OnboardingEntryConfigService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/EntryConfig/OnboardingEntryConfigService.cs @@ -27,8 +27,12 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService /// public async Task SaveFormField(OnboardingFormFieldSaveInput input) { - var fieldCodeExists = await _db.Queryable() - .AnyAsync(x => x.FieldCode == input.FieldCode && x.Id != input.Id); + var fieldCodeQuery = _db.Queryable() + .Where(x => x.FieldCode == input.FieldCode); + if (input.Id.HasValue) + fieldCodeQuery = fieldCodeQuery.Where(x => x.Id != input.Id.Value); + + var fieldCodeExists = await fieldCodeQuery.AnyAsync(); if (fieldCodeExists) throw Oops.Bah("字段编码已存在"); @@ -38,7 +42,7 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService FieldCode = input.FieldCode, FieldName = input.FieldName, DataType = input.DataType, - OptionsJson = input.OptionsJson, + OptionsJson = NormalizeOptionsJson(input.OptionsJson), ValidationRule = input.ValidationRule, Placeholder = input.Placeholder, Status = input.Status @@ -57,6 +61,27 @@ public class OnboardingEntryConfigService : IOnboardingEntryConfigService await _db.Insertable(entity).ExecuteCommandAsync(); } + /// + /// 将空白的可选项转换为 null,避免 MySQL JSON 字段写入空字符串时报错。 + /// + private static string NormalizeOptionsJson(string optionsJson) + { + if (string.IsNullOrWhiteSpace(optionsJson)) + return null; + + var normalizedJson = optionsJson.Trim(); + + try + { + using var jsonDocument = global::System.Text.Json.JsonDocument.Parse(normalizedJson); + return normalizedJson; + } + catch (global::System.Text.Json.JsonException) + { + throw Oops.Bah("可选项不是有效的 JSON 格式"); + } + } + /// /// 删除未被填写要求引用的动态字段。 /// diff --git a/SimpleAdmin.Application/Services/Onboarding/Position/Dto/OnboardingPositionInput.cs b/SimpleAdmin.Application/Services/Onboarding/Position/Dto/OnboardingPositionInput.cs index ac9c36e..8e4b5e9 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Position/Dto/OnboardingPositionInput.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Position/Dto/OnboardingPositionInput.cs @@ -10,6 +10,11 @@ public class OnboardingPositionPageInput : BasePageInput /// public long? CompanyId { get; set; } + /// + /// 岗位编码。 + /// + public virtual string PositionCode { get; set; } + /// /// 岗位名称。 /// diff --git a/SimpleAdmin.Application/Services/Onboarding/Position/OnboardingPositionService.cs b/SimpleAdmin.Application/Services/Onboarding/Position/OnboardingPositionService.cs index b193966..f42d228 100644 --- a/SimpleAdmin.Application/Services/Onboarding/Position/OnboardingPositionService.cs +++ b/SimpleAdmin.Application/Services/Onboarding/Position/OnboardingPositionService.cs @@ -12,9 +12,8 @@ public class OnboardingPositionService : DbRepository, IOnboardingPo { return await Context.Queryable() .WhereIF(input.CompanyId.HasValue, it => it.CompanyId == input.CompanyId.Value) - .WhereIF( - !string.IsNullOrWhiteSpace(input.PositionName), - it => it.PositionName.Contains(input.PositionName) || it.PositionCode.Contains(input.PositionName)) + .WhereIF(!string.IsNullOrWhiteSpace(input.PositionCode), it => it.PositionCode.Contains(input.PositionCode)) + .WhereIF(!string.IsNullOrWhiteSpace(input.PositionName), it => it.PositionName.Contains(input.PositionName)) .WhereIF(!string.IsNullOrWhiteSpace(input.Status), it => it.Status == input.Status) .OrderByIF(!string.IsNullOrWhiteSpace(input.SortField), $"{input.SortField} {input.SortOrder}") .OrderBy(it => it.PositionName) diff --git a/SimpleAdmin.Application/SimpleAdmin.Application.xml b/SimpleAdmin.Application/SimpleAdmin.Application.xml index a2b0b18..b3aa902 100644 --- a/SimpleAdmin.Application/SimpleAdmin.Application.xml +++ b/SimpleAdmin.Application/SimpleAdmin.Application.xml @@ -1399,6 +1399,11 @@ 入职业务公司分页查询参数。 + + + 公司业务编码。 + + 公司名称。 @@ -2327,6 +2332,11 @@ 新增或编辑动态入职字段。 + + + 将空白的可选项转换为 null,避免 MySQL JSON 字段写入空字符串时报错。 + + 删除未被填写要求引用的动态字段。 @@ -2457,6 +2467,11 @@ 入职业务公司 Id。 + + + 岗位编码。 + + 岗位名称。