319 lines
9.8 KiB
C#
319 lines
9.8 KiB
C#
using WorkCameraExport.Models;
|
|
using WorkCameraExport.Services;
|
|
using WorkCameraExport.Services.Interfaces;
|
|
|
|
namespace WorkCameraExport.Forms
|
|
{
|
|
/// <summary>
|
|
/// 主页窗体 - 显示统计信息和功能入口
|
|
/// </summary>
|
|
public partial class HomeForm : Form
|
|
{
|
|
private readonly ApiService _apiService;
|
|
private readonly ILogService? _logService;
|
|
private readonly LoginStateManager? _loginStateManager;
|
|
private readonly NetworkMonitor? _networkMonitor;
|
|
private bool _isLoading;
|
|
|
|
public HomeForm(ApiService apiService, ILogService? logService = null, LoginStateManager? loginStateManager = null, NetworkMonitor? networkMonitor = null)
|
|
{
|
|
InitializeComponent();
|
|
_apiService = apiService;
|
|
_logService = logService;
|
|
_loginStateManager = loginStateManager;
|
|
_networkMonitor = networkMonitor;
|
|
|
|
// 订阅登录失效事件
|
|
if (_loginStateManager != null)
|
|
{
|
|
_loginStateManager.LoginExpired += OnLoginExpired;
|
|
}
|
|
|
|
// 订阅网络状态变化事件
|
|
if (_networkMonitor != null)
|
|
{
|
|
_networkMonitor.NetworkStatusChanged += OnNetworkStatusChanged;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 窗体加载事件
|
|
/// </summary>
|
|
private async void HomeForm_Load(object sender, EventArgs e)
|
|
{
|
|
await LoadStatisticsAsync();
|
|
}
|
|
|
|
#region 统计数据加载
|
|
|
|
/// <summary>
|
|
/// 加载统计数据
|
|
/// </summary>
|
|
public async Task LoadStatisticsAsync()
|
|
{
|
|
if (_isLoading) return;
|
|
|
|
_isLoading = true;
|
|
SetLoadingState(true);
|
|
|
|
try
|
|
{
|
|
_logService?.Info("开始加载统计数据");
|
|
var (success, message, data) = await _apiService.GetStatisticsAsync();
|
|
|
|
if (success && data != null)
|
|
{
|
|
DisplayStatistics(data);
|
|
lblStatus.Text = $"数据更新时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
|
|
lblStatus.ForeColor = Color.Gray;
|
|
_logService?.Info("统计数据加载成功");
|
|
}
|
|
else
|
|
{
|
|
ShowError(message);
|
|
_logService?.Warn($"统计数据加载失败: {message}");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ShowError($"加载统计数据异常: {ex.Message}");
|
|
_logService?.Error($"加载统计数据异常: {ex.Message}", ex);
|
|
}
|
|
finally
|
|
{
|
|
_isLoading = false;
|
|
SetLoadingState(false);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 显示统计数据
|
|
/// </summary>
|
|
private void DisplayStatistics(StatisticsDto data)
|
|
{
|
|
lblMonthRecordCount.Text = data.MonthRecordCount.ToString("N0");
|
|
lblMonthImageCount.Text = data.MonthImageCount.ToString("N0");
|
|
lblMonthWorkerCount.Text = data.MonthWorkerCount.ToString("N0");
|
|
lblTodayRecordCount.Text = data.TodayRecordCount.ToString("N0");
|
|
lblTotalRecordCount.Text = data.TotalRecordCount.ToString("N0");
|
|
lblPendingMigrationCount.Text = data.PendingMigrationCount.ToString("N0");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置加载状态
|
|
/// </summary>
|
|
private void SetLoadingState(bool loading)
|
|
{
|
|
btnRefresh.Enabled = !loading;
|
|
btnWorkRecord.Enabled = !loading;
|
|
btnMonthReport.Enabled = !loading;
|
|
btnMigration.Enabled = !loading;
|
|
|
|
if (loading)
|
|
{
|
|
lblStatus.Text = "正在加载统计数据...";
|
|
lblStatus.ForeColor = Color.Blue;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 显示错误信息
|
|
/// </summary>
|
|
private void ShowError(string message)
|
|
{
|
|
lblStatus.Text = message;
|
|
lblStatus.ForeColor = Color.Red;
|
|
|
|
// 显示重试按钮
|
|
btnRetry.Visible = true;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 导航功能
|
|
|
|
/// <summary>
|
|
/// 工作记录按钮点击事件
|
|
/// </summary>
|
|
private void btnWorkRecord_Click(object sender, EventArgs e)
|
|
{
|
|
NavigateToWorkRecord();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 导航到工作记录管理界面
|
|
/// </summary>
|
|
public void NavigateToWorkRecord()
|
|
{
|
|
_logService?.Info("导航到工作记录管理界面");
|
|
|
|
// 创建导出服务
|
|
var configService = new ConfigService();
|
|
var imageService = new ImageService(_logService);
|
|
var exportService = new ExportService(_apiService, imageService, configService, _logService);
|
|
|
|
using var form = new WorkRecordForm(_apiService, _logService, exportService);
|
|
form.ShowDialog(this);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 月报表按钮点击事件
|
|
/// </summary>
|
|
private void btnMonthReport_Click(object sender, EventArgs e)
|
|
{
|
|
NavigateToMonthReport();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 导航到月报表界面
|
|
/// </summary>
|
|
public void NavigateToMonthReport()
|
|
{
|
|
_logService?.Info("导航到月报表界面");
|
|
|
|
// 创建导出服务
|
|
var configService = new ConfigService();
|
|
var imageService = new ImageService(_logService);
|
|
var exportService = new ExportService(_apiService, imageService, configService, _logService);
|
|
|
|
using var form = new MonthReportForm(_apiService, _logService, exportService);
|
|
form.ShowDialog(this);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 历史数据迁移按钮点击事件
|
|
/// </summary>
|
|
private void btnMigration_Click(object sender, EventArgs e)
|
|
{
|
|
NavigateToMigration();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 导航到数据迁移界面
|
|
/// </summary>
|
|
public void NavigateToMigration()
|
|
{
|
|
_logService?.Info("导航到数据迁移界面");
|
|
using var form = new MigrationForm(_apiService);
|
|
form.ShowDialog(this);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 其他事件
|
|
|
|
/// <summary>
|
|
/// 刷新按钮点击事件
|
|
/// </summary>
|
|
private async void btnRefresh_Click(object sender, EventArgs e)
|
|
{
|
|
btnRetry.Visible = false;
|
|
await LoadStatisticsAsync();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 重试按钮点击事件
|
|
/// </summary>
|
|
private async void btnRetry_Click(object sender, EventArgs e)
|
|
{
|
|
btnRetry.Visible = false;
|
|
await LoadStatisticsAsync();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置按钮点击事件
|
|
/// </summary>
|
|
private void btnSettings_Click(object sender, EventArgs e)
|
|
{
|
|
NavigateToSettings();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 导航到设置界面
|
|
/// </summary>
|
|
public void NavigateToSettings()
|
|
{
|
|
_logService?.Info("导航到设置界面");
|
|
var configService = new ConfigService();
|
|
using var form = new SettingsForm(configService, _logService);
|
|
form.ShowDialog(this);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 窗体关闭事件
|
|
/// </summary>
|
|
private void HomeForm_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
// 取消订阅登录失效事件
|
|
if (_loginStateManager != null)
|
|
{
|
|
_loginStateManager.LoginExpired -= OnLoginExpired;
|
|
}
|
|
|
|
// 取消订阅网络状态变化事件
|
|
if (_networkMonitor != null)
|
|
{
|
|
_networkMonitor.NetworkStatusChanged -= OnNetworkStatusChanged;
|
|
}
|
|
|
|
_logService?.Info("关闭主页窗体");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 登录失效事件处理
|
|
/// </summary>
|
|
private void OnLoginExpired(object? sender, LoginExpiredEventArgs e)
|
|
{
|
|
// 确保在 UI 线程执行
|
|
if (InvokeRequired)
|
|
{
|
|
Invoke(() => OnLoginExpired(sender, e));
|
|
return;
|
|
}
|
|
|
|
_logService?.Warn($"登录失效: {e.Reason}");
|
|
|
|
MessageBox.Show(
|
|
e.Reason,
|
|
"登录失效",
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Warning);
|
|
|
|
// 关闭当前窗体,返回登录界面
|
|
DialogResult = DialogResult.Abort;
|
|
Close();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 网络状态变化事件处理
|
|
/// </summary>
|
|
private void OnNetworkStatusChanged(object? sender, NetworkStatusChangedEventArgs e)
|
|
{
|
|
// 确保在 UI 线程执行
|
|
if (InvokeRequired)
|
|
{
|
|
Invoke(() => OnNetworkStatusChanged(sender, e));
|
|
return;
|
|
}
|
|
|
|
if (e.IsAvailable)
|
|
{
|
|
_logService?.Info("网络已恢复连接");
|
|
lblStatus.Text = "网络已恢复连接";
|
|
lblStatus.ForeColor = Color.Green;
|
|
|
|
// 网络恢复后自动刷新数据
|
|
_ = LoadStatisticsAsync();
|
|
}
|
|
else
|
|
{
|
|
_logService?.Warn("网络连接已断开");
|
|
lblStatus.Text = "网络连接已断开,请检查网络设置";
|
|
lblStatus.ForeColor = Color.Red;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|