// WTM默认页面 Wtm buidin page using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Text.RegularExpressions; using WalkingTec.Mvvm.Core; using WalkingTec.Mvvm.Core.Extensions; namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs { public class FrameworkMenuListVM : BasePagedListVM { public FrameworkMenuListVM() { this.NeedPage = false; } protected override IEnumerable> InitGridHeader() { List> rv = new List>(); switch (SearcherMode) { case ListVMSearchModeEnum.Batch: rv.AddRange(new GridColumn[] { this.MakeGridHeader(x => x.PageName), this.MakeGridHeader(x => x.ModuleName, 200), this.MakeGridHeader(x => x.ActionName, 150), }); break; case ListVMSearchModeEnum.Custom1: rv.AddRange(new GridColumn[] { this.MakeGridHeader(x => x.PageName,300), }); break; case ListVMSearchModeEnum.Custom2: rv.AddRange(new GridColumn[] { this.MakeGridHeader(x => x.PageName,200), this.MakeGridHeader(x => x.ParentId).SetHeader(Localizer["Sys.Operation"]).SetFormat((item, cell) => GenerateCheckBox(item)).SetAlign(GridColumnAlignEnum.Left), }); break; default: rv.AddRange(new GridColumn[] { this.MakeGridHeader(x => x.PageName,300), this.MakeGridHeader(x => x.ModuleName, 150), this.MakeGridHeader(x => x.ShowOnMenu), this.MakeGridHeader(x => x.FolderOnly), this.MakeGridHeader(x => x.IsPublic), this.MakeGridHeader(x => x.TenantAllowed), this.MakeGridHeader(x => x.DisplayOrder), this.MakeGridHeader(x => x.Icon, 100).SetFormat(PhotoIdFormat), this.MakeGridHeaderAction(width: 270) }); break; } return rv; } private object GenerateCheckBox(FrameworkMenu_ListView item) { StringBuilder rv = new StringBuilder(); if (item.FolderOnly == false) { rv.Append($""); if (item.IsInside == true) { var others = item.Children?.ToList(); rv.Append(UIService.MakeCheckBox(item.Allowed, Localizer["Sys.MainPage"], "menu_" + item.ID, "1")); if (others != null) { foreach (var c in others) { string actionname = ""; if (c.ActionName != null) { actionname = Localizer[c.ActionName]; } rv.Append(UIService.MakeCheckBox(c.Allowed, actionname, "menu_" + c.ID, "1")); } } } else { rv.Append(UIService.MakeCheckBox(item.Allowed, Localizer["Sys.MainPage"], "menu_" + item.ID, "1")); } } return rv.ToString(); } protected override List InitGridAction() { if (SearcherMode == ListVMSearchModeEnum.Search) { return new List{ this.MakeAction("FrameworkMenu", "Create",Localizer["Sys.Create"], Localizer["Sys.Create"], GridActionParameterTypesEnum.SingleIdWithNull,"_Admin").SetIconCls("layui-icon layui-icon-add-1"), this.MakeStandardAction("FrameworkMenu", GridActionStandardTypesEnum.Edit, "", "_Admin"), this.MakeStandardAction("FrameworkMenu", GridActionStandardTypesEnum.Delete, "", "_Admin"), this.MakeStandardAction("FrameworkMenu", GridActionStandardTypesEnum.Details, "", "_Admin"), this.MakeAction( "FrameworkMenu", "UnsetPages", Localizer["_Admin.CheckPage"], Localizer["_Admin.UnsetPages"],GridActionParameterTypesEnum.NoId, "_Admin").SetIconCls("layui-icon layui-icon-ok"), this.MakeAction("FrameworkMenu", "RefreshMenu", Localizer["_Admin.RefreshMenu"], Localizer["_Admin.RefreshMenu"], GridActionParameterTypesEnum.NoId,"_Admin").SetShowDialog(false).SetIconCls("layui-icon layui-icon-refresh"), }; } else { return new List(); } } private string PhotoIdFormat(FrameworkMenu_ListView entity, object val) { if (entity.Icon != null) { return $""; } else { return ""; } } public override IOrderedQueryable GetSearchQuery() { List data = new List(); using (var maindc = Wtm.CreateDC(false, "default")) { data = maindc.Set().ToList(); } var topdata = data.Where(x => x.ParentId == null).ToList().FlatTree(x => x.DisplayOrder).Where(x => x.IsInside == false || x.FolderOnly == true || x.Url.EndsWith("/Index") || string.IsNullOrEmpty(x.MethodName)).ToList(); foreach (var item in topdata) { if (item.PageName?.StartsWith("MenuKey.") == true) { item.PageName = Localizer[item.PageName]; } if (item.ModuleName?.StartsWith("MenuKey.") == true) { item.ModuleName = Localizer[item.ModuleName]; } } if(Wtm.ConfigInfo.EnableTenant == true && LoginUserInfo.CurrentTenant != null) { var ct = Wtm.GlobaInfo.AllTenant.Where(x => x.TCode == LoginUserInfo.CurrentTenant).FirstOrDefault(); for(int i = 0; i < topdata.Count; i++) { if (topdata[i].TenantAllowed == false || (topdata[i].Url != null && ct.EnableSub == false && topdata[i].Url.ToLower().Contains("frameworktenant"))) { topdata.RemoveAt(i); i--; continue; } var hostonly = Wtm.GlobaInfo.AllMainTenantOnlyUrls; foreach (var au in hostonly) { if (topdata[i].Url != null && new Regex("^" + au + "[/\\?]?", RegexOptions.IgnoreCase).IsMatch(topdata[i].Url)) { topdata.RemoveAt(i); i--; break; } } } } topdata.ForEach((x) => { int l = x.GetLevel(); for (int i = 0; i < l; i++) { x.PageName = "    " + x.PageName; } }); if (SearcherMode == ListVMSearchModeEnum.Custom2) { var pris = DC.Set() .Where(x => x.RoleCode == Searcher.RoleCode).ToList(); var allowed = pris.Where(x => x.Allowed == true).Select(x => x.MenuItemId).ToList(); var denied = pris.Where(x => x.Allowed == false).Select(x => x.MenuItemId).ToList(); int order = 0; var data2 = topdata.Select(x => new FrameworkMenu_ListView { ID = x.ID, PageName = x.PageName, ModuleName = x.ModuleName, ActionName = x.ActionName, ShowOnMenu = x.ShowOnMenu, FolderOnly = x.FolderOnly, IsPublic = x.IsPublic, DisplayOrder = x.DisplayOrder, Children = x.Children?.Select(y => new FrameworkMenu_ListView { ID = y.ID, Allowed = allowed.Contains(y.ID), ActionName = y.ActionName }).ToList(), ExtraOrder = order++, ParentId = x.ParentId, IsInside = x.IsInside, TenantAllowed = x.TenantAllowed, Allowed = allowed.Contains(x.ID), Denied = denied.Contains(x.ID) }).OrderBy(x => x.ExtraOrder); return data2.AsQueryable() as IOrderedQueryable; } else { int order = 0; var data2 = topdata.Select(x => new FrameworkMenu_ListView { ID = x.ID, PageName = x.PageName, ModuleName = x.ModuleName, ActionName = x.ActionName, ShowOnMenu = x.ShowOnMenu, FolderOnly = x.FolderOnly, IsPublic = x.IsPublic, DisplayOrder = x.DisplayOrder, ExtraOrder = order++, TenantAllowed = x.TenantAllowed, ParentId = x.ParentId, Icon = x.Icon }).OrderBy(x => x.ExtraOrder); return data2.AsQueryable() as IOrderedQueryable; } } } }