TreeMenuViewModel.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using BizService;
  2. using BlankApp1.Models;
  3. using Model.Entities;
  4. using PLCTool.Common;
  5. using Prism.Commands;
  6. using Prism.Mvvm;
  7. using Prism.Regions;
  8. using SqlSugar;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Globalization;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using System.Windows;
  16. using static System.Windows.Forms.VisualStyles.VisualStyleElement;
  17. namespace BlankApp1.ViewModels
  18. {
  19. public class TreeMenuViewModel:BindableBase
  20. {
  21. private readonly IMenuService _menuService;
  22. private readonly IRoleMenuService _iRoleMenuService;
  23. public List<MenuItemModel> Menus { get; set; } = new List<MenuItemModel>();
  24. // 列表,没有树型结构
  25. private List<Model.Entities.Menu> origMenus = new List<Model.Entities.Menu>();
  26. private string basePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Images");
  27. IRegionManager _regionManager;
  28. public TreeMenuViewModel(IRegionManager regionManager, IMenuService menuService,IRoleMenuService iRoleMenuService)
  29. {
  30. _regionManager = regionManager;
  31. _iRoleMenuService = iRoleMenuService;
  32. _menuService = menuService;
  33. OnLoadCommand = new DelegateCommand(OnLoad);
  34. GetMenu();
  35. }
  36. private void OnLoad()
  37. {
  38. }
  39. private void GetMenu()
  40. {
  41. // 需要获取菜单数据
  42. try
  43. {
  44. //查找这个角色的菜单
  45. var roleMenus = _iRoleMenuService.FindAllByRoleId(Appsession.RoleId);
  46. foreach (var menu in roleMenus)
  47. {
  48. var findMenu = _menuService.Find((int)menu.MenuId);
  49. if (findMenu != null)
  50. {
  51. origMenus.Add(findMenu);
  52. }
  53. }
  54. this.FillMenus(Menus, 0);
  55. }
  56. catch (Exception ex)
  57. {
  58. MessageBoxResult boxResult = MessageBox.Show("初始化失败,请检查与数据库的链接!", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
  59. return;
  60. }
  61. }
  62. public string EscapeUnicode( string str) // 将字符串编码为unicode转义序列(\uxxxx)
  63. {
  64. StringBuilder tmp = new StringBuilder();
  65. for (int i = 0; i < str.Length; i++)
  66. {
  67. ushort uxc = (ushort)str[i];
  68. tmp.Append(@"\u" + uxc.ToString("x4"));
  69. }
  70. return (tmp.ToString());
  71. }
  72. public static string String2Unicode(string source)
  73. {
  74. var bytes = Encoding.Unicode.GetBytes(source);
  75. var stringBuilder = new StringBuilder();
  76. for (var i = 0; i < bytes.Length; i += 2)
  77. {
  78. stringBuilder.AppendFormat("\\u{0:x2}{1:x2}", bytes[i + 1], bytes[i]);
  79. }
  80. return stringBuilder.ToString();
  81. }
  82. ///递归
  83. ///
  84. private void FillMenus(List<MenuItemModel> menus, int parentId)
  85. {
  86. var sub = origMenus.Where(m => m.ParentId == parentId).OrderBy(o => o.Index);
  87. //查找roleID对应的菜单
  88. if (sub.Count() > 0)
  89. {
  90. foreach (var item in sub)
  91. {
  92. string icon = string.Empty;
  93. if (!string.IsNullOrEmpty(item.MenuIcon))
  94. {
  95. icon = System.IO.Path.Combine(basePath, item.MenuIcon);
  96. }
  97. MenuItemModel mm = new MenuItemModel(_regionManager)
  98. {
  99. MenuHeader = item.MenuHeader,
  100. MenuIcon = icon,
  101. TargetView = item.TargetView
  102. };
  103. menus.Add(mm);
  104. FillMenus(mm.Children = new List<MenuItemModel>(), item.MenuId);
  105. }
  106. }
  107. }
  108. public DelegateCommand OnLoadCommand { set; get; }
  109. }
  110. }