NavagationBar.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Text;
  7. using System.Linq;
  8. using System.Windows.Forms;
  9. using DevExpress.XtraEditors;
  10. using UAS_MES.DataOperate;
  11. using UAS_MES.Entity;
  12. using DevExpress.XtraNavBar;
  13. using System.Collections;
  14. using System.Reflection;
  15. using DevExpress.Utils;
  16. namespace UAS_MES.CustomControl.AccordionMenu
  17. {
  18. public partial class NavagationBar : DevExpress.XtraNavBar.NavBarControl
  19. {
  20. StringBuilder sql = new StringBuilder();
  21. public static int WinIndex = 0;
  22. /// <summary>
  23. /// 记录当前功能面板中的按钮
  24. /// </summary>
  25. private ArrayList ArrFunButton = new ArrayList();
  26. /// <summary>
  27. /// 记录当前功能面板中的listview
  28. /// </summary>
  29. private ArrayList ArrFunListView = new ArrayList();
  30. /// <summary>
  31. /// 已经打开的Form
  32. /// </summary>
  33. public static Dictionary<string, int> OpenedFormName = new Dictionary<string, int>();
  34. public NavagationBar()
  35. {
  36. InitializeComponent();
  37. DataHelper dh = SystemInf.dh;
  38. if (dh == null)
  39. return;
  40. if (User.UserAccountType == "admin")
  41. {
  42. sql.Clear();
  43. sql.Append("select distinct sn_id,sn_detno,sn_module,sn_modulecode,sn_classname,sn_displayname,sn_caller ugp_caller,1 ugp_ifdelete,1 ugp_ifread,1 ugp_ifspecial,1 ugp_ifall,");
  44. sql.Append("1 ugp_ifwrite from CS$SYSNAVATION left join CS$USERGROUPPOWER on sn_caller=ugp_caller where sn_using=1 order by sn_modulecode,sn_detno");
  45. }
  46. else
  47. {
  48. sql.Clear();
  49. sql.Append("select sn_id,sn_detno,sn_module,sn_displayname,sn_classname,ugp_caller,max(ugp_ifdelete)ugp_ifdelete,max(ugp_ifread)");
  50. sql.Append("ugp_ifread,max(ugp_ifspecial)ugp_ifspecial,max(ugp_ifwrite)ugp_ifwrite,max(ugp_ifall)ugp_ifall from CS$USERGROUPPOWER ");
  51. sql.Append("left join CS$SYSNAVATION on sn_caller=ugp_caller where sn_using=1 and ugp_groupcode in ( select eg_groupcode from cs$empgroup ");
  52. sql.Append("left join cs$userresource on ur_groupcode = eg_groupcode where eg_emcode = '" + User.UserCode + "') group by sn_id,sn_caller,");
  53. sql.Append("sn_detno,sn_classname,sn_module,sn_displayname,ugp_caller order by sn_module,sn_detno");
  54. }
  55. DataTable dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  56. if (dt.Rows.Count == 0 && User.UserAccountType != "admin")
  57. {
  58. return;
  59. }
  60. for (int i = 0; i < dt.Rows.Count; i++)
  61. {
  62. bool ContainGroup = false;
  63. string module_name = dt.Rows[i]["sn_module"].ToString();
  64. string caller = dt.Rows[i]["sn_displayname"].ToString();
  65. NavBarItem nbi = new NavBarItem(caller);
  66. nbi.Tag = dt.Rows[i]["sn_classname"].ToString();
  67. nbi.LinkClicked += Nbi_LinkClicked;
  68. nbi.Tag = dt.Rows[i]["sn_classname"].ToString();
  69. nbi.Hint = dt.Rows[i]["ugp_caller"].ToString();
  70. nbi.Name = dt.Rows[i]["sn_id"].ToString();
  71. for (int j = 0; j < Groups.Count; j++)
  72. {
  73. if (Groups[j].Caption == module_name)
  74. {
  75. ContainGroup = true;
  76. Groups[j].ItemLinks.Add(nbi);
  77. }
  78. else
  79. {
  80. ContainGroup = false;
  81. }
  82. }
  83. if (!ContainGroup)
  84. {
  85. NavBarGroup nbg = new NavBarGroup(module_name);
  86. Groups.Add(nbg);
  87. nbg.ItemLinks.Add(nbi);
  88. }
  89. }
  90. //查询出的用户可见的Caller
  91. //将查询出的数据添加到队列中
  92. for (int i = 0; i < dt.Rows.Count; i++)
  93. {
  94. //添加权限
  95. Dictionary<string, bool> dic = new Dictionary<string, bool>();
  96. dic.Add("IFDELETE", dt.Rows[i]["UGP_IFDELETE"].ToString() != "1" ? false : true);
  97. dic.Add("IFREAD", dt.Rows[i]["UGP_IFREAD"].ToString() != "1" ? false : true);
  98. dic.Add("IFWRITE", dt.Rows[i]["UGP_IFWRITE"].ToString() != "1" ? false : true);
  99. dic.Add("IFSPECIAL", dt.Rows[i]["UGP_IFSPECIAL"].ToString() != "1" ? false : true);
  100. dic.Add("IFALL", dt.Rows[i]["UGP_IFALL"].ToString() != "1" ? false : true);
  101. //之后通过Call来获取页面操作的权限
  102. if (SystemInf.Caller.ContainsKey(dt.Rows[i]["ugp_caller"].ToString()))
  103. {
  104. SystemInf.Caller.Remove(dt.Rows[i]["ugp_caller"].ToString());
  105. }
  106. SystemInf.Caller.Add(dt.Rows[i]["ugp_caller"].ToString(), dic);
  107. }
  108. }
  109. private void Nbi_LinkClicked(object sender, NavBarLinkEventArgs e)
  110. {
  111. NavBarItem nbi = (sender as NavBarItem);
  112. Form OpenForm = (Form)Assembly.GetExecutingAssembly().CreateInstance("UAS_MES." + nbi.Tag);
  113. OpenForm.Dock = DockStyle.Fill;
  114. OpenForm.Text = nbi.Caption;
  115. //用Tag保存Caller
  116. OpenForm.Tag = nbi.Hint;
  117. TabControl tc = (TabControl)this.Parent.Controls["MainTabControl"];
  118. //如果窗体不存在进行打开,item.ToolTip是Caller
  119. if (!OpenedFormName.ContainsKey(nbi.Hint))
  120. {
  121. TabPage tb = new TabPage { Name = nbi.Name, Tag = nbi.Hint, Text = OpenForm.Text };
  122. OpenForm.TopLevel = false;
  123. tc.TabPages.Add(tb);
  124. //直接选中新打开的界面
  125. tc.SelectedTab = tb;
  126. tb.Controls.Add(OpenForm);
  127. OpenedFormName.Add(nbi.Hint, WinIndex);
  128. tc.TabIndex = WinIndex;
  129. WinIndex++;
  130. OpenForm.Show();
  131. }
  132. //如果窗体已存在展示该窗体
  133. else
  134. tc.SelectTab(nbi.Name);
  135. }
  136. }
  137. }