UnifiedConfigViewModel.cs 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using CommunityToolkit.Mvvm.ComponentModel;
  2. using ivf_tl_Operate.Helpers;
  3. namespace ivf_tl_Operate.ViewModel
  4. {
  5. /// <summary>
  6. /// M5-02-4:统一配置页 ViewModel。分组展示并可编辑【本地层】配置项。
  7. /// - 凭据项(passWord/engineerPwd)经 CryptoHelper 加解密,界面以明文编辑、落盘密文。
  8. /// - 数据库层项(对焦时间/帧率/抠图数等)维持 SettingPageView 的 TLSetting 路径,本页不重复写入口(00-需求总览.md §8)。
  9. /// - 换气/CCD 类业务键现状本地层、归属 [D8] 待确认,本页只读展示其当前值。
  10. /// 保存逻辑见 <see cref="SaveAll"/>;加载见 <see cref="Load"/>。
  11. /// [M7] 落盘/重启生效需运行环境验证(本地不可构建/运行)。
  12. /// </summary>
  13. public partial class UnifiedConfigViewModel : ObservableObject
  14. {
  15. // —— 连接(本地层) ——
  16. [ObservableProperty] private string urlIp;
  17. [ObservableProperty] private string urlPort;
  18. [ObservableProperty] private string mqttIp;
  19. [ObservableProperty] private string mqttPort;
  20. [ObservableProperty] private string kfkaIP;
  21. [ObservableProperty] private string kfkaPort;
  22. // —— 本机(本地层) ——
  23. [ObservableProperty] private string cacheDisk;
  24. [ObservableProperty] private string tlNum;
  25. [ObservableProperty] private string language;
  26. [ObservableProperty] private string houseEnabled;
  27. // —— 凭据(本地层,脱敏/加密) ——
  28. [ObservableProperty] private string userName;
  29. [ObservableProperty] private string passWord; // 编辑明文 → 保存加密
  30. [ObservableProperty] private string engineerPwd; // 编辑明文 → 保存加密(治理 tl13579)
  31. public UnifiedConfigViewModel()
  32. {
  33. Load();
  34. }
  35. /// <summary>从 App.config 读取当前值(凭据解密)。</summary>
  36. public void Load()
  37. {
  38. UrlIp = AppConfigHelper.GetString("urlIp");
  39. UrlPort = AppConfigHelper.GetString("urlPort");
  40. MqttIp = AppConfigHelper.GetString("mqttIp");
  41. MqttPort = AppConfigHelper.GetString("mqttPort");
  42. KfkaIP = AppConfigHelper.GetString("kfkaIP");
  43. KfkaPort = AppConfigHelper.GetString("kfkaPort");
  44. CacheDisk = AppConfigHelper.GetString("cacheDisk");
  45. TlNum = AppConfigHelper.GetString("tlNum");
  46. Language = AppConfigHelper.GetString("Language");
  47. HouseEnabled = AppConfigHelper.GetString("houseEnabled");
  48. UserName = AppConfigHelper.GetString("userName");
  49. PassWord = AppConfigHelper.GetDecrypted("passWord");
  50. EngineerPwd = AppConfigHelper.GetEngineerPwd();
  51. }
  52. /// <summary>把界面编辑值写回 App.config(凭据加密)。返回是否成功(异常已在 Helper 内吞掉,恒 true 占位)。</summary>
  53. public bool SaveAll()
  54. {
  55. // M8-G3-1:保存统一配置=写 App.config 并加密落盘凭据,属真实业务写操作,需记操作日志(凭据不入 input)。
  56. Aivfo.OperationLog.OperationLogger.Run("统一配置", "保存统一配置", () =>
  57. {
  58. AppConfigHelper.Save("urlIp", UrlIp);
  59. AppConfigHelper.Save("urlPort", UrlPort);
  60. AppConfigHelper.Save("mqttIp", MqttIp);
  61. AppConfigHelper.Save("mqttPort", MqttPort);
  62. AppConfigHelper.Save("kfkaIP", KfkaIP);
  63. AppConfigHelper.Save("kfkaPort", KfkaPort);
  64. AppConfigHelper.Save("cacheDisk", CacheDisk);
  65. AppConfigHelper.Save("tlNum", TlNum);
  66. AppConfigHelper.Save("Language", Language);
  67. AppConfigHelper.Save("houseEnabled", HouseEnabled);
  68. AppConfigHelper.Save("userName", UserName);
  69. AppConfigHelper.SaveEncrypted("passWord", PassWord);
  70. AppConfigHelper.SaveEncrypted(AppConfigHelper.EngineerPwdKey, EngineerPwd);
  71. }, input: new { UrlIp, UrlPort, MqttIp, MqttPort, KfkaIP, KfkaPort, CacheDisk, TlNum, Language, HouseEnabled, UserName });
  72. return true;
  73. }
  74. }
  75. }