You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
502 lines
17 KiB
502 lines
17 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Shapes;
|
|
using System.IO;
|
|
using System.Data;
|
|
using AvalonDock;
|
|
using SiaSun.LMS.Model;
|
|
//using Microsoft.Windows.Controls.Ribbon;
|
|
using Fluent;
|
|
|
|
namespace SiaSun.LMS.WPFClient
|
|
{
|
|
/// <summary>
|
|
/// MainWindow.xaml 的交互逻辑
|
|
/// </summary>
|
|
public partial class MainWindow : RibbonWindow
|
|
{
|
|
public static MainWindow mainWin;
|
|
|
|
IList<Model.SYS_MENU> listSYS_MENU = null;
|
|
|
|
public MainWindow()
|
|
{
|
|
InitializeComponent();
|
|
mainWin = this;
|
|
//ThemeFactory.ChangeTheme("siasun");
|
|
|
|
this.Closing += new System.ComponentModel.CancelEventHandler(MainWindow_Closing);
|
|
this.Closed += new EventHandler(MainWindow_Closed);
|
|
|
|
//初始化窗体
|
|
this.InitWindow();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 初始化窗体
|
|
/// </summary>
|
|
public void InitWindow()
|
|
{
|
|
MainWindow.mainWin.Cursor = Cursors.Wait;
|
|
|
|
//初始化窗体
|
|
//this.BeginInit();
|
|
|
|
//清除所有菜单和窗口
|
|
this.ribbon.Tabs.Clear();
|
|
this.ribbon.QuickAccessItems.Clear();
|
|
this.CloseAllDocuments();
|
|
|
|
//标题
|
|
this.Title = SiaSun.LMS.Common.AppSettings.GetValue("Title");
|
|
|
|
//设置绑定关系
|
|
//this.ucWinHeader.DataContext = this;
|
|
|
|
//状态栏
|
|
this.sbitemNote.Content = string.Format(SiaSun.LMS.Common.AppSettings.GetValue("Status"), MainApp._USER.USER_NAME, MainApp._ROLE.ROLE_NAME);
|
|
|
|
//初始化菜单和工具栏
|
|
this.listSYS_MENU = ((MainApp._ROLE.ROLE_ID == 0) ? MainApp._I_SystemService.MENU_GetList() : MainApp._I_SystemService.MENU_GetList_ROLE_Select(MainApp._ROLE.ROLE_ID, true));
|
|
|
|
InitMenu();
|
|
|
|
//激活起始页面
|
|
InvorkStartWindow();
|
|
|
|
//初始化窗体
|
|
//this.EndInit();
|
|
MainWindow.mainWin.Cursor = Cursors.Arrow;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更换角色
|
|
/// </summary>
|
|
public void ChangeRole()
|
|
{
|
|
Role_Select _roleSelect = new Role_Select();
|
|
if (_roleSelect.ShowDialog() == true)
|
|
{
|
|
this.InitWindow();
|
|
}
|
|
}
|
|
|
|
#region ------初始化菜单
|
|
|
|
/// <summary>
|
|
/// 移除指定菜单
|
|
/// </summary>
|
|
/// <param name="TSMI"></param>
|
|
private void Remove(Fluent.MenuItem menuItem)
|
|
{
|
|
if (menuItem.Parent is Menu)
|
|
{
|
|
Menu parentMenu = (Menu)menuItem.Parent;
|
|
if (null != parentMenu)
|
|
{
|
|
parentMenu.Items.Remove(menuItem);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Fluent.MenuItem parentItem = (Fluent.MenuItem)menuItem.Parent;
|
|
if (null != parentItem)
|
|
{
|
|
parentItem.Items.Remove(menuItem);
|
|
if (0 == parentItem.Items.Count)
|
|
{
|
|
this.Remove(parentItem);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 点击菜单
|
|
/// </summary>
|
|
private void MenuItem_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
Fluent.MenuItem menuItem = sender as Fluent.MenuItem;
|
|
this.MenuItemClick(menuItem.Tag.ToString());
|
|
}
|
|
|
|
/// <summary>
|
|
/// 点击菜单选项处理
|
|
/// </summary>
|
|
public void MenuItemClick(string strCode)
|
|
{
|
|
bool bResult = true;
|
|
string sResult = string.Empty;
|
|
|
|
try
|
|
{
|
|
MainWindow.mainWin.Cursor = Cursors.Wait;
|
|
bResult = MainApp.EVENT_Execute(strCode, out sResult);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
bResult = false;
|
|
sResult = ex.Message;
|
|
}
|
|
finally
|
|
{
|
|
if (!bResult)
|
|
{
|
|
MainApp._MessageDialog.ShowException(string.Format("调用错误-{0}", sResult));
|
|
}
|
|
MainWindow.mainWin.Cursor = Cursors.Arrow;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ------窗体布局
|
|
|
|
/// <summary>
|
|
/// 窗体布局容器加载
|
|
/// </summary>
|
|
private void DockManager_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
//判断布局保存文件是否存在
|
|
if (File.Exists("layout.xml"))
|
|
{
|
|
int contentsBeforeRestore = DockManager.DockableContents.Count;
|
|
DockManager.RestoreLayout(@"layout.xml");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 清除所有布局窗口
|
|
/// </summary>
|
|
public void CloseAllDocuments()
|
|
{
|
|
for (int i = this.DockManager.Documents.Count - 1; i >= 0; i--)
|
|
{
|
|
this.DockManager.Documents[i].Close();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 关闭活动窗体
|
|
/// </summary>
|
|
public void CloseActiveDocument()
|
|
{
|
|
if (this.DockManager.ActiveDocument != null)
|
|
{
|
|
this.DockManager.ActiveDocument.Close();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ------激活并显示窗体
|
|
|
|
/// <summary>
|
|
/// 激活起始页面
|
|
/// </summary>
|
|
private void InvorkStartWindow()
|
|
{
|
|
try
|
|
{
|
|
//判断是否设置起始菜单,并激活窗体
|
|
SiaSun.LMS.Model.SYS_MENU menu = MainApp._I_SystemService.MENU_GetModel(MainApp._ROLE.ROLE_START_MENU_ID);
|
|
if (menu != null && menu.MENU_PARAMETER.Length > 0)
|
|
{
|
|
string sResult = string.Empty;
|
|
if (MainApp.EVENT_Execute(menu.MENU_PARAMETER.Replace("title", menu.MENU_NAME), out sResult))
|
|
{
|
|
//判断是否允许关闭
|
|
if (this.DockManager.ActiveDocument != null)
|
|
{
|
|
//this.DockManager.ActiveDocument.IsCloseable = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MainApp._MessageDialog.Show(sResult, null);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MainApp._MessageDialog.ShowException(string.Format("激活起始页面.{0}", ex.Message));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 激活窗体
|
|
/// </summary>
|
|
public bool ActivatForm(string winName, string winTitle, object[] arParaObj, out string sResult)
|
|
{
|
|
bool boolResult = true;
|
|
sResult = string.Empty;
|
|
|
|
try
|
|
{
|
|
MainWindow.mainWin.Cursor = Cursors.Wait;
|
|
|
|
DocumentContent[] cnts = this.DockManager.Documents.ToArray();
|
|
if (cnts.Count(r => r.Title == winTitle) > 0)
|
|
{
|
|
cnts.First(r => r.Title == winTitle).Activate();
|
|
}
|
|
else
|
|
{
|
|
Type type = Type.GetType(winName, true);
|
|
if (type == null)
|
|
{
|
|
boolResult = false;
|
|
sResult = string.Format("{0}未找到窗体!", winName);
|
|
return boolResult;
|
|
}
|
|
|
|
DocumentContent newContent = (DocumentContent)Activator.CreateInstance(type, arParaObj);
|
|
if (newContent != null)
|
|
{
|
|
newContent.Title = winTitle;
|
|
newContent.Show(DockManager, false);
|
|
newContent.Activate();
|
|
|
|
//设置控件权限
|
|
this.InitRoleWindowControl(newContent, winName, winTitle);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
boolResult = false;
|
|
sResult = ex.Message;
|
|
}
|
|
finally
|
|
{
|
|
MainWindow.mainWin.Cursor = Cursors.Arrow;
|
|
if (!boolResult)
|
|
{
|
|
MainApp._MessageDialog.ShowException(sResult);
|
|
}
|
|
}
|
|
return boolResult;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 初始化角色对窗体的控件设置
|
|
/// </summary>
|
|
private void InitRoleWindowControl(FrameworkElement elem, string WindowName, string MENU_NAME)
|
|
{
|
|
//获得角色ID
|
|
int intRoleID = MainApp._ROLE.ROLE_ID;
|
|
if (intRoleID > 0)
|
|
{
|
|
try
|
|
{
|
|
//获得菜单
|
|
if (this.listSYS_MENU.Count(r => !string.IsNullOrEmpty(r.MENU_CLASS) && r.MENU_CLASS == WindowName && r.MENU_NAME == MENU_NAME) > 0)
|
|
{
|
|
Model.SYS_MENU mMenu = this.listSYS_MENU.First(r => !string.IsNullOrEmpty(r.MENU_CLASS) && r.MENU_CLASS == WindowName && r.MENU_NAME == MENU_NAME);
|
|
//获得所有该角色、该窗体的列表
|
|
IList<Model.SYS_ROLE_WINDOW> listROLE_WINDOW = MainApp._I_SystemService.ROLE_WINDOW_GetList_ROLE_MENU(intRoleID, mMenu.MENU_ID);
|
|
foreach (Model.SYS_ROLE_WINDOW mROLE_WINDOW in listROLE_WINDOW)
|
|
{
|
|
DependencyObject obj = LogicalTreeHelper.FindLogicalNode(elem, mROLE_WINDOW.CONTROL_NAME);
|
|
if (obj != null)
|
|
{
|
|
bool flag = Convert.ToBoolean(mROLE_WINDOW.FLAG);
|
|
obj.GetType().GetProperty("IsEnabled").SetValue(obj, Convert.ToBoolean(mROLE_WINDOW.FLAG), null);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ------退出系统
|
|
|
|
void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
|
{
|
|
if (null == MainApp._ROLE)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (MainApp._MessageDialog.ShowDialog(Enum.MessageConverter.Exit) == Sid.Windows.Controls.TaskDialogResult.Cancel)
|
|
{
|
|
e.Cancel = true;
|
|
return;
|
|
}
|
|
this.DialogResult = false;
|
|
}
|
|
|
|
void MainWindow_Closed(object sender, EventArgs e)
|
|
{
|
|
MainApp.Current.Shutdown();
|
|
}
|
|
#endregion
|
|
|
|
#region
|
|
|
|
/// <summary>
|
|
/// 初始化菜单
|
|
/// </summary>
|
|
private void InitMenu()
|
|
{
|
|
IList<SYS_MENU> listMenu = null;
|
|
|
|
//主菜单MENU_PARENT_ID == 0
|
|
listMenu = listSYS_MENU.Where(r => r.MENU_PARENT_ID == 0).OrderBy(r => r.MENU_ORDER).ToList();
|
|
|
|
foreach (SYS_MENU drMENU in listMenu)
|
|
{
|
|
RibbonTabItem menuTab = new RibbonTabItem
|
|
{
|
|
Header = drMENU.MENU_NAME,
|
|
Name = string.Format("RibbonTab{0}", drMENU.MENU_ID),
|
|
Tag = drMENU.MENU_ID
|
|
};
|
|
|
|
//添加tab页面下层菜单
|
|
InitRibbonGroupButton(menuTab);
|
|
|
|
//无下层菜单,则不显示主菜单
|
|
if (drMENU.MENU_ID != 1 && menuTab.Groups.ToList().Count>0)
|
|
this.ribbon.Tabs.Add(menuTab);
|
|
}
|
|
}
|
|
|
|
private void InitRibbonGroupButton(RibbonTabItem tab)
|
|
{
|
|
IList<SYS_MENU> listMenu = null;
|
|
IList<SYS_MENU> lsdetailMenu = null;
|
|
|
|
string sAction = string.Empty;
|
|
|
|
listMenu = listSYS_MENU.Where(r => r.MENU_PARENT_ID == Convert.ToInt32(tab.Tag)).OrderBy(r => r.MENU_ORDER).ToList();
|
|
|
|
RibbonGroupBox aGroup = new RibbonGroupBox();
|
|
|
|
foreach (SYS_MENU drMENU in listMenu)
|
|
{
|
|
|
|
lsdetailMenu = listSYS_MENU.Where(r => r.MENU_PARENT_ID == drMENU.MENU_ID).OrderBy(r => r.MENU_ORDER).ToList();
|
|
|
|
//二级菜单
|
|
if ((lsdetailMenu != null) && (lsdetailMenu.Count() > 0))
|
|
{
|
|
Fluent.DropDownButton menuItem = new Fluent.DropDownButton
|
|
{
|
|
Name = string.Format("RibbonMenuItem{0}", drMENU.MENU_ID),
|
|
Header = drMENU.MENU_NAME,
|
|
LargeIcon = new BitmapImage(new Uri(string.Format("/@Images/{0}", string.IsNullOrEmpty(drMENU.MENU_IMAGE) ? "role.png" : drMENU.MENU_IMAGE), UriKind.RelativeOrAbsolute)),
|
|
Tag = drMENU.MENU_PARAMETER,
|
|
//ToolTip = drMENU.MENU_NAME
|
|
};
|
|
|
|
foreach (SYS_MENU arow in lsdetailMenu)
|
|
{
|
|
sAction = arow.MENU_PARAMETER.ToString().Replace("title", arow.MENU_NAME);
|
|
|
|
Fluent.MenuItem adetailBtn = new Fluent.MenuItem
|
|
{
|
|
Name = string.Format("RibbonMenuButton{0}", arow.MENU_ID),
|
|
Header = arow.MENU_NAME,
|
|
Icon = new BitmapImage(new Uri(string.Format("/@Images/{0}", string.IsNullOrEmpty(drMENU.MENU_IMAGE) ? "role.png" : drMENU.MENU_IMAGE), UriKind.Relative)),
|
|
Tag = sAction
|
|
};
|
|
|
|
adetailBtn.Click += new RoutedEventHandler(menuBtn_Click);
|
|
|
|
menuItem.Items.Add(adetailBtn);
|
|
|
|
}
|
|
aGroup.Items.Add(menuItem);
|
|
}
|
|
else
|
|
{
|
|
//sAction = drMENU.MENU_PARAMETER.ToString().Replace("title", drMENU.MENU_NAME);
|
|
if (drMENU.MENU_PARAMETER != null)
|
|
{
|
|
sAction = drMENU.MENU_PARAMETER == null ? string.Empty : drMENU.MENU_PARAMETER.ToString().Replace("title", drMENU.MENU_NAME);
|
|
|
|
Fluent.Button menuBtn = new Fluent.Button
|
|
{
|
|
Name = string.Format("RibbonButton{0}", drMENU.MENU_ID),
|
|
Header = drMENU.MENU_NAME,
|
|
LargeIcon = new BitmapImage(new Uri(string.Format("/@Images/{0}", string.IsNullOrEmpty(drMENU.MENU_IMAGE) ? "role.png" : drMENU.MENU_IMAGE), UriKind.RelativeOrAbsolute)),
|
|
Tag = sAction,
|
|
//ToolTip = drMENU.MENU_NAME
|
|
};
|
|
|
|
menuBtn.Click += new RoutedEventHandler(menuBtn_Click);
|
|
|
|
if (drMENU.MENU_PARENT_ID == 1)
|
|
{
|
|
menuBtn.Icon = menuBtn.LargeIcon;
|
|
menuBtn.ToolTip = menuBtn.Header;
|
|
|
|
QuickAccessMenuItem menuBtnContainer = new QuickAccessMenuItem
|
|
{
|
|
Target = menuBtn,
|
|
IsChecked = true
|
|
};
|
|
|
|
this.ribbon.QuickAccessItems.Add(menuBtnContainer);
|
|
}
|
|
else
|
|
{
|
|
aGroup.Items.Add(menuBtn);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//主菜单tab页上有选项,再添加下层菜单
|
|
if (aGroup.Items.Count > 0)
|
|
{
|
|
tab.Groups.Add(aGroup);
|
|
}
|
|
}
|
|
|
|
private void menuBtn_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
bool bResult = true;
|
|
string sResult = string.Empty;
|
|
|
|
try
|
|
{
|
|
MainWindow.mainWin.Cursor = Cursors.Wait;
|
|
|
|
bResult = MainApp.EVENT_Execute((sender as Control).Tag.ToString(), out sResult);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
bResult = false;
|
|
sResult = ex.Message;
|
|
}
|
|
finally
|
|
{
|
|
if (!bResult)
|
|
{
|
|
MainApp._MessageDialog.ShowException(string.Format("调用错误-{0}", sResult));
|
|
}
|
|
MainWindow.mainWin.Cursor = Cursors.Arrow;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|