“虞渠成” f0a6f0f764 feat: 完成设备置顶、重命名、分享功能迭代
本次提交包含以下核心更新:
1. 新增设备置顶功能,支持将设备在列表中优先展示
2. 实现设备重命名、分享、取消共享功能
3. 优化首页设备列表滑动交互,重构设备项UI菜单逻辑
4. 新增is_top设备字段并完善设备列表排序逻辑
5. 调整部分UI布局与服务器接口地址
6. 补充多语言文案与新增提示文本
7. 修复绑定设备错误提示适配逻辑
2026-08-19 17:08:15 +08:00

138 lines
4.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}
}
}