开发工具与关键技术:VS/MVC
作者:何桂朋
撰写时间:2019年7月4日
接着《角色权限修改(上)》,把按钮渲染的效果(如图):
左侧的是大模块,右侧大模块里面对应的具体的操作模块,绿色的按钮是已授权的权限,而白色的按钮是未授权的权限,在《角色权限修改(上)》提到用strmodularDetailId接收原始已授权的“权限ID”拼接的字符串,然后用数组 “ModularDetailIds”接收分割的strmodularDetailId 的字符串,此时ModularDetailIds就是“权限ID”的数组。
因为在“layui 表格”渲染的操作按钮中,每个按钮中都含有“权限ID”(绿按钮和按钮),用按钮的“权限ID”和ModularDetailIds的“权限ID”做比较。循环按钮的“权限ID”,如果这个按钮的按钮的“权限ID”在ModularDetailIds的“权限ID”有相同。则这个按钮为选中状态(绿色),反之,这个按钮为未选中状态(白色)。
确认原始按钮之后,获取选中按钮的“权限ID”和获取取消按钮的“权限ID”,
声明 insertModularDetailIds 和 deleteModularDetailIds用于接收选中按钮的“权限
ID”和就是取消按钮的“权限ID”
//记录新增的权限ID
var insertModularDetailIds = new Array();
//记录删除的权限ID
var deleteModularDetailIds = new Array();
点击按钮时,首先是判断点击按钮是什么颜色,“layui 按钮”的判断的方法是
绿按钮比白按钮的样式里少了"layui-btn-primary",知道按钮颜色,把白色变成绿色, 把绿色变成白色。
下面的 “id” 是按钮的“权限ID” indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置,如果要检索的字符串值没有出现,则该方法返回 -1。
if (ModularDetailIds.indexOf(id.toString())>-1) {
deleteModularDetailIds.push(id);
}
else {
if (insertModularDetailIds.indexOf()>-1) {
insertModularDetailIds = removeValueInArray(id,insertModularDetailIds);
}
}
上面的代码是点击绿按钮后的操作。按钮之所以为“绿色”,可能是原始按钮。就是刚渲染时就有的。也可能是点击白按钮变来的。所以分两种情况考虑。
第一种:
判断是否是原始按钮的方法是检查 这个按钮的“权限ID” 和 “ModularDetailIds”中的“权限ID” 相同。如果相同,就把这个按钮的“权限ID”列入“记录删除的权限ID”的数组。
第二种:
就是非原始按钮,是点击白按钮变来的。这种按钮的“权限ID“ 在“ModularDetailIds”中的“权限ID”不存在,存在于insertModularDetailIds(记录新增的权限ID) 的数组里。只要在 insertModularDetailIds(记录新增的权限ID) 的数组中找到并去除掉就可以了。
而点击的是白按钮的情况恰好相反,代码如下:
if (ModularDetailIds.indexOf(id.toString())>-1) {
if (deleteModularDetailIds.indexOf(id)>-1) {
deleteModularDetailIds = removeValueInArray(id,deleteModularDetailIds);
}
}
else {
insertModularDetailIds.push(id);
}
最后用 “sort()“ 对 ” insertModularDetailIds “ 、”deleteModularDetailIds “排序,
提交到控制器,该删除的删除,该新增的新增。