AdminViewModel.cs 1.4 KB
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using IndustrialControl.Models;
using IndustrialControl.Services;

namespace IndustrialControl.ViewModels;

public partial class AdminViewModel : ObservableObject
{
    private readonly ConfigLoader _cfg;

    [ObservableProperty] private int schemaVersion;
    [ObservableProperty] private string ipAddress = "";
    [ObservableProperty] private int port;
    [ObservableProperty] private string baseUrl = "";

    public AdminViewModel(ConfigLoader cfg)
    {
        _cfg = cfg;
        LoadFromConfig();
        _cfg.ConfigChanged += () => LoadFromConfig();
    }

    private void LoadFromConfig()
    {
        var c = _cfg.Current;
        SchemaVersion = c.SchemaVersion;
        IpAddress = c.Server.IpAddress;
        Port = c.Server.Port;
        BaseUrl = _cfg.BaseUrl;
    }

    [RelayCommand]
    public async Task SaveAsync()
    {
        var c = _cfg.Current;
        c.Server.IpAddress = IpAddress.Trim();
        c.Server.Port = Port;
        await _cfg.SaveAsync(c);
        BaseUrl = _cfg.BaseUrl;
        await Shell.Current.DisplayAlert("已保存", "配置已保存,可立即生效。", "确定");
    }

    [RelayCommand]
    public async Task ResetToPackageAsync()
    {
        await _cfg.EnsureConfigIsLatestAsync();
        await _cfg.ReloadAsync();
        await Shell.Current.DisplayAlert("已重载", "已从包内默认配置重载/合并。", "确定");
    }
}