使用combotree树结构 可以在红框里面加一个请选择吗?

2020-04-28 11:57发布

2条回答
Anonyem
2楼 · 2020-09-02 09:30



 

------------------------------------------------------------------------HTML---------------------------------------------------------------------

                                treedata="${dataLst}"comboTreeId="name"style="width:153">


treedata="${dataLst}":对应获得后台的数据

displayValue:对应数据的NAME

value:对应数据ID

comboTreeId="name"代表的是生成树状后INPUT的NAME属性的值 ,ID的值 以便提交后台获取

树状的原理是根据id name  parent_id来分段的

 

-------------------------------------------------------------后台-------------------------------------------------------------------------

首先新建bean树类TreeBean。java

packagecom.company.util.tree;


importjava.util.Set;

/**

*

*类名称:TreeBean

*类描述:树形类(用于定义树形的基本结构,以供其它类进行转换)

*创建人:vigo

*/

publicclassTreeBean{

    privateStringid;

    privateStringname;

    privateStringparentid;

    privateStringurl;

    privateStringparam1;//备用字段

    publicStringgetParam1(){

        returnparam1;

    }

    publicvoidsetParam1(Stringparam1){

        this.param1=param1;

    }

    publicStringgetId(){

        returnid;

    }

    publicvoidsetId(Stringid){

        this.id=id;

    }

    publicStringgetName(){

        returnname;

    }

    publicvoidsetName(Stringname){

        this.name=name;

    }

    publicStringgetParentid(){

        returnparentid;

    }

    publicvoidsetParentid(Stringparentid){

        this.parentid=parentid;

    }

    publicStringgetUrl(){

        returnurl;

    }

    publicvoidsetUrl(Stringurl){

        this.url=url;

    }

}



 

------------------------------------------------------action中查询SQL表数据--------------

ListdataLst=useAmAppFormulaService.findBdExpertItem(false);

            TreeBeandef=newTreeBean();

            def.setId("-1");

            def.setName("请选择商品品目");

            def.setParentid("");

            dataLst.add(def);

            request.setAttribute("dataLst",dataLst);


---------------------------------service实现类------------------------此处,我的项目用的是S2SH框架,在后台取得数据时对应自己的取数据的写法

/**

    *查询商品品目树

    *@throws如果Dao层操作失败会抛出异常

    *@return查询的所有结果集

    */

    publicListfindBdExpertItem(booleansetXzqhTreeHead)throwsException{

        StringBuilderhql=newStringBuilder("selectt.id,t.name,t.parent_idfromBdExpertItemastwhere1=1");

        Listlist=useAmAppFormulaDao.findBdExpertItem(hql.toString(),null);

        ListxzqhTree=newArrayList();

        for(Objectobj:list){

            Object[]arr=(Object[])obj;

            TreeBeant=newTreeBean();

            t.setId(arr[0].toString());

            t.setName((String)arr[1]);

            if(arr[2]!=null){

                t.setParentid(arr[2].toString());

            }else{

                t.setParentid("");

            }

            xzqhTree.add(t);

        }

        if(setXzqhTreeHead){

            TreeBeanxzqhhead=newTreeBean();

            xzqhhead.setId("-1");

            xzqhhead.setName("请选择商品品目");

            xzqhhead.setParentid("");

            xzqhTree.add(xzqhhead);

        }

        returnxzqhTree;

    }


----------------------------------------------dao实现---------------------

/**

 *通过HQL进行完全条件查询

 *@paramhqlHQL条件查询语句

 *@paramvalues条件查询�?

 *@throwsDao层操作失败会抛出异常

 *@return条件查询的所有结果集

 */

 publicListfindBdExpertItem(Stringhql,Object[]values)

   throwsException{

  return(List)this.findByQuery(hql,values);

 }

----------------------------------此处结束-------------

注意在编辑页面要取得已保存的IDNAME,可以使用,要保存NAME就要在页面取得getText,然后赋值给INPUT

1,直接获取:

单选:$("#id").combotree("getValue")

多选:$("#id").combotree("getValues")

注意:如果value中的值和所显示的文本不同,如需获取文本内容,则可以使用getText(),多选同样加s。

2,在选择事件中获取:

onSelect:function(node){

node.text;或者node.id;

}

3,使用api中方式

vart=$("#id").combotree('tree');//得到树对象

varn=t.tree('getSelected');//得到选择的节点

alert(n.text);

4,也可以使用循环的方式获取

 


曾为
3楼 · 2020-11-30 09:28


使用Jquery+EasyUI进行框架项目开发案例讲解之四

组织机构管理源码分享 

    在上三篇文章

  《使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享》 

  《使用Jquery+EasyUI进行框架项目开发案例讲解之二---用户管理源码分享》

  《使用Jquery+EasyUI进行框架项目开发案例讲解之三---角色管理源码分享》

  我们分享了使用JqueryEasyUI来进行ASP.NET项目的开发的相关方法,每一个模块都有其共用性,细细理解与掌握,我相信使用EasyUI进行开发还是相当方便的。

  接下来我分享“组织机构管理”模块主要的核心代码组织机构管理使用的EasyUI控件,主要是EasyUI的TreeGrid控件,组织机构管理主界面如下图所示:

  

  在进行代码讲解之前,我们先来回顾一个TreeGrid相关的知识。easyUITreeGrid从$.fn.datagrid.defaults继承,覆盖默认值$.fn.treegrid.defaults。treegrid是使用显示分层数据在grid中,treegrid是基于datagrid和关联treeview和关联可编辑的grid,treegrid允许你创建定制的,异步加载展开行数据,和显示分层的数据在多列中。如下图所示:


  

  使用示例


  通过html标记创建treegrid,大多数情况下treegrid遵循相同的结构格式化为datagrid





data-options="url:'get_data.aspx',idField:'id',treeField:'name'">

TaskName

Persons

BeginDate

EndDate


使用javascript创建treegrid 








$('#tt').treegrid({

url:'get_data.aspx',

idField:'id',

treeField:'name',

columns:[[

{title:'TaskName',field:'name',width:180},

{field:'persons',title:'Persons',width:60,align:'right'},

{field:'begin',title:'BeginDate',width:80},

{field:'end',title:'EndDate',width:80}

]]

});

属性

  属性从datagrid继承,以下是treegrid新增的属性.

NameTypeDescriptionDefaultidFieldstring定义键字段标识一个tree节点,该项是必须的.nulltreeFieldstring定义tree节点字段,该项是必须的.nullanimateboolean定义当节点展开/关闭的时候,是否显示动画效果.falseloaderfunction(param,success,error)定义如何从远程服务器端加载数据.返回false将终止这个动作.这个函数提供一下参数:param:传递给远程服务器的参数对象.success(data):当检索数据成功之后执行的回调函数.error():当检索数据失败的时候调用的回调函数.jsonloaderloadFilterfunction(data,parentId)返回过滤后的显示数据. 

 

  事件

  事件从datagrid继承,以下是datagrid新增事件.

NameParametersDescriptiononClickRowrow当用户点击一个节点时触发.onDblClickRowrow当用户双击一个节点时触发.onClickCellfield,row当用户点击一个表格的时触发.onDblClickCellfield,row当用户双击一个表格的时触发.onBeforeLoadrow,param一个请求去加载数据之前触发,返回false将取消加载动作.onLoadSuccessrow,data数据加载成功之后触发.onLoadErrorarguments数据加载失败之后触发,arguments参数和jQuery.ajax的error函数一样.onBeforeExpandrow节点展开之前触发,返回false将取消展开动作.onExpandrow节点展开后触发.onBeforeCollapserow节点折叠之前触发,返回false取消折叠动作.onCollapserow节点折叠后触发.onContextMenue,row在节点上右键点击触发.onBeforeEditrow用户开始编辑一个节点时触发.onAfterEditrow,changes用户结束编辑节点时触发.onCancelEditrow用户取消编辑节点时触发.

   方法  


  许多方法提供一个参数,参数名为id,这个参数指明tree节点值.

NameParameterDescriptionoptionsnone返回treegrid的options对象.resizeoptions设置treegrid大小,options包含两个属性:width:treegrid新的宽度.height:treegrid新的高度.fixRowHeightid固定特定行高度.loadDatadata加载treegrid数据.reloadid重新加载treegrid数据.如果传递了id参数,重新加载特定的tree行,其他的重新加载所有tree行.示例代码:$('#tt').treegrid('reload',2);    //重新加载指定id值是2的行

$('#tt').treegrid('reload');    //重新加载所有行

reloadFooterfooter重新加载页脚数据.getDatanone得到加载数据.getFooterRowsnone得到页脚数据.getRootnone得到根节点,返回的是节点对象getRootsnone得到根节点,返回的是节点数组.getParentid得到父节点.getChildrenid得到子节点.getSelectednone得到选中节点并返回它,如果没有选中节点返回null.getSelectionsnone得到所有的选中节点.getLevelid得到特定的节点的层级.findid查找特定的节点和返回节点数据.selectid选中一个节点.unselectid取消选中一个节点.selectAllnone选中所有节点.unselectAllnone取消选中所有节点.collapseid折叠一个节点.expandid展开一个节点.collapseAllid折叠所有节点.expandAllid展开所有节点.expandToid展开从根节点到指定的节点.toggleid切换节点的expanded(展开)/collapsed(关闭)状态.appendparam附加一个节点到父节点.'param'参数包含以下属性:parent:父节点id,如果没有分配,附加作为根节点.data:数组,节点数据.示例代码://添加一些节点到选中节点

varnode=$('#tt').treegrid('getSelected');

$('#tt').treegrid('append',{

    parent:node.id,//节点有一个'id'值,定义是通过'idField'属性

    data:[{

        id:'073',

        name:'name73'

    }]

});

removeid移除一个节点和其子节点.refreshid刷新特定的节点.beginEditid开始编辑一个节点.endEditid结束编辑一个节点.cancelEditid取消编辑一个节点.getEditorsid得到特定行编辑器.每一个编辑器都有以下属性:actions:编辑器可以做的动作.target:目标编辑器jQuery对象.field:字段名.type:编辑器类型.getEditoroptions得到特定的编辑器,options包含两个属性:id:行节点id.field:字段名.


 

  以上知识对于充分理解并应用TreeGrid非常的重要,对于不明白的童鞋可以看下!下面分享如何使用EasyUI的TreeGrid控件进行我们的组织机构管理的开发,当然还涉及到其他的知识点,在前面的文章已有介绍,不明白的可以看下前面的文章,这儿重在说明一些方法,当然大家也可交流讨论,提出你们在开发过程中使用的常用方式方法。

  一、“组织机构管理”主界面UI的ASPX代码如下:


<%@PageLanguage="C#"MasterPageFile="~/Site.Master"AutoEventWireup="true"CodeBehind="OrganizeAdmin.aspx.cs"Inherits="RDIFramework.WebApp.Modules.OrganizeAdmin"%>

<%=base.BuildToolBarButtons()%>

[removed][removed]




  可以看到,代码非常的简洁,使用EasyUI开发的好处就在于此,不需要你拖动服务端的控件等这种常规的Asp.NET开发方式,对于这种开发方式的好处不言而喻。

  绑定当前登录用户所拥有的功能按钮列表代码如下: 


     ///

///获得页面的权限

///

privatevoidGetPermission()

{

this.permissionAdd=this.IsAuthorized("OrganizeManagement.Add");

this.permissionEdit=this.IsAuthorized("OrganizeManagement.Edit");

this.permissionMove=this.IsAuthorized("OrganizeManagement.Move");

this.permissionDelete=this.IsAuthorized("OrganizeManagement.Delete");

this.permissionExport=this.IsAuthorized("OrganizeManagement.Export");

//this.permissionAccredit=this.IsAuthorized("UserManagement.Accredit");

this.permissionUserOrganizePermission=this.IsAuthorized("OrganizeManagement.UserOrganizePermission");

this.permissionRolerOrganizePermission=this.IsAuthorized("OrganizeManagement.RolerOrganizePermission");

}


///

///加载工具栏

///

///工具栏HTML

publicoverridestringBuildToolBarButtons()

{

StringBuildersb=newStringBuilder();

stringlinkbtn_template="{4}";

sb.Append("刷新");

sb.Append("

");

sb.Append(string.Format(linkbtn_template,"Add","icon-add",permissionAdd?"":"disabled=\"True\"","新增组织机构","新增"));

sb.Append(string.Format(linkbtn_template,"Edit","icon-edit",permissionEdit?"":"disabled=\"True\"","修改选中的组织机构","修改"));

sb.Append(string.Format(linkbtn_template,"Delete","icon-delete0",permissionDelete?"":"disabled=\"True\"","删除选中组织机构","删除"));

sb.Append("

");

sb.Append(string.Format(linkbtn_template,"MoveTo","icon-shape_move_forwards",permissionMove?"":"disabled=\"True\"","移动选中的组织机构","移动"));

sb.Append(string.Format(linkbtn_template,"Export","icon-export",permissionExport?"":"disabled=\"True\"","导出组织机构数据","导出"));

sb.Append("

");

sb.Append(string.Format(linkbtn_template,"UserOrganizePermission","icon-layout_key",permissionUserOrganizePermission?"":"disabled=\"True\"","设置用户组织机构权限","用户组织机构权限"));

sb.Append(string.Format(linkbtn_template,"RoleOrganizePermission","icon-ruby_key",permissionRolerOrganizePermission?"":"disabled=\"True\"","设置角色组织机构权限","角色组织机构权限"));

returnsb.ToString();

}



 绑定TreeGridJS代码如下:  


$(function(){

autoResize({dataGrid:'#organizeGrid',gridType:'treegrid',callback:mygrid.bindGrid,height:5});

$('#btnAdd').click(OrganizeAdminMethod.AddOrganize);//新增组织机构

$('#btnEdit').click(OrganizeAdminMethod.EditOrganize);//修改组织机构

$('#btnDelete').click(OrganizeAdminMethod.DeleteOrganize);//删除组织机构

$('#btnMoveTo').click(OrganizeAdminMethod.MoveTo);//移动组织机构

$('#btnExport').click(OrganizeAdminMethod.ExportOrganize);//导出组织机构数据

$('#btnUserOrganizePermission').click(OrganizeAdminMethod.SetUserOrganizePermission);//设置用户组织机构权限

$('#btnRoleOrganizePermission').click(OrganizeAdminMethod.SetRoleOrganizePermission);//设置角色组织机构权限

$('#a_refresh').click(function(){//刷新

mygrid.reload();

});

});


varmygrid={

bindGrid:function(winsize){

navgrid=$('#organizeGrid').treegrid({

toolbar:'#toolbar',

title:'组织机构列表',

iconCls:'iconicon-org',

width:winsize.width,

height:winsize.height,

nowrap:true,

rownumbers:true,

animate:true,

resizable:true,

collapsible:false,

url:actionUrl,

idField:'Id',

treeField:'FullName',

frozenColumns:[[

{title:'组织机构名称',field:'FullName',width:200},

{title:'编码',field:'Code',width:100}

]],

columns:[[

{title:'简称',field:'ShortName',width:120},

{title:'主负责人',field:'Manager',width:70,align:'center'},

{title:'电话',field:'OuterPhone',width:100,align:'center'},

{title:'传真',field:'Fax',width:100,align:'center'},

{title:'有效',field:'Enabled',width:50,align:'center',formatter:imgcheckbox},

{title:'排序',field:'SortCode',width:80,align:'center'},

{title:'备注',field:'Description',width:300},

{title:'ParentId',field:'ParentId',hidden:true},

{title:'Category',field:'Category',hidden:true},

{title:'InnerPhone',field:'InnerPhone',hidden:true},

{title:'Postalcode',field:'Postalcode',hidden:true},

{title:'Address',field:'Address',hidden:true},

{title:'Web',field:'Web',hidden:true},

{title:'AssistantManager',field:'AssistantManager',hidden:true},

{title:'IsInnerOrganize',field:'IsInnerOrganize',hidden:true}

]]

});

},

reload:function(){

navgrid.treegrid('reload');

},

selected:function(){

returnnavgrid.treegrid('getSelected');

}

}


varimgcheckbox=function(cellvalue,options,rowObject){

returncellvalue?'':'';

}


  添加组织机构界面窗口如下: 

  

  在添加组织机构界面,主负责人,副主管数据域的绑定控件使用的是“ComboGrid"控件,绑定的代码如下:


bindComboGrid:function(){

top.$('#txt_Manager,#txt_AssistantManager').combogrid({

panelWidth:320,

idField:'Id',

textField:'RealName',

url:'Modules/handler/UserAdminHandler.ashx?action=GetUserListByPage',

sortName:'SortCode',

sortOrder:'asc',

fitColumns:true,

showPageList:false,

striped:true,

pagination:true,

rownumbers:true,

fitColumns:true,

pageSize:10,

pageList:[10,20,30,50],

method:'post',

columns:[[

{title:'登录名',field:'UserName',width:60,sortable:true},

{title:'用户名',field:'RealName',width:70}

]]

});


修改组织机构界面如下: 

  

  ”修改组织机构“代码如下: 


EditOrganize:function(){//修改组织机构

if($(this).linkbutton('options').disabled==true){

return;

}

//功能代码逻辑...

varrow=mygrid.selected();

if(row){

vareditDailog=top.$.hDialog({

href:formUrl,title:'修改组织机构',iconCls:'icon-edit',width:750,height:520,

onLoad:function(){

pubMethod.bindCtrl(row.Id);

pubMethod.bindCategory();

pubMethod.bindComboGrid();

top.$('#txt_Code').val(row.Code);

top.$('#txt_FullName').val(row.FullName);

top.$('#txt_ShortName').val(row.ShortName);

top.$('#txt_ParentId').combotree('setValue',row.ParentId);

top.$('#txt_Category').combobox('setValue',row.Category);

top.$('#txt_Manager').combogrid('setValue',row.Manager);

top.$('#txt_AssistantManager').combogrid('setValue',row.AssistantManager);

top.$('#txt_OuterPhone').val(row.OuterPhone);

top.$('#txt_InnerPhone').val(row.InnerPhone);

top.$('#txt_Fax').val(row.Fax);

top.$('#txt_Postalcode').val(row.Postalcode);

top.$('#txt_Web').val(row.Web);

top.$('#txt_Address').val(row.Address);

top.$('#chk_Enabled').attr('checked',row.Enabled=="1");

top.$('#chk_IsInnerOrganize').attr('checked',row.IsInnerOrganize=="1");

top.$('#txt_Description').val(row.Description);

},

submit:function(){

if(top.$('#uiform').validate().form()){


//保存时判断当前节点所选的父节点,不能为当前节点的子节点,这样就乱套了....

vartreeParentId=top.$('#txt_ParentId').combotree('tree');//得到树对象

varnode=treeParentId.tree('getSelected');

if(node){

varnodeParentId=treeParentId.tree('find',row.Id);

varchildren=treeParentId.tree('getChildren',nodeParentId.target);

varnodeIds='';

varisFind='false';

for(varindex=0;index

if(children[index].id==node.id){

isFind='true';

break;

}

}


if(isFind=='true'){

top.$.messager.alert('温馨提示','请选择父节点元素!','warning');

return;

}

}



varvparentid=top.$('#txt_ParentId').combobox('getValue');

varvcategory=top.$('#txt_Category').combobox('getValue');

varvmanager=top.$('#txt_Manager').combogrid('getText');

varvassistantmanager=top.$('#txt_AssistantManager').combogrid('getText');

varquery='action=EditOrganize&vparentid='+vparentid+'&vcategory='+vcategory+'&KeyId='+row.Id+'&vmanager='+vmanager+'&vassistantmanager='+vassistantmanager+'&'

+top.$('#uiform').serialize();

$.ajaxjson(actionUrl,query,function(d){

if(d.Success){

msg.ok(d.Message);

editDailog.dialog('close');

mygrid.reload();

}else{

MessageOrRedirect(d);

}

});

}

}

});



}else{

msg.warning('请选择要修改的组织机构!');

returnfalse;

}

returnfalse;

}


删除组织机构代码如下:  


DeleteOrganize:function(){//删除组织机构

if($(this).linkbutton('options').disabled==true){

return;

}

//功能代码逻辑...

varrow=mygrid.selected();

if(row!=null){

varchilds=$('#organizeGrid').treegrid('getChildren',row.Id);

if(childs.length>0){

$.messager.alert('警告提示','当前所选有子节点数据,不能删除。','warning');

returnfalse;

}

varquery='action=DeleteOrganize&KeyId='+row.Id;

$.messager.confirm('询问提示','确认要删除选中的组织机构吗?',function(data){

if(data){

$.ajaxjson(actionUrl,query,function(d){

if(d.Success){

msg.ok(d.Message);

mygrid.reload();

}else{

MessageOrRedirect(d);

}

});

}

else{

returnfalse;

}

});

}

else{

msg.warning('请选择要删除的组织机构!');

returnfalse;

}

returnfalse;

}


 “用户-组织机构权限设置”功能主要用于设置特定用户可以访问的组织机构。有时我们会有这样的应用,某些数据属于某个组织机构内部的数据,只能指定其他组织机构特定的用户访问,那么通过此设置,我们就可以轻松的控制特定的用户访问指定的组织机构,“用户-组织机构权限设置”如下图所示。

  

  在上图中,我们可以看到对用户“陈俊熙”设置了他可以访问的组织机构,我们现在以他的用户“wikstone”登录系统,可以看到当前用户只能看到对应的组织机构了,如下图所示:

  

  用户-组织机构权限设置代码如下:  


SetUserOrganizePermission:function(){//设置用户组织机构权限

if($(this).linkbutton('options').disabled==true){

return;

}

//功能代码逻辑...

varuserGrid;

varcurResourceTargetResourceIds=[];

varsetDialog=top.$.hDialog({

title:'(用户-组织机构)权限设置',

width:670,height:600,iconCls:'icon-layout_key',//cache:false,

href:"Modules/html/PermissionBacthSetForm.htm?n="+Math.random(),

onLoad:function(){

using('panel',function(){

top.$('#panelTarget').panel({title:'组织机构列表',iconCls:'icon-org',height:$(window).height()-3});

});


userGrid=top.$('#leftnav').datagrid({

title:'用户列表',

url:'Modules/handler/UserAdminHandler.ashx',

nowrap:false,//折行

//fit:true,

rownumbers:true,//行号

striped:true,//隔行变色

idField:'Id',//主键

singleSelect:true,//单选

frozenColumns:[[]],

columns:[[

{title:'登录名',field:'UserName',width:120,align:'left'},

{title:'用户名',field:'RealName',width:150,align:'left'}

]],

onLoadSuccess:function(data){

top.$('#rightnav').tree({

cascadeCheck:false,//联动选中节点

checkbox:true,

lines:true,

url:'Modules/handler/OrganizeAdminHander.ashx?action=treedata',

onSelect:function(node){

top.$('#rightnav').tree('getChildren',node.target);

}

});

top.$('#leftnav').datagrid('selectRow',0);

},

onSelect:function(rowIndex,rowData){

curResourceTargetResourceIds=[];

varquery='action=GetPermissionScopeTargetIds'

+'&resourceCategory=PiUser&resourceId='+rowData.Id

+'&targetCategory=PiOrganize';

$.ajaxtext('handler/PermissionHandler.ashx',query,function(data){

vartargetResourceTree=top.$('#rightnav');

targetResourceTree.tree('uncheckedAll');

if(data==''||data.toString()=='[objectXMLDocument]'){

return;

}

curResourceTargetResourceIds=data.split(',');

for(vari=0;i

varnode=targetResourceTree.tree('find',curResourceTargetResourceIds[i]);

if(node)

targetResourceTree.tree("check",node.target);

}

});

}

});

},

submit:function(){

varallSelectTargetResourceIds=permissionMgr.getSelectedResource().split(',');

vargrantResourceIds='';

varrevokeResourceIds='';

varflagRevoke=0;

varflagGrant=0;

while(flagRevoke

if($.inArray(curResourceTargetResourceIds[flagRevoke],allSelectTargetResourceIds)==-1){

revokeResourceIds+=curResourceTargetResourceIds[flagRevoke]+',';//得到收回的权限列表

}

++flagRevoke;

}


while(flagGrant

if($.inArray(allSelectTargetResourceIds[flagGrant],curResourceTargetResourceIds)==-1){

grantResourceIds+=allSelectTargetResourceIds[flagGrant]+',';//得到授予的权限列表

}

++flagGrant;

}


varquery='action=GrantRevokePermissionScopeTargets&resourceId='+top.$('#leftnav').datagrid('getSelected').Id

+'&resourceCategory=PiUser&targetCategory=PiOrganize'

+'&grantTargetIds='+grantResourceIds+"&revokeTargetIds="+revokeResourceIds;

$.ajaxjson('handler/PermissionHandler.ashx',query,function(d){

if(d.Data>0){

msg.ok('设置成功!');

}

else{

alert(d.Message);

}

});

}

});


}


“角色-组织机构权限设置”功能与“用户-组织机构权限设置”功能类似,这儿只是做的对角色的控制。(角色-组织机构)权限设置界面如下:。

  

  

相关资源分享 

1、基于.NET的快速信息化系统开发整合框架—RDIFramework.NET—系统目录

2、JqueryEasyUI官方网站

3、Jquery学习官方网站

 4、JqueryEasyUI本地实例文件(如果嫌官网速度过慢,可以下载这个看)

5、Jquery权威指南下载

6、Jquery权威指南源代码下载

7、JqueryEasyUI1.3中文.chm文件下载

8、JavaScript权威指南(第六版)中文版(强烈推荐)在线观看

 





作者: EricHu 出处:http://blog.csdn.net/chinahuyong  Email:406590790@qq.com QQ交流:406590790 QQ群:237326100 框架博客:http://blog.csdn.net/chinahuyong                http://www.cnblogs.com/huyongRDIFramework.NET,基于.NET的快速信息化系统开发、整合框架,给用户和开发者最佳的.Net框架部署方案。 关于作者:高级工程师、信息系统项目管理师、DBA。专注于微软平台项目架构、管理和企业解决方案,多年项目开发与管理经验,曾多次组织并开发多个大型项目,在面向对象、面向服务以及数据库领域有一定的造诣。现主要从事基于 RDIFramework.NET 框架的技术开发、咨询工作,主要服务于金融、医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。 如有问题或建议,请多多赐教! 本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过邮箱或QQ联系我,非常感谢。






相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,&#39;\n&#39;是换行,&#39;\t&#39;是tab,&#39;\\&#39;是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open(&#39;3_2.txt&#39;,&#39;r&#39;)linecount=len(file.readlines())linecache.getline(&#39;3_2.txt&#39;,linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问