_xiaofang/xiaofang/Assets/Script/UI/ZZZZZZ/OpcOrder2.cs
2024-12-26 23:18:09 +08:00

330 lines
9.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 DG.Tweening;
using UnityEditor.UIElements;
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;
public List<List<string>> groupedData;
public List<GameObject> ItemList;
public string name;
public OpcOrder2 hylCS;
int a = 0;
private void Start()
{
GetOpcID(8006);
hylCS = this;
btn.onClick.AddListener(() =>
{
bool isActive = Tip.activeSelf;
Tip.SetActive(!isActive);
if (ItemList.Count == 0)
{
Debug.Log("进来了");
CreateItem(2001, 0);
}
});
}
/// <summary>
/// 传入一个
/// </summary>
/// <param name="ID"></param>
public void GetOpcID(int ID)
{
a = ID;
name=jsonReader.GetOcpName(a);
}
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);
}
}
print(groupedData.Count);
// 检查 k 是否有效
if (k < 0 || k >= groupedData.Count)
{
Debug.LogError($"索引 k 超出范围k = {k}, groupedData.Count = {groupedData.Count}");
return;
}
// 检查 groupedData[k] 是否为空或无数据
if (groupedData[k] == null || groupedData[k].Count == 0)
{
Debug.LogError($"groupedData[{k}] 是空或没有数据!");
return;
}
// 动态生成Item并添加到Content
for (int i = 0; i < groupedData[k].Count; 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)
{
Debug.Log("被点击了" + index);
if ( item.GetComponentInChildren<Text>().text==name)
{
}
else
{
item.SetActive(false); // 仅隐藏需要隐藏的Item
Tip.SetActive(false);
}
}
//// 判断是否需要隐藏当前Item
//private bool ShouldHideItem(int index)
//{
// // 示例逻辑:根据索引决定是否隐藏
// // 比如隐藏索引为偶数的Item
// return index == a;
//}
//设置文本
public void SetItemText(int k)
{
// 检查 k 是否有效
if (k < 0 || k >= groupedData.Count)
{
Debug.LogError($"索引 k 超出范围k = {k}, groupedData.Count = {groupedData.Count}");
return;
}
for (int i = 1; i < ItemList.Count+1; i++)
{
// 检查 i 是否超出 groupedData[k] 的范围
if (i >= groupedData[k].Count)
{
Debug.LogWarning($"索引 i 超出范围i = {i}, groupedData[{k}].Count = {groupedData[k].Count}");
break;
}
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;
}
/// <summary>
/// 从当前物体逐层向上查找特定父物体的某个组件
/// </summary>
/// <typeparam name="T">要查找的组件类型</typeparam>
/// <returns>返回找到的组件引用,如果未找到则返回 null</returns>
public T FindParentOfType<T>() where T : Component
{
Transform current = transform;
// 向上查找,直到没有父物体
while (current.parent != null)
{
current = current.parent;
T component = current.GetComponent<T>();
if (component != null)
{
return component; // 找到目标组件,返回
}
}
// 如果未找到目标组件,返回 null
return null;
}
}