From 9d6f05a96dbaa062e7566e27649f7704efd7ea9a Mon Sep 17 00:00:00 2001 From: SHM Date: Fri, 5 Sep 2025 14:32:40 +0900 Subject: [PATCH] =?UTF-8?q?[=EC=84=B1=ED=98=84=EB=AA=A8]=20Tab=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Web.Tra/Components/Pages/TRA.razor | 132 +++++++++++------- Projects/WebClient/Web.Tra/Model/OrderdTab.cs | 11 ++ 2 files changed, 90 insertions(+), 53 deletions(-) create mode 100644 Projects/WebClient/Web.Tra/Model/OrderdTab.cs diff --git a/Projects/WebClient/Web.Tra/Components/Pages/TRA.razor b/Projects/WebClient/Web.Tra/Components/Pages/TRA.razor index 77e08cd..8b5f8cf 100644 --- a/Projects/WebClient/Web.Tra/Components/Pages/TRA.razor +++ b/Projects/WebClient/Web.Tra/Components/Pages/TRA.razor @@ -1,6 +1,9 @@ @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 @@ -78,33 +81,33 @@ - @foreach (var tab in ListTabs) - { - + @foreach (var tab in Tabs.OrderBy(x=>x.Key.Id)) + { + - @if (tab.Key == EnumTabs.OverviewC1.ToString()) + @if (tab.Key.EnumTab == EnumTabs.OverviewC1) { - } - @if (tab.Key == EnumTabs.OverviewC1Detail.ToString()) + @if (tab.Key.EnumTab == EnumTabs.OverviewC1Detail) { - } - @if (tab.Key.Contains(EnumTabs.TestHistoryC1.ToString())) + @if (tab.Key.EnumTab == EnumTabs.TestHistoryC1) { - @@ -135,13 +138,10 @@ //tab RadzenTabs tabs; int SelectedTabIndex = 0; - Dictionary ListTabs = new Dictionary(); + ConcurrentDictionary> Tabs = new ConcurrentDictionary>(); //search data List SearchDataOverviews = new List(); - List Overviews = new List(); - List DetailOverviews = new List(); - Dictionary> TestHistories = new(); private async Task OnSearch() { @@ -157,21 +157,20 @@ SearchDataOverviews = await CPXV2LogService.GetSearchDataOverview(RequestSearch); await GetOverviews(); - if (ListTabs.ContainsKey(EnumTabs.OverviewC1.ToString()) == false) - ListTabs.Add($"{EnumTabs.OverviewC1}", EnumTabs.OverviewC1); - PopupService.CloseIndicator(); } private async Task GetOverviews() { + List overviews = new(); + OverviewDisableColums.Clear(); OverviewDisableColums.Add("rn"); OverviewDisableColums.Add("stepversion"); if (IsMergePartNumberOption == false) { - Overviews = await CPXV2LogService.GetOverviews(SearchDataOverviews); + overviews = await CPXV2LogService.GetOverviews(SearchDataOverviews); } else { @@ -179,8 +178,20 @@ OverviewDisableColums.Add("host"); OverviewDisableColums.Add("section"); OverviewDisableColums.Add("testlistcntid"); - Overviews = await CPXV2LogService.GetOverviewMerged(SearchDataOverviews); + 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 }, + key => overviews.Cast().ToList(), (key, oldValue) => overviews.Cast().ToList()); + + SelectedTabIndex = Tabs.Count - 1; } private void OnSelectRowOverview(IDataModel overview) @@ -196,45 +207,45 @@ private async Task OnDoubleClickRowOverview(IDataModel row) { - DetailOverviews.Clear(); + List detailOverviews = new(); if (IsMergePartNumberOption == false) { - DetailOverviews = await CPXV2LogService.GetDetailOverview(SearchDataOverviews, row); + detailOverviews = await CPXV2LogService.GetDetailOverview(SearchDataOverviews, row); } else { - DetailOverviews = await CPXV2LogService.GetDetailOverviewMerged(SearchDataOverviews, row); + detailOverviews = await CPXV2LogService.GetDetailOverviewMerged(SearchDataOverviews, row); } - //tab control - if (ListTabs.ContainsKey(EnumTabs.OverviewC1Detail.ToString()) == false) - ListTabs.Add($"{EnumTabs.OverviewC1Detail.ToString()}", EnumTabs.OverviewC1Detail); + int tabId = Tabs.Max(x => x.Key.Id) + 1; + Tabs.AddOrUpdate( + new OrderdTab { Id = tabId, TabName = $"{EnumTabs.OverviewC1Detail} ({tabId})", EnumTab = EnumTabs.OverviewC1Detail }, + key => detailOverviews.Cast().ToList(), (key, oldValue) => detailOverviews.Cast().ToList()); + tabs.Reload(); - SelectedTabIndex = ListTabs.Keys.ToList().IndexOf(EnumTabs.OverviewC1Detail.ToString()); + SelectedTabIndex = Tabs.Count - 1; } private async Task OnDoubleClickRowDetailOverview(IDataModel row) { - var historyIndex = TestHistories.Count(); - string histoiresKey = $"{EnumTabs.TestHistoryC1.ToString()}({historyIndex + 1})"; - + List histories = new(); if (IsMergePartNumberOption == false) { - var getHistories = await CPXV2LogService.GetTestHistory(SearchDataOverviews, row); - TestHistories.Add(histoiresKey, getHistories); + histories = await CPXV2LogService.GetTestHistory(SearchDataOverviews, row); } else { - var getHistories = await CPXV2LogService.GetTestHistoryMerged(SearchDataOverviews, row); - TestHistories.Add(histoiresKey, getHistories); + histories = await CPXV2LogService.GetTestHistoryMerged(SearchDataOverviews, row); } - - //tab control - ListTabs.Add(histoiresKey, EnumTabs.TestHistoryC1); - tabs.Reload(); - SelectedTabIndex = ListTabs.Count - 1; + int tabId = Tabs.Max(x => x.Key.Id) + 1; + Tabs.AddOrUpdate( + new OrderdTab { Id = tabId, TabName = $"{EnumTabs.TestHistoryC1}({tabId})", EnumTab = EnumTabs.TestHistoryC1 }, + key => histories.Cast().ToList(), (key, oldValue) => histories.Cast().ToList()); + + tabs.Reload(); + SelectedTabIndex = Tabs.Count - 1; } private void OnClickDetailOverviewContextMenu() @@ -260,19 +271,33 @@ // SelectedTabIndex = ListTabs.Keys.ToList().IndexOf($"{EnumTabs.TestHistoryC1}({index})"); } - void OnClickClose(string tabKey) + void OnClickClose(int tabId) { - CloseTab(tabKey); + CloseTab(tabId); } - void CloseTab(string tabKey) - { - if (ListTabs.ContainsKey(tabKey)) - { - ListTabs.Remove(tabKey); - if (SelectedTabIndex >= ListTabs.Count) - SelectedTabIndex = ListTabs.Count - 1; + 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(); } @@ -280,12 +305,13 @@ { PopupService.OpenIndicator(""); - foreach(var tab in ListTabs) - { - if (tab.Value == EnumTabs.OverviewC1) - continue; - CloseTab(tab.Key.ToString()); - } + // foreach(var tab in Tabs) + // { + // if (tab.Value == EnumTabs.OverviewC1) + // continue; + + // CloseTab(tab.Key.ToString()); + // } await GetOverviews(); diff --git a/Projects/WebClient/Web.Tra/Model/OrderdTab.cs b/Projects/WebClient/Web.Tra/Model/OrderdTab.cs new file mode 100644 index 0000000..f7b7f2c --- /dev/null +++ b/Projects/WebClient/Web.Tra/Model/OrderdTab.cs @@ -0,0 +1,11 @@ +using Web.Tra.Model.Enum; + +namespace Web.Tra.Model +{ + public class OrderdTab + { + public int Id { get; set; } + public string TabName { get; set; } + public EnumTabs EnumTab { get; set; } + } +}