210 lines
7.6 KiB
C#
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();
|
|
// }
|
|
}
|
|
}
|