tijian_jichuang/Code/SOH.Main/Main.cs
2025-02-20 11:54:48 +08:00

210 lines
7.6 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Windows.Forms;
using SOH.Kernel;
using SOH.Entities;
using SOH.BLL;
using EAS.Services;
namespace SOH.Main
{
public partial class Main : Form
{
public bool isdebug = false;
private Dictionary<string, Assembly> ass = new Dictionary<string, Assembly>();
private Dictionary<string, Assembly> asstype = new Dictionary<string, Assembly>();
public Main()
{
InitializeComponent();
}
private void Main_Load(object sender, EventArgs e)
{
//initass();
if (isdebug)
{
initMenu();
}
else
checkPower();
}
private void checkPower()
{
//throw new NotImplementedException();
var vser = ServiceContainer.GetService<BLL.IQuanXian>();
string ls = vser.getUserMenu(LoginUser.username);
DataTable dt = Newtonsoft.Json.JsonConvert.DeserializeObject(ls, typeof(DataTable)) as DataTable;
if (dt.Rows.Count > 0)
{
dt.DefaultView.Sort = "px";
DataTable dts = dt.DefaultView.ToTable();
foreach (DataRow dr in dts.Select("pid=0"))
{
bool ok = true;
ToolStripMenuItem tsmi = new ToolStripMenuItem();
tsmi.Text = dr["cdname"].ToString();
if (dr["cdlx"].ToString() == "1")
{
if (ass.Keys.Contains(dr["assid"].ToString()))
{
asstype.Add(dr["fullname"].ToString(), ass[dr["assid"].ToString()]);
}
else
{
if (File.Exists(Application.StartupPath + "\\" + dr["dll"].ToString()))
{
Assembly a = Assembly.LoadFrom(Application.StartupPath + "\\" + dr["dll"].ToString());
ass.Add(dr["assid"].ToString(), a);
asstype.Add(dr["fullname"].ToString(), ass[dr["assid"].ToString()]);
}
else
{
MessageBox.Show("没有找到DLL:" + dr["dll"].ToString()+",请联系管理员!");
ok = false;
}
}
if (ok)
{
tsmi.Tag = dr["fullname"].ToString();
tsmi.Click += tsmia_Click;
}
}
initMenu(tsmi,dts,dr["cdid"].ToString());
mainMenu.Items.Add(tsmi);
}
}
}
private void initMenu(ToolStripMenuItem intsmi, DataTable dts, string p)
{
foreach (DataRow dr in dts.Select("pid="+p))
{
bool ok = true;
ToolStripMenuItem tsmi = new ToolStripMenuItem();
tsmi.Text = dr["cdname"].ToString();
if (dr["cdlx"].ToString() == "1")
{
if (ass.Keys.Contains(dr["assid"].ToString()))
{
asstype.Add(dr["fullname"].ToString(), ass[dr["assid"].ToString()]);
}
else
{
if (File.Exists(Application.StartupPath + "\\" + dr["dll"].ToString()))
{
Assembly a = Assembly.LoadFrom(Application.StartupPath + "\\" + dr["dll"].ToString());
ass.Add(dr["assid"].ToString(), a);
asstype.Add(dr["fullname"].ToString(), ass[dr["assid"].ToString()]);
}
else
{
MessageBox.Show("没有找到DLL:" + dr["dll"].ToString() + ",请联系管理员!");
ok = false;
}
}
if (ok)
{
tsmi.Tag = dr["fullname"].ToString();
tsmi.Click += tsmia_Click;
}
}
initMenu(tsmi, dts, dr["cdid"].ToString());
intsmi.DropDownItems.Add(tsmi);
}
}
private void initMenu()
{
//throw new NotImplementedException();
//查找程序根目录下的所有dll
string[] dlls = Directory.GetFiles(Application.StartupPath)
.Where(p => p.ToLower().EndsWith(".dll")).ToArray();
foreach (string dll in dlls)
{
try
{
Assembly ass = Assembly.LoadFrom(dll);
object[] cusatt = ass.GetCustomAttributes(typeof(AssemblyAttribute), false);
if (cusatt.Length > 0)
{
//ToolStripItem tsi = new ToolStripItem();
ToolStripMenuItem tsmi = new ToolStripMenuItem();
AssemblyAttribute assatt = cusatt[0] as AssemblyAttribute;
tsmi.Text = assatt.AssemblyName;
// tsmi.Click += tsmi_Click;
//mainMenu.Items.Add()
this.ass.Add(assatt.ID, ass);
foreach (Type t in ass.GetTypes())
{
object[] matt = t.GetCustomAttributes(typeof(ModuleAttribute), false);
if (matt.Length > 0)
{
ToolStripMenuItem tsmia = new ToolStripMenuItem();
asstype.Add(t.FullName, ass);
ModuleAttribute modatt = matt[0] as ModuleAttribute;
tsmia.Text = modatt.ModuleName;
tsmia.Tag = t.FullName;
tsmia.Click += tsmia_Click;
tsmi.DropDownItems.Add(tsmia);
}
}
mainMenu.Items.Add(tsmi);
}
}
catch (System.Exception ex)
{
}
}
}
void tsmia_Click(object sender, EventArgs e)
{
//throw new NotImplementedException();
ToolStripMenuItem tsmia = sender as ToolStripMenuItem;
var v = mainPanle.Documents.Where(t => t.DockHandler.TabText == tsmia.Text);
if (v.Any())
{
var tform = v.First();
tform.DockHandler.Show();
}
else
{
string t = tsmia.Tag.ToString();
SOH.Window.baseChildForm frm = asstype[t].CreateInstance(t) as SOH.Window.baseChildForm;
frm.Show(mainPanle);
}
}
private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
System.Diagnostics.Process.GetCurrentProcess().Kill();
}
// void tsmi_Click(object sender, EventArgs e)
// {
// //throw new NotImplementedException();
// }
}
}