DevExpress多tab页打开,并设置菜单权限
作者:佚名 发表时间:2020-08-17 22:05:31
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
    }
}