detect/detect.gui/VWMS/MainWindowModel.cs

139 lines
3.1 KiB
C#
Raw Normal View History

2024-11-26 11:24:25 +08:00
using System;
using System.Reactive;
using detect.gui.Api;
using detect.gui.Models;
using ReactiveUI;
using Serilog;
using xwd.utils;
namespace detect.gui.VWMS;
public class MainWindowModel : ViewModelBase<MainWindowModel>
{
/// <summary>
/// 当前登录用户
/// </summary>
private UserModel? _currentUser;
public UserModel? CurrentUser
{
get => _currentUser;
set => this.RaiseAndSetIfChanged(ref _currentUser, value);
}
private bool _isHomeView;
public bool IsHomeView
{
get => _isHomeView;
set => this.RaiseAndSetIfChanged(ref _isHomeView, value);
}
private bool _isDetectTaskView;
public bool IsDetectTaskView
{
get => _isDetectTaskView;
set => this.RaiseAndSetIfChanged(ref _isDetectTaskView, value);
}
private bool _isDeviceView;
public bool IsDeviceView
{
get => _isDeviceView;
set => this.RaiseAndSetIfChanged(ref _isDeviceView, value);
}
private bool _isLogView;
public bool IsLogView
{
get => _isLogView;
set => this.RaiseAndSetIfChanged(ref _isLogView, value);
}
private bool _isUserView;
public bool IsUserView
{
get => _isUserView;
set => this.RaiseAndSetIfChanged(ref _isUserView, value);
}
private readonly string[] _localRoutes =
[
"#/dashboard",
"#/data/task",
"#/data/device",
"#/system/log",
"#/system/user"
];
private string? _address;
public string? Address
{
get => _address;
set => this.RaiseAndSetIfChanged(ref _address, value);
}
public ReactiveCommand<Unit, Unit> LogoutCommand { get; }
public MainWindowModel()
{
ApiService.Instance().StartService();
LogoutCommand = ReactiveCommand.Create(Logout);
this.WhenAnyValue(x => x.IsHomeView).Subscribe(p =>
{
if (!p) return;
SetAddress(0);
});
this.WhenAnyValue(x => x.IsDetectTaskView).Subscribe(p =>
{
if (!p) return;
SetAddress(1);
});
this.WhenAnyValue(x => x.IsDeviceView).Subscribe(p =>
{
if (!p) return;
SetAddress(2);
});
this.WhenAnyValue(x => x.IsLogView).Subscribe(p =>
{
if (!p) return;
SetAddress(3);
});
this.WhenAnyValue(x => x.IsUserView).Subscribe(p =>
{
if (!p) return;
SetAddress(4);
});
}
public void Dispose()
{
ApiService.Instance().StopService();
}
private void Logout()
{
CurrentUser = null;
}
public void SetAddress(int index)
{
var isOnLine = AppSettingsManager.Manager().GetBool("Embedded.IsOnline");
var path = AppSettingsManager.Manager().GetString("Embedded.Path", "./dist/index.html");
var prefix = isOnLine ? path : AppDomain.CurrentDomain.BaseDirectory + path;
Address = $"{prefix}{_localRoutes[index]}";
Log.Information("current address: {address}", Address);
}
}