相关问题推荐
-
python中\n 是什么意思?2020-04-16 09:41回答 3
换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,'\n'是换行,'\t'是tab,'\\'是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...
-
python中有哪些简单的算法2020-06-10 17:06回答 42
十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...
-
人工智能好找工作吗?2020-10-11 17:45回答 70已采纳
前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...
-
迭代器和生成器的区别?2020-06-10 09:20回答 28
迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...
-
python中title( )是什么意思python 2020-09-02 11:59回答 9
python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写
-
python中cnt是什么意思python 2020-09-02 11:59回答 6
第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...
-
python中的data[:, :-1]和data2020-12-30 11:21回答 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,实力老厉害了
-
python的内建函数在什么位置内建函数 2022-04-02 16:28回答 4
Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...
-
Python中注释前面加上引号是什么意思?python注释 2022-03-11 18:21回答 8
相当于 ... 这里不是注释
-
除了#TODO在pycharm还有哪些高亮的注释?python注释 2022-03-11 18:20回答 4
还有FIXME
-
python写入数据到excel怎么保留excelExcel功能 2022-02-09 18:56回答 3
python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。
-
Python中注释的分类python注释 2022-01-17 18:20回答 8
单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:# 单行注释print(hello world)注释可以放在代码上面也可以放在代...
-
如何才能实现python文件读取中对注释行的识别python注释 2022-01-06 15:06回答 2
主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open('3_2.txt','r')linecount=len(file.readlines())linecache.getline('3_2.txt',linecount)这样做的过程中发现一个问题,...
-
pycharm 为什么按ctrl/不会取消注释而是python注释 2022-01-06 15:04回答 4
或许是里面有没被注释的代码
-
零基础学习Python需要多长时间,有没有推荐的课2021-10-20 17:23回答 26
自学的话要看个人情况,可以先在B站找一下视频看一下
------------------------------------------------------------------------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");
List
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,也可以使用循环的方式获取
使用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'">
使用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联系我,非常感谢。