本次提交包含以下核心更新: 1. 新增设备置顶功能,支持将设备在列表中优先展示 2. 实现设备重命名、分享、取消共享功能 3. 优化首页设备列表滑动交互,重构设备项UI菜单逻辑 4. 新增is_top设备字段并完善设备列表排序逻辑 5. 调整部分UI布局与服务器接口地址 6. 补充多语言文案与新增提示文本 7. 修复绑定设备错误提示适配逻辑
138 lines
4.6 KiB
C#
138 lines
4.6 KiB
C#
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;
|
||
}
|
||
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();
|
||
}
|
||
}
|
||
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<NoDataResponse>("/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);
|
||
}
|
||
}
|
||
}
|
||
}
|