完善 MCS 桌面代理与开炼机动作同步,修复原料相关菜单权限,桌面端新增上辅机 MES 菜单。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-27 15:56:05 +08:00
parent 7a9c19e4f3
commit 442a4c8ae2
113 changed files with 10169 additions and 91 deletions

View File

@@ -110,33 +110,69 @@ namespace YY.Admin.ViewModels
_tokenCheckTimer.Interval = TimeSpan.FromMinutes(minutes);
}
/// <summary>登录永不过期缓存,避免定时器在 UI 线程同步读库失败后回落到 30 分钟过期。</summary>
private static bool? _tokenNeverExpireCached;
/// <summary>
/// 是否开启登录永不过期
/// </summary>
private static bool IsTokenNeverExpireEnabled()
{
if (_tokenNeverExpireCached.HasValue)
return _tokenNeverExpireCached.Value;
try
{
var cfg = Prism.Ioc.ContainerLocator.Current.Resolve<ISysConfigService>();
return cfg.GetConfigValue<bool>(ConfigConst.SysTokenNeverExpire).GetAwaiter().GetResult();
// 用 string 读取再解析,避免 Convert.ChangeType(bool) 异常被吞掉后误判为未开启
var raw = cfg.GetConfigValue<string>(ConfigConst.SysTokenNeverExpire).GetAwaiter().GetResult();
var enabled = ParseNeverExpireFlag(raw);
_tokenNeverExpireCached = enabled;
return enabled;
}
catch
{
return false;
// 读配置失败时按「永不过期」处理,避免误踢回登录页
return true;
}
}
private static bool ParseNeverExpireFlag(string? raw)
{
if (string.IsNullOrWhiteSpace(raw))
return true;
if (bool.TryParse(raw, out var b))
return b;
return raw.Trim() is "1" or "Y" or "y" or "yes" or "YES" or "on" or "ON";
}
/// <summary>
/// 登录设置保存后刷新检查间隔(已启动定时器时立即生效)
/// 登录设置保存后刷新检查间隔 / 永不过期策略(已启动定时器时立即生效)
/// </summary>
public static void RefreshTokenCheckIntervalFromConfig()
{
_tokenNeverExpireCached = null;
if (IsTokenNeverExpireEnabled())
{
StopTokenCheckTimer();
return;
}
ApplyTokenCheckIntervalFromConfig();
if (_tokenCheckTimer != null && !_tokenCheckTimer.IsEnabled && UserContext?.Token != null)
_tokenCheckTimer.Start();
}
// 启动定时器的方法
public static void StartTokenCheckTimer()
{
_tokenNeverExpireCached = null;
if (IsTokenNeverExpireEnabled())
{
StopTokenCheckTimer();
return;
}
if (_tokenCheckTimer == null)
{
_tokenCheckTimer = new DispatcherTimer();