@page "/tra" @rendermode InteractiveServer @using System.Collections.Concurrent @using System.Collections.Specialized @using System.Collections @using Web.Tra.Services @inject CPXV2LogService CPXV2LogService @inject PopupService PopupService @inject NavigationManager Navigation @inject IJSRuntime JS @foreach (var tab in Tabs.OrderBy(x=>x.Key.Id)) { @* *@ @if (tab.Key.EnumTab == EnumTabs.OverviewC1) { } @if (tab.Key.EnumTab == EnumTabs.OverviewC1Detail) { } @if (tab.Key.EnumTab == EnumTabs.TestHistoryC1) { } @if (tab.Key.EnumTab == EnumTabs.TestResultC1) { @{ var history = tab.Key.Parent as TestHistory; if(history.TestResult.ToLower().Contains("ok") == true) { } else { } @foreach (var prop in history.GetType().GetProperties()) { @prop.Name } } @if(tab.Value?.Count > 0) { } } } @code { private RequestSearch RequestSearch = new RequestSearch(); //selection private string SelectionStationName = string.Empty; private string SelectionProductNO = string.Empty; private string SelectionParentInfo = string.Empty; private string SelectionSearchBegin = string.Empty; private string SelectionSearchEnd = string.Empty; private string SelectionStepVersion = string.Empty; //options private bool IsMergePartNumberOption = false; private int PageSize = 30; //tab RadzenTabs tabs; int SelectedTabIndex = 0; ConcurrentDictionary> Tabs = new ConcurrentDictionary>(); //search data List SearchDataOverviews = new List(); private async Task OnSearch() { //날짜 오류 if(RequestSearch.SearchStart > RequestSearch.SearchEnd) { LogXnet.WriteLine("DateTime Set Error", LogXLabel.Error); return; } PopupService.OpenIndicator("Search Data"); SearchDataOverviews = await CPXV2LogService.GetSearchDataOverview(RequestSearch); await GetOverviews(); PopupService.CloseIndicator(); } private async Task GetOverviews() { List overviews = new(); if (IsMergePartNumberOption == false) { overviews = await CPXV2LogService.GetOverviews(SearchDataOverviews); } else { overviews = await CPXV2LogService.GetOverviewMerged(SearchDataOverviews); } int tabId = 0; if(Tabs.Count > 0) { tabId = Tabs.Max(x=>x.Key.Id) + 1; } Tabs.AddOrUpdate( new OrderdTab {Id = tabId, TabName = $"{EnumTabs.OverviewC1} ({tabId})" , EnumTab = EnumTabs.OverviewC1, Parent = null }, key => overviews.Cast().ToList(), (key, oldValue) => overviews.Cast().ToList()); SelectedTabIndex = Tabs.Count - 1; } private void OnSelectRowOverview(IDataModel overview) { var selectOverview = overview as Overview; if(selectOverview is not null) { SelectionStationName = $"{selectOverview.StationName} ({selectOverview.Host},{selectOverview.Section})"; SelectionProductNO = $"{selectOverview.ProductNo} ({selectOverview.TestCode})"; SelectionParentInfo = $"{selectOverview.ParentNo} ({selectOverview.FileVersion},{selectOverview.FileCode})"; SelectionSearchBegin = $"{selectOverview.TestDate?.ToString("yyyy-MM-dd")} {selectOverview.FirstTestTime}"; SelectionSearchEnd = $"{selectOverview.TestDate?.ToString("yyyy-MM-dd")} {selectOverview.FinalTestTime}"; SelectionStepVersion = $"{selectOverview.StepVersion}"; } } private async Task OnDoubleClickRowOverview(IDataModel row) { var selectRow = row as Overview; if(selectRow is not null) { List detailOverviews = new(); if (IsMergePartNumberOption == false) { detailOverviews = await CPXV2LogService.GetDetailOverview(SearchDataOverviews, selectRow); } else { detailOverviews = await CPXV2LogService.GetDetailOverviewMerged(SearchDataOverviews, selectRow); } int tabId = Tabs.Max(x => x.Key.Id) + 1; Tabs.AddOrUpdate( new OrderdTab { Id = tabId, TabName = $"{EnumTabs.OverviewC1Detail} ({tabId})", EnumTab = EnumTabs.OverviewC1Detail, Parent = row }, key => detailOverviews.Cast().ToList(), (key, oldValue) => detailOverviews.Cast().ToList()); tabs.Reload(); SelectedTabIndex = Tabs.Count - 1; } } private async Task OnDoubleClickRowDetailOverview(IOverviewModel row) { List histories = new(); if (IsMergePartNumberOption == false) { histories = await CPXV2LogService.GetTestHistory(SearchDataOverviews, row); } else { histories = await CPXV2LogService.GetTestHistoryMerged(SearchDataOverviews, row); } int tabId = Tabs.Max(x => x.Key.Id) + 1; Tabs.AddOrUpdate( new OrderdTab { Id = tabId, TabName = $"{EnumTabs.TestHistoryC1}({tabId})", EnumTab = EnumTabs.TestHistoryC1, Parent = row }, key => histories.Cast().ToList(), (key, oldValue) => histories.Cast().ToList()); tabs.Reload(); SelectedTabIndex = Tabs.Count - 1; } private async Task OnDoubleClickRowHistory(IDataModel row) { var selectRow = row as TestHistory; int testStepVersion = selectRow.StepVersion; if(Int32.TryParse(SelectionStepVersion, out var inputStepVersion) == true) { testStepVersion = inputStepVersion; } var s = await CPXV2LogService.GetTestResult(row, testStepVersion); int tabId = Tabs.Max(x => x.Key.Id) + 1; Tabs.AddOrUpdate( new OrderdTab { Id = tabId, TabName = $"{EnumTabs.TestResultC1}({tabId})", EnumTab = EnumTabs.TestResultC1, Parent = row }, key => s?.ParseTestResult?.Cast()?.ToList(), (key, oldValue) => s?.ParseTestResult?.Cast()?.ToList()); tabs.Reload(); SelectedTabIndex = Tabs.Count - 1; } void OnClickClose(int tabId) { CloseTab(tabId); } void CloseTab(int tabId) { var removeTab = Tabs.Where(x => x.Key.Id == tabId)?.First().Key; //remove if (removeTab is not null) { Tabs.TryRemove(removeTab, out var value); } //select tab var currentTab = tabs.SelectedTab; if (Tabs.Where(x => x.Key.TabName == currentTab.Text)?.Count() > 0) { SelectedTabIndex = currentTab.Index; } else { SelectedTabIndex = Tabs.Count - 1; } tabs.Reload(); } async Task OnChangeMergePartNumberOption() { PopupService.OpenIndicator(""); await GetOverviews(); await Task.Delay(300); PopupService.CloseIndicator(); } async Task OnClickDisplayTestList(TestHistory history) { await JS.InvokeVoidAsync("open", $"/testlist/{history.ProductNo}/{history.TestCode}/{SelectionStepVersion}", "_blank"); } }