From 4d3128bbfe6815302ad6aac828aece739e424cd2 Mon Sep 17 00:00:00 2001 From: SugarChes Date: Tue, 28 Jul 2026 20:24:56 +0800 Subject: [PATCH] fix: normalize WPF login identities at legacy boundary --- .../Hosting/LegacyApplicationHost.cs | 82 +++++++++++++++++-- 1 file changed, 74 insertions(+), 8 deletions(-) diff --git a/插件库/Lskj.Main/Hosting/LegacyApplicationHost.cs b/插件库/Lskj.Main/Hosting/LegacyApplicationHost.cs index 3bc8d05..402f90f 100644 --- a/插件库/Lskj.Main/Hosting/LegacyApplicationHost.cs +++ b/插件库/Lskj.Main/Hosting/LegacyApplicationHost.cs @@ -76,7 +76,10 @@ namespace Lskj.Main.Hosting DataTable users = SystemInfo.Instance.DisplayUserCode ? MainImpl.GetEmployeeListNew() : MainImpl.GetEmployeeList(); - return users ?? new DataTable("Users"); + return NormalizeUsersForLogin( + users ?? new DataTable("Users"), + SystemInfo.Instance.LoginUsername, + SystemInfo.Instance.DisplayUserCode); } public DataTable SelectLedger(string ledgerName) @@ -197,8 +200,7 @@ namespace Lskj.Main.Hosting ERPInfo.Instance.LoginResult = false; if (string.IsNullOrWhiteSpace(loginName)) return ResourceKeys.UserNameNotNull; - if (password == null) - password = string.Empty; + password = NormalizePassword(password); try { @@ -420,13 +422,77 @@ namespace Lskj.Main.Hosting return selected == null ? string.Empty : Value(selected, "ShowName"); } + private static DataTable NormalizeUsersForLogin( + DataTable users, + string configuredLoginColumn, + bool displayUserCode) + { + DataTable normalized = new DataTable("Users"); + normalized.Columns.Add("UserId", typeof(string)); + normalized.Columns.Add("LoginName", typeof(string)); + normalized.Columns.Add("DisplayName", typeof(string)); + + if (users == null) + return normalized; + + string loginColumn = ResolveLoginColumn( + users, + configuredLoginColumn); + foreach (DataRow row in users.Rows) + { + string loginName = Value(row, loginColumn).Trim(); + string userCode = Value(row, "UserCode").Trim(); + if (string.IsNullOrWhiteSpace(loginName)) + loginName = userCode; + if (string.IsNullOrWhiteSpace(loginName)) + continue; + + string displayName = loginName; + if (displayUserCode && + !string.IsNullOrWhiteSpace(userCode) && + !string.Equals( + loginName, + userCode, + StringComparison.OrdinalIgnoreCase)) + { + displayName = loginName + "(" + userCode + ")"; + } + + normalized.Rows.Add( + Value(row, "UserId"), + loginName, + displayName); + } + + return normalized; + } + + private static string NormalizePassword(string password) + { + return (password ?? string.Empty).Trim(); + } + private static string ResolveDisplayColumn(DataTable users) { - string configured = SystemInfo.Instance.LoginUsername; - return !string.IsNullOrWhiteSpace(configured) && - users.Columns.Contains(configured) - ? configured - : "UserName"; + return ResolveLoginColumn( + users, + SystemInfo.Instance.LoginUsername); + } + + private static string ResolveLoginColumn( + DataTable users, + string configuredLoginColumn) + { + if (users != null && + !string.IsNullOrWhiteSpace(configuredLoginColumn) && + users.Columns.Contains(configuredLoginColumn)) + { + return configuredLoginColumn; + } + + return users != null && users.Columns.Contains("UserName") + ? "UserName" + : "UserCode"; } private static string Value(DataRow row, string columnName)