查询用户对应时间段的数据,并且可以对选中的内容做更改。(bootstrapTable、layer)

近段时间做项目, 有个需求。查询用户对应时间段的数据,并且可以对选中的内容做更改。

看到这个需求,一下就想到了bootstrapTable。

在这里插入图片描述
这是成品样式。

<div id = "updateDiv" style="display: none;">
		<div id = "ch1">
			<input type="checkbox" id ="typeInfo" name = "typeInfo"  value ="常温">常温
			<input type="checkbox" id ="typeInfo" name = "typeInfo"  value ="冷冻">冷冻
			<input type="checkbox" id ="typeInfo" name = "typeInfo"  value ="冷藏">冷藏
		</div>
		<div id = "ch2">
			<input type="checkbox" id ="jobInfo" name="jobInfo"  value ="拣货">拣货
			<input type="checkbox" id ="jobInfo" name="jobInfo"  value ="收货">收货
			<input type="checkbox" id ="jobInfo" name="jobInfo"  value ="装车">装车
			<input type="checkbox" id ="jobInfo" name="jobInfo"  value ="上架">上架
			<input type="checkbox" id ="jobInfo" name="jobInfo"  value ="补货">补货
		</div>
		<div>		
			<input type="text" class="time-input" id="startOpTime" style="width:40%;" placeholder="开始时间"/>
                        <span>-</span>
			<input type="text" class="time-input" id="endOpTime" style="width:40%;" placeholder="结束时间" />
		</div>
		
	</div>
	<table id="recordList"></table>







$(function () {
	//设置复选框只能选择一个
	getCheckBox();
	//初始化数据加载
	getColumns();
    
	laydate.render({
		elem: '#startOpTime',//指定元素
		type: 'datetime'
	});
	laydate.render({
		elem: '#endOpTime',//指定元素
		type: 'datetime' 
	});
	function getCheckBox() {
		 $('#ch1').find('input[type=checkbox]').bind('click', function(){  
          var ss= $("[name=typeInfo]");
			  for (var i = 0; i < ss.length; i++) {
				 ss[i].checked = false;
			  }
			  this.checked = true;
		 }); 

		 $('#ch2').find('input[type=checkbox]').bind('click', function(){  
          var ss= $("[name=jobInfo]");
			  for (var i = 0; i < ss.length; i++) {
				 ss[i].checked = false;
			  }
			  this.checked = true;
		 });
	}

	//初始化复选框
	function resetCheckBoxAndTime() {		
		var ss= $("input[type=checkbox]");
			  for (var i = 0; i < ss.length; i++) {
				 ss[i].checked = false;
			  }
        $("#startOpTime").val(null);	 
		$("#endOpTime").val(null);	 
		
	}
	function getDate() { 
	  var data;
	  data = {
		   "total":"13",
		   "rows":[{
			"2020-10-11":[{
				"type":"",
				"job":"",
				"timeDate":[{
					"startDate":"08:00",
					"endDate":"22:00"
				}]
			}],
			"2020-10-12":[{
				"type":"常温",
				"job":"拣货",
				"timeDate":[{
					"startDate":"08:00",
					"endDate":"22:00"
				}]
			}],
			"2020-10-13":[{
				"type":"常温",
				"job":"拣货",
				"timeDate":[{
					"startDate":"08:00",
					"endDate":"22:00"
				}]
			}],
			"2020-10-14":[{
				"type":"冷冻",
				"job":"上架",
				"timeDate":[{
					"startDate":"08:00",
					"endDate":"24:00"
				}]
			}],
			"userName":"张三",
			"userId":"1"
		   },{
			"2020-10-11":[{
				"type":"常温",
				"job":"拣货",
				"timeDate":[{
					"startDate":"08:00",
					"endDate":"22:00"
				}]
			}],
			"2020-10-12":[{
				"type":"常温",
				"job":"拣货",
				"timeDate":[{
					"startDate":"08:00",
					"endDate":"21:00"
				}]
			}],
			"2020-10-13":[{
				"type":"冷冻",
				"job":"上架",
				"timeDate":[{
					"startDate":"08:00",
					"endDate":"22:00"
				}]
			}],
			"2020-10-14":[{
				"type":"常温",
				"job":"拣货",
				"timeDate":[{
					"startDate":"08:00",
					"endDate":"22:00"
				}]
			}],
			"userName":"李四",
			"userId":"1"
		   },{
			"2020-10-11":[{
				"type":"常温",
				"job":"拣货",
				"timeDate":[{
					"startDate":"08:00",
					"endDate":"11:00"
				}]
			}],
			"2020-10-12":[{
				"type":"常温",
				"job":"拣货",
				"timeDate":[{
					"startDate":"08:00",
					"endDate":"10:00"
				}]
			}],
			"2020-10-13":[{
				"type":"冷冻",
				"job":"上架",
				"timeDate":[{
					"startDate":"08:00",
					"endDate":"23:00"
				}]
			}],
			"2020-10-14":[{
				"type":"冷冻",
				"job":"上架",
				"timeDate":[{
					"startDate":"08:00",
					"endDate":"22:00"
				}]
			}],
			"userName":"王二麻子",
			"userId":"1"
		   }]
	 }
	  return data;
  }
	function getColumns() {
			   var returnValue = getDate();
			   
               var data = returnValue.rows;
               var dateStrArr=getDateStrArr();
               var mycolumn=[];
			   //console.log(dateStrArr);
               mycolumn=[
                   {field: 'userName', title:"用户", align: 'center'},
               ]
 
               for(var s in dateStrArr) {
                   var str = dateStrArr[s];
                   mycolumn.push({
                       field: str,
                       title: str,
                       align: 'center',
                       valign: 'middle',
                       formatter: function (value,row,index) {
						   for(var i in value) {
							   var str;		
							   var br;
							   if(value[i].type==''){
									str = "";
									br = "";
							   }else{
									str = "、";
									br = "<br/>";
							   }
							   //console.log(value[i].type);
							   return "<a href='javascript:;' title='事项' style='font-size: 15px;color:#FA7310'>" + value[i].type+str+value[i].job+br+value[i].timeDate[0].startDate+"~" +value[i].timeDate[0].endDate+ "</a>";
						   } 
                       }
                   })
               }
               $('#recordList').bootstrapTable({
                   data:data,
                   cache:false,
                   pagination: false,
                   
                   dataField: 'rows',
                   toolbar: '#toolbar',
                   striped: true,
                   clickToSelect: true,
                   showColumns: true,
                   showRefresh: true,
                   showToggle: true,
                   columns: mycolumn,
				   //点击表格,可以获取到当前的所点击的信息
				   onClickCell:function(field, value, row, $element)
				  {
					  //这两个个字段记录从后台传过来的事项是否为空,为空就不去赋值
					  var startTime;
					  var endTime;
					  //再创建两个字符串,记录库区和岗位,要传到后台
					  var kq;
					  var gw;
					  resetCheckBoxAndTime();
					  if(field=="userName"){
						alert("此列不可修改");
						return;
					  }
					   //alert(field);
					   //alert(value);
					  //alert(JSON.stringify(row.userId));

					   //$("#updateDiv").val(value);
					   //循环复选框,默认选中后台传过来的值
					    for(var info in value) {
							var unitTypeCheckbox=$("input[name='typeInfo']");
							for(var i=0;i<unitTypeCheckbox.length;i++){
								if(unitTypeCheckbox[i].value==value[info].type){
									unitTypeCheckbox[i].checked=true;
								}
							}

							var unitJobCheckbox=$("input[name='jobInfo']");
							for(var i=0;i<unitJobCheckbox.length;i++){
								if(unitJobCheckbox[i].value==value[info].job){
									unitJobCheckbox[i].checked=true;		
								}
							}
							//给开始时间和结束时间赋值
							startTime = value[info].timeDate[0].startDate;							   
							endTime = value[info].timeDate[0].endDate;
					    }
						//给时间插件赋值
						if(startTime!=null){
							$("#startOpTime").val(field+" "+startTime+":00");
						}
						if(endTime!=null){
							$("#endOpTime").val(field+" "+endTime+":00");
						}
						 
					    var btns = {
							btn : ["确定","取消"],
							yes : function(index, layero) {//保存
							var upIndex = $element.data('index');
													
							//获取库区复选框选中的值
							 $('input[name="typeInfo"]:checked').each(function(){
								kq = $(this).val();								
							});

							//获取岗位复选框选中的值
							$('input[name="jobInfo"]:checked').each(function(){
								gw = $(this).val();
							});

							startTime =  $("#startOpTime").val();
							console.log(startTime);
							endTime = $("#endOpTime").val();
							console.log(endTime);
							/*$('#recordList').bootstrapTable('updateRow', {
								index: upIndex,
								value: row.field
							});*/
							layer.close(index);
								
							 },
							 //点击取消的时候
							btn2 : function(index, layero) {//清空
								
							}
    	              };
					  
					  layer.open($.extend({
						type : 1,
						shadeClose : false,
						area : [ '23%', '23%' ],
						title : row.userName +" "+ field +"的排班",
						maxmin: true,
						cancel : function(){
							return true;
						},
						end: function(index){
							return true;
						},
						shade : 0.5,
						scrollbar : false,
						btnAlign : 'c', // 居中
						content : $("#updateDiv")
					},btns));
	            } 
				   
          });
   }


 //获取开始时间和结束时间中间的天数
 function getDateStrArr() {
            var dateStrArr=[];
            var beginDate = "2020-10-10";
            var endDate =  "2020-10-15";
            var date_count = GetNumberOfDays(beginDate, endDate);
            for (var i = 0; i <= date_count; i++) {
                var date_add = new Date(beginDate).setDate(new Date(beginDate).getDate() + i);
                var date =formatDateFromStr(date_add);
                dateStrArr.push(date);
            }
            ;
            return dateStrArr;
        };
 
 
         //获得天数
        function GetNumberOfDays(date1, date2) {
            var a1 = Date.parse(new Date(date1));
            var a2 = Date.parse(new Date(date2));
            //核心:时间戳相减,然后除以天数
            var day = parseInt((a2 - a1) / (1000 * 60 * 60 * 24));
            return day
        };

		//日期格式转换年月日
		function formatDateFromStr(str) {
			return StringToTime(str,"yyyy-MM-dd");
		}
 })

记录一下碰到的问题。

最开始碰到的问题就是数据格式的问题。因为要拿JSON数据在代码里生成bean,但是一个用户下面有多个时间段数据,怎么才能生成呢?

最开始我是这样弄得

public class SchedulingInfoBean {
	private List<RowsBean> rows;
	
	public List<RowsBean> getRows() {
		return rows;
	}

	public void setRows(List<RowsBean> rows) {
		this.rows = rows;
	}

	public static class RowsBean{
		private Map<String, Object> info;
		private String userName;
		private String userId;
		
		public void setUserName(String userName){
			this.userName = userName;
		}
		public String getUserName(){
			return this.userName;
		}
		public void setUserId(String userId){
			this.userId = userId;
		}
		public String getUserId(){
			return this.userId;
		}
		public Map<String, Object> getInfo() {
			return info;
		}
		public void setInfo(Map<String, Object> info) {
			this.info = info;
		}
		public static class SchedulingBean{
			private String id;
			private String type;
			private String job;
			private String pid;
			private String zid;
			private String classesId;
			private List<TimeDateBean> timeDate;
			
			public String getId() {
				return id;
			}
			public void setId(String id) {
				this.id = id;
			}
			public void setType(String type){
				this.type = type;
			}
			public String getType(){
				return this.type;
			}
			public void setJob(String job){
				this.job = job;
			}
			public String getJob(){
				return this.job;
			}
			public String getPid() {
				return pid;
			}
			public void setPid(String pid) {
				this.pid = pid;
			}
			public String getZid() {
				return zid;
			}
			public void setZid(String zid) {
				this.zid = zid;
			}
			public String getClassesId() {
				return classesId;
			}
			public void setClassesId(String classesId) {
				this.classesId = classesId;
			}
			public void setTimeDate(List<TimeDateBean> timeDate){
				this.timeDate = timeDate;
			}
			public List<TimeDateBean>  getTimeDate(){
				return this.timeDate;
			}
			public static class TimeDateBean{
				private String startDate;
				private String endDate;
				public void setStartDate(String startDate){
					this.startDate = startDate;
				}
				public String getStartDate(){
					return this.startDate;
				}
				public void setEndDate(String endDate){
					this.endDate = endDate;
				}
				public String getEndDate(){
					return this.endDate;
				}
			}
		}
	}
}

但是这样生成的数据,虽然是拿时间作为key了,但是外面却包了一层info。一直想着怎么去掉这个info。然后走进了死胡同。其实很简单,不要把rows里的数据当成一个正常对象。把他想成一个JSON。这样的话,我们就可以把想要的数据先拼成JSON,再存到rows中。这样就不会出现再包一层的情况。

public class SchedulingInfoBean {
	private List<JSON> rows;
	
	public List<JSON> getRows() {
		return rows;
	}

	public void setRows(List<JSON> rows) {
		this.rows = rows;
	}

	public static class RowsBean{
		private Map<String, Object> info;
		
		public Map<String, Object> getInfo() {
			return info;
		}
		public void setInfo(Map<String, Object> info) {
			this.info = info;
		}
		public static class SchedulingBean{
			private String id;
			private String type;
			private String job;
			private String pid;
			private String zid;
			private String classesId;
			private List<TimeDateBean> timeDate;
			
			public String getId() {
				return id;
			}
			public void setId(String id) {
				this.id = id;
			}
			public void setType(String type){
				this.type = type;
			}
			public String getType(){
				return this.type;
			}
			public void setJob(String job){
				this.job = job;
			}
			public String getJob(){
				return this.job;
			}
			public String getPid() {
				return pid;
			}
			public void setPid(String pid) {
				this.pid = pid;
			}
			public String getZid() {
				return zid;
			}
			public void setZid(String zid) {
				this.zid = zid;
			}
			public String getClassesId() {
				return classesId;
			}
			public void setClassesId(String classesId) {
				this.classesId = classesId;
			}
			public void setTimeDate(List<TimeDateBean> timeDate){
				this.timeDate = timeDate;
			}
			public List<TimeDateBean>  getTimeDate(){
				return this.timeDate;
			}
			public static class TimeDateBean{
				private String startDate;
				private String endDate;
				public void setStartDate(String startDate){
					this.startDate = startDate;
				}
				public String getStartDate(){
					return this.startDate;
				}
				public void setEndDate(String endDate){
					this.endDate = endDate;
				}
				public String getEndDate(){
					return this.endDate;
				}
			}
		}
	}
}

本来RowsBean中存放的是一个map,和两个字符串,现在我们可以把两个字符串一起放到map中转成JSON对象,再丢到rows中。就完美的解决了问题。

其次就是,设置页面复选框 ,有且仅有选中一个值


<div id = "ch1">
	<!-- <input type="checkbox" id ="typeInfo" name = "typeInfo"  value ="常温">常温
	<input type="checkbox" id ="typeInfo" name = "typeInfo"  value ="冷冻">冷冻
	<input type="checkbox" id ="typeInfo" name = "typeInfo"  value ="冷藏">冷藏 -->
</div>
function getCheckBox() {
      		 $('#ch1').find('input[type=checkbox]').bind('click', function(){  
                 var ss= $("[name=typeInfo]");
                 var a = 0;
            	  if(this.checked == false){
            		  a = 1;
            	  }
      			  for (var i = 0; i < ss.length; i++) {
      				 ss[i].checked = false;
      			  }
      			  if(a==1){
                		 this.checked = false;
                	  }else{
                		 this.checked = true;
                	  }
      		 }); 

虽然不是个好办法,但是确实满足我当前的需求。

最后就是 页面选择的两个时间,判断结束时间不可以小于开始时间。

function validateTimePeriod(assigntime, deadlinetime) {
     var reg = new RegExp('-','g');
           assigntime = assigntime.replace(reg,'/');//正则替换
           deadlinetime = deadlinetime.replace(reg,'/');
           assigntime = new Date(parseInt(Date.parse(assigntime),10));
           deadlinetime = new Date(parseInt(Date.parse(deadlinetime),10));
           if(assigntime>deadlinetime){
               return false;
           }else{
               return true;
           }
  	 }

用正则表达式来做验证判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值