_xiaofang/xiaofang/Assets/Script/UI/ZZZZZZ/OpcOrder2.cs

256 lines
7.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class OpcOrder2 : MonoBehaviour
{
#region
//public Dropdown dropdown; // Dropdown 组件
//private string originalText; // 存储原始显示的文字
//public static OpcOrder2 opcOrder2;
//public string defaultOption = "不想上班!"; // 默认选项
//private bool isDropdownInitialized = false;
//private void Start()
//{
// // 初始化 Dropdown
// if (dropdown == null)
// {
// dropdown = GetComponent<Dropdown>();
// }
// // 清空默认选项
// dropdown.options.Clear();
// // 添加默认显示的选项
// dropdown.options.Add(new Dropdown.OptionData(defaultOption)); // 默认选项A
// dropdown.captionText.text = defaultOption; // 设置默认显示文字
// // 初始化下拉选项(不包括 A
// dropdown.options.Add(new Dropdown.OptionData("选项 B"));
// dropdown.options.Add(new Dropdown.OptionData("选项 C"));
// dropdown.options.Add(new Dropdown.OptionData("选项 D"));
// // 添加值变化事件
// dropdown.onValueChanged.AddListener(OnDropdownValueChanged);
// // 初始化绑定选项的点击事件
// BindToggleEvents();
//}
//// 设置默认选项文本,外部可以调用这个方法改变默认文本
//public string SetText(string str)
//{
// defaultOption = str;
// dropdown.captionText.text = defaultOption; // 设置默认选项的显示文本
// return str;
//}
//// 当下拉框的值改变时触发
//private void OnDropdownValueChanged(int index)
//{
// if (isDropdownInitialized)
// {
// // 更新下拉框显示的文字为选中的选项
// // 但是不改变默认选项的值
// dropdown.captionText.text = dropdown.options[index].text;
// // 执行自定义逻辑
// Debug.Log($"点击了选项:{dropdown.options[index].text}");
// }
// isDropdownInitialized = true;
//}
//// 动态绑定选项的 Toggle 点击事件
//private void BindToggleEvents()
//{
// // 获取 Dropdown 的 Template下拉项模板
// Transform dropdownTemplate = dropdown.transform.Find("Template");
// if (dropdownTemplate != null)
// {
// Transform viewport = dropdownTemplate.Find("Viewport");
// if (viewport != null)
// {
// Transform content = viewport.Find("Content");
// if (content != null)
// {
// // 遍历 Content 下的所有子物体(即下拉列表中的选项)
// foreach (Transform option in content)
// {
// Toggle toggle = option.GetComponent<Toggle>();
// if (toggle != null)
// {
// string optionText = option.GetComponentInChildren<Text>().text;
// // 为每个选项绑定点击事件
// toggle.onValueChanged.AddListener((isOn) =>
// {
// if (isOn)
// {
// HandleOptionClick(optionText);
// toggle.isOn = false; // 重置 Toggle 状态,防止选项保持选中
// }
// });
// }
// }
// }
// }
// }
// else
// {
// Debug.LogWarning("未找到 Dropdown 的 Template 部分,无法绑定点击事件!");
// }
//}
//// 处理选项点击逻辑
//private void HandleOptionClick(string optionText)
//{
// Debug.Log($"点击了选项:{optionText}");
// // 根据点击的选项执行不同的逻辑
// switch (optionText)
// {
// case "选项 B":
// Debug.Log("执行选项 B 的逻辑!");
// break;
// case "选项 C":
// Debug.Log("执行选项 C 的逻辑!");
// break;
// case "选项 D":
// Debug.Log("执行选项 D 的逻辑!");
// break;
// default:
// Debug.LogWarning($"未处理的选项:{optionText}");
// break;
// }
//}
#endregion
public GameObject Tip;
public Button btn;
public GameObject itemPrefab; // 用于生成的Item预制体
public Transform contentTransform; // Content的Transform
public JSONReader jsonReader;
List<List<string>> groupedData;
public List<GameObject> ItemList;
private void Start()
{
btn.onClick.AddListener(() =>
{
bool isActive = Tip.activeSelf;
Tip.SetActive(!isActive);
if (ItemList.Count == 1)
{
Debug.Log("进来了");
CreateItem(2001, 1);
}
});
}
public void CreateItem(int ID, int k)
{
if (k >= 3)
{
if (k == 4) k = 1;
if (k == 5) k = 2;
if (k == 6) k = 3;
}
// 查找数据
foreach (var kvp in jsonReader.incidentSiteDictionary)
{
IncidentSite select = kvp.Value;
if (select.Name == ID)
{
groupedData = ParseData(select.Role);
}
}
// 动态生成Item并添加到Content
for (int i = 0; i < groupedData[k].Count - 1; i++)
{
// 生成Item并设置为Content的子物体
GameObject newItem = Instantiate(itemPrefab, contentTransform);
ItemList.Add(newItem);
// 为每个Item添加按钮点击事件
Button button = newItem.GetComponent<Button>();
if (button != null)
{
// 捕获当前的Item对象避免闭包问题
GameObject currentItem = newItem;
// 根据具体需求绑定独立的隐藏逻辑
button.onClick.AddListener(() => OnItemClick(currentItem, i)); // 传入索引和对象
}
else
{
Debug.LogError("生成的Item中没有找到Button组件");
}
}
// 设置文本
SetItemText(k);
}
// 点击事件处理函数,支持单独管理
private void OnItemClick(GameObject item, int index)
{
// 示例:判断是否需要隐藏
if (ShouldHideItem(index))
{
}
else
{
item.SetActive(false); // 仅隐藏需要隐藏的Item
Tip.SetActive(false);
}
}
// 判断是否需要隐藏当前Item
private bool ShouldHideItem(int index)
{
// 示例逻辑:根据索引决定是否隐藏
// 比如隐藏索引为偶数的Item
return index==2;
}
//设置文本
public void SetItemText(int k)
{
for (int i = 0; i < ItemList.Count; i++)
{
Text itemText = ItemList[i].GetComponentInChildren<Text>();
if (itemText != null)
{
itemText.text = jsonReader.GetOcpName(int.Parse(groupedData[k][i]));
}
else
{
Debug.LogError("生成的Item中没有找到Text组件");
}
}
}
public static List<List<string>> ParseData(string data)
{
// 存储最终结果
List<List<string>> result = new List<List<string>>();
// 按 `|` 分割字符串
string[] groups = data.Split('|');
foreach (var group in groups)
{
// 按 `,` 分割每组数据
string[] items = group.Split(',');
// 添加到结果中
result.Add(new List<string>(items));
}
return result;
}
}