using CommunityToolkit.Mvvm.ComponentModel;
using ivf_tl_Operate.Helpers;
namespace ivf_tl_Operate.ViewModel
{
///
/// M5-02-4:统一配置页 ViewModel。分组展示并可编辑【本地层】配置项。
/// - 凭据项(passWord/engineerPwd)经 CryptoHelper 加解密,界面以明文编辑、落盘密文。
/// - 数据库层项(对焦时间/帧率/抠图数等)维持 SettingPageView 的 TLSetting 路径,本页不重复写入口(00-需求总览.md §8)。
/// - 换气/CCD 类业务键现状本地层、归属 [D8] 待确认,本页只读展示其当前值。
/// 保存逻辑见 ;加载见 。
/// [M7] 落盘/重启生效需运行环境验证(本地不可构建/运行)。
///
public partial class UnifiedConfigViewModel : ObservableObject
{
// —— 连接(本地层) ——
[ObservableProperty] private string urlIp;
[ObservableProperty] private string urlPort;
[ObservableProperty] private string mqttIp;
[ObservableProperty] private string mqttPort;
[ObservableProperty] private string kfkaIP;
[ObservableProperty] private string kfkaPort;
// —— 本机(本地层) ——
[ObservableProperty] private string cacheDisk;
[ObservableProperty] private string tlNum;
[ObservableProperty] private string language;
[ObservableProperty] private string houseEnabled;
// —— 凭据(本地层,脱敏/加密) ——
[ObservableProperty] private string userName;
[ObservableProperty] private string passWord; // 编辑明文 → 保存加密
[ObservableProperty] private string engineerPwd; // 编辑明文 → 保存加密(治理 tl13579)
public UnifiedConfigViewModel()
{
Load();
}
/// 从 App.config 读取当前值(凭据解密)。
public void Load()
{
UrlIp = AppConfigHelper.GetString("urlIp");
UrlPort = AppConfigHelper.GetString("urlPort");
MqttIp = AppConfigHelper.GetString("mqttIp");
MqttPort = AppConfigHelper.GetString("mqttPort");
KfkaIP = AppConfigHelper.GetString("kfkaIP");
KfkaPort = AppConfigHelper.GetString("kfkaPort");
CacheDisk = AppConfigHelper.GetString("cacheDisk");
TlNum = AppConfigHelper.GetString("tlNum");
Language = AppConfigHelper.GetString("Language");
HouseEnabled = AppConfigHelper.GetString("houseEnabled");
UserName = AppConfigHelper.GetString("userName");
PassWord = AppConfigHelper.GetDecrypted("passWord");
EngineerPwd = AppConfigHelper.GetEngineerPwd();
}
/// 把界面编辑值写回 App.config(凭据加密)。返回是否成功(异常已在 Helper 内吞掉,恒 true 占位)。
public bool SaveAll()
{
AppConfigHelper.Save("urlIp", UrlIp);
AppConfigHelper.Save("urlPort", UrlPort);
AppConfigHelper.Save("mqttIp", MqttIp);
AppConfigHelper.Save("mqttPort", MqttPort);
AppConfigHelper.Save("kfkaIP", KfkaIP);
AppConfigHelper.Save("kfkaPort", KfkaPort);
AppConfigHelper.Save("cacheDisk", CacheDisk);
AppConfigHelper.Save("tlNum", TlNum);
AppConfigHelper.Save("Language", Language);
AppConfigHelper.Save("houseEnabled", HouseEnabled);
AppConfigHelper.Save("userName", UserName);
AppConfigHelper.SaveEncrypted("passWord", PassWord);
AppConfigHelper.SaveEncrypted(AppConfigHelper.EngineerPwdKey, EngineerPwd);
return true;
}
}
}