using DevExpress.XtraBars;
using DevExpress.XtraBars.Ribbon;
using DevExpress.XtraEditors;
using DevExpress.XtraTab;
using DevExpress.XtraTab.ViewInfo;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DeadFish
{
public partial class MainForm : DevExpress.XtraBars.Ribbon.RibbonForm
{
private Dictionary<string, XtraTabPage> TabPageDic = new Dictionary<string, XtraTabPage>();
private string _userName;
private List<MenuModel> UserMenuList = null;//用户权限
public MainForm(string userName)
{
InitializeComponent();
_userName = userName;
}
private void AddTab(string tabName, string tabText, DevExpress.XtraEditors.XtraForm xtraForm = null, XtraUserControl xtraUserControl = null)
{
XtraTabPage tabPage;
var isTabPageExsit = TabPageDic.TryGetValue(tabName, out tabPage);
if (isTabPageExsit)//判断新增的TabPage是否已经存在
{
tabControl.SelectedTabPage = tabPage;//设置为选中
return;
}
XtraTabPage newTabPage = new XtraTabPage();
newTabPage.Name = tabName;//设置新TabPage的Name
newTabPage.Text = tabText;//设置新TabPage的标题文本
newTabPage.TooltipTitle = tabName;
if (xtraForm != null)
{
xtraForm.Dock = DockStyle.Fill;
xtraForm.FormBorderStyle = FormBorderStyle.None;
xtraForm.TopLevel = false;
//newForm.Parent = ((XtraTabControl)sender).SelectedTabPage;
xtraForm.ControlBox = false;
xtraForm.Visible = true;
newTabPage.Controls.Add(xtraForm);
}
if (xtraUserControl != null)
{
xtraUserControl.Dock = DockStyle.Fill;
newTabPage.Controls.Add(xtraUserControl);
}
TabPageDic.Add(tabName, newTabPage);
tabControl.TabPages.Add(newTabPage);//添加
tabControl.SelectedTabPage = newTabPage;//设置为选中
}
private void tabControl_CloseButtonClick(object sender, EventArgs e)
{
ClosePageButtonEventArgs args = (ClosePageButtonEventArgs)e;
string sFlag = args.Page.TooltipTitle;
XtraTabPage tabPage;
var result = TabPageDic.TryGetValue(sFlag, out tabPage);
if (result)
{
tabControl.TabPages.Remove(tabPage);
tabPage.Dispose();
TabPageDic.Remove(sFlag);//从字典中移除
}
}
private void UserBar_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
UserForm userForm = new UserForm();
AddTab(e.Item.Name, e.Item.Caption, userForm);
}
private void RoleBar_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
RoleForm roleForm = new RoleForm();
AddTab(e.Item.Name, e.Item.Caption, roleForm);
}
private void MainForm_Load(object sender, EventArgs e)
{
//如果登录用户为admin则为所有菜单权限,否则为自定义菜单权限
if (_userName == "admin")
UserMenuList = MenuAuth.AllMenuAuth;
else
UserMenuList = MenuAuth.CustomMenuAuth;
//设置用户权限
SetUserAuth();
}
private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
Process current = Process.GetCurrentProcess();
// 获取当前本地计算机上指定的进程名称的所有进程
Process[] processes = Process.GetProcessesByName(current.ProcessName);
foreach (var process in processes)
{
if (!process.HasExited) process.Kill();
}
}
#region 权限
/// <summary>
/// 设置用户功能权限
/// </summary>
public void SetUserAuth()
{
foreach (RibbonPage page in ribbonControl1.Pages)
{
page.Visible = false;
if (page.Name == null)//未设置name直接隐藏
continue;
var menu = UserMenuList.FirstOrDefault(x => x.MenuName == page.Name);
//未找到菜单继续循环
if (menu == null)
continue;
page.Visible = true;
//group 二级菜单
foreach (RibbonPageGroup group in page.Groups)
{
group.Visible = false;
if (group.Name == null)
continue;
if (menu.ChildMenuList == null) continue;//没有下级菜单继续循环
var secondMenu = menu.ChildMenuList.FirstOrDefault(x => x.MenuName == group.Name);
if (secondMenu == null) continue; //未找到二级菜单继续循环
group.Visible = true;
//group 三级菜单
foreach (var btnItem in group.ItemLinks)
{
BarButtonItem item = ((BarButtonItemLink)btnItem).Item;
item.Visibility = BarItemVisibility.Never;
if (item.Name == null)
continue;
if (secondMenu.ChildMenuList == null) continue;//没有下级菜单继续循环
var ThirdMenu = secondMenu.ChildMenuList.FirstOrDefault(x => x.MenuName == item.Name);
if (ThirdMenu == null) continue; //未找到二级菜单继续循环
item.Visibility = BarItemVisibility.Always;
}
}
}
}
#endregion
}
}