0
点赞
收藏
分享

微信扫一扫

My97DatePicker制作日、周、月、年报表界面

凛冬已至夏日未远 2022-03-30 阅读 61

背景:接到制作日周月年报表开发任务,我个人经历了很多坑,首先是前端界面,我用My97DatePicker开发,一开始想用四个不同的页面分别显示,后面觉得统一在同一个界面显示效果更好,于是便用My97DatePicker和jqgrid和jQuery zTree做了前端页面

遇到的问题:1、一开始用一个selected和option选择日、周、月、年报,但是我在selected的onchange方法定义了切换规则,发现我无论怎么做出现My97DatePicker样式格式错误,这个原因是因为My97DatePicker没法在一个input标签反应我们的切换。因此我自己找了很多资料想解决,但解决不了。所以用了自己想的方式,我定义了四个标签My97DatePicker的input标签,当我selected发生改变时就分别显示和隐藏日、周、月、年的My97DatePicker的input标签。代码如下:

<input id="startDate"  class="text" type="text" lang='mustcheck' onChange="setTimeRange(this)" onfocus="btnCanClick()" autocomplete="off"
 onClick="WdatePicker({dateFmt:'yyyy年MM月dd日',readOnly: true, maxDate:'#F{$dp.$D(\'endDate\') || \'%y-%M-%d-%H-%m-%s\'}',lang:'<@spring.message code='site.date.language'/>'})" />

<input id="startDatew" style="display: none" class="text" type="text" lang='mustcheck' onChange="setTimeRange(this)" onfocus="btnCanClick()" autocomplete="off"
                   onClick="WdatePicker({maxDate:'#F{$dp.$D(\'endDate\')}',readOnly: true,isShowWeek:true,onpicked:funccc,errDealMode:3})" />

<input id="startDatem" style="display: none" class="text" type="text" lang='mustcheck' onChange="setTimeRange(this)" onfocus="btnCanClick()" autocomplete="off"
                   onClick="WdatePicker({dateFmt:'yyyy年MM月',readOnly: true,maxDate:'#F{\'%y-%M\'}',lang:'<@spring.message code='site.date.language'/>'})" />
<input id="startDatey" style="display: none" class="text" type="text" lang='mustcheck' onChange="setTimeRange(this)" onfocus="btnCanClick()" autocomplete="off"
                   onClick="WdatePicker({dateFmt:'yyyy年',eadOnly: true,maxDate:'#F{\'%y\'}',lang:'<@spring.message code='site.date.language'/>'})" />

报表类型的选择

<select id="selReportType" onchange="selReportType()">
           <option value="dayReport" selected="selected">日报</option>
           <option value="weekReport">周报</option>
           <option value="monReport">月报</option>
           <option value="yearReport">年报</option>
</select>       

function selReportType(){
		//rtype 获取选择的和全局变量的dayReport(初始化为“dayReport”)对比,为了后面其他地方的判断
        var rtype = document.getElementById("selReportType").value;
        if(rtype=="dayReport"){
            $("#startDatew").css("display","none");
            $("#startDatem").css("display","none");
            $("#startDatey").css("display","none");
            $("#startDate").css("display","inline");
            var dat = new Date();
            //给My97DatePicker的input标签赋切换的时候初始化的值(一进来界面的初始化值在js那边也要赋值一次)
            $dp.$('startDate').value =dat.format("yyyy年MM月dd日");
            abmodelParam = {'isLoad' : false}
            //记录选择的报表类型
            reporttype = 0;
            $.jgrid.gridUnload("#"+gridid);
        }
        else if(rtype=="weekReport"){;
            $("#startDate").css("display","none");
            $("#startDatem").css("display","none");
            $("#startDatey").css("display","none");
            $("#startDatew").css("display","inline");
            var dat = new Date();
            $dp.$('startDatew').value = getWeek(dat.format("yyyy-MM-dd"));
            abmodelParam = {'isLoad' : false}
            reporttype = 1;
            //卸载grid(这个是个大坑,当时折腾了好久),当grid的表头发生改变时要卸载,不然没法正常使用
            $.jgrid.gridUnload("#"+gridid);
        }
        else if(rtype=="monReport"){;
            $("#startDate").css("display","none");
            $("#startDatew").css("display","none");
            $("#startDatey").css("display","none");
            $("#startDatem").css("display","inline");
            var dat = new Date();
            $dp.$('startDatem').value =dat.format("yyyy年MM月");
            abmodelParam = {'isLoad' : false}
            reporttype = 2;
            $.jgrid.gridUnload("#"+gridid);

        }
        else if(rtype=="yearReport"){
            $("#startDate").css("display","none");
            $("#startDatew").css("display","none");
            $("#startDatem").css("display","none");
            $("#startDatey").css("display","inline");
            var dat = new Date();
            $dp.$('startDatey').value =dat.format("yyyy年");
            reporttype = 3;
            abmodelParam = {'isLoad' : false}
            $.jgrid.gridUnload("#"+gridid);
            $("#"+gridid).onclick();
            $("#"+gridid+"Div").onclick();

        }
    }

做周报时需要加上两个方法,一个是或许周数(为了初始化的显示),一个是My97DatePicker周数的样式。

function getWeek(date){
        date = new Date(date);
        var date2 = new Date(date.getFullYear(), 0, 1);
        var day1 = date.getDay();
        if (day1 == 0) day1 = 7;
        var day2 = date2.getDay();
        if (day2 == 0) day2 = 7;
        let d = Math.round((date.getTime() - date2.getTime() + (day2 - day1) * (24 * 60 * 60 * 1000)) / 86400000);
        //当周数大于52则为下一年的第一周
        if((Math.ceil(d / 7) + 1)>52){
		//自定义显示的格式
            return (date.getFullYear()+1)+"年第1周"
        }
        return date.getFullYear()+"年第"+(Math.ceil(d / 7) + 1)+"周";
    }
 function funccc(){
 		//可以自定义格式
        $dp.$('startDatew').value=$dp.cal.getP('y')+"年第"+$dp.cal.getP('W','WW')+"周";
        return ;
    }

记得自己也要去看一些My97DatePicker的属性和方法,不然看不懂怎么运用和自定义的

举报

相关推荐

0 条评论