具体示例图片如下,点击全选,选中全部选项,再点一下全选取消选中,点击反选,选中所有当前为选中选项
前台代码如下
class=“layui-form” 这个一定要写否则checkbox渲染不出来,同时select的监听也会失效
<form class="layui-form" >
<div class="layui-fluid">
<div class="layui-elem-quote">
<div class="layui-inline">
<label class="layui-form-label">类型</label>
<div class="layui-input-block">
<select class="ui_input_txt02" id="dataType" lay-filter="dataType">
<option value="WIND">风电</option>
<option value="LIGHT">光伏</option>
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label"></label>
<div class="layui-input-inline">
<button type="button" class="layui-btn layui-btn-sm"
onclick="javascript:showdivs('1')" id="sub2">查看属性</button>
<button type="button"
class="layui-btn layui-btn-sm layui-btn-warm"
onclick="javascript:submitUpLine()" id="sub1">查询</button>
</div>
</div>
<div class="layui-form-item layui-form" id="hide0"
style="display: none;">
<div class="layui-inline">
<label class="layui-form-label">基本属性</label>
<div class="layui-input-block" id="base"></div>
</div>
<div class="layui-inline">
<label class="layui-form-label">扩展属性</label>
<div class="layui-input-block" id="exc"></div>
<div class="layuiadmin-card-text layuiadmin-card-list">
<p>
<span class="layuiadmin-span-color"><a
style="color: #0000FF;" href="javascript:showdivs('0');">收起</a></span>
</p>
</div>
</div>
</div>
</div>
</div>
</form>
<script>
$(function() {
getCheckbox("WIND");
var form = layui.form;
form.render();//必须渲染,否则刚开始进入界面不会显示checkbox
submitUpLine()
})
function showdivs(flg) {
if (flg == '1') {
$("#hide0").show();
} else {
$("#hide0").css("display", "none");
}
}
function submitUpLine() {
var temp = layer.load(3, { //icon支持传入0-2
shade : [ 0.5, 'gray' ], //0.5透明度的灰色背景
content : '正在生成表格,请稍等...',
success : function(layero) {
layero.find('.layui-layer-content').css({
'padding-top' : '39px',
'width' : '200px'
});
}
});
getattr(temp);
showdivs('0');
}
function getattr(temp) {
var item = $(".baseClass");
var attrCols = [];//layui数据表格cols参数
var param = new Object();
param.type = "numbers";//行号
param.title = "编号";
param.fixed = "left";
attrCols.push(param);
var param0 = new Object();
param0.field = item[0].value;
param0.title = item[0].title;
param0.width = 200
param0.fixed = "left";//固定列
param0.sort = true;//设置筛选
attrCols.push(param0);
var param1 = new Object();
param1.field = item[1].value;
param1.title = item[1].title;
param1.width = 200
param1.fixed = "left";
param1.sort = true;
attrCols.push(param1);
for (var i = 2; i < item.length; i++) {
if (item[i].checked == true) {//获取选中的checkbox
var param = new Object();//循环生成col
param.field = item[i].value;
param.title = item[i].title;
param.width = 200
param.sort = true;
attrCols.push(param);
}
}
var itemExc = $(".excClass");
for (var i = 0; i < itemExc.length; i++) {
if (itemExc[i].checked == true) {
var param = new Object();
param.field = itemExc[i].value;
param.title = itemExc[i].title;
param.width = 200
param.sort = true;
attrCols.push(param);
}
}
var name = [];//获取选中的checkbox的value,对name进行过滤
$('input[name="excName"]:checked').each(function() {
name.push($(this).val());
});
$('input[name="baseName"]:checked').each(function() {
name.push($(this).val());
});
if (name.length == 0) {
layer.msg('请选择场站属性,否则查询无意义', {
icon : 2
});
layer.close(temp);
return; //终止当前程序
}
var type = $("#dataType").find("option:selected").val();
var url = basePath + "/getAttrValues";
$.ajax({
crossDomain : true,
xhrFields : {
withCredentials : true
},
//async : false,//同步执行
type : "post",
url : url,
data : {
type : type,
attrNames : name
},
datatype : "json",
success : function(data) {
layui.use('table', function() {
var table = layui.table;
table.render({//生成数据表格
toolbar : '#toolbarDemo',//绑定工具条
elem : '#demo',
data : data.data,
page : false,
cols : [ attrCols ],//表头,展示时按照cols的顺序展示
height : 'full-150',
limit : data.count//数据条数
});
});
setTimeout(function() {
layer.close(temp);
}, 300);
},
error : function(data) {
alert("error!")
}
});
}
</script>
<script>
function getCheckbox(obj) {//生成checkbox
var url = basePath + "/getSelectAttr";
$.ajax({
crossDomain : true,
xhrFields : {
withCredentials : true
},
async : false,//同步执行
type : "post",
url : url,
data : {
type : obj
},
datatype : "json",
success : function(data) {
$("#base").html("");//先清空在渲染否则还是之前的
var select = $("#base");
select
.append("<input type=\"checkbox\" lay-skin=\"primary\" id=\"base_all\" lay-filter=\"base_all\" title=\"全选\"> ");
select
.append("<input type=\"checkbox\" lay-skin=\"primary\" id=\"fbase_all\" lay-filter=\"fbase_all\" title=\"反选\"> ");
select.append("<br/>")
select.append(data.stringBuilderBase);
$("#exc").html("");
var select = $("#exc");
select
.append("<input type=\"checkbox\" lay-skin=\"primary\" id=\"exc_all\" lay-filter=\"exc_all\" title=\"全选\"> ");
select
.append("<input type=\"checkbox\" lay-skin=\"primary\" id=\"fexc_all\" lay-filter=\"fexc_all\" title=\"反选\"> ");
select.append("<br/>")
var select = $("#exc");
select.append(data.stringBuilderExc);
var form = layui.form;
form.render();
},
error : function(data) {
alert("error!")
}
});
}
layui.use('form', function() {//监听select控件
var form = layui.form;
form.on('select(dataType)', function(data) {
var type = $("#dataType").find("option:selected").val();
if (type == "WIND") {
getCheckbox(type);
submitUpLine()
} else if (type == "LIGHT") {
getCheckbox(type);
submitUpLine()
}
})
})
</script>
<script>
layui.use('form', function() {
var form = layui.form;
//全选
form.on('checkbox(base_all)', function(data) {
var a = data.elem.checked;
if (a == true) {
$(".baseClass").prop("checked", true);
$("#fbase_all").prop("checked", false);
} else {
$(".baseClass").prop("checked", false);
}
var item = $(".baseClass");
item[0].checked = true;
item[1].checked = true;
form.render('checkbox');
});
//反选
form.on('checkbox(fbase_all)', function(data) {
var item = $(".baseClass");
item.each(function() {
if ($(this).prop("checked")) {
$(this).prop("checked", false);
} else {
$(this).prop("checked", true);
}
})
$("#base_all").prop("checked", false);
$("#fbase_all").prop("checked", true);
var item = $(".baseClass");
item[0].checked = true;
item[1].checked = true;
form.render('checkbox');
});
//有一个未选中全选取消选中
form.on('checkbox(baseFilter)', function(data) {
var item = $(".baseClass");
for (var i = 0; i < item.length; i++) {
if (item[i].checked == false) {
$("#base_all").prop("checked", false);
form.render('checkbox');
break;
}
}
//如果都勾选了 勾上全选
var all = item.length;
for (var i = 0; i < item.length; i++) {
if (item[i].checked == true) {
all--;
}
}
if (all == 0) {
$("#base_all").prop("checked", true);
form.render('checkbox');
}
});
//全选
form.on('checkbox(exc_all)', function(data) {
var a = data.elem.checked;
if (a == true) {
$(".excClass").prop("checked", true);
$("#fexc_all").prop("checked", false);
$("#exc_all").prop("checked", true);
form.render('checkbox');
} else {
$(".excClass").prop("checked", false);
form.render('checkbox');
}
});
//反选
form.on('checkbox(fexc_all)', function(data) {
var item = $(".excClass");
item.each(function() {
if ($(this).prop("checked")) {
$(this).prop("checked", false);
} else {
$(this).prop("checked", true);
}
})
$("#exc_all").prop("checked", false);
$("#fexc_all").prop("checked", true);
form.render('checkbox');
});
//有一个未选中全选取消选中
form.on('checkbox(excFilter)', function(data) {
var item = $(".excClass");
for (var i = 0; i < item.length; i++) {
if (item[i].checked == false) {
$("#exc_all").prop("checked", false);
form.render('checkbox');
break;
}
}
//如果都勾选了 勾上全选
var all = item.length;
for (var i = 0; i < item.length; i++) {
if (item[i].checked == true) {
all--;
}
}
if (all == 0) {
$("#exc_all").prop("checked", true);
form.render('checkbox');
}
});
});
</script>
<script type="text/html" id="toolbarDemo">
</script>
后台数据格式如下
1.checkbox数据格式
@RequestMapping("/getSelectAttr")
public HashMap<String, Object> getSelectAttr(String type) {
return selectService.getSelectAttr(type);
}
public HashMap<String, Object> getSelectAttr(String type) {
HashMap<String, Object> hashMap = new HashMap<String, Object>();
StringBuilder stringBuilderExc = new StringBuilder();
List<RbaseInfoPoint> points = rbaseInfoPointDao.findByFlagOrderByRank(type);
if (null != points) {
for (RbaseInfoPoint point : points) {
stringBuilderExc.append("<input name=\"excName\" lay-skin=\"primary\" lay-filter=\"excFilter\" class=\"excClass\" type=\"checkbox\" value=\"" + point.getPointId() + "\" title= \""+ point.getPointName() + "\"/>");
}
}
StringBuilder stringBuilderBase = new StringBuilder();
stringBuilderBase.append("<input disabled=\"disabled\" name=\"baseName\" lay-skin=\"primary\" lay-filter=\"baseFilter\" class=\"baseClass\" type=\"checkbox\" value=\"farmid\" title=\"场站id\" checked=\"\" />");
stringBuilderBase.append("<input disabled=\"disabled\" name=\"baseName\" lay-skin=\"primary\" lay-filter=\"baseFilter\" class=\"baseClass\" type=\"checkbox\" value=\"farmName\" title=\"场站名称\" checked=\"\"/>");
stringBuilderBase.append("<input name=\"baseName\" lay-skin=\"primary\" lay-filter=\"baseFilter\" class=\"baseClass\" type=\"checkbox\" value=\"groupName\" title=\"所属发电集团公司\" checked=\"\"/>");
···········
if(type.equals("WIND")){
stringBuilderBase.append("<input name=\"baseName\" lay-skin=\"primary\" lay-filter=\"baseFilter\" class=\"baseClass\" type=\"checkbox\" value=\"jzts\" title=\"并网风机台数(台)\" />");
···········
}else if(type.equals("LIGHT")){
stringBuilderBase.append("<input name=\"baseName\" lay-skin=\"primary\" lay-filter=\"baseFilter\" class=\"baseClass\" type=\"checkbox\" value=\"jzts\" title=\"并网逆变器台数(台)\" />");
···········
}
hashMap.put("stringBuilderExc", stringBuilderExc);
hashMap.put("stringBuilderBase", stringBuilderBase);
return hashMap;
}
2.数据表格数据格式
@RequestParam(value=“attrNames[]”) String[] attrNames)前台传过来的是数组,后台要以这种格式接收
后台传到前台的数据表格的数据格式如下
JSONObject obj = new JSONObject();
obj.put(“code”,0);
obj.put(“msg”,"");
obj.put(“data”, farmList);
if(null!=farms&&!farms.isEmpty()){
obj.put(“count”, farms.size());
}else{
obj.put(“count”, 0);
}
@ResponseBody
@RequestMapping("/getAttrValues")
public JSONObject getAttrValues(String type,@RequestParam(value="attrNames[]") String[] attrNames) {
JSONObject obj = baseDataService.getAttrValues(type,attrNames);
return obj;
}
@Override
public JSONObject getAttrValues(String type,String[] names) {
JSONObject objOrg = getValues(type);
if(null!=names&&names.length>0){
List<JSONObject> farmList = (List<JSONObject>) objOrg.get("data");
List<String> nameAttr = Arrays.asList(names);
for(JSONObject obj:farmList){
for(String name:nameAttr){
if(!obj.containsKey(name)){
obj.remove(name);
}
}
}
}
return objOrg;
}
private JSONObject getValues(String type){
List<RbaseAreaInfo> areas = rbaseAreaInfoDao.findAll();
Map<String,String> areaMap = new HashMap<String,String>();
for(RbaseAreaInfo area:areas){
areaMap.put(area.getAreaId(), area.getOtherName());
}
List<RbaseNetInfo> nets =rbaseNetInfoDao.findAll();
Map<String,String> netMap = new HashMap<String,String>();
for(RbaseNetInfo net:nets){
netMap.put(net.getNetId(),net.getNetFullName());
}
List<RbaseInfoVal> excvalues = rbaseInfoValDao.findAll();
Map<String,List<RbaseInfoVal>> valueMap = new HashMap<String,List<RbaseInfoVal>>();
for(RbaseInfoVal value:excvalues){
if(valueMap.containsKey(value)){
List<RbaseInfoVal> vals = valueMap.get(value);
vals.add(value);
valueMap.put(value.getObjId(), vals);
}else{
List<RbaseInfoVal> vals = new ArrayList<>();
vals.add(value);
valueMap.put(value.getObjId(), vals);
}
}
List<JSONObject> farmList = new ArrayList<JSONObject>();
List<Order> orders = new ArrayList<Order>();
Order rankNo = new Sort.Order(Sort.Direction.ASC, "rankNo");
orders.add(rankNo);
Sort sort = new Sort(orders);
List<RbaseFarmInfo> farms = new ArrayList<RbaseFarmInfo>();
if (type.equals("WIND")) {
farms = rbaseFarmInfoDao.findByDataType(DataTypeConstants.DATA_TYPE_FD, sort);
List<RbaseInfoPoint> points = rbaseInfoPointDao.findByFlagOrderByRank(type);
if(null!=farms&&!farms.isEmpty()){
for(RbaseFarmInfo farm:farms){
String netname = netMap.get(farm.getNetId());
String areaname = areaMap.get(farm.getAreaId());
JSONObject obj = new JSONObject();
obj.put("farmid", farm.getFarmId());
············
List<RbaseInfoVal> values = valueMap.get(farm.getFarmId());
if (null != values && !values.isEmpty()) {
for (RbaseInfoVal val : values) {
obj.put(val.getFlag(),val.getVal1());
}
}
if(null==values||values.isEmpty()){
for(RbaseInfoPoint point:points){
obj.put(point.getPointId(),"");
}
}
farmList.add(obj);
}
}
} else if (type.equals("LIGHT")) {
farms = rbaseFarmInfoDao.findByDataType(DataTypeConstants.DATA_TYPE_GF, sort);
List<RbaseInfoPoint> points = rbaseInfoPointDao.findByFlagOrderByRank(type);
if(null!=farms&&!farms.isEmpty()){
for(RbaseFarmInfo farm:farms){
String netname = netMap.get(farm.getNetId());
String areaname = areaMap.get(farm.getAreaId());
JSONObject obj = new JSONObject();
obj.put("farmid", farm.getFarmId());
············
obj.put("fpCap", farm.getFpCap());
List<RbaseInfoVal> values = valueMap.get(farm.getFarmId());
if (null != values && !values.isEmpty()) {
for (RbaseInfoVal val : values) {
obj.put(val.getFlag(),val.getVal1());
}
}
if(null==values||values.isEmpty()){
for(RbaseInfoPoint point:points){
obj.put(point.getPointId(),"");
}
}
farmList.add(obj);
}
}
}
JSONObject obj = new JSONObject();
obj.put("code",0);
obj.put("msg","");
obj.put("data", farmList);
if(null!=farms&&!farms.isEmpty()){
obj.put("count", farms.size());
}else{
obj.put("count", 0);
}
return obj;
}
}