public GroupMenu(OmMenu p_parent) { InitializeComponent(); _parent = p_parent; _tb.Text = MenuKit.GetMenuPath(p_parent); _lv.Data = MenuKit.LoadGroupMenus(p_parent); }
/// <summary> /// 加载分组菜单下的菜单项 /// </summary> /// <param name="p_parentMenu"></param> /// <returns></returns> public static Nl <OmMenu> LoadGroupMenus(OmMenu p_parentMenu) { // 确保子菜单项的顺序 return((from om in _leaveMenus where om.ParentID == p_parentMenu.ID select om).ToNl()); }
void OnOpen(object sender, Mi e) { var row = _fv.Data.To <Menu>(); OmMenu menu = new OmMenu( ID: row.ID, Name: row.Name, Icon: row.Icon, ViewName: row.ViewName, Params: row.Params); MenuKit.OpenMenu(menu); }
void OnItemClick(object sender, ItemClickArgs e) { Kit.RunAsync(() => { OmMenu menu = (OmMenu)e.Data; if (menu.IsGroup) { _host.NaviTo(new GroupMenu(menu)); } else { MenuKit.OpenMenu(menu); } }); }
/// <summary> /// 递归判断是否存在下级菜单 /// </summary> /// <param name="p_parentMenu"></param> /// <returns></returns> static bool IsExistChild(OmMenu p_parentMenu) { foreach (var om in _leaveMenus) { if (om.ParentID == p_parentMenu.ID) { if (om.IsGroup) { return(IsExistChild(om)); } return(true); } } return(false); }
/// <summary> /// 打开菜单项窗口,可以由点击菜单项或直接代码构造Menu的方式调用 /// </summary> /// <param name="p_menu">OmMenu实例</param> /// <returns>返回打开的窗口或视图,null表示打开失败</returns> public static object OpenMenu(OmMenu p_menu) { if (p_menu == null) { Kit.Msg("打开菜单项不可为空!"); return(null); } Type tp = Kit.GetViewType(p_menu.ViewName); if (tp == null) { Kit.Msg(string.Format("打开菜单时未找到视图【{0}】!", p_menu.ViewName)); return(null); } Icons icon; Enum.TryParse(p_menu.Icon, out icon); object win = Kit.OpenWin(tp, p_menu.Name, icon, string.IsNullOrEmpty(p_menu.Params) ? null : p_menu.Params); // 保存点击次数,用于确定哪些是收藏菜单 if (win != null) { Task.Run(() => { if (AtModel.GetScalar <int>($"select count(id) from ommenu where id=\"{p_menu.ID}\"") > 0) { // 点击次数保存在客户端 Dict dt = new Dict(); dt["userid"] = Kit.UserID; dt["menuid"] = p_menu.ID; int cnt = AtState.Exec("update menufav set clicks=clicks+1 where userid=:userid and menuid=:menuid", dt); if (cnt == 0) { AtState.Exec("insert into menufav (userid, menuid, clicks) values (:userid, :menuid, 1)", dt); } } // 收集使用频率 //await AtAuth.ClickMenu(p_menu.ID); }); } return(win); }
/// <summary> /// 获取给定菜单的路径 /// </summary> /// <param name="p_menu"></param> /// <returns></returns> public static string GetMenuPath(OmMenu p_menu) { StringBuilder sb = new StringBuilder(); if (p_menu != null) { sb.AppendFormat(" > {0}", p_menu.Name); long?parentID = p_menu.ParentID; while (parentID.HasValue) { OmMenu parent = QueryMenu(parentID.Value); if (parent == null) { break; } sb.Insert(0, string.Format(" > {0}", parent.Name)); parentID = parent.ParentID; } } return(sb.ToString()); }