Files
qhmes/yy-admin-master/YY.Admin/ViewModels/SysManage/DataDictionaryManagementViewModel.cs

143 lines
4.3 KiB
C#
Raw Normal View History

using Prism.Events;
using System.Collections.ObjectModel;
using YY.Admin.Core;
using YY.Admin.Core.Events;
using YY.Admin.Core.Extension;
using YY.Admin.Core.Helper;
using YY.Admin.Services.Service;
using YY.Admin.ViewModels.Control;
namespace YY.Admin.ViewModels.SysManage;
public class DataDictionaryManagementViewModel : BaseViewModel
{
private readonly IJeecgDictSyncService _dictSyncService;
private SubscriptionToken? _dictChangedToken;
public ObservableCollection<DictTreeNode> TreeNodes { get; } = [];
private DictTreeNode? _selectedTreeNode;
public DictTreeNode? SelectedTreeNode
{
get => _selectedTreeNode;
set => SetProperty(ref _selectedTreeNode, value);
}
private PaginationDataGridViewModel<JeecgDictItemOutput> _paginationDataGridViewModel;
public PaginationDataGridViewModel<JeecgDictItemOutput> PaginationDataGridViewModel
{
get => _paginationDataGridViewModel;
set => SetProperty(ref _paginationDataGridViewModel, value);
}
private PageJeecgDictItemInput _input;
public PageJeecgDictItemInput Input
{
get => _input;
set => SetProperty(ref _input, value);
}
public List<KeyValuePair<string, int>> StatusList =>
Enum.GetValues(typeof(StatusEnum))
.Cast<StatusEnum>()
.Select(e => new KeyValuePair<string, int>(e.GetDescription(), (int)e))
.ToList();
public DelegateCommand SearchCommand { get; }
public DelegateCommand ResetCommand { get; }
public DataDictionaryManagementViewModel(
IJeecgDictSyncService dictSyncService,
IContainerExtension container,
IRegionManager regionManager) : base(container, regionManager)
{
_dictSyncService = dictSyncService;
_paginationDataGridViewModel = new PaginationDataGridViewModel<JeecgDictItemOutput>(FetchAsync);
_input = new PageJeecgDictItemInput();
SearchCommand = new DelegateCommand(async () => await SearchAsync());
ResetCommand = new DelegateCommand(async () => await ResetAsync());
_dictChangedToken = _eventAggregator
.GetEvent<DictChangedEvent>()
.Subscribe(async _ => await OnDictChangedAsync(), ThreadOption.UIThread);
_ = InitializeAsync();
}
private async Task InitializeAsync()
{
await LoadDictTreeAsync();
await UIHelper.WaitForRenderAsync();
await PaginationDataGridViewModel.LoadDataAsync();
}
private async Task<(IEnumerable<JeecgDictItemOutput> data, int totalCount)> FetchAsync()
{
Input.Page = PaginationDataGridViewModel.PageIndex;
Input.PageSize = PaginationDataGridViewModel.DataCountPerPage;
var result = await _dictSyncService.PageAsync(Input);
return (result.Items, result.Total);
}
private async Task SearchAsync()
{
PaginationDataGridViewModel.PageIndex = 1;
await PaginationDataGridViewModel.LoadDataAsync();
}
private async Task ResetAsync()
{
Input = new PageJeecgDictItemInput();
SelectedTreeNode = null;
await UIHelper.WaitForRenderAsync();
await SearchAsync();
}
public async Task OnDictTreeSelectedAsync(DictTreeNode? node)
{
SelectedTreeNode = node;
Input.DictCode = node?.DictCode;
await SearchAsync();
}
private async Task LoadDictTreeAsync()
{
var groups = await _dictSyncService.GetDictGroupsAsync();
TreeNodes.Clear();
foreach (var group in groups)
{
TreeNodes.Add(new DictTreeNode(group.Key, group.Value));
}
}
private async Task OnDictChangedAsync()
{
await LoadDictTreeAsync();
await PaginationDataGridViewModel.LoadDataAsync();
}
protected override void CleanUp()
{
base.CleanUp();
if (_dictChangedToken != null)
{
_eventAggregator.GetEvent<DictChangedEvent>().Unsubscribe(_dictChangedToken);
_dictChangedToken = null;
}
}
public class DictTreeNode
{
public string DictCode { get; }
public string DictName { get; }
public string DisplayName => $"[{DictCode}] {DictName}";
public DictTreeNode(string dictCode, string dictName)
{
DictCode = dictCode;
DictName = dictName;
}
}
}