/// <summary> /// 构建ExtJS的树结构 /// </summary> /// <param name="list">树列表数据</param> /// <param name="pid">父节点属性名称</param> /// <param name="id">当前节点属性名称</param> /// <param name="firstLevelFilter">获取第一层数据的过滤条件</param> /// <param name="leveltype">层数类型top,other</param> /// <param name="level">首次获取几层</param> /// <param name="sort">排序字段(list转为)</param> /// <returns></returns> public IList <TreeJSONBase> GetExtTreeList(IList <T> list, string pid, string id, string firstLevelFilter, TreeDataLevelType leveltype, int level = 1000, string sort = "") { IList <TreeJSONBase> firstlevellist = new List <TreeJSONBase>(); TreeJSONBase tempnode; var tp = typeof(T); var pi = tp.GetProperty(pid); if (pi == null) { throw new Exception(Resources.PidPropertyNameNotFind); } var dt = EntitiesToDataTable(list); if (dt == null) { return(firstlevellist); } //获得第一层的数据 if (leveltype == TreeDataLevelType.TopLevel) //(!string.IsNullOrEmpty(firstLevelFilter)) { var drs = dt.Select(firstLevelFilter, sort); foreach (var item in drs) { tempnode = BuildTreeNode(item); if (level > 1) //首次只加载一层,children为null { tempnode.children = new List <TreeJSONBase>(); } tempnode.myLevel = 1; //tempnode.expanded = true; //tempnode.id = row[id].ToString();//基类控制id属性 firstlevellist.Add(tempnode); } if (firstlevellist.Count > 0) { LoadSubTree(dt, firstlevellist, pid, id, level, pi.PropertyType, sort); } } else { foreach (DataRow row in dt.Rows) { tempnode = BuildTreeNode(row); firstlevellist.Add(tempnode); } } return(firstlevellist); }
/// <summary> /// 构建ExtJS的树结构 /// </summary> /// <param name="menudt">树列表数据</param> /// <param name="pid">父节点字段名称</param> /// <param name="id">当前节点字段名称</param> /// <param name="firstLevelFilter">获取第一层数据的过滤条件</param> /// <param name="leveltype">层数类型top,other</param> /// <param name="level">首次获取几层</param> /// <returns></returns> public IList <TreeJSONBase> GetExtTreeList(DataTable treedt, string pid, string id, string firstLevelFilter, string sort, TreeDataLevelType leveltype, int level = 1000) { IList <TreeJSONBase> firstlevellist = new List <TreeJSONBase>(); if (treedt == null || string.IsNullOrWhiteSpace(pid) || string.IsNullOrWhiteSpace(id)) { return(firstlevellist); } TreeJSONBase tempnode; //获得第一层的数据 if (leveltype == TreeDataLevelType.TopLevel)//(!string.IsNullOrEmpty(firstLevelFilter)) { DataRow[] drs = null; if (string.IsNullOrWhiteSpace(sort)) { drs = treedt.Select(firstLevelFilter); } else { drs = treedt.Select(firstLevelFilter, sort); } foreach (DataRow row in drs) { tempnode = BuildTreeNode(row); if (level > 1)//首次只加载一层,children为null { tempnode.children = new List <TreeJSONBase>(); } tempnode.myLevel = 1; //tempnode.expanded = true; //tempnode.id = row[id].ToString();//基类控制id属性 firstlevellist.Add(tempnode); } if (firstlevellist.Count > 0) { LoadSubTree(treedt, firstlevellist, pid, id, level); } } else { foreach (DataRow dr in treedt.Rows) { tempnode = BuildTreeNode(dr); firstlevellist.Add(tempnode); } } return(firstlevellist); }
public IList <TreeJSONBase> GetExtTreeList(DataTable treedt, string pid, string id, string firstLevelFilter, TreeDataLevelType leveltype, int level = 1000) { return(this.GetExtTreeList(treedt, pid, id, firstLevelFilter, string.Empty, leveltype, level)); }
public IList <TreeJSONBase> GetExtTreeList(IList <T> list, string pid, string id, string firstLevelFilter, TreeDataLevelType leveltype, int level = 1000) { return(GetExtTreeList(list, pid, id, firstLevelFilter, leveltype, level, "")); }
///// <summary> ///// 构建树节点,ColumnName为属性名 ///// </summary> ///// <param name="row">具体数据行</param> ///// <returns>树的Json数据</returns> //private TreeJSONBase MyBuildTreeNode(DataRow row) //{ // var node = BuildTreeNode(row); // //业务代码自己处理 // //if (string.IsNullOrWhiteSpace(node.PhId)) // //{ // // node.PhId = node.id; // //} // return node; //} /// <summary> /// 构建ExtJS的树结构 /// </summary> /// <param name="list">树列表数据</param> /// <param name="pid">父节点字段名称</param> /// <param name="id">当前节点字段名称</param> /// <param name="firstLevelFilter">获取第一层数据的过滤条件</param> /// <param name="leveltype">层数类型top,other</param> /// <param name="level">首次获取几层</param> /// <returns></returns> public IList <TreeJSONBaseCheck> GetExtTreeCheckList(IList <T> list, string pid, string id, string firstLevelFilter, TreeDataLevelType leveltype, int level = 1000) { var treeList = GetExtTreeList(list, pid, id, firstLevelFilter, leveltype, level); return(treeList.Cast <TreeJSONBaseCheck>().ToList()); }
public DataTable QueryData(string product, bool isusbuser, string usertype, Int64 orgID, Int64 userID, TreeDataLevelType level, string condition, bool rightFlag, string treeFilter) { DataTable querydt; DataTable alldt; if (treeFilter != "" && treeFilter != null) //带过滤条件树的搜索 { DataTable onlyLeafDt = dac.FilterTable(treeFilter); //已经被过滤的叶子节点 DataTable sysAllDt = dac.LoadTable(product, usertype); //系统功能完整树 DataTable allDt = FindRoot(onlyLeafDt, sysAllDt, treeFilter); //已经被过滤的完整树 DataRow[] rows = allDt.Select(string.Format("name like'%{0}%'", condition)); //从被过滤的完整树中,按搜索条件搜出的节点 querydt = allDt.Clone(); foreach (DataRow row in rows) { querydt.Rows.Add(row.ItemArray); //已经被过滤的完整树,按搜索条件,取出的节点 } //fg3.Select(string.Format("pid='{0}'", id)); name like '%"+condition+"%' " alldt = FindRoot(onlyLeafDt, allDt, treeFilter);//已经被过滤,已执行搜索条件的节点,找父节点构成完整树 } else { querydt = dac.Query(product, condition, usertype, treeFilter); alldt = dac.LoadTable(product, usertype); } DataTable finaldt = FindRoot(querydt, alldt, treeFilter);//普通搜索结果会展开,这里传treeFilter禁止展开 finaldt.DefaultView.Sort = "seq"; finaldt = RightkeyController(finaldt); this.DealLang(finaldt); if (!rightFlag) { return(finaldt); } //return finaldt; if (String.Compare(usertype, UserType.System, true) == 0) { return(SystemUserRightFilreate(finaldt)); } DataTable dt = RigthFiltrateExt(usertype, finaldt, TreeDataLevelType.TopLevel); return(dt); }
public DataTable RigthFiltrateExt(string usertype, DataTable menudt, TreeDataLevelType level) { rightdata.LoginConnectionStr = NG3.AppInfoBase.UserConnectString; //用户的菜单权限 DataTable dtUserPageRights = rightdata.UserPageRightsDtExt; //cpcmInterface.GetAllPageRights(ocode, logid); //所有菜单权限 DataTable dtAllPageRights = rightdata.AllPageRightsDt; //cpcmInterface.GetAllPageRights(); for (int i = menudt.Rows.Count - 1; i >= 0; i--) { DataRow dr = menudt.Rows[i]; string norightcontrol = dr["norightcontrol"].ToString(); if (norightcontrol == "1") { if (show) { dr["name"] += "(不控制权限)"; } continue;//不需要权限控制标记为:"1",跳过 } //功能节点 string functionnodeflag = dr["functionnode_flag"].ToString(); string url = dr["url"].ToString(); string nodeid = dr["id"].ToString(); string apptype = dr["apptype"].ToString().ToLower(); string rightname = dr["rightname"].ToString();//权限名、权限号 string moduleno = dr["moduleno"].ToString(); //string rightid = dr["rightid"].ToString(); string funcname = (dr["functionname"] == null || dr["functionname"] == DBNull.Value) ? string.Empty : dr["functionname"].ToString(); Int64 rightkey = 0; Int64.TryParse(dr["rightkey"].ToString(), out rightkey); if ("ProjectOpportunityListManager" == rightname) { } //winform if (apptype == AppType.WinForm) { if (rightkey == -1 || rightkey == 0) { if (show) { dr["name"] += "(win权限error)"; } continue; } else { DataRow[] drs = dtUserPageRights.Select(string.Format("rightkey={0}", rightkey)); if (drs.Length == 0) { if (show) { dr["name"] += "(win无权限)"; } else { dr.Delete(); } } } } else if (apptype == AppType.PB)//pb { #region intfi网银控制,为提高性能,暂时先放在pb权限控制这一段 if (dr["ebankflg"] != null && dr["ebankflg"] != DBNull.Value && !string.IsNullOrEmpty(dr["ebankflg"].ToString())) { string ebankflg = dr["ebankflg"].ToString(); if (ebankflg.Equals("1")) { NGCOM ngcom = new NGCOM(); string flag = ngcom.GetEbank(); if (flag.Equals("0")) { if (show) { dr[""] += "(无网银)"; //ShowTitle(doc, node, "(无网银)");//测试用 } else { dr.Delete(); } continue; } } } #endregion if (rightkey == 0) { if (show) { dr["name"] += "(pb权限error)"; } continue; } else if (rightkey == -1) { if (show) { dr["name"] += "(pb权限error)"; } continue; } else { DataRow[] drs = dtUserPageRights.Select(string.Format("rightkey={0}", rightkey)); if (drs.Length == 0) { if (show) { dr["name"] += "(pb无权限)"; } else { dr.Delete(); } } } } else if (apptype == AppType.WebForm || apptype == AppType.WebMvc)//web { if (rightkey == -1 || rightkey == 0) { if (show) { dr["name"] += "(web权限error)"; } continue; } else { DataRow[] drs = dtUserPageRights.Select(string.Format("rightkey={0}", rightkey)); if (drs.Length == 0) { if (show) { dr["name"] += "(web无权限)"; } else { dr.Delete(); } } } } } menudt.AcceptChanges(); if (level == TreeDataLevelType.TopLevel) { this.RemoveNode(menudt); } menudt.AcceptChanges(); //DataRow[] dr = dt.Select("TabPageID = 'TabPageContractManage'"); //DataRow[] dddd = menudt.Select("code = 990100120303"); return(menudt); }
/// <summary> /// 取得功能树数据 /// </summary> /// <param name="product">产品名称</param> /// <param name="suite">套件</param> /// <param name="isusbuser">是否是usb用户</param> /// <param name="usertype">用户类型</param> /// <param name="ocode">组织号</param> /// <param name="logid">用户id</param> /// <param name="rightFlag">是否控制权限的标记位</param> /// <param name="treeFilter">系统功能树过滤条件</param> /// <returns></returns> public DataTable GetMainTreeData(string product, string suite, bool isusbuser, string usertype, Int64 orgID, Int64 userID, string nodeid, TreeDataLevelType level, bool rightFlag, string treeFilter) { try { string logId = LogHelper <MainTreeRule> .StartMethodLog("LoadMenuData"); DataTable menudt = new DataTable(); if (treeFilter != "" && treeFilter != null) { DataTable onlyLeafDt = dac.FilterTable(product, suite, nodeid, treeFilter); DataTable allDt = dac.LoadTable(product, usertype); menudt = FindRoot(onlyLeafDt, allDt, treeFilter); } else { menudt = dac.LoadMenuData(product, suite, nodeid).Copy(); } LogHelper <MainTreeRule> .EndMethodLog(logId, 0); menudt = RightkeyController(menudt); this.DealLang(menudt); if (!rightFlag) { return(menudt); } //系统管理员的一些特殊处理 if (String.Compare(usertype, UserType.System, true) == 0) { return(SystemUserRightFilreate(menudt)); } //DataTable dt = menudt; string logIdRight = LogHelper <MainTreeRule> .StartMethodLog("LoadMenuRightService"); DataTable dt = RigthFiltrateExt(usertype, menudt, level); LogHelper <MainTreeRule> .EndMethodLog(logIdRight, 0); return(dt); } catch (Exception ex) { Logger.Error(ex.StackTrace); throw ex; } }
public DataTable QueryData(string product, bool isusbuser, string usertype, Int64 orgID, Int64 userID, TreeDataLevelType level, string condition) { DataTable querydt = dac.Query(product, condition); DataTable alldt = dac.LoadTable(product); DataTable finaldt = GetQueryResult(querydt, alldt); finaldt.DefaultView.Sort = "seq"; DataTable dt = RigthFiltrateExt(usertype, finaldt, TreeDataLevelType.LazyLevel); this.DealLang(dt); return(dt); }
/// <summary> /// 取得功能树数据 /// </summary> /// <param name="product">产品名称</param> /// <param name="suite">套件</param> /// <param name="isusbuser">是否是usb用户</param> /// <param name="usertype">用户类型</param> /// <param name="ocode">组织号</param> /// <param name="logid">用户id</param> /// <returns></returns> public DataTable GetMainTreeData(string product, string suite, bool isusbuser, string usertype, Int64 orgID, Int64 userID, string nodeid, TreeDataLevelType level) { DataTable menudt = dac.LoadMenuData(product, suite, nodeid).Copy(); string sql = string.Format(@"select * from fg3_menu where menutype='1'"); DataTable sysTreeMenu = DbHelper.GetDataTable(sql); menudt.Columns.Add("originalsuite", typeof(string)); foreach (DataRow dr in menudt.Rows) { DataRow[] sysDr = sysTreeMenu.Select(string.Format(@"code = '{0}'", dr["code"].ToString())); if (sysDr != null && sysDr.Length > 0) { dr["originalsuite"] = sysDr[0]["suite"]; } } menudt = RightkeyController(menudt); //DataTable dt = menudt; DataTable dt = RigthFiltrateExt(usertype, menudt, level); this.DealLang(dt); return(dt); //return menudt; //return RigthFiltrateExt(usertype, menudt); }
/// <summary> /// 构建树 /// </summary> /// <param name="treedt">树形数据</param> /// <param name="pid">父节点ID字段名</param> /// <param name="id">点ID字段名</param> /// <param name="firstLevelFilter">一级节点过滤条件</param> /// <param name="sort">排序字段</param> /// <param name="leveltype">加载类型:首次加载,懒载</param> /// <param name="level">加载层数</param> /// <returns></returns> public JArray GetTreeList(DataTable treedt, string pid, string id, string firstLevelFilter, string sort, TreeDataLevelType leveltype, int level = 1000) { JArray firstlevellist = new JArray(); if (treedt == null || string.IsNullOrWhiteSpace(pid) || string.IsNullOrWhiteSpace(id)) { return(firstlevellist); } JObject tempnode; //获得第一层的数据 if (leveltype == TreeDataLevelType.TopLevel)//(!string.IsNullOrEmpty(firstLevelFilter)) { DataRow[] drs = null; if (string.IsNullOrWhiteSpace(sort)) { drs = treedt.Select(firstLevelFilter); } else { drs = treedt.Select(firstLevelFilter, sort); } foreach (DataRow row in drs) { tempnode = BuildTreeNode(row); if (level > 1)//首次只加载一层,children为null { //tempnode.children = new List<TreeJSONBase>(); tempnode.Add("children", new JArray()); } //tempnode.myLevel = 1; tempnode.Add("myLevel", 1); firstlevellist.Add(tempnode); } if (firstlevellist.Count > 0) { LoadSubTree(treedt, firstlevellist, pid, id, level); } } else { foreach (DataRow dr in treedt.Rows) { tempnode = BuildTreeNode(dr); #region 处理叶子节点标记 //树上下级节点的数据类型 bool isNum = false; if (treedt.Columns[pid].DataType == typeof(Int64) || treedt.Columns[pid].DataType == typeof(Int64)) { isNum = true; } string subFilter = pid + "='" + tempnode["id"].ToString() + "'"; if (isNum) { subFilter = pid + "=" + Convert.ToInt32(tempnode["id"].ToString()) + ""; } DataRow[] rows = treedt.Select(subFilter);//找当前节点的子节点,无子节点,当前节点就是叶子节点 if (rows.Length == 0) { //subnode.leaf = true; tempnode.Add("leaf", true); } else { //subnode.leaf = false; tempnode.Add("leaf", false); } #endregion firstlevellist.Add(tempnode); } } return(firstlevellist); }