killapp/Assets/Scripts/UI/Pages/DeviceInfoPage/DeviceSharedUserPage.cs

190 lines
7.1 KiB
C#
Raw Permalink Normal View History

2026-06-08 08:55:10 +08:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Kill.UI.Components;
using Kill.Managers;
using UnityEngine.UI;
using System;
using Kill.Network;
using Kill.Bluetooth;
using Kill.Core;
using System.Threading.Tasks;
namespace Kill.UI.Pages
{
public class DeviceSharedUserPage : MonoBehaviour
{
public Transform sharedUserListContainer;
public GameObject sharedUserItemPrefab;
public WindowTipCtrl stopShareTip;
public Button backButton;
public List<SharedUserInfo> sharedUsers = new List<SharedUserInfo>();
List<GameObject> sharedUserItems = new List<GameObject>();
public string shareTimeLanguageKey = "100211";
string shareTimeString = "";
public GameObject noTip;
// Start is called before the first frame update
void Start()
{
shareTimeString = LanguageManager.Instance.GetLanguage(shareTimeLanguageKey);
UIManager.Instance.RegisterBackAction(Back);
backButton.onClick.RemoveAllListeners();
backButton.onClick.AddListener(Back);
stopShareTip.Init(SureStopShare, () => { selectedSharedUserIndex = -1; stopShareTip.gameObject.SetActive(false); });
LoadSharedUsersAsync();
}
public async Task LoadSharedUsersAsync()
{
LoadingUI.Show();
var response = await NetworkCtrl.Instance.Get<ShareUserListResponse>("/api/v1/device/shared-users?mac=" + DataManager.Instance.selectedDevice.ble_mac);
LoadingUI.Hide();
ResponseCodeHandler.HandleResponse(response,
onSuccess: (data) =>
{
sharedUsers = data.data.list;
if (sharedUsers == null)
{
sharedUsers = new List<SharedUserInfo>();
}
InitUserList();
},
onError: (code, msg) =>
{
Debug.LogError("获取共享用户列表失败: " + msg);
}
);
}
public void InitUserList()
{
noTip.SetActive(false);
if (sharedUserItems != null)
{
foreach (var item in sharedUserItems)
{
Destroy(item);
}
sharedUserItems.Clear();
sharedUserItems = new List<GameObject>();
for (int i = 0; i < sharedUsers.Count; i++)
{
var user = sharedUsers[i];
var item = Instantiate(sharedUserItemPrefab, sharedUserListContainer);
item.SetActive(true);
item.transform.Find("昵称").GetComponent<Text>().text = user.user_name;
item.transform.Find("分享时间").GetComponent<Text>().text = shareTimeString + user.share_time.ToString("yyyy-MM-dd HH:mm");
Image image = item.transform.Find("头像遮罩").Find("头像").GetComponent<Image>();
if (string.IsNullOrEmpty(user.avatar))
{
Debug.Log("用户 " + user.user_name + " 没有头像,使用默认头像");
image.gameObject.SetActive(false);
image.GetComponentInParent<Mask>().showMaskGraphic = true;
}
else
{
Debug.Log("用户 " + user.user_name + " 有头像,加载头像");
image.gameObject.SetActive(true);
image.GetComponentInParent<Mask>().showMaskGraphic = false;
NetworkCtrl.Instance.LoadImageToUIImageAsync(user.avatar, image);
}
int index = i;
item.transform.Find("删除").GetComponent<Button>().onClick.AddListener(() => StopShareByOwner(index));
sharedUserItems.Add(item);
}
if (sharedUserItems.Count > 0)
noTip.SetActive(false);
else
noTip.SetActive(true);
}
else
noTip.SetActive(true);
}
public void Back()
{
UIManager.Instance.RegisterBackAction(GetComponentInParent<DeviceInfoPage>().Back);
Destroy(gameObject);
}
int selectedSharedUserIndex = -1;
public void StopShareByOwner(int index)
{
selectedSharedUserIndex = index;
stopShareTip.gameObject.SetActive(true);
}
public void SureStopShare()
{
if (selectedSharedUserIndex >= 0 && selectedSharedUserIndex < sharedUsers.Count)
{
CancelShareAsync(sharedUsers[selectedSharedUserIndex].user_id);
}
stopShareTip.gameObject.SetActive(false);
}
public void RemoveUserAndRefresh()
{
if (selectedSharedUserIndex >= 0 && selectedSharedUserIndex < sharedUsers.Count)
{
sharedUsers.RemoveAt(selectedSharedUserIndex);
InitUserList();
}
}
public async Task CancelShareAsync(string targetUserId)
{
// 调用后端接口共享设备
LoadingUI.Show();
var requestData = new ShareDeviceRequest
{
device_sn = DataManager.Instance.selectedDevice.ble_mac,
target_user_id = targetUserId,
owner_id = DataManager.Instance.userInfo.id
};
try
{
var response = await NetworkCtrl.Instance.Post<NoDataResponse>("/api/v1/device/unshare", requestData);
ResponseCodeHandler.HandleResponse(response,
onSuccess: (data) =>
{
Debug.Log("取消设备共享成功");
ToastUI.Show("100206");
if (BluetoothManager.Instance.IsConnected)
{
BLECommunicationManager.Instance.UnregisterUser(targetUserId, (unregisterSuccess) =>
{
Loom.QueueOnMainThread(() =>
{
LoadingUI.Hide();
RemoveUserAndRefresh();
});
});
}
else
{
LoadingUI.Hide();
RemoveUserAndRefresh();
}
},
onError: (code, msg) =>
{
Debug.LogError($"取消设备共享失败: {code} - {msg}");
ToastUI.ShowText(code.ToString());
}
);
}
catch (Exception ex)
{
LoadingUI.Hide();
Debug.LogError("取消设备共享失败: " + ex.Message);
}
}
}
}