using HandyControl.Controls; using YY.Admin.Core; 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 PaginationDataGridViewModel _paginationDataGridViewModel; public PaginationDataGridViewModel PaginationDataGridViewModel { get => _paginationDataGridViewModel; set => SetProperty(ref _paginationDataGridViewModel, value); } private PageJeecgDictItemInput _input; public PageJeecgDictItemInput Input { get => _input; set => SetProperty(ref _input, value); } public List> StatusList => Enum.GetValues(typeof(StatusEnum)) .Cast() .Select(e => new KeyValuePair(e.GetDescription(), (int)e)) .ToList(); public DelegateCommand SearchCommand { get; } public DelegateCommand ResetCommand { get; } public DelegateCommand SyncCommand { get; } public DataDictionaryManagementViewModel( IJeecgDictSyncService dictSyncService, IContainerExtension container, IRegionManager regionManager) : base(container, regionManager) { _dictSyncService = dictSyncService; _paginationDataGridViewModel = new PaginationDataGridViewModel(FetchAsync); _input = new PageJeecgDictItemInput(); SearchCommand = new DelegateCommand(async () => await SearchAsync()); ResetCommand = new DelegateCommand(async () => await ResetAsync()); SyncCommand = new DelegateCommand(async () => await SyncAsync()); _ = InitializeAsync(); } private async Task InitializeAsync() { await UIHelper.WaitForRenderAsync(); await PaginationDataGridViewModel.LoadDataAsync(); } private async Task<(IEnumerable 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(); await UIHelper.WaitForRenderAsync(); await SearchAsync(); } private async Task SyncAsync() { var count = await _dictSyncService.SyncFromJeecgAsync(); if (count > 0) { Growl.Success($"同步完成,共处理 {count} 条数据字典项"); } else { Growl.Warning("未同步到数据字典,请确认后端可访问"); } await SearchAsync(); } }