138 lines
4.6 KiB
C#
Raw Normal View History

2026-06-08 08:55:10 +08:00
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;
/// <summary>待分享设备的蓝牙MAC为空时取当前选中设备</summary>
private string deviceMac;
/// <summary>关闭页面时的回调(用于恢复上层页面的返回事件)</summary>
private Action onCloseAction;
/// <summary>
/// 初始化
/// </summary>
/// <param name="deviceMac">设备蓝牙MAC分享非选中设备时传入</param>
/// <param name="onClose">关闭页面回调</param>
public void Init(string deviceMac = null, Action onClose = null)
{
this.deviceMac = deviceMac;
this.onCloseAction = onClose;
}
2026-06-08 08:55:10 +08:00
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<DeviceInfoPage>();
if (infoPage != null)
{
UIManager.Instance.RegisterBackAction(infoPage.Back);
}
else
{
UIManager.Instance.ClearBackAction();
}
}
2026-06-08 08:55:10 +08:00
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,
2026-06-08 08:55:10 +08:00
target_user_id = targetUserId,
owner_id = DataManager.Instance.userInfo.id
};
try
{
var response = await NetworkCtrl.Instance.Post<NoDataResponse>("/api/v1/device/share", requestData);
LoadingUI.Hide();
ResponseCodeHandler.HandleResponse(response,
onSuccess: (data) =>
{
Debug.Log("设备共享成功");
ToastUI.Show("100205");
Back();
},
onError: (code, msg) =>
{
2026-06-26 13:29:59 +08:00
//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;
}
2026-06-08 08:55:10 +08:00
}
);
}
catch (Exception ex)
{
LoadingUI.Hide();
Debug.LogError("设备共享失败: " + ex.Message);
}
}
}
}