fix: normalize WPF login identities at legacy boundary

This commit is contained in:
2026-07-28 20:24:56 +08:00
parent fa48419bd8
commit 4d3128bbfe
@@ -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)