using System; using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; using Kill.Managers; using Kill.Network; using Kill.UI.Components; using UnityEngine; using UnityEngine.UI; namespace Kill.UI.Pages { public class ShareDevicePage : MonoBehaviour { public InputField userIdInput; public Button shareButton; public ScanQRcode scanQRcode; public Button backButton; /// 待分享设备的蓝牙MAC(为空时取当前选中设备) private string deviceMac; /// 关闭页面时的回调(用于恢复上层页面的返回事件) private Action onCloseAction; /// /// 初始化 /// /// 设备蓝牙MAC(分享非选中设备时传入) /// 关闭页面回调 public void Init(string deviceMac = null, Action onClose = null) { this.deviceMac = deviceMac; this.onCloseAction = onClose; } void Start() { UIManager.Instance.RegisterBackAction(Back); backButton.onClick.RemoveAllListeners(); backButton.onClick.AddListener(Back); userIdInput.text = ""; shareButton.onClick.RemoveAllListeners(); shareButton.onClick.AddListener(async () => await Share()); scanQRcode.OnQRCodeScanned += ScanOver; } public void BeginScan() { scanQRcode.scanType = ScanQRcode.ScanType.Other; scanQRcode.gameObject.SetActive(true); } public void ScanOver(string scannedData) { userIdInput.text = scannedData; scanQRcode.gameObject.SetActive(false); } public void Back() { if (onCloseAction != null) { // 恢复上层页面的返回事件 UIManager.Instance.RegisterBackAction(onCloseAction); } else { var infoPage = GetComponentInParent(); if (infoPage != null) { UIManager.Instance.RegisterBackAction(infoPage.Back); } else { UIManager.Instance.ClearBackAction(); } } Destroy(gameObject); } public async Task Share() { string targetUserId = userIdInput.text.Trim(); if (string.IsNullOrEmpty(targetUserId)) { ToastUI.Show("100204"); return; } // 调用后端接口共享设备 LoadingUI.Show(); var requestData = new ShareDeviceRequest { device_sn = string.IsNullOrEmpty(deviceMac) ? DataManager.Instance.selectedDevice.ble_mac : deviceMac, target_user_id = targetUserId, owner_id = DataManager.Instance.userInfo.id }; try { var response = await NetworkCtrl.Instance.Post("/api/v1/device/share", requestData); LoadingUI.Hide(); ResponseCodeHandler.HandleResponse(response, onSuccess: (data) => { Debug.Log("设备共享成功"); ToastUI.Show("100205"); Back(); }, onError: (code, msg) => { //610 重复分享 //404 用户不存在 //608 已达上限 switch(code) { case 404: ToastUI.Show("100282"); break; case 610: ToastUI.Show("100299"); break; case 608: ToastUI.Show("100298"); break; default: ToastUI.Show("100282"); break; } } ); } catch (Exception ex) { LoadingUI.Hide(); Debug.LogError("设备共享失败: " + ex.Message); } } } }