新增菜单all和列表标题功能

This commit is contained in:
2025-10-13 17:54:53 +08:00
parent d99f361f2e
commit 9470c3ab00
17 changed files with 157 additions and 72 deletions

View File

@@ -62,17 +62,16 @@ namespace NBF
{ {
// var map = LanguageConst.languageMap; // var map = LanguageConst.languageMap;
// Lan.Inst.AddLanguageModule((int)LanguageModuleType.Text, new LanguageText()); Lan.Inst.AddLanguageModule((int)LanguageModuleType.Text, new LanguageText());
// Lan.Inst.AddLanguageModule((int)LanguageModuleType.Image, new LanguageImage()); Lan.Inst.AddLanguageModule((int)LanguageModuleType.Image, new LanguageImage());
// Lan.Inst.AddLanguageModule((int)LanguageModuleType.Font, new LanguageFont()); Lan.Inst.AddLanguageModule((int)LanguageModuleType.Font, new LanguageFont());
//
// foreach (var key in LanguageConst.languageMap.Keys) foreach (var key in LanguageConst.languageMap.Keys)
// { {
// Lan.Inst.AddLanguage(key); Lan.Inst.AddLanguage(key);
// } }
// App.UI.SetUILanguage<UILangeageConfig>();
// UI.Inst.SetUILanguage<UILangeageConfig>(); Lan.Inst.AutoUseLanguage();
// Lan.Inst.AutoUseLanguage();
} }
#endregion #endregion

View File

@@ -16,10 +16,10 @@ namespace NBF
[AutoFind(Name = "back")] [AutoFind(Name = "back")]
public GImage back; public GImage back;
[AutoFind(Name = "Menu")]
public CommonMenu Menu;
[AutoFind(Name = "BottomMenu")] [AutoFind(Name = "BottomMenu")]
public BottomMenu BottomMenu; public BottomMenu BottomMenu;
[AutoFind(Name = "ItemList")]
public CommonItemList ItemList;
public override string[] GetDependPackages(){ return new string[] {"Common"}; } public override string[] GetDependPackages(){ return new string[] {"Common"}; }
public static void Show(object param = null){ App.UI.OpenUI<BagPanel>(param); } public static void Show(object param = null){ App.UI.OpenUI<BagPanel>(param); }

View File

@@ -10,7 +10,6 @@ namespace NBF
protected override void OnInit() protected override void OnInit()
{ {
base.OnInit(); base.OnInit();
Menu.OnTabChange += ChangeTab;
} }
protected override void OnShow() protected override void OnShow()
@@ -36,12 +35,6 @@ namespace NBF
} }
} }
private void ChangeTab(int index)
{
if (index < 0) return;
Log.Info($"Change tab index={index}");
}
private void UseBottomMenu() private void UseBottomMenu()
{ {
BottomMenu.Use(this); BottomMenu.Use(this);

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 688374f241004942b3ef3af4086c983e
timeCreated: 1760344663

View File

@@ -0,0 +1,73 @@
using System.Collections.Generic;
using System.Linq;
namespace NBF
{
public static class TabItemDataExtensions
{
/// <summary>
/// 为TabItemData列表添加"全部"选项卡
/// </summary>
/// <param name="tabItems">原始选项卡列表</param>
/// <param name="addListTitle"></param>
/// <returns>包含"全部"选项卡的新列表</returns>
public static void AddAllTabItem(this List<TabItemData> tabItems, bool addListTitle = false)
{
//判断是否存在二级目录,有二级目录则只在二级目录有"全部"选项卡
if (tabItems.Any(tabItem => tabItem.Children.Count > 0))
{
foreach (var tabItemData in tabItems)
{
if (tabItemData.Children.Count > 0)
{
var allTab = new TabItemData
{
Id = 0,
Key = "All",
Icon = "All",
IsAll = true,
Items = GetAllItemsFromTabs(tabItemData.Children, addListTitle)
};
tabItemData.Children.Insert(0, allTab);
}
}
}
else
{
var allTab = new TabItemData
{
Id = 0,
Key = "All",
Icon = "All",
IsAll = true,
Items = GetAllItemsFromTabs(tabItems, addListTitle)
};
tabItems.Insert(0, allTab);
}
}
/// <summary>
/// 递归获取所有选项卡中的项目(去重)
/// </summary>
private static List<object> GetAllItemsFromTabs(List<TabItemData> tabs, bool addListTitle = false)
{
var allItems = new List<object>();
foreach (var tab in tabs)
{
allItems.Add(new ClassifyListTitleData()
{
Title = tab.Key
});
// 添加当前选项卡的项目
if (tab.Items != null)
{
allItems.AddRange(tab.Items);
}
}
// 去重处理基于引用相等如果需要基于内容去重需要重写Equals方法
return allItems.Distinct().ToList();
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: ab38f91a1c10449ea1d908bdffc5111a
timeCreated: 1760344665

View File

@@ -1,14 +0,0 @@
using System.Collections.Generic;
namespace NBF
{
public static class ItemDataHelper
{
public static List<TabItemData> GetItemTabDataList<T>(List<T> list) where T : class
{
List<TabItemData> ret = new List<TabItemData>();
return ret;
}
}
}

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: ea59c591744a47729f78e4984cea1675
timeCreated: 1760170968

View File

@@ -11,5 +11,13 @@ namespace NBF
private void OnInited() private void OnInited()
{ {
} }
public virtual void SetData(object showData)
{
if (showData is ClassifyListTitleData listTitleData)
{
this.SetLanguage(listTitleData.Title);
}
}
} }
} }

View File

@@ -8,6 +8,11 @@ using NBC;
namespace NBF namespace NBF
{ {
public class ClassifyListTitleData
{
public string Title;
}
public partial class ClassifyList : GComponent public partial class ClassifyList : GComponent
{ {
private readonly List<object> _listData = new List<object>(); private readonly List<object> _listData = new List<object>();
@@ -19,6 +24,10 @@ namespace NBF
private void OnInited() private void OnInited()
{ {
Game.Input.OnUICanceled += OnUICanceled; Game.Input.OnUICanceled += OnUICanceled;
List.defaultItem = ListTitleItem.URL;
List.itemProvider = GetListItemResource;
List.itemRenderer = OnRenderItem;
List.onClickItem.Add(OnClickListItem);
} }
public override void Dispose() public override void Dispose()
@@ -67,18 +76,13 @@ namespace NBF
ListSelectionMode selectionMode = ListSelectionMode.Single) ListSelectionMode selectionMode = ListSelectionMode.Single)
{ {
List.selectedIndex = -1; List.selectedIndex = -1;
List.defaultItem = ListTitleItem.URL;
List.itemProvider = GetListItemResource;
List.itemRenderer = OnRenderItem;
List.onClickItem.Add(OnClickListItem);
// List.SetVirtual();
_listData.Clear(); _listData.Clear();
foreach (var obj in listData) foreach (var obj in listData)
{ {
_listData.Add(obj); _listData.Add(obj);
} }
List.RemoveChildrenToPool();
List.selectionMode = selectionMode; List.selectionMode = selectionMode;
List.numItems = _listData.Count; List.numItems = _listData.Count;
List.ScrollToView(0); List.ScrollToView(0);
@@ -92,13 +96,15 @@ namespace NBF
void OnRenderItem(int index, GObject obj) void OnRenderItem(int index, GObject obj)
{ {
var itemData = _listData[index];
if (obj is ListItemBase item) if (obj is ListItemBase item)
{ {
item.SetData(_listData[index]); item.SetData(itemData);
obj.SetSize(350, 300); obj.SetSize(350, 300);
} }
else if (obj is ListTitleItem titleItem) else if (obj is ListTitleItem titleItem)
{ {
titleItem.SetData(itemData);
titleItem.SetSize(List.width, 32); titleItem.SetSize(List.width, 32);
} }
} }
@@ -114,7 +120,7 @@ namespace NBF
return ShopGearItem.URL; return ShopGearItem.URL;
} }
if (itemData is string title) if (itemData is ClassifyListTitleData titleData)
{ {
return ListTitleItem.URL; return ListTitleItem.URL;
} }

View File

@@ -1,6 +1,7 @@
// 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖 // 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using UnityEngine; using UnityEngine;
using FairyGUI; using FairyGUI;
using NBC; using NBC;
@@ -27,22 +28,29 @@ namespace NBF
base.Dispose(); base.Dispose();
} }
public void SetData<T>(List<T> list) where T : class /// <summary>
///
/// </summary>
/// <param name="tabItemList"></param>
/// <param name="showAll">是否显示全部页签</param>
/// <param name="showListTitle">是否列表页显示分类标题</param>
public void SetData(List<TabItemData> tabItemList, bool showAll = false, bool showListTitle = true)
{ {
_tabList.Clear(); _tabList.Clear();
_currentTab = null; _currentTab = null;
var tabList = ItemDataHelper.GetItemTabDataList(list);
style.selectedIndex = 0; //一级菜单 style.selectedIndex = 0; //一级菜单
foreach (var tabItemData in tabList) if (tabItemList.Any(tabItem => tabItem.Children.Count > 0))
{ {
if (tabItemData.Children.Count > 0) style.selectedIndex = 1; //有二级菜单
{
style.selectedIndex = 1; //有二级菜单
break;
}
} }
_tabList.AddRange(tabList); _tabList.AddRange(tabItemList);
if (showAll)
{
_tabList.AddAllTabItem(showListTitle);
}
Menu.SetTabs(_tabList);
} }
private void ChangeTab(int index) private void ChangeTab(int index)

View File

@@ -25,7 +25,7 @@ namespace NBF
{ {
var tab = new TabItemData var tab = new TabItemData
{ {
Name = group // Name = group
}; };
tabList.Add(tab); tabList.Add(tab);
} }

View File

@@ -4,6 +4,7 @@ using System.Collections.Generic;
using FairyGUI; using FairyGUI;
using NBC; using NBC;
using NUnit.Framework; using NUnit.Framework;
using UnityEngine;
using UIPanel = NBC.UIPanel; using UIPanel = NBC.UIPanel;
namespace NBF namespace NBF
@@ -11,8 +12,6 @@ namespace NBF
public class ShopGearData public class ShopGearData
{ {
public string title; public string title;
public int type;
public int subType;
} }
public partial class FishingShopPanel : UIPanel public partial class FishingShopPanel : UIPanel
@@ -23,21 +22,32 @@ namespace NBF
this.AutoAddClick(OnClick); this.AutoAddClick(OnClick);
IsShowCursor = true; IsShowCursor = true;
var testData = new List<ShopGearData>(); List<TabItemData> tabItemList = new List<TabItemData>();
for (int i = 0; i < 10; i++) for (int i = 0; i < 10; i++)
{ {
for (int j = 20; j < 25; j++) TabItemData tabItem = new TabItemData();
tabItem.Key = $"Tab_{i}";
for (int j = 0; j < 5; j++)
{ {
var item = new ShopGearData TabItemData tabSubItem = new TabItemData();
tabSubItem.Key = $"SubTab_{j}";
var count = Random.Range(2, 5);
for (int k = 0; k < count; k++)
{ {
type = i, var item = new ShopGearData
subType = j {
}; title = $"Item:{i}-{j}-{k}"
testData.Add(item); };
tabSubItem.Items.Add(item);
}
tabItem.Children.Add(tabSubItem);
} }
tabItemList.Add(tabItem);
} }
ItemList.SetData(testData); ItemList.SetData(tabItemList, true, true);
} }
protected override void OnShow() protected override void OnShow()

View File

@@ -4,12 +4,11 @@
<image id="n0_lvql" name="back" src="kryob" fileName="Images/Square.png" pkg="6hgkvlau" xy="0,0" size="1920,1080" color="#182128"> <image id="n0_lvql" name="back" src="kryob" fileName="Images/Square.png" pkg="6hgkvlau" xy="0,0" size="1920,1080" color="#182128">
<relation target="" sidePair="width-width,height-height"/> <relation target="" sidePair="width-width,height-height"/>
</image> </image>
<component id="n1_lvql" name="Menu" src="fcfggr" fileName="Com/Menu/CommonMenu.xml" pkg="6hgkvlau" xy="0,0" controller="showType,1"> <component id="n2_lvql" name="BottomMenu" src="9mf1z" fileName="Com/Menu/BottomMenu.xml" pkg="6hgkvlau" xy="0,1015" size="1920,65">
<relation target="" sidePair="width-width,center-center,top-top"/>
</component>
<component id="n2_lvql" name="BottomMenu" src="9mf1z" fileName="Com/Menu/BottomMenu.xml" pkg="6hgkvlau" xy="0,992" size="1920,88">
<relation target="" sidePair="width-width,center-center,bottom-bottom"/> <relation target="" sidePair="width-width,center-center,bottom-bottom"/>
</component> </component>
<component id="n4_sh9y" name="n4" src="drkwh1" fileName="Com/ClassifyList.xml" pkg="6hgkvlau" xy="37,111" size="1846,872"/> <component id="n5_uq3a" name="ItemList" src="p1fps" fileName="Com/List/CommonItemList.xml" pkg="6hgkvlau" xy="0,0">
<relation target="" sidePair="left-left,top-top,rightext-right,bottomext-bottom"/>
</component>
</displayList> </displayList>
</component> </component>

View File

@@ -9,7 +9,7 @@
</image> </image>
<image id="n12_r03u" name="ba" src="r03uif" fileName="Images/Panels/RarityBg.png" pkg="6hgkvlau" xy="0,0" size="194,300" alpha="0.6" color="#ff6c00"/> <image id="n12_r03u" name="ba" src="r03uif" fileName="Images/Panels/RarityBg.png" pkg="6hgkvlau" xy="0,0" size="194,300" alpha="0.6" color="#ff6c00"/>
<text id="n7_oome" name="title" xy="18,7" size="323,32" alpha="0.7" fontSize="22" color="#ffffff" vAlign="middle" autoSize="ellipsis" text="Title"/> <text id="n7_oome" name="title" xy="18,7" size="323,32" alpha="0.7" fontSize="22" color="#ffffff" vAlign="middle" autoSize="ellipsis" text="Title"/>
<loader id="n13_r03u" name="n13" xy="50,55" size="250,190" url="ui://6hgkvlaur03uiy" align="center" vAlign="middle" fill="scale"/> <loader id="n13_r03u" name="n13" xy="50,55" size="250,190" align="center" vAlign="middle" fill="scale" clearOnPublish="true"/>
<text id="n15_r03u" name="n15" xy="237,246" size="57,29" alpha="0.7" fontSize="20" color="#d8fbff" align="right" text="50.99"/> <text id="n15_r03u" name="n15" xy="237,246" size="57,29" alpha="0.7" fontSize="20" color="#d8fbff" align="right" text="50.99"/>
<loader id="n16_r03u" name="n16" xy="296,251" size="20,20" url="ui://6hgkvlaur03uj9" align="center" vAlign="middle" fill="scale" color="#8bf3ff"/> <loader id="n16_r03u" name="n16" xy="296,251" size="20,20" url="ui://6hgkvlaur03uj9" align="center" vAlign="middle" fill="scale" color="#8bf3ff"/>
</displayList> </displayList>