Files
WC-CZGKJ/SCADA/MAIN_PAGE.cs
2026-05-11 11:09:04 +08:00

323 lines
11 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.
namespace MesWork
{
using DC_A95;
using System;
using System.Diagnostics;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
/// <summary>
/// 主窗体 - 称重数据采集分析管理系统
/// </summary>
public partial class MesWorkForm
{
public static int Curr_AID = 0;
/// <summary>
/// 当前活跃的导航Panel
/// </summary>
private Panel _activeNavPanel = null;
public MesWorkForm()
{
Frm_Login frm_Login = new Frm_Login();
if (frm_Login.ShowDialog() == DialogResult.OK)
{
OnStart();
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
IsMdiContainer = false;
// 加载窗口图标
LoadWindowIcon();
// 设置用户名
lbl_UserName.Text = $"操作员:{MesWorkForm.Curr_UserName}";
// 标题追加工位号
if (!string.IsNullOrEmpty(Curr_Station))
Text = $"称重数据采集分析管理系统 - {Curr_Station}";
// 启动定时器
timer_OnLine_Show.Interval = 1000;
timer_OnLine_Show.Enabled = true;
timer_Clock.Interval = 1000;
timer_Clock.Enabled = true;
// 启动SQL在线检测
CommunicationCheckOnLine();
// 初始化扫码枪
if (MesWorkForm.IsUseBarcode == 1)
{
BarcodeManager.Init();
BarcodeManager.OnBarcodeScanned = (opName, barcode) =>
{
// 在线程池中执行业务处理与PLC信号处理一致
System.Threading.ThreadPool.QueueUserWorkItem(_ =>
{
try { Barcode_HandleScan(opName, barcode); }
catch { }
});
};
}
// 默认选中"称重作业"
SetActiveNav(pnl_NavWeighing);
}
else
{
Process.GetCurrentProcess().Kill();
}
}
// ====================================================================
// 导航系统
// ====================================================================
/// <summary>
/// 统一导航点击事件
/// </summary>
private void Nav_Click(object sender, EventArgs e)
{
// 获取真正的导航Panel可能点的是Label子控件
Panel navPanel;
if (sender is Label lbl)
navPanel = lbl.Parent as Panel;
else
navPanel = sender as Panel;
if (navPanel == null) return;
string navTag = navPanel.Tag?.ToString() ?? "";
// 退出按钮特殊处理
if (navTag.Contains("退出"))
{
DoClose();
return;
}
// PLC监控特殊处理弹出独立窗口
if (navTag.Contains("PLC"))
{
new OpcForm(IsDemoMesServer).Show(this);
return;
}
// 日志查询 — 内嵌页面
if (navTag.Contains("日志"))
{
SetActiveNav(navPanel);
return;
}
// 切换选中状态和内容
SetActiveNav(navPanel);
}
/// <summary>
/// 设置当前选中的导航项,高亮+加载对应内容
/// </summary>
private void SetActiveNav(Panel navPanel)
{
// 还原之前的选中项
if (_activeNavPanel != null)
{
_activeNavPanel.BackColor = Color.FromArgb(30, 58, 95);
foreach (Control c in _activeNavPanel.Controls)
if (c is Label l) l.ForeColor = Color.FromArgb(148, 163, 184);
}
// 高亮新选中项
_activeNavPanel = navPanel;
_activeNavPanel.BackColor = Color.FromArgb(42, 74, 111);
foreach (Control c in _activeNavPanel.Controls)
if (c is Label l) l.ForeColor = Color.White;
// 移动Active指示条
pnl_NavActiveIndicator.Top = navPanel.Top;
pnl_NavActiveIndicator.Visible = true;
// 加载对应内容
LoadContentByNav(navPanel.Tag?.ToString() ?? "");
}
/// <summary>
/// 页面实例缓存(避免重复创建,保持页面状态)
/// </summary>
private readonly System.Collections.Generic.Dictionary<string, UserControl> _pageCache
= new System.Collections.Generic.Dictionary<string, UserControl>();
/// <summary>
/// 根据导航Tag加载对应的UserControl
/// </summary>
private void LoadContentByNav(string navTag)
{
pnl_Content.Controls.Clear();
string pageKey = "";
UserControl uc = null;
if (navTag.Contains("称重"))
{
pageKey = "weighing";
if (!_pageCache.ContainsKey(pageKey))
{
var wp = new Pages.UC_Weighing();
_pageCache[pageKey] = wp;
MesWorkForm.WeighingPage = wp;
}
}
else if (navTag.Contains("用户"))
{
pageKey = "user";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_UserMgmt();
}
else if (navTag.Contains("工件"))
{
pageKey = "workpiece";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_WorkpieceMgmt();
}
else if (navTag.Contains("工具"))
{
pageKey = "tool";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_ToolMgmt();
}
else if (navTag.Contains("报告"))
{
pageKey = "report";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_Report();
}
else if (navTag.Contains("过站"))
{
pageKey = "station";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_StationRecord();
}
else if (navTag.Contains("统计"))
{
pageKey = "statistics";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_Statistics();
}
else if (navTag.Contains("设置"))
{
pageKey = "settings";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_SystemSettings();
}
else if (navTag.Contains("日志"))
{
pageKey = "log";
if (!_pageCache.ContainsKey(pageKey))
_pageCache[pageKey] = new Pages.UC_LogRecord();
}
if (!string.IsNullOrEmpty(pageKey) && _pageCache.ContainsKey(pageKey))
{
uc = _pageCache[pageKey];
uc.Dock = DockStyle.Fill;
pnl_Content.Controls.Add(uc);
}
}
// ====================================================================
// Timer Events
// ====================================================================
/// <summary>
/// 定时器SQL在线状态刷新 + PLC信号灯等
/// </summary>
private void timer_OnLine_Show_Tick(object sender, EventArgs e)
{
// 数据库在线状态指示(只变更指示灯颜色)
if (OnLine_Sql)
{
pnl_SqlIndicator.BackColor = Color.FromArgb(16, 185, 129); // 绿色
}
else
{
pnl_SqlIndicator.BackColor = Color.FromArgb(239, 68, 68); // 红色
}
}
/// <summary>
/// 定时器:时钟刷新
/// </summary>
private void timer_Clock_Tick(object sender, EventArgs e)
{
lbl_DateTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
// ====================================================================
// 窗口事件
// ====================================================================
private void MesWorkForm_Load(object sender, EventArgs e)
{
// 主界面加载完成
}
private void MesWorkForm_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
private void DoClose()
{
if (MessageBox.Show("是否确认退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
timer_OnLine_Show.Enabled = false;
timer_Clock.Enabled = false;
CloseDeviceConn();
BarcodeManager.Shutdown();
B_DB_Opera.SaveLog_Request(Curr_Station, Log_Type.ZK_Login, "", Log_FromAndTo.ZK, Log_FromAndTo.ZK, $"用户[{Curr_UserName}({Curr_LoginID})]退出称重系统", out long AID);
Process.GetCurrentProcess().Kill();
}
}
// ====================================================================
// 全屏切换
// ====================================================================
private void btn_ToggleFullscreen_Click(object sender, EventArgs e)
{
if (this.FormBorderStyle == FormBorderStyle.None)
{
// 退出全屏 → 恢复普通最大化
this.FormBorderStyle = FormBorderStyle.Sizable;
this.WindowState = FormWindowState.Maximized;
lbl_NavFullscreen.Text = "▣\n全屏";
}
else
{
// 进入全屏 → 覆盖整个屏幕(含任务栏)
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Normal;
this.Bounds = Screen.PrimaryScreen.Bounds;
lbl_NavFullscreen.Text = "▣\n窗口";
}
}
// ====================================================================
// 窗口图标加载
// ====================================================================
/// <summary>
/// 加载窗口图标(多路径搜索 + exe回退
/// </summary>
private void LoadWindowIcon()
{
IconHelper.ApplyIcon(this);
}
}
}