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; } } }