568 lines
19 KiB
C#
568 lines
19 KiB
C#
|
|
using System.Collections;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using TMPro;
|
|||
|
|
using UnityEngine;
|
|||
|
|
using UnityEngine.UI;
|
|||
|
|
|
|||
|
|
public class PatientInfoPanel : BasePanel
|
|||
|
|
{
|
|||
|
|
[Header("患者信息输入")]
|
|||
|
|
public TMP_InputField NameInput;
|
|||
|
|
public TMP_InputField AdmissionIdInput;
|
|||
|
|
public TMP_Dropdown GenderDropdown; // 0: 男, 1: 女
|
|||
|
|
public TMP_InputField AgeInput;
|
|||
|
|
public TMP_InputField HeightInput;
|
|||
|
|
public TMP_InputField WeightInput;
|
|||
|
|
// public TMP_InputField IdNumberInput;
|
|||
|
|
|
|||
|
|
[Header("按钮控制")]
|
|||
|
|
public Button HomeButton;
|
|||
|
|
public Button ConfirmButton;
|
|||
|
|
public Button BackButton;
|
|||
|
|
public Button LoadFromFileButton; // 从文件加载按钮
|
|||
|
|
public Button ExportToFileButton; // 导出到文件按钮
|
|||
|
|
// public Button StartSessionButton; // 开始会话按钮
|
|||
|
|
|
|||
|
|
[Header("会话状态显示")]
|
|||
|
|
// public GameObject SessionStatusPanel; // 会话状态面板
|
|||
|
|
// public TextMeshProUGUI SessionStatusText; // 会话状态文本
|
|||
|
|
// public TextMeshProUGUI AdminUserText; // 管理员用户显示
|
|||
|
|
// public Button EndSessionButton; // 结束会话按钮
|
|||
|
|
|
|||
|
|
private PatientInfoSettingsViewModel _vm;
|
|||
|
|
private IPatientInfoService _patientService;
|
|||
|
|
// private PatientSessionService _sessionService;
|
|||
|
|
private IAuthenticationService _authService;
|
|||
|
|
private TabNavigationSystem _tabNavigation;
|
|||
|
|
|
|||
|
|
public override void Init()
|
|||
|
|
{
|
|||
|
|
InitializeButtons();
|
|||
|
|
InitializeServices();
|
|||
|
|
InitializeFieldDisplay();
|
|||
|
|
// InitializeTabNavigation();
|
|||
|
|
// UpdateUI();
|
|||
|
|
LoadCurrentPatientInfo();
|
|||
|
|
|
|||
|
|
// 延迟设置自定义键盘,确保 CustomKeyboardManager 已初始化
|
|||
|
|
StartCoroutine(SetupCustomKeyboardDelayed());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private System.Collections.IEnumerator SetupCustomKeyboardDelayed()
|
|||
|
|
{
|
|||
|
|
// 等待一帧确保所有 Awake 都已执行
|
|||
|
|
yield return null;
|
|||
|
|
|
|||
|
|
// 检查 CustomKeyboardManager 是否存在
|
|||
|
|
if (CustomKeyboardManager.Instance == null)
|
|||
|
|
{
|
|||
|
|
Debug.LogError("CustomKeyboardManager not found in scene! Please add CustomKeyboardManager to Canvas.");
|
|||
|
|
yield break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
DisableSystemKeyboardForInputFields();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void InitializeButtons()
|
|||
|
|
{
|
|||
|
|
if (HomeButton != null)
|
|||
|
|
{
|
|||
|
|
HomeButton.onClick.AddListener(() => ReturnToHome());
|
|||
|
|
}
|
|||
|
|
if (ConfirmButton != null)
|
|||
|
|
{
|
|||
|
|
ConfirmButton.onClick.AddListener(ApplyAndBack);
|
|||
|
|
}
|
|||
|
|
if (BackButton != null)
|
|||
|
|
{
|
|||
|
|
BackButton.onClick.AddListener(() => ClosePanel());
|
|||
|
|
}
|
|||
|
|
if (LoadFromFileButton != null)
|
|||
|
|
{
|
|||
|
|
LoadFromFileButton.onClick.AddListener(OnLoadFromFileClicked);
|
|||
|
|
}
|
|||
|
|
if (ExportToFileButton != null)
|
|||
|
|
{
|
|||
|
|
ExportToFileButton.onClick.AddListener(OnExportToFileClicked);
|
|||
|
|
}
|
|||
|
|
// if (StartSessionButton != null)
|
|||
|
|
// {
|
|||
|
|
// StartSessionButton.onClick.AddListener(OnStartSessionClicked);
|
|||
|
|
// }
|
|||
|
|
// if (EndSessionButton != null)
|
|||
|
|
// {
|
|||
|
|
// EndSessionButton.onClick.AddListener(OnEndSessionClicked);
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void InitializeFieldDisplay()
|
|||
|
|
{
|
|||
|
|
SetInputPlaceholder(NameInput, "请输入患者姓名");
|
|||
|
|
SetInputPlaceholder(AdmissionIdInput, "请输入住院号");
|
|||
|
|
SetInputPlaceholder(AgeInput, "年龄(岁)");
|
|||
|
|
SetInputPlaceholder(HeightInput, "身高(cm)");
|
|||
|
|
SetInputPlaceholder(WeightInput, "体重(kg)");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void SetInputPlaceholder(TMP_InputField inputField, string placeholder)
|
|||
|
|
{
|
|||
|
|
if (inputField?.placeholder == null)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var placeholderText = inputField.placeholder.GetComponent<TextMeshProUGUI>();
|
|||
|
|
if (placeholderText != null)
|
|||
|
|
{
|
|||
|
|
placeholderText.text = placeholder;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void InitializeServices()
|
|||
|
|
{
|
|||
|
|
_vm = new PatientInfoSettingsViewModel();
|
|||
|
|
_vm.OnPatientInfoSaved += OnPatientInfoSaved;
|
|||
|
|
|
|||
|
|
_patientService = ServiceLocator.Get<IPatientInfoService>();
|
|||
|
|
// _sessionService = ServiceLocator.Get<PatientSessionService>();
|
|||
|
|
_authService = ServiceLocator.Get<IAuthenticationService>();
|
|||
|
|
|
|||
|
|
// 注册会话事件
|
|||
|
|
// if (_sessionService != null)
|
|||
|
|
// {
|
|||
|
|
// _sessionService.OnSessionStarted += OnSessionStarted;
|
|||
|
|
// _sessionService.OnSessionEnded += OnSessionEnded;
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void ApplyAndBack()
|
|||
|
|
{
|
|||
|
|
var info = new PatientInfo
|
|||
|
|
{
|
|||
|
|
Name = NameInput?.text ?? "",
|
|||
|
|
HospitalId = AdmissionIdInput?.text ?? "",
|
|||
|
|
Gender = GenderDropdown?.value == 1 ? "女" : "男",
|
|||
|
|
Age = int.TryParse(AgeInput?.text ?? "0", out int age) ? age : 0,
|
|||
|
|
Height = float.TryParse(HeightInput?.text ?? "0", out float height) ? height : 0f,
|
|||
|
|
Weight = float.TryParse(WeightInput?.text ?? "0", out float weight) ? weight : 0f,
|
|||
|
|
// IdNumber = IdNumberInput?.text ?? ""
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
_vm.SavePatientInfo(info);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void LoadCurrentPatientInfo()
|
|||
|
|
{
|
|||
|
|
if (_patientService != null)
|
|||
|
|
{
|
|||
|
|
var info = _patientService.GetCurrentPatient();
|
|||
|
|
if (info != null)
|
|||
|
|
{
|
|||
|
|
PopulateFields(info);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
ClearFields();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 从文件加载病人信息
|
|||
|
|
/// </summary>
|
|||
|
|
private void OnLoadFromFileClicked()
|
|||
|
|
{
|
|||
|
|
// 显示文件选择对话框
|
|||
|
|
FileSelectionDialog.Show(
|
|||
|
|
"选择病人信息文件",
|
|||
|
|
_patientService?.GetFileFilter() ?? "所有文件|*.*",
|
|||
|
|
(filePath) => {
|
|||
|
|
if (!string.IsNullOrEmpty(filePath))
|
|||
|
|
{
|
|||
|
|
LoadPatientFromFile(filePath);
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
() => Debug.Log("取消文件选择")
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 导出病人信息到文件(包含测量数据)
|
|||
|
|
/// </summary>
|
|||
|
|
private void OnExportToFileClicked()
|
|||
|
|
{
|
|||
|
|
var currentPatient = GetCurrentInputPatient();
|
|||
|
|
if (string.IsNullOrEmpty(currentPatient.Name))
|
|||
|
|
{
|
|||
|
|
ConfirmDialog.Show("提示", "请先填写病人信息再导出", () => { });
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 检查是否有会话数据
|
|||
|
|
// bool hasSessionData = _sessionService?.IsSessionActive ?? false;
|
|||
|
|
bool hasSessionData = false;
|
|||
|
|
string dialogTitle = hasSessionData ? "导出完整患者数据" : "导出患者基本信息";
|
|||
|
|
string defaultFileName = hasSessionData ?
|
|||
|
|
$"{currentPatient.Name}_完整数据_{System.DateTime.Now:yyyyMMdd_HHmmss}.json" :
|
|||
|
|
$"{currentPatient.Name}_基本信息.json";
|
|||
|
|
|
|||
|
|
// 显示保存文件对话框
|
|||
|
|
FileSelectionDialog.ShowSave(
|
|||
|
|
dialogTitle,
|
|||
|
|
"JSON文件|*.json|CSV文件|*.csv",
|
|||
|
|
defaultFileName,
|
|||
|
|
(filePath) => {
|
|||
|
|
if (!string.IsNullOrEmpty(filePath))
|
|||
|
|
{
|
|||
|
|
if (hasSessionData && _patientService != null)
|
|||
|
|
{
|
|||
|
|
var success = _patientService.ExportCompletePatientData(currentPatient, filePath);
|
|||
|
|
var message = success ? "完整患者数据导出成功" : "完整患者数据导出失败";
|
|||
|
|
ConfirmDialog.Show(success ? "成功" : "错误", message, () => { });
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
ExportPatientToFile(currentPatient, filePath);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
() => Debug.Log("取消文件保存")
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void LoadPatientFromFile(string filePath)
|
|||
|
|
{
|
|||
|
|
if (_patientService != null)
|
|||
|
|
{
|
|||
|
|
var patient = _patientService.LoadPatientFromFile(filePath);
|
|||
|
|
if (patient != null)
|
|||
|
|
{
|
|||
|
|
PopulateFields(patient);
|
|||
|
|
ConfirmDialog.Show("成功", $"成功加载病人信息:{patient.Name}", () => { });
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
ConfirmDialog.Show("错误", "文件加载失败,请检查文件格式", () => { });
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void ExportPatientToFile(PatientInfo patient, string filePath)
|
|||
|
|
{
|
|||
|
|
if (_patientService != null)
|
|||
|
|
{
|
|||
|
|
bool success = _patientService.ExportPatientToFile(patient, filePath);
|
|||
|
|
if (success)
|
|||
|
|
{
|
|||
|
|
ConfirmDialog.Show("成功", "病人信息导出成功", () => { });
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
ConfirmDialog.Show("错误", "文件导出失败", () => { });
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private PatientInfo GetCurrentInputPatient()
|
|||
|
|
{
|
|||
|
|
return new PatientInfo
|
|||
|
|
{
|
|||
|
|
Name = NameInput?.text ?? "",
|
|||
|
|
HospitalId = AdmissionIdInput?.text ?? "",
|
|||
|
|
Gender = GenderDropdown?.value == 1 ? "女" : "男",
|
|||
|
|
Age = int.TryParse(AgeInput?.text ?? "0", out int age) ? age : 0,
|
|||
|
|
Height = float.TryParse(HeightInput?.text ?? "0", out float height) ? height : 0f,
|
|||
|
|
Weight = float.TryParse(WeightInput?.text ?? "0", out float weight) ? weight : 0f,
|
|||
|
|
// IdNumber = IdNumberInput?.text ?? ""
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 初始化Tab导航
|
|||
|
|
/// </summary>
|
|||
|
|
private void InitializeTabNavigation()
|
|||
|
|
{
|
|||
|
|
// 添加或获取Tab导航组件
|
|||
|
|
_tabNavigation = GetComponent<TabNavigationSystem>();
|
|||
|
|
if (_tabNavigation == null)
|
|||
|
|
{
|
|||
|
|
_tabNavigation = gameObject.AddComponent<TabNavigationSystem>();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 手动设置导航顺序
|
|||
|
|
_tabNavigation.NavigationOrder.Clear();
|
|||
|
|
_tabNavigation.AutoDetectInputFields = false; // 手动设置顺序
|
|||
|
|
|
|||
|
|
// 按逻辑顺序添加InputField
|
|||
|
|
if (NameInput != null) _tabNavigation.AddNavigationElement(NameInput);
|
|||
|
|
if (AdmissionIdInput != null) _tabNavigation.AddNavigationElement(AdmissionIdInput);
|
|||
|
|
if (GenderDropdown != null) _tabNavigation.AddNavigationElement(GenderDropdown);
|
|||
|
|
if (AgeInput != null) _tabNavigation.AddNavigationElement(AgeInput);
|
|||
|
|
if (HeightInput != null) _tabNavigation.AddNavigationElement(HeightInput);
|
|||
|
|
if (WeightInput != null) _tabNavigation.AddNavigationElement(WeightInput);
|
|||
|
|
// if (IdNumberInput != null) _tabNavigation.AddNavigationElement(IdNumberInput);
|
|||
|
|
|
|||
|
|
Debug.Log($"PatientInfoPanel: 初始化Tab导航,共 {_tabNavigation.NavigationOrder.Count} 个输入框");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void OnPatientInfoSaved(bool success, string message)
|
|||
|
|
{
|
|||
|
|
if (success)
|
|||
|
|
{
|
|||
|
|
// 保存成功,返回主界面
|
|||
|
|
ClosePanel();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// 显示错误信息
|
|||
|
|
ConfirmDialog.Show("保存病人信息失败:", message, () => { });
|
|||
|
|
// Debug.LogError($"保存病人信息失败: {message}");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void PopulateFields(PatientInfo info)
|
|||
|
|
{
|
|||
|
|
if (NameInput != null) NameInput.text = info.Name ?? "";
|
|||
|
|
if (AdmissionIdInput != null) AdmissionIdInput.text = info.HospitalId ?? "";
|
|||
|
|
if (GenderDropdown != null) GenderDropdown.value = info.Gender == "女" ? 1 : 0;
|
|||
|
|
if (AgeInput != null) AgeInput.text = info.Age == 0 ? "" : info.Age.ToString();
|
|||
|
|
if (HeightInput != null) HeightInput.text = info.Height == 0 ? "" : info.Height.ToString();
|
|||
|
|
if (WeightInput != null) WeightInput.text = info.Weight == 0 ? "" : info.Weight.ToString();
|
|||
|
|
// if (IdNumberInput != null) IdNumberInput.text = info.IdNumber ?? "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void ClearFields()
|
|||
|
|
{
|
|||
|
|
if (NameInput != null) NameInput.text = "";
|
|||
|
|
if (AdmissionIdInput != null) AdmissionIdInput.text = "";
|
|||
|
|
if (GenderDropdown != null) GenderDropdown.value = 0;
|
|||
|
|
if (AgeInput != null) AgeInput.text = "";
|
|||
|
|
if (HeightInput != null) HeightInput.text = "";
|
|||
|
|
if (WeightInput != null) WeightInput.text = "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// public void ClosePanel()
|
|||
|
|
// {
|
|||
|
|
// UIManager.Instance.HidePanel<PatientInfoPanel>();
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
#region 会话管理方法
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 开始患者会话
|
|||
|
|
/// </summary>
|
|||
|
|
private void OnStartSessionClicked()
|
|||
|
|
{
|
|||
|
|
var currentPatient = GetCurrentInputPatient();
|
|||
|
|
if (string.IsNullOrEmpty(currentPatient.Name))
|
|||
|
|
{
|
|||
|
|
ConfirmDialog.Show("提示", "请先填写患者基本信息", () => { });
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var currentUser = _authService?.CurrentUser;
|
|||
|
|
if (currentUser == null)
|
|||
|
|
{
|
|||
|
|
ConfirmDialog.Show("错误", "未登录管理员账号,无法开始会话", () => { });
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// if (_sessionService != null)
|
|||
|
|
// {
|
|||
|
|
// bool success = _sessionService.StartSession(currentPatient, currentUser.Username);
|
|||
|
|
// if (success)
|
|||
|
|
// {
|
|||
|
|
// ConfirmDialog.Show("成功", $"已为患者 {currentPatient.Name} 开始会话", () => { });
|
|||
|
|
// UpdateSessionUI();
|
|||
|
|
// }
|
|||
|
|
// else
|
|||
|
|
// {
|
|||
|
|
// ConfirmDialog.Show("错误", "开始会话失败", () => { });
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 结束患者会话
|
|||
|
|
/// </summary>
|
|||
|
|
// private void OnEndSessionClicked()
|
|||
|
|
// {
|
|||
|
|
// ConfirmDialog.Show("确认", "确定要结束当前患者会话吗?",
|
|||
|
|
// () =>
|
|||
|
|
// {
|
|||
|
|
// if (_sessionService != null)
|
|||
|
|
// {
|
|||
|
|
// _sessionService.EndSession();
|
|||
|
|
// UpdateSessionUI();
|
|||
|
|
// }
|
|||
|
|
// });
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 会话开始事件处理
|
|||
|
|
/// </summary>
|
|||
|
|
private void OnSessionStarted(PatientSession session)
|
|||
|
|
{
|
|||
|
|
Debug.Log($"会话已开始: {session.PatientInfo.Name}");
|
|||
|
|
// UpdateSessionUI();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 会话结束事件处理
|
|||
|
|
/// </summary>
|
|||
|
|
private void OnSessionEnded(PatientSession session)
|
|||
|
|
{
|
|||
|
|
Debug.Log($"会话已结束: {session.PatientInfo.Name}");
|
|||
|
|
// UpdateSessionUI();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 更新UI状态
|
|||
|
|
/// </summary>
|
|||
|
|
// private void UpdateUI()
|
|||
|
|
// {
|
|||
|
|
// UpdateSessionUI();
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 更新会话相关UI
|
|||
|
|
/// </summary>
|
|||
|
|
// private void UpdateSessionUI()
|
|||
|
|
// {
|
|||
|
|
// bool hasActiveSession = _sessionService?.IsSessionActive ?? false;
|
|||
|
|
|
|||
|
|
// 显示/隐藏会话状态面板
|
|||
|
|
// if (SessionStatusPanel != null)
|
|||
|
|
// {
|
|||
|
|
// SessionStatusPanel.SetActive(hasActiveSession);
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if (hasActiveSession)
|
|||
|
|
// {
|
|||
|
|
// var session = _sessionService.CurrentSession;
|
|||
|
|
// if (SessionStatusText != null)
|
|||
|
|
// {
|
|||
|
|
// SessionStatusText.text = $"会话状态: {GetSessionStatusText(session.Status)}";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if (AdminUserText != null)
|
|||
|
|
// {
|
|||
|
|
// AdminUserText.text = $"管理员: {session.AdminUserId}";
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// 控制按钮状态
|
|||
|
|
// if (StartSessionButton != null)
|
|||
|
|
// {
|
|||
|
|
// StartSessionButton.interactable = !hasActiveSession;
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// if (EndSessionButton != null)
|
|||
|
|
// {
|
|||
|
|
// EndSessionButton.interactable = hasActiveSession;
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取会话状态文本
|
|||
|
|
/// </summary>
|
|||
|
|
private string GetSessionStatusText(SessionStatus status)
|
|||
|
|
{
|
|||
|
|
switch (status)
|
|||
|
|
{
|
|||
|
|
case SessionStatus.Started: return "已开始";
|
|||
|
|
case SessionStatus.Measuring: return "测量中";
|
|||
|
|
case SessionStatus.MeasurementComplete: return "测量完成";
|
|||
|
|
case SessionStatus.Completed: return "已完成";
|
|||
|
|
default: return "未知";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region 自定义键盘配置
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 禁用InputField的系统键盘,改用自定义键盘
|
|||
|
|
/// </summary>
|
|||
|
|
private void DisableSystemKeyboardForInputFields()
|
|||
|
|
{
|
|||
|
|
// 为不同输入框设置不同的键盘布局
|
|||
|
|
// 姓名 - 拼音键盘(支持中文)
|
|||
|
|
if (NameInput != null)
|
|||
|
|
CustomKeyboardManager.SetupInputField(NameInput, KeyboardLayout.Pinyin);
|
|||
|
|
// else
|
|||
|
|
// Debug.LogWarning("PatientInfoPanel: NameInput is null!");
|
|||
|
|
|
|||
|
|
// 住院号 - 默认键盘(字母+数字)
|
|||
|
|
if (AdmissionIdInput != null)
|
|||
|
|
CustomKeyboardManager.SetupInputField(AdmissionIdInput, KeyboardLayout.Default);
|
|||
|
|
else
|
|||
|
|
Debug.LogWarning("PatientInfoPanel: AdmissionIdInput is null!");
|
|||
|
|
|
|||
|
|
// 年龄 - 数字键盘
|
|||
|
|
if (AgeInput != null)
|
|||
|
|
{
|
|||
|
|
CustomKeyboardManager.SetupInputField(AgeInput, KeyboardLayout.Numeric, (value) => {
|
|||
|
|
if (!string.IsNullOrEmpty(value) && !int.TryParse(value, out _))
|
|||
|
|
{
|
|||
|
|
ConfirmDialog.Show("提示", "年龄必须是数字", () => { });
|
|||
|
|
AgeInput.text = "";
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
Debug.LogWarning("PatientInfoPanel: AgeInput is null!");
|
|||
|
|
|
|||
|
|
// 身高 - 数字键盘
|
|||
|
|
if (HeightInput != null)
|
|||
|
|
{
|
|||
|
|
CustomKeyboardManager.SetupInputField(HeightInput, KeyboardLayout.Numeric, (value) => {
|
|||
|
|
if (!string.IsNullOrEmpty(value) && !float.TryParse(value, out _))
|
|||
|
|
{
|
|||
|
|
ConfirmDialog.Show("提示", "身高必须是数字", () => { });
|
|||
|
|
HeightInput.text = "";
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
Debug.LogWarning("PatientInfoPanel: HeightInput is null!");
|
|||
|
|
|
|||
|
|
// 体重 - 数字键盘
|
|||
|
|
if (WeightInput != null)
|
|||
|
|
{
|
|||
|
|
CustomKeyboardManager.SetupInputField(WeightInput, KeyboardLayout.Numeric, (value) => {
|
|||
|
|
if (!string.IsNullOrEmpty(value) && !float.TryParse(value, out _))
|
|||
|
|
{
|
|||
|
|
ConfirmDialog.Show("提示", "体重必须是数字", () => { });
|
|||
|
|
WeightInput.text = "";
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
Debug.LogWarning("PatientInfoPanel: WeightInput is null!");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
|
|||
|
|
void OnDestroy()
|
|||
|
|
{
|
|||
|
|
// 清理事件订阅
|
|||
|
|
if (_vm != null)
|
|||
|
|
_vm.OnPatientInfoSaved -= OnPatientInfoSaved;
|
|||
|
|
|
|||
|
|
// if (_sessionService != null)
|
|||
|
|
// {
|
|||
|
|
// _sessionService.OnSessionStarted -= OnSessionStarted;
|
|||
|
|
// _sessionService.OnSessionEnded -= OnSessionEnded;
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// 关闭自定义键盘(如果正在显示)
|
|||
|
|
if (CustomKeyboardManager.Instance != null && CustomKeyboardManager.Instance.IsKeyboardShowing())
|
|||
|
|
{
|
|||
|
|
CustomKeyboardManager.Instance.HideKeyboard();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|