using System; using System.Collections.Generic; using Aisu.SIM1.Face.Models; using UnityEngine; using UnityEngine.UI; namespace Aisu.SIM1.Face.Samples.FaceDetectionDemo { /// /// MVP 用户列表窗口。 /// public sealed class FaceDetectionDemoUserList : MonoBehaviour { [SerializeField] private Transform m_content; // 列表容器。 [SerializeField] private Font m_font; // UI 字体。 private Action m_deleteHandler; // 删除回调。 /// /// 绑定 UI。 /// public void Bind(Transform content, Font font, Action deleteHandler) { m_content = content; m_font = font; m_deleteHandler = deleteHandler; } /// /// 刷新用户列表。 /// public void SetUsers(IList users) { Clear(); if (users == null || users.Count == 0) { AddText("暂无用户数据"); return; } for (var i = 0; i < users.Count; i++) { AddRow(users[i]); } } /// /// 清空列表。 /// public void Clear() { if (m_content == null) { return; } for (var i = m_content.childCount - 1; i >= 0; i--) { Destroy(m_content.GetChild(i).gameObject); } } private void AddRow(FaceUserInfo user) { var row = new GameObject("User_" + user.UserId, typeof(RectTransform), typeof(HorizontalLayoutGroup), typeof(Image)); row.transform.SetParent(m_content, false); row.GetComponent().color = new Color(0.94f, 0.96f, 0.98f); var layout = row.GetComponent(); layout.padding = new RectOffset(8, 8, 6, 6); layout.spacing = 8; layout.childControlWidth = true; layout.childForceExpandWidth = false; row.AddComponent().preferredHeight = 44; AddText(row.transform, $"ID: {user.UserId} 姓名: {user.UserName} 管理员: {user.IsAdmin}", 1f); AddButton(row.transform, "删除", () => m_deleteHandler?.Invoke(user.UserId)); } private void AddText(string text) { AddText(m_content, text, 1f); } private Text AddText(Transform parent, string text, float flexibleWidth) { var go = new GameObject("Text", typeof(RectTransform), typeof(Text)); go.transform.SetParent(parent, false); var label = go.GetComponent(); label.font = m_font; label.fontSize = 22; label.color = Color.black; label.alignment = TextAnchor.MiddleLeft; label.text = text; go.AddComponent().flexibleWidth = flexibleWidth; return label; } private void AddButton(Transform parent, string text, UnityEngine.Events.UnityAction action) { var go = new GameObject(text, typeof(RectTransform), typeof(Image), typeof(Button)); go.transform.SetParent(parent, false); go.GetComponent().color = new Color(0.82f, 0.88f, 0.95f); var button = go.GetComponent