فهرست منبع

更新加班单

yuanzhi_kuang 3 ماه پیش
والد
کامیت
3d535d8e43

+ 2672 - 0
js/addon/attendmanage/web/js/shr/ats/atsOverTimeBillBatchEdit.js

@@ -0,0 +1,2672 @@
+var _rowMap;
+var isOTControl = false;
+var isOtrolByDateType = false;
+var fixedNum;
+shr.defineClass(
+    "shr.ats.AtsOverTimeBillBatchEdit",
+    shr.ats.atttenceEditFormImport,
+    {
+        filter: {},
+        OTContrlParams: {},
+        initalizeDOM: function () {
+            shr.ats.AtsOverTimeBillBatchEdit.superClass.initalizeDOM.call(this);
+            var that = this;
+            that.remoteCall({
+                type: "post",
+                method: "getDecimalPlace",
+                //handler:
+                //    "com.kingdee.shr.ats.web.handler.AtsBillBaseEditHandler",
+                success: function (res) {
+                    fixedNum = res;
+                }
+            });
+
+            //		that.getOTContrlParams();
+            //按组织填充按钮
+            $(
+                '<button type="button" style="margin-left:4px;margin-right:4px" class="shrshrbtn-primary shrbtn" id="orgfill">' +
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_17 +
+                    "</button>"
+            ).insertAfter($("#addRow_entries"));
+
+            var classfullNameService =
+                "com.kingdee.shr.ats.web.formEditImport.AtsOverTimeBillFileEditFormService";
+            //导入 按钮
+            $(
+                '<button type="button" style="margin-left:4px;margin-right:4px;display: none" class="shrshrbtn-primary shrbtn" id="import">' +
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_3 +
+                    "</button>"
+            ).insertAfter($("#addRow_entries"));
+            $("#import").click(function () {
+                that.importAction(null, classfullNameService);
+            });
+
+            $(".editGrid-toolbar").append(
+                '<div style="display: inline;padding-left: 20px;">' +
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_32 +
+                    '<div><div id="hasNum"></div>'
+            );
+            var serviceId = shr.getUrlRequestParam("serviceId");
+            var url =
+                shr.getContextPath() +
+                "/dynamic.do?checkLicense=true&uipk=com.kingdee.eas.hr.ats.app.OverTimeOrgFillForm";
+            url += "&serviceId=" + encodeURIComponent(serviceId);
+            $("#orgfill").click(function () {
+                $("#orgFillDiv").attr("src", url);
+                var gridNum = $("#entries").getGridParam("reccount");
+                $("#hasNum").val(gridNum);
+                $("#orgFillDiv").dialog({
+                    title:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_17,
+                    width: 1020,
+                    height: 450,
+                    modal: true,
+                    resizable: false,
+                    position: {
+                        my: "center",
+                        at: "top+20%",
+                        of: window
+                    },
+                    open: function (event, ui) {},
+                    buttons: [
+                        {
+                            text:
+                                jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_19,
+                            click: function () {
+                                //校验F7数据
+                                if (that.checkF7Data()) {
+                                    var oldRowIds = $("#entries").getDataIDs();
+                                    that.fillGrid();
+                                    var newRowIds = $("#entries").getDataIDs();
+                                    rowIds = that.getFillRowId(
+                                        oldRowIds,
+                                        newRowIds
+                                    );
+                                    $.each(rowIds, function (n, value) {
+                                        //that.calRestTimeLen(value); 2015-11-03:组织填充不用自动计算时长
+                                        that.changOtTimeTipInfo(value);
+                                    });
+                                    //检查不超过100条记录
+                                    //that.checkRowIsOver();
+                                    $(this).dialog("close");
+                                } else {
+                                    return;
+                                }
+                            }
+                        },
+                        {
+                            text:
+                                jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_5,
+                            click: function () {
+                                $(this).dialog("close");
+                            }
+                        }
+                    ]
+                });
+
+                $("#orgFillDiv").attr("style", "width:1020px;height:550px;");
+            });
+
+            var entries_cont = waf("#entries");
+            entries_cont.jqGrid("option", {
+                onChange: function (rowid, cellname, value, iRow, iCol) {
+                    console.log(rowid, cellname, value, iRow, iCol, 123123);
+                },
+                beforeSaveCell: function (
+                    rowid,
+                    cellname,
+                    value,
+                    iRow,
+                    iCol
+                ) {},
+                afterSaveCell: function (rowid, cellname, value, iRow, iCol) {
+                    if (value["adminOrgUnit.id"]) {
+                        $("#entries").jqGrid(
+                            "setCell",
+                            rowid,
+                            "adminOrgUnit.id",
+                            value["adminOrgUnit.id"]
+                        );
+                    }
+
+                    that.removePreShowError(rowid);
+                    if (cellname == "otDate") {
+                        var val = value;
+                        if (val.length <= 10) {
+                            val = val + " 00:00:00";
+                        }
+                        val &&
+                            $("#entries").jqGrid(
+                                "setCell",
+                                rowid,
+                                "startTime",
+                                val
+                            );
+                        val &&
+                            $("#entries").jqGrid(
+                                "setCell",
+                                rowid,
+                                "endTime",
+                                val
+                            );
+                        that.changeOverTimeType(rowid);
+                        that.calRestTimeLen(rowid);
+                        that.getOTContrlParams(rowid);
+                    }
+
+                    if (cellname == "otType") {
+                        that.changeOTCompens(rowid);
+                    }
+                    // 添加 开始时间  结束时间   休息时长(分钟) 响应时间
+                    if (
+                        cellname == "startTime" ||
+                        cellname == "endTime" ||
+                        cellname == "restTime"
+                    ) {
+                        if (cellname != "restTime") {
+                            that.calRestTimeLen(rowid);
+                        }
+                        that.calculateOTtimes(rowid);
+                    }
+                    if (cellname == "person") {
+                        that.calRestTimeLen(rowid);
+                        that.getOTContrlParams(rowid);
+                    }
+                    if (cellname == "applyOTTime") {
+                        // 加班小时数  发生改变就给予提示
+                        that.changOtTimeTipInfo(rowid);
+                    }
+                    if (
+                        cellname == "restStartTime" ||
+                        cellname == "restStartTime2" ||
+                        cellname == "restEndTime" ||
+                        cellname == "restEndTime2"
+                    ) {
+                        //计算休息时间,加班时间
+                        var startTime = $("#entries").jqGrid(
+                            "getCell",
+                            rowid,
+                            "startTime"
+                        );
+                        var endTime = $("#entries").jqGrid(
+                            "getCell",
+                            rowid,
+                            "endTime"
+                        );
+                        var restStartTime = $("#entries").jqGrid(
+                            "getCell",
+                            rowid,
+                            "restStartTime"
+                        );
+                        var restEndTime = $("#entries").jqGrid(
+                            "getCell",
+                            rowid,
+                            "restEndTime"
+                        );
+                        var restStartTime2 = $("#entries").jqGrid(
+                            "getCell",
+                            rowid,
+                            "restStartTime2"
+                        );
+                        var restEndTime2 = $("#entries").jqGrid(
+                            "getCell",
+                            rowid,
+                            "restEndTime2"
+                        );
+                        if (startTime == "" || endTime == "") {
+                            return;
+                        }
+                        
+                        var totalRestTime = 0;
+                        var totalRestTimeLong = 0;
+                        var restStartTimeOfDate;
+                        var restEndTimeOfDate;
+                        if(shr.getBowserInfo().browser === 'IE' || shr.getBowserInfo().browser === 'Safari'){
+                            restStartTime = restStartTime.replace(/-/g,'/');
+                            restEndTime = restEndTime.replace(/-/g,'/');
+                            restStartTime2 = restStartTime2.replace(/-/g,'/');
+                            restEndTime2 = restEndTime2.replace(/-/g,'/');
+                        }
+                        if (restStartTime != "" && restEndTime != "") {
+                            restStartTimeOfDate = new Date(restStartTime);
+                            restEndTimeOfDate = new Date(restEndTime);
+                            var times =
+                                restEndTimeOfDate.getTime() -
+                                restStartTimeOfDate.getTime();
+                            if (times < 0) {
+                                times = 0;
+                            }
+                            totalRestTimeLong += times;
+                            times = times / 1000 / 60;
+                            totalRestTime += times;
+                        }
+                        if (restStartTime2 != "" && restEndTime2 != "") {
+                            var restStartTime2OfDate = new Date(restStartTime2);
+                            var restEndTime2OfDate = new Date(restEndTime2);
+                            if (
+                                (restStartTime != "" &&
+                                    restEndTime2OfDate.getTime() >
+                                        restStartTimeOfDate.getTime() &&
+                                    restStartTimeOfDate.getTime() >=
+                                        restStartTime2OfDate.getTime()) ||
+                                (restEndTime != "" &&
+                                    restEndTimeOfDate.getTime() <=
+                                        restEndTime2OfDate.getTime() &&
+                                    restStartTime2OfDate.getTime() <
+                                        restEndTimeOfDate.getTime()) ||
+                                (restStartTime != "" &&
+                                    restEndTime != "" &&
+                                    restEndTimeOfDate.getTime() >=
+                                        restEndTime2OfDate.getTime() &&
+                                    restStartTime2OfDate.getTime() >=
+                                        restStartTimeOfDate.getTime())
+                            ) {
+                                //时间有交叉
+                                $("#entries").jqGrid(
+                                    "setCell",
+                                    rowid,
+                                    "restEndTime2",
+                                    restStartTime2
+                                );
+                            } else {
+                                var times =
+                                    restEndTime2OfDate.getTime() -
+                                    restStartTime2OfDate.getTime();
+                                if (times < 0) {
+                                    times = 0;
+                                }
+                                totalRestTimeLong += times;
+                                times = times / 1000 / 60;
+                                totalRestTime += times;
+                            }
+                        }
+                        var t1 = totalRestTime.toFixed(
+                            atsMlUtile.getSysDecimalPlace()
+                        );
+                        $("#entries").jqGrid("setCell", rowid, "restTime", t1);
+                        var startTime = NewDate(startTime + ":00");
+                        var endTime = NewDate(endTime + ":00");
+                        var se =
+                            endTime.getTime() -
+                            startTime.getTime() -
+                            totalRestTimeLong; // 毫秒
+                        var tfl = se / (3600 * 1000);
+                        $("#entries").jqGrid(
+                            "setCell",
+                            rowid,
+                            "applyOTTime",
+                            tfl
+                        );
+                        that.getOTContrlParams(rowid);
+                    }
+                },
+                afterEditCell: function (rowid, cellname, value, iRow, iCol) {
+                    if (
+                        cellname == "otType" &&
+                        that.OTContrlParams[rowid] &&
+                        that.OTContrlParams[rowid].isOtrolByDateType
+                    ) {
+                        $("#" + iRow + "_otType").shrPromptBox("disable");
+                    }
+                    if (cellname == "otCompens") {
+                        if (that.filter[rowid] == undefined) {
+                            // R20221006-0542 修复选择加班费后 再点击“补偿方式”F7就变成了调休的问题
+                            // that.changeOTCompens(rowid);
+                        }
+                        if (that.filter[rowid]) {
+                            //						$("#"+rowid+"_otCompens").shrPromptBox("setFilter",that.filter[rowid]);
+                            $(
+                                "#" +
+                                    $("#entries").jqGrid(
+                                        "getCell",
+                                        rowid,
+                                        "rn"
+                                    ) +
+                                    "_otCompens"
+                            ).shrPromptBox("setFilter", that.filter[rowid]);
+                        }
+                    }
+                    if (cellname == "person") {
+                        var hrOrgUnitId = $("#hrOrgUnit_el").val();
+                        $("#" + rowid + "_person")
+                            .shrPromptBox()
+                            .attr("data-params", hrOrgUnitId);
+                        $("#" + iRow + "_person").shrPromptBox("option", {
+                            onchange: function (e, value) {
+                                $("#entries").jqGrid(
+                                    "setCell",
+                                    rowid,
+                                    "person.number",
+                                    value.current
+                                        ? value.current["person.number"]
+                                        : ""
+                                );
+                            }
+                        });
+
+                    }
+                    if(cellname == "attAdminOrgUnit"){
+                        var personId = $("#entries").jqGrid("getCell", rowid, "person").id;
+                        var attendanceDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+
+                        if(!(personId && attendanceDate)){
+                            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_999});
+                            return false;
+                        }else{
+                            //$("#"+rowid+"_attPosition").shrPromptBox().attr("data-params", adminOrg);
+                            $("#"+iRow+"_attAdminOrgUnit").shrPromptBox("setOtherParams", {
+                                personId: personId,
+                                attendanceDate: attendanceDate
+                            });
+                        }
+
+
+                    }
+
+
+                }
+            });
+
+            that.setButtonVisible(); //初始化页面安装状态,如果是已经提交的或者审批通过的单据编辑按钮不显示
+            //隐藏提交生效按钮
+            if (that.getOperateState() == "EDIT") {
+                if (that.isFromWF()) {
+                    // 来自流程中心
+                    $("#submitEffect").hide();
+                    $("#submit").text(
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_25
+                    );
+                }
+            }
+
+            //审核编辑界面
+            if (
+                that.isFromWF() &&
+                that.getOperateState() == "EDIT" &&
+                $("#billState").val() != 0
+            ) {
+                $("#deleteRow_entries")
+                    .unbind("click")
+                    .attr("onclick", "")
+                    .css("cursor", "default");
+                $("#addRow_entries")
+                    .unbind("click")
+                    .attr("onclick", "")
+                    .css("cursor", "default");
+                $(".editGrid-toolbar").hide();
+                $("#submit").hide();
+
+                var lastRowNum = $("#entries").getGridParam("reccount");
+                for (var i = 1; i <= lastRowNum; i++) {
+                    var temp_id = $("#entries tr:eq(" + i + ")").attr("id");
+                    $("#entries").jqGrid(
+                        "setCell",
+                        temp_id,
+                        "person",
+                        "",
+                        "not-editable-cell"
+                    );
+                }
+            }
+
+            //考勤计算--已计算页签--明细显示模式--请假按钮进来,只显示提交生效按钮
+            if (
+                shr.getUrlParam("fromCalDetail") != null &&
+                shr.getUrlParam("fromCalDetail") == "1"
+            ) {
+                $("#save").hide();
+                $("#submit").hide();
+                $("#cancelAll").hide();
+                $("#import").hide();
+                $("#orgfill").hide();
+                $(".view_manager_header > div > div").eq(0).remove();
+                $("#submitEffect").addClass("shrbtn-primary");
+			$('#workAreaDiv .ui-jqgrid-bdiv').css('max-height','253px') // 当页面作为弹框时 表格过长则隐藏滑动
+            }
+            //增加业务组织处理
+            that.processF7ChangeEventHrOrgUnit();
+            var hrOrgUnitId = $("#hrOrgUnit_el").val();
+            that.initCurrentHrOrgUnit(hrOrgUnitId);
+            that.initCcPersonPrompt();
+        },
+        clearCCPersonIdsPrompt: function () {
+            if ($('#ccPersonIds').length == 0) {
+            return;
+        }
+        atsCcPersonUtils.clearCCPersonIdsPrompt(this);
+        },
+        initCcPersonPrompt: function () {
+            if ($('#ccPersonIds').length == 0) {
+            return;
+        }
+        atsCcPersonUtils.initCCPersonIdsPrompt(this);
+            if (this.getOperateState() != "VIEW") {
+                var person = $("#proposer").shrPromptBox("getValue");
+                if (!person) {
+                    // shr.showWarning({message:"Please select people."});
+                } else {
+                    $("#ccPersonIds").shrPromptBox("setOtherParams", {
+                        // handler: "com.kingdee.shr.ats.web.handler.team.F7.TeamPersonForEmpOrgF7ListHandler",
+                        personId: person.id
+                    });
+                }
+            }
+        },
+        processF7ChangeEventHrOrgUnit: function () {
+            var that = this;
+            if (that.getOperateState() != "VIEW") {
+                $("#hrOrgUnit").shrPromptBox("option", {
+                    onchange: function (e, value) {
+                        var info = value.current;
+                        that.initCurrentHrOrgUnit(info.id);
+                        //					that.emptyHrOrgBasedEntryData();
+                        // $("#entries_person_number").val("");
+                        // $("#entries_adminOrgUnit").val("");
+                        // $("#entries_position").val("");
+                    }
+                });
+            }
+        },
+        initCurrentHrOrgUnit: function (hrOrgUnitId) {
+            var that = this;
+            // $("#entries_person").shrPromptBox().attr("data-params",hrOrgUnitId);
+            that.initQuerySolutionHrOrgUnit(hrOrgUnitId);
+        },
+        //切换业务组织,清空分录与业务组织相关的字段:人员、补签卡原因(视图上配)
+        //	,emptyHrOrgBasedEntryData : function(){
+        //		$("#entries").find('[aria-describedby=entries_person], [aria-describedby=entries_otCompens],'
+        //			+ '[aria-describedby=entries_otReason]').text("");
+        //	}
+        initQuerySolutionHrOrgUnit: function (hrOrgUnitId) {
+            var that = this;
+            that.remoteCall({
+                type: "post",
+                method: "initQuerySolution",
+                param: {
+                    hrOrgUnitId: hrOrgUnitId
+                },
+                async: true,
+                success: function (res) {}
+            });
+        },
+        //新增 jqgrid 行 方法, 复写
+        addRowAction: function (event) {
+            //增加自己的逻辑
+            var that = this;
+
+            var num = $("#entries").jqGrid("getRowData").length;
+            if (num >= 100) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_6
+                });
+                return;
+            }
+
+            var source = event.currentTarget,
+                $editGrid = this.getEditGrid(source);
+
+            var data = this.createNewEntryModel(); // 默认的补偿方式
+            if (typeof data === "undefined") {
+                data = {};
+            }
+
+            var editGridCont = this._getEditGridCont(source);
+            if (editGridCont.data("editType") == "inline") {
+                // 表格内编辑
+                $editGrid.jqGrid("addRow", { data: data });
+            } else {
+                $editGrid.wafGrid("addForm");
+            }
+
+            var event = document.createEvent("HTMLEvents");
+            event.initEvent("editComplete_" + $editGrid.attr("id"), true, true);
+            event.eventType = "message";
+            document.dispatchEvent(event);
+        },
+        // 获取填充的 rowId,导入的rowId
+        getFillRowId: function (oldRowIds, newRowIds) {
+            var size = newRowIds.length;
+            var sizeOld = oldRowIds.length;
+            if (sizeOld == 0) {
+                return newRowIds;
+            }
+            var rowIds = [];
+            for (var i = 0; i < size; i++) {
+                if (i >= sizeOld) {
+                    rowIds.push(newRowIds[i]);
+                }
+            }
+            return rowIds;
+        },
+        /**
+         * 专员列表点击取消的方法
+         * 这里有点特殊,采用屏蔽按钮,增加专员取消按钮的方法 替代 维护2次 atsOverTimeBillEdit.js 的方式
+         */
+        cancelAllAction: function () {
+            /*var that = this ;
+	 	window.location.href = shr.getContextPath()+"/dynamic.do?uipk=com.kingdee.eas.hr.ats.app.AtsOverTimeBillAllList";*/
+            this.reloadPage({
+                uipk: "com.kingdee.eas.hr.ats.app.AtsOverTimeBillAllList",
+                serviceId: shr.getUrlRequestParam("serviceId")
+            });
+        },
+
+        submitAction: function (event) {
+            var _self = this,
+                workArea = _self.getWorkarea(),
+                $form = $("form", workArea);
+            if (!_self.validate()) {
+                return;
+            }
+
+            if ($form.valid() && _self.verify()) {
+                shr.showConfirm(
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_15,
+                    function () {
+                        _self.doSubmit(event, "submit");
+                    }
+                );
+            }
+        },
+        //提交即生效
+        submitEffectAction: function (event) {
+            var _self = this,
+                workArea = _self.getWorkarea(),
+                $form = $("form", workArea);
+
+            if (!_self.validate()) {
+                return;
+            }
+
+            if ($form.valid() && _self.verify()) {
+                if (shr.atsBillUtil.isInWorkFlow(_self.billId)) {
+                    shr.showConfirm(
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_4,
+                        function () {
+                            _self.prepareSubmitEffect(event, "submitEffect");
+                        }
+                    );
+                } else {
+                    shr.showConfirm(
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_16,
+                        function () {
+                            _self.prepareSubmitEffect(event, "submitEffect");
+                        }
+                    );
+                }
+            }
+        },
+        assembleSaveData: function (action) {
+            var data = shr.ats.AtsOverTimeBillBatchEdit.superClass.assembleSaveData.call(
+                this,
+                action
+            );
+            var model = JSON.parse(data.model);
+            var personDateStr = "";
+            var length = 0;
+            if (model.entries) {
+                length = model.entries.length;
+                for (var i = 0; i < length; i++) {
+                    if (
+                        model.entries[i].otReason &&
+                        model.entries[i].otReason.state
+                    ) {
+                        delete model.entries[i].otReason.state;
+                    }
+                    if (
+                        model.entries[i].otType &&
+                        model.entries[i].otType.state
+                    ) {
+                        delete model.entries[i].otType.state;
+                    }
+                    if (
+                        model.entries[i].otCompens &&
+                        model.entries[i].otCompens.state
+                    ) {
+                        delete model.entries[i].otCompens.state;
+                    }
+
+                    if (model.entries[i]["adminOrgUnit.id"]) {
+                        model.entries[i]["adminOrgUnit"] =
+                            model.entries[i]["adminOrgUnit.id"];
+                    }
+
+                    //2018-06-04 不知道怎么莫名其妙多了两个字段,而且是从第二个分录开始才有的
+                    //先屏蔽,有空再研究
+                    delete model.entries[i].person["person.gender"];
+                    delete model.entries[i].person["personOtherInfo.age"];
+                    delete model.entries[i].person["attendanceFileHIS.isAttendance"];
+
+                    //组装参数
+                    var personId = model.entries[i].person.id;
+                    var date = model.entries[i].otDate;
+                    if (date && personId) {
+                        if (i > 0) {
+                            personDateStr += ",";
+                        }
+                        personDateStr += personId + "_" + date.substring(0, 10);
+                    }
+                }
+
+                if (personDateStr) {
+                    _self.remoteCall({
+                        type: "post",
+                        method: "getPersonAdminOrgUnit",
+                        param: { personDateStr: personDateStr },
+                        async: false,
+                        success: function (res) {
+                            var info = res;
+                            var personAtsInfo = {};
+                            for (var i = 0; i < length; i++) {
+                                var personId = model.entries[i].person.id;
+                                var date = model.entries[i].otDate;
+                                if (date && personId) {
+                                    var person_date =
+                                        personId + "_" + date.substring(0, 10);
+                                    personAtsInfo = res[person_date];
+                                    if (
+                                        personAtsInfo &&
+                                        personAtsInfo.adminOrgUnit
+                                    ) {
+                                        model.entries[i]["adminOrgUnit"] =
+                                            personAtsInfo.adminOrgUnit;
+                                        model.entries[i]["position"] =
+                                            personAtsInfo.position;
+                                    }
+                                }
+                            }
+                        }
+                    });
+                }
+
+                model.ccPerson = model.ccPersonIds;
+                var assModeljson = $.toJSON(model);
+                data.model = assModeljson;
+            }
+
+            return data;
+        },
+        prepareSubmitEffect: function (event, action) {
+            var _self = this;
+            var data = _self.assembleSaveData(action);
+
+            var target;
+            if (event && event.currentTarget) {
+                target = event.currentTarget;
+            }
+            shr.doAction({
+                target: target,
+                url: _self.dynamicPage_url,
+                type: "post",
+                data: data,
+                success: function (response) {
+                    //考勤计算--已计算页签--明细显示模式--请假按钮进来,提交生效后直接返回列表
+                    if($('#detailOperationDialog', parent.document).length > 0) {
+                        top.jsBinder.closeDialog();
+                    }
+                    if (
+                        shr.getUrlParam("fromCalDetail") != null &&
+                        shr.getUrlParam("fromCalDetail") == "1"
+                    ) {
+                        _self.cancelAllAction();
+                    } else {
+                        _self.back();
+                    }
+                }
+            });
+        },
+        /*
+	,importAction: function(gridID,classfullName) {
+		
+		var _self = this;
+		if(gridID != undefined)
+		{
+			grid = gridID	;
+		}
+		if(classfullName != undefined)
+		{
+			className = classfullName ;
+		}
+		
+		var importDiv = $('#importDiv');
+		if (importDiv.length > 0) {
+		//	importDiv.data('uipk', lastUipk);
+		//	importDiv.data('viewModel', viewModel);
+		//	importDiv.data('classify', classify);
+		//	importDiv.dialog('open');
+		//	return;
+		}
+		 $('#importDiv').remove();
+		 
+		 selfParam = _self.setImportSelfParam();
+		// 未生成dialog
+		importDiv = $('<div id="importDiv"></div>').appendTo($('body'));
+		importDiv.data('uipk', lastUipk);
+		importDiv.data('viewModel', viewModel);
+		importDiv.data('grid', grid);
+		importDiv.data('className', className);
+		importDiv.data('selfParam',selfParam);
+	//	importDiv.data('classify', classify);
+		var oldRowIds = $("#entries").getDataIDs();
+		if(_self.checkUpload()){ 
+			importDiv.dialog({
+				autoOpen: true,		
+				width: 708,
+				height: 700,
+				title: "导入数据",
+				resizable: true,
+				position: ['top','top'],
+				modal: true,
+				open: function(event, ui) {
+					//ie10不支持这段。
+					/*if ($.browser.msie) {
+						var url = shr.assembleURL('hr.ats.com.atttendanceCommonImport', 'view', {
+							lastUipk: lastUipk,
+							viewModel: viewModel ,
+							className : className
+							//classify:classify
+						});
+						var content = '<iframe id="importFrame" name="importFrame" width="700" height="600" frameborder="0" scrolling="no" allowtransparency="true" src="' + url + '"></iframe>';
+						importDiv.append(content);
+					} else {---------------------
+						
+						var url = shr.assembleURL('hr.ats.com.atttendanceCommonImport$page', 'view');
+						shr.loadHTML({
+							url: url,
+							success: function(response) {
+								importDiv.append(response);
+							}
+						});
+					//}
+					document.documentElement.style.overflow='hidden';
+				},
+				close: function(event, ui) {
+					document.documentElement.style.overflow='scroll';
+					importDiv.empty();
+					
+					// 触发计算 请假次数 剩余额度 时长
+					
+					//点击序号列 让人员失去焦点
+					$("#entries tr:eq(1) td:eq(0)").click();
+					
+					var newRowIds = $("#entries").getDataIDs();
+					var rowIds = _self.getFillRowId(oldRowIds,newRowIds);
+					$.each(rowIds,function(n,value) { 
+						//若用户不填休息时间,自动计算休息时间;否则使用用户填写的休息时间
+						var restTime = $("#entries").jqGrid('getCell',value,"restTime") ;
+					    if(restTime===''){
+							_self.calRestTimeLen(value);
+                        }
+						_self.changOtTimeTipInfo(value);
+					});
+					//检查不超过100条记录
+					//_self.checkRowIsOver();
+					
+				} 
+			});
+		}
+		
+		$(".ui-dialog-titlebar-close").bind("click" , function(){
+			importDiv.dialog("close");
+		});		
+	}
+	*/
+        verify: function () {
+            var _self = this;
+            var obj = $("#entries").jqGrid("getRowData");
+            var errorString = "";
+            var errorFlag = 0;
+            var billerrorString = "";
+
+            //不支持跨天加班,请使加班结束日期与加班开始时间日期保持一致  202502 总部提供
+            for(var i=0;i<obj.length;i++){
+                if(obj[i].startTime.substring(0,10)!=obj[i].endTime.substring(0,10)){
+                    shr.showWarning({message: obj[i].person.name+"的加班日期有误,不支持跨天加班,结束日期必须与加班开始时间日期保持一致!"});
+                       return false;
+                   }			
+            }	
+            
+            if (obj.length == 0) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_7
+                });
+                return false;
+            }
+            if (!_self.checkRowIsOver()) {
+                //			closeLoader();
+                return false;
+            }
+
+            _rowMap = {};
+
+            openLoader(
+                1,
+                jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_29
+            );
+
+            jQuery(obj).each(function (n) {
+                errorString = _self.checkEveryRow(n + 1, this);
+
+                if (errorString) {
+                    _self.preShowError(
+                        n + 1,
+                        this.person.name + " " + errorString
+                    );
+                    billerrorString =
+                        billerrorString +
+                        shr.formatMsg(
+                            jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_44,
+                            [n + 1]
+                        ) +
+                        errorString;
+
+                    errorFlag = 1;
+                }
+            });
+            if (errorString && errorString != "") {
+                var showMes = "";
+                showMes += billerrorString.replace(/。/g, "。</br>");
+                shr.showWarning({ message: showMes });
+                closeLoader();
+                return false;
+            }
+
+            errorString = _self.validateOTEntry();
+            if (errorString && errorString != "") {
+                shr.showWarning({ message: errorString });
+                closeLoader();
+                return false;
+            }
+
+            //		 if(!_self.verifyCheck()){
+            //		 	closeLoader();
+            //		 	return false;
+            //		 }
+
+            var hasOtType = _self.checkOtType();
+            if (!hasOtType) {
+                return false;
+            }
+
+            if (errorFlag == 0) {
+                //工作流审批界面,加班补提控制。
+                var boo = true;
+                boo = _self.validateIsFillOtVerify();
+                closeLoader();
+                return boo;
+            } else {
+                closeLoader();
+                return false;
+            }
+        },
+        checkOtType: function () {
+            var rows = $("#entries").getGridParam("reccount");
+            if (rows > 0) {
+                for (var i = 1; i <= rows; i++) {
+                    var tempId = $("#entries tr").eq(i).attr("id");
+                    var person = $("#entries").jqGrid(
+                        "getCell",
+                        tempId,
+                        "person"
+                    );
+                    var otType = $("#entries").jqGrid(
+                        "getCell",
+                        tempId,
+                        "otType"
+                    ); //otDate
+                    var otDate = $("#entries").jqGrid(
+                        "getCell",
+                        tempId,
+                        "otDate"
+                    );
+                    if (otType == null || otType == "") {
+                        var errorString = shr.formatMsg(
+                            jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_checkOtType_01,
+                            [person.name, otDate]
+                        );
+                        shr.showWarning({ message: errorString });
+                        closeLoader();
+                        return false;
+                    }
+                }
+            }
+            return true;
+        },
+        verifyRestTime: function (beforeSubmit, value) {
+            var startTime0 = value.startTime;
+            var endTime0 = value.endTime;
+            if (startTime0 == "" || startTime0 == undefined) {
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_2;
+            }
+            if (endTime0 == "" || endTime0 == undefined) {
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_1;
+            }
+            var startTimeOfDate = new Date(startTime0);
+            var endTimeOfDate = new Date(endTime0);
+            var restStartTime = value.restStartTime;
+            var restEndTime = value.restEndTime;
+            var restStartTime2 = value.restStartTime2;
+            var restEndTime2 = value.restEndTime2;
+            var restStartTimeOfDate = new Date(restStartTime);
+            var restEndTimeOfDateOfDate = new Date(restEndTime);
+            if (restStartTime != undefined && restStartTime != "") {
+                if (
+                    restStartTimeOfDate.getTime() < startTimeOfDate.getTime() ||
+                    restStartTimeOfDate.getTime() > endTimeOfDate.getTime()
+                ) {
+                    return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_6;
+                }
+            }
+            if (restEndTime != undefined && restEndTime != "") {
+                if (
+                    restEndTimeOfDateOfDate.getTime() <
+                        startTimeOfDate.getTime() ||
+                    restEndTimeOfDateOfDate.getTime() >
+                        endTimeOfDate.getTime() ||
+                    restEndTimeOfDateOfDate.getTime() <
+                        restStartTimeOfDate.getTime()
+                ) {
+                    return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_3;
+                }
+            }
+            var restStartTimeOfDate2 = new Date(restStartTime2);
+            var restEndTimeOfDateOfDate2 = new Date(restEndTime2);
+            if (restStartTime2 != undefined && restStartTime2 != "") {
+                if (
+                    restStartTimeOfDate2.getTime() <
+                        startTimeOfDate.getTime() ||
+                    restStartTimeOfDate2.getTime() > endTimeOfDate.getTime()
+                ) {
+                    return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_8;
+                }
+            }
+            if (restEndTime2 != undefined && restEndTime2 != "") {
+                if (
+                    restEndTimeOfDateOfDate2.getTime() <
+                        startTimeOfDate.getTime() ||
+                    restEndTimeOfDateOfDate2.getTime() >
+                        endTimeOfDate.getTime() ||
+                    restEndTimeOfDateOfDate2.getTime() <
+                        restStartTimeOfDate2.getTime()
+                ) {
+                    return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_4;
+                }
+            }
+            if (
+                (restStartTime != "" &&
+                    restStartTime != undefined &&
+                    (restEndTime == "" || restEndTime == undefined)) ||
+                (restEndTime != "" &&
+                    restEndTime != undefined &&
+                    (restStartTime == "" || restStartTime == undefined))
+            ) {
+                if (beforeSubmit) {
+                    return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_5;
+                }
+                return "";
+            }
+            if (
+                (restStartTime2 != "" &&
+                    restStartTime2 != undefined &&
+                    (restEndTime2 == "" || restEndTime2 == undefined)) ||
+                (restEndTime2 != "" &&
+                    restEndTime2 != undefined &&
+                    (restStartTime2 == "" || restStartTime2 == undefined))
+            ) {
+                if (beforeSubmit) {
+                    return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_7;
+                }
+                return "";
+            }
+            if (
+                restStartTime != "" &&
+                restStartTime != undefined &&
+                restStartTime2 != "" &&
+                restStartTime2 != undefined
+            ) {
+                //两个加班休息时间都填了,那么判断不能交叉
+                if (
+                    (restStartTimeOfDate.getTime() <
+                        restEndTimeOfDateOfDate2.getTime() &&
+                        restStartTimeOfDate.getTime() >=
+                            restStartTimeOfDate2.getTime()) ||
+                    (restStartTimeOfDate2.getTime() <
+                        restEndTimeOfDateOfDate.getTime() &&
+                        restStartTimeOfDate2.getTime() >=
+                            restStartTimeOfDate.getTime())
+                ) {
+                    return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_0;
+                }
+            }
+        },
+
+        checkEveryRow: function (rownum, value) {
+            var that = this;
+            var regEx = new RegExp("\\-", "gi"); //i不区分大小写 g匹配所有
+
+            var startTime = value.startTime;
+            var endTime = value.endTime;
+
+            var startTimeOfDate = NewLongDate(startTime + ":00");
+            var endTimeOfDate = NewLongDate(endTime + ":00");
+
+            var longTime = endTimeOfDate.getTime() - startTimeOfDate.getTime();
+            var otType = value.otType.id;
+
+            //处理加班日期 与 加班开始时间 和结束时间的日期保持一致
+            var overDate = value.otDate; //加班日期
+            overDate = overDate.substring(0, 10);
+            var overTimeBegin = value.startTime;
+            overTimeBegin = overTimeBegin.substring(0, 10); //2014-01-02 00:00
+            var overTimeEnd = value.endTime;
+            overTimeEnd = overTimeEnd.substring(0, 10);
+
+            var overTimeDate = NewShortDate(overDate);
+            var overTimeStartDate = NewShortDate(overTimeBegin);
+            var overTimeEndDate = NewShortDate(overTimeEnd);
+
+            if (
+                overTimeStartDate.getTime() <
+                overTimeDate.getTime() - 24 * 60 * 60 * 1000
+            ) {
+                //longTime_start != 0 &&  longTime_end != 0
+                //		 		shr.showInfo({message: "不支持跨多天加班。"});
+                //				return false;
+                return jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_1;
+            }
+            if (
+                overTimeEndDate.getTime() - 24 * 60 * 60 * 1000 >
+                overTimeDate.getTime()
+            ) {
+                /*shr.showInfo({message: "不支持跨多天加班。"});
+				return false;*/
+                return jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_1;
+            }
+            if (
+                overTimeEndDate.getTime() - overTimeStartDate.getTime() >=
+                2 * 24 * 60 * 60 * 1000
+            ) {
+                return jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_1;
+            }
+            if (longTime <= 0) {
+                /*shr.showInfo({message: "加班开始时间必须小于加班结束时间。"});
+				return false;*/
+                return jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_8;
+            }
+            var applyOTTime = value.applyOTTime;
+            if (applyOTTime < 0) {
+                return jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_11;
+            }
+            if (applyOTTime == 0) {
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_0001;
+            }
+
+            // 检查jqgrid 表格里的是否有重复数据
+            var rowValue = new Array();
+            rowValue[0] = value.person.id;
+            rowValue[1] = value.startTime;
+            rowValue[2] = value.endTime;
+            _rowMap[rownum] = rowValue;
+            for (var prop in _rowMap) {
+                if (_rowMap.hasOwnProperty(prop)) {
+                    var beginTimeTemp = NewLongDate(_rowMap[prop][1]);
+                    var endTimeTemp = NewLongDate(_rowMap[prop][2]);
+                    if (
+                        prop != rownum &&
+                        _rowMap[prop][0] == value.person.id &&
+                        !(
+                            beginTimeTemp.getTime() >=
+                                endTimeOfDate.getTime() ||
+                            endTimeTemp.getTime() <= startTimeOfDate.getTime()
+                        )
+                    ) {
+                        return shr.formatMsg(
+                            jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_2,
+                            [prop]
+                        );
+                    }
+                }
+            }
+            var msg = this.verifyRestTime(true, value);
+            if (msg != "") {
+                return msg;
+            }
+
+            //设置同步
+            //		 	var info ;
+            //		 	that.remoteCall({
+            //				type:"post",
+            //				method:"isWorkTime",
+            //				async: false,
+            //				param:{personId: value.person.id,overDate:value.otDate,overTimeBegin:value.startTime+":00",overTimeEnd:value.endTime+":00"},
+            //				success:function(res){
+            //					   info = res;
+            //				}
+            //			});
+            //
+            //			if (info.isWorkTime){
+            //				return "加班开始结束时间和上班时间有交叉。";
+            //			}
+            //
+            //			//判断申请加班小时数是否达到加班起始值
+            //			var validOtStartString;
+            //		 	that.remoteCall({
+            //				type:"post",
+            //				method:"validOtStart",
+            //				async: false,
+            //				param:{personId: value.person.id,applyOTTime:applyOTTime},
+            //				success:function(res){
+            //					   var validInfo = res.info;
+            //					   if(validInfo!=null && validInfo!=""){
+            //						   validOtStartString=validInfo;
+            //					   }
+            //				}
+            //			});
+            //	 	    if(validOtStartString!=null && validOtStartString!=""){
+            //	 	    	return validOtStartString;
+            //	 	    }
+            //
+            //			//是否在“固定加班”时间段或者“固定加班不计异常”时间段内
+            //			var obj;
+            //		 	that.remoteCall({
+            //				type:"post",
+            //				method:"isAtFixedOverTimeOrExcep",
+            //				async: false,
+            //				param:{personId: value.person.id,overDate:value.otDate,overTimeBegin:value.startTime+":00",overTimeEnd:value.endTime+":00"},
+            //				success:function(res){
+            //					obj = res;
+            //				}
+            //			});
+            //
+            //			if (obj.isAtFixedOverTimeOrExcep){
+            //				return "不能在固定加班时间段内提交加班单。";
+            //			}
+            //
+            //		 	var errorString = that.validateIsExistBill(value.person.id,startTime,endTime,$('#id').val());
+            //	   		if(errorString){
+            //	   			return errorString;
+            //	   		}
+            //   			if(value.otCompens.id =="AERg0TIcSnaM40EKvJCdRKlrTmA="){ // 只有等于调休的时候才校验
+            //   				var errorString = that.validateIsValidateLimit(value.person.id,value.otDate,value.applyOTTime,otType);
+            //   				if(errorString){
+            //   					return errorString;
+            //   				}
+            //   			}
+            //
+            //   			var errorString = that.checkattencePolicyParm(rownum);
+            //   			if(errorString){
+            //	   			return errorString;
+            //			}
+
+            //燕菊说,补提控制校验放这里 2018-05-30
+            //人机问题,集成测试阶段再细细改
+            /*
+			var fillOTRes;
+		 	that.remoteCall({
+				type:"post",
+				method:"validIsFillOT",
+				async: false,
+				param:{
+					personId : value.person.id,
+					overDate : value.otDate,
+					overTimeBegin : value.startTime+":00",
+					overTimeEnd : value.endTime+":00"
+				},
+				success:function(res){
+					fillOTRes = res;
+				}
+			});
+		 	
+			if (fillOTRes.isIllegal){
+				return "超过加班补提控制期限!";
+			}	
+			*/
+            return "";
+        }, // 调休额度是否正确 ;
+        validateIsValidateLimit: function (
+            personId,
+            otDate,
+            currentValue,
+            otType
+        ) {
+            var that = this;
+            if ($("#hrOrgUnit_el") == null || $("#hrOrgUnit_el") == "") {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_18
+                });
+                return;
+            }
+            var info;
+            var infoLeaveBillNumber;
+            otDate = otDate.substring(0, 10);
+            var errorString = "";
+            that.remoteCall({
+                type: "post",
+                async: false,
+                method: "isOverMaxQuota",
+                param: {
+                    personId: personId,
+                    otDate: otDate,
+                    currentValue: currentValue,
+                    otType: otType,
+                    hrOrgUnitId: $("#hrOrgUnit_el").val()
+                },
+                success: function (res) {
+                    if (!res.resFlag) {
+                        errorString = res.resMsg;
+                    }
+                }
+            });
+            return errorString;
+        },
+        validateIsExistBill: function (personId, beginTime, endTime, billId) {
+            var that = this;
+            var info;
+            var infoLeaveBillNumber;
+            var errorString = "";
+            that.remoteCall({
+                type: "post",
+                async: false,
+                method: "validateIsExistBill",
+                param: {
+                    personId: personId,
+                    beginTime: beginTime,
+                    endTime: endTime,
+                    billId: billId
+                },
+                success: function (res) {
+                    info = res;
+                }
+            });
+
+            if (errorString) {
+                errorString = shr.formatMsg(
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_27,
+                    [
+                        info.overTimeNum,
+                        info.personName,
+                        info.beginTime,
+                        info.endTime
+                    ]
+                );
+                return errorString;
+            }
+        },
+        // 获取表格序号列,修复平台表格序号列位置移动导致的提示列位置错误导致的显示异常bug
+        getColNumIndex: function () {
+            var _self = this;
+            if (_self.colNumIndex) {
+                return _self.colNumIndex;
+            }
+            $.each(
+                $("#entries").jqGrid("getAllColumn"),
+                function (index, item) {
+                    if (item.name == "rn") {
+                        _self.colNumIndex = index;
+                    }
+                }
+            );
+            return _self.colNumIndex;
+        },
+        //对校验结果进行页面个性化提示
+        preShowError: function (iRow, errorString) {
+            var rnColNum = this.getColNumIndex();
+            var that = this;
+            if (errorString) {
+                $("#entries tr:eq(" + iRow + ") td:eq(" + rnColNum + ")")
+                    .html("!")
+                    .css("color", "red")
+                    .attr({
+                        "data-toggle": "tooltip",
+                        "data-placement": "left",
+                        title: errorString
+                    });
+                $("#entries tr[id='" + iRow + "']").css("color", "red");
+                /*
+				$("#entries tr:eq("+iRow+") td:eq(2)").css("color","red");
+				$("#entries tr:eq("+iRow+") td:eq(3)").css("color","red");
+				$("#entries tr:eq("+iRow+") td:eq(4)").css("color","red");
+			*/
+            }
+        },
+        //对校验结果进行页面个性化提示
+        preShowWarn: function (iRow, errorString) {
+            var rnColNum = this.getColNumIndex();
+            var that = this;
+            $("#entries")
+                .find("tr")
+                .eq(iRow)
+                .find("td")
+                .eq(rnColNum)
+                .text("?")
+                .css("color", "red")
+                .attr({
+                    "data-toggle": "tooltip",
+                    "data-placement": "left",
+                    title: errorString
+                });
+        },
+        //去除个性化展示,每次校验前去除
+        removePreShowError: function (rowid) {
+            var rnColNum = this.getColNumIndex();
+            var rows = $("#entries").getGridParam("reccount");
+            var td = $("#entries").find("tr[id='" + rowid + "'] td:eq(" + rnColNum + ")");
+            td.attr(
+                "title",
+                ""
+            );
+            td.html(
+                $("#entries").find("tr[id='" + rowid + "']")[0].rowIndex
+            );
+            td.css(
+                "color",
+                "rgb(153, 153, 153)"
+            );
+            $("#entries").find("tr[id='" + rowid + "']").css(
+                "color",
+                "rgb(153, 153, 153)"
+            ); //如果设置成css("color","initial")会变成黑色,而原界面为灰色
+        },
+        checkF7Data: function () {
+            var that = this;
+
+            var otDate = window.frames[
+                "orgFillDiv"
+            ].atsMlUtile.getFieldOriginalValue("otDate");
+            var adminOrgUnit_el = $(window.frames["orgFillDiv"].document)
+                .find("#adminOrgUnit_el")
+                .val();
+            var adminOrgUnit = $(window.frames["orgFillDiv"].document)
+                .find("#adminOrgUnit")
+                .val();
+            var person_el = $(window.frames["orgFillDiv"].document)
+                .find("#person_el")
+                .val();
+            var person = $(window.frames["orgFillDiv"].document)
+                .find("#person")
+                .val();
+
+            var startTime = window.frames[
+                "orgFillDiv"
+            ].atsMlUtile.getFieldOriginalValue("startTime");
+            var otType_el = $(window.frames["orgFillDiv"].document)
+                .find("#otType_el")
+                .val();
+            var otType = $(window.frames["orgFillDiv"].document)
+                .find("#otType")
+                .val();
+            var endTime = window.frames[
+                "orgFillDiv"
+            ].atsMlUtile.getFieldOriginalValue("endTime");
+
+            var otCompens_el = $(window.frames["orgFillDiv"].document)
+                .find("#otCompens_el")
+                .val();
+            var otCompens = $(window.frames["orgFillDiv"].document)
+                .find("#otCompens")
+                .val();
+
+            var restTime = $(window.frames["orgFillDiv"].document)
+                .find("#restTime")
+                .val();
+            var otReason_el = $(window.frames["orgFillDiv"].document)
+                .find("#otReason_el")
+                .val();
+            var otReason = $(window.frames["orgFillDiv"].document)
+                .find("#otReason")
+                .val();
+            var applyOTTime = $(window.frames["orgFillDiv"].document)
+                .find("#applyOTTime")
+                .val();
+
+            var remark = $(window.frames["orgFillDiv"].document)
+                .find("#remark")
+                .val();
+            var remain = $(window.frames["orgFillDiv"].document)
+                .find("#remain")
+                .text();
+            var checkAmount = $(window.frames["orgFillDiv"].document)
+                .find("#checkAmount")
+                .text();
+            var attencegroup_el = $(window.frames["orgFillDiv"].document)
+                .find("#prop_attencegroup_el")
+                .val();
+            var prop_attencegroup = $(window.frames["orgFillDiv"].document)
+                .find("#prop_attencegroup")
+                .val();
+            /*
+			var otDate = $('iframe')[0].contentWindow.$('#otDate').val();
+					        	
+        	var adminOrgUnit_el = $('iframe')[0].contentWindow.$('#adminOrgUnit_el').val();
+        	var adminOrgUnit = $('iframe')[0].contentWindow.$('#adminOrgUnit').val();
+        	
+        	var person_el = $('iframe')[0].contentWindow.$('#person_el').val();
+        	var person = $('iframe')[0].contentWindow.$('#person').val();
+        	
+        	var startTime = $('iframe')[0].contentWindow.$('#startTime').val();
+        	
+        	var otType_el = $('iframe')[0].contentWindow.$('#otType_el').val();
+        	var otType = $('iframe')[0].contentWindow.$('#otType').val();
+        	
+        	var endTime = $('iframe')[0].contentWindow.$('#endTime').val();
+        	
+        	var otCompens_el = $('iframe')[0].contentWindow.$('#otCompens_el').val();
+        	var otCompens = $('iframe')[0].contentWindow.$('#otCompens').val();
+        
+        	var restTime = $('iframe')[0].contentWindow.$('#restTime').val();
+        	
+        	var otReason_el = $('iframe')[0].contentWindow.$('#otReason_el').val();
+        	var otReason = $('iframe')[0].contentWindow.$('#otReason').val();
+        	
+        	var applyOTTime = $('iframe')[0].contentWindow.$('#applyOTTime').val();
+        	var remark = $('iframe')[0].contentWindow.$('#remark').val();
+        	var remain = $('iframe')[0].contentWindow.$('#remain').text();
+        	var checkAmount = $('iframe')[0].contentWindow.$('#checkAmount').text();
+        	*/
+            //校验
+            if (parseInt(checkAmount) > parseInt(remain)) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_33,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            //校验
+            if (!otDate) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_10,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            if (
+                (!adminOrgUnit_el || !adminOrgUnit) &&
+                (!person_el || !person) &&
+                (attencegroup_el == undefined ||
+                    attencegroup_el == null ||
+                    attencegroup_el == "" ||
+                    prop_attencegroup == undefined ||
+                    prop_attencegroup == null ||
+                    prop_attencegroup == "")
+            ) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_30,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            if (!startTime) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_14,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            if (!otType_el || !otType) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_9,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            if (!endTime) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_13,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            if (!otCompens_el || !otCompens) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_0,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            /*if(!restTime){
+	        		shr.showWarning({message: "休息时长(分钟)不能为空!"});
+	        		return false;
+    		}*/
+
+            /*if(!otReason_el||!otReason){
+	        		shr.showWarning({message: "加班原因不能为空!"});
+	        		return false;
+    		}*/
+
+            if (!applyOTTime) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_20,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            return true;
+        },
+
+        fillGrid: function () {
+            var that = this;
+            var otType_person={};
+            var otDate = window.frames[
+                "orgFillDiv"
+            ].atsMlUtile.getFieldOriginalValue("otDate");
+            var adminOrgUnit_el = $(window.frames["orgFillDiv"].document)
+                .find("#adminOrgUnit_el")
+                .val();
+            var adminOrgUnit = $(window.frames["orgFillDiv"].document)
+                .find("#adminOrgUnit")
+                .val();
+            var person_el = $(window.frames["orgFillDiv"].document)
+                .find("#person_el")
+                .val();
+            var person = $(window.frames["orgFillDiv"].document)
+                .find("#person")
+                .val();
+            var person_number = $(window.frames["orgFillDiv"].document)
+                .find("#person_number")
+                .val();
+            var startTime = window.frames[
+                "orgFillDiv"
+            ].atsMlUtile.getFieldOriginalValue("startTime");
+            var otType_el = $(window.frames["orgFillDiv"].document)
+                .find("#otType_el")
+                .val();
+            var otType = $(window.frames["orgFillDiv"].document)
+                .find("#otType")
+                .val();
+            var endTime = window.frames[
+                "orgFillDiv"
+            ].atsMlUtile.getFieldOriginalValue("endTime");
+
+            var otCompens_el = $(window.frames["orgFillDiv"].document)
+                .find("#otCompens_el")
+                .val();
+            var otCompens = $(window.frames["orgFillDiv"].document)
+                .find("#otCompens")
+                .val();
+
+            var restTime = $(window.frames["orgFillDiv"].document)
+                .find("#restTime")
+                .val();
+            var restStartTime = $(window.frames["orgFillDiv"].document)
+                .find("#restStartTime")
+                .val();
+            var restStartTime2 = $(window.frames["orgFillDiv"].document)
+                .find("#restStartTime2")
+                .val();
+            var restEndTime = $(window.frames["orgFillDiv"].document)
+                .find("#restEndTime")
+                .val();
+            var restEndTime2 = $(window.frames["orgFillDiv"].document)
+                .find("#restEndTime2")
+                .val();
+            var otReason_el = $(window.frames["orgFillDiv"].document)
+                .find("#otReason_el")
+                .val();
+            var otReason = $(window.frames["orgFillDiv"].document)
+                .find("#otReason")
+                .val();
+            var applyOTTime = $(window.frames["orgFillDiv"].document)
+                .find("#applyOTTime")
+                .val();
+            var hrOrgUnitId = $(window.frames["orgFillDiv"].document)
+                .find("#bill_hrOrgUnit_el")
+                .val();
+            var attencegroupId = $(window.frames["orgFillDiv"].document)
+                .find("#prop_attencegroup_el")
+                .val();
+            var prop_attencegroup = $(window.frames["orgFillDiv"].document)
+                .find("#prop_attencegroup")
+                .val();
+            var description = $(window.frames["orgFillDiv"].document)
+                .find("#remark")
+                .val();
+            var setType = $(window.frames["orgFillDiv"].document)
+                .find("#setType1")
+                .is(":visible")
+                ? 1
+                : 2;
+
+            var attAdminOrgUnit_el = $(window.frames["orgFillDiv"].document).find("#attAdminOrgUnit_el").val();
+            var attAdminOrgUnit = $(window.frames["orgFillDiv"].document).find("#attAdminOrgUnit").val();
+
+            var currentPagePermItemId = that.currentPagePermItemId;
+            var hasNum = $("#entries").getGridParam("reccount"); // 已经存在的条数
+            /* that.remoteCall({
+                            type: "post",
+                            async: false,
+                            method: "getOtTypeByPersons",
+                            param: {
+                                otDate: otDate,
+                                attencegroupId: attencegroupId,
+                                hrOrgUnitId: hrOrgUnitId,
+                                orgUnitId: adminOrgUnit_el,
+                                setType: setType,
+                                personIds: person_el
+                            },success: function (res) {
+                                otType_person=res.otTypeByPersons
+                            }
+                        });*/
+            if (
+                (adminOrgUnit_el && adminOrgUnit) ||
+                (attencegroupId && prop_attencegroup)
+            ) {
+                that.remoteCall({
+                    type: "post",
+                    async: false,
+                    method: "getPersonsByOrgUnit",
+                    param: {
+                        attencegroupId: attencegroupId,
+                        hrOrgUnitId: hrOrgUnitId,
+                        orgUnitId: adminOrgUnit_el,
+                        otDate: otDate,
+                        otType: otType_el,
+                        personIds: person_el,
+                        setType: setType,
+                        currentPagePermItemId: currentPagePermItemId
+                    },
+                    success: function (res) {
+                        info = res;
+                        var personColl = jQuery.parseJSON(info.personColl);
+                        var rowTipId = [];
+                        $.each(personColl, function (n, value) {
+                            // 拼json string
+                            var otDateString = ' "otDate" : "' + otDate + '"';
+                            var adminOrgUnitString =
+                                ' "adminOrgUnit" : { "id": "' +
+                                adminOrgUnit_el +
+                                '", "name": "' +
+                                adminOrgUnit +
+                                '"}';
+                            var personString =
+                                ' "person" : { "id": "' +
+                                value.id +
+                                '", "name": "' +
+                                value.name +
+                                '"}';
+
+                            var startTimeString =
+                                ' "startTime" : "' + startTime + '"';
+
+
+
+                                var otTypeString =
+                                    ' "otType" : { "id": "' +
+                                    value.simpleName +
+                                    '", "name": "' +
+                                     value.simpleNamePingYin +
+                                    '"}';
+
+
+                            var endTimeString =
+                                ' "endTime" : "' + endTime + '"';
+
+                            var otCompensString = "";
+                            if (otCompens_el) {
+                                var otCompensString =
+                                    ' "otCompens" : { "id": "' +
+                                    otCompens_el +
+                                    '", "name": "' +
+                                    otCompens +
+                                    '"}';
+                            }
+
+                            var attAdminOrgUnitString = ' "attAdminOrgUnit" : { "id": "'
+                                + attAdminOrgUnit_el
+                                + '", "name": "'
+                                + attAdminOrgUnit
+                                + '"}';
+
+                            var restTimeString =
+                                ' "restTime" : "' + restTime + '"';
+                            var restStartTimeString =
+                                ' "restStartTime" : "' + restStartTime + '"';
+                            var restStartTime2String =
+                                ' "restStartTime2" : "' + restStartTime2 + '"';
+                            var restEndTimeString =
+                                ' "restEndTime" : "' + restEndTime + '"';
+                            var restEndTime2String =
+                                ' "restEndTime2" : "' + restEndTime2 + '"';
+
+                            var otReasonString =
+                                ' "otReason" : { "id": "' +
+                                otReason_el +
+                                '", "name": "' +
+                                otReason +
+                                '"}';
+
+                            var applyOTTimeString =
+                                ' "applyOTTime" : "' + applyOTTime + '"';
+
+                            var descriptionString =
+                                ' "description" : "' + description + '"';
+
+                            var dataString =
+                                ' { "data" : {' +
+                                otDateString +
+                                ", " +
+                                adminOrgUnitString +
+                                ", " +
+                                personString +
+                                ", " +
+                                startTimeString +
+                                ", " +
+                                otTypeString +
+                                ", " +
+                                endTimeString +
+                                ", " +
+                                otCompensString +
+                                ", " +
+                                 attAdminOrgUnitString +
+                                ', ' +
+                                restTimeString +
+                                ", " +
+                                restStartTimeString +
+                                ", " +
+                                restEndTimeString +
+                                ", " +
+                                restStartTime2String +
+                                ", " +
+                                restEndTime2String +
+                                ", " +
+                                otReasonString +
+                                ", " +
+                                applyOTTimeString +
+                                ", " +
+                                descriptionString +
+                                "}} ";
+
+                            var dataJson = jQuery.parseJSON(dataString);
+
+                            $("#entries").jqGrid("addRow", dataJson);
+
+                            //点击序号列 让人员失去焦点
+                            $("#entries tr:eq(1) td:eq(0)").click();
+                            // hasNum
+                            if (value.addressTX == "2") {
+                                rowTipId.push(n + 1 + hasNum);
+                            }
+                        });
+                        if (rowTipId.length != 0) {
+                            for (var ii = 0; rowTipId.length > ii; ii++) {
+                                that.preShowWarn(
+                                    rowTipId[ii],
+                                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_31
+                                );
+                            }
+                        }
+                    }
+                });
+            } else {
+                 that.remoteCall({
+                                           type: "post",
+                                           async: false,
+                                           method: "getOtTypeByPersons",
+                                           param: {
+                                               otDate: otDate,
+                                               personIds: person_el
+                                           },success: function (res) {
+                                               otType_person=res.otTypeByPersons
+                                           }
+                                       });
+
+
+                var person_el_split = person_el.split(",");
+                var person_split = person.split(",");
+                var person_number_split = person_number.split(",");
+                for (var i = 0; i < person_el_split.length; i++) {
+                    // 拼json string
+                    var otDateString = ' "otDate" : "' + otDate + '"';
+
+                    var personString =
+                        ' "person" : { "id": "' +
+                        person_el_split[i] +
+                        '", "name": "' +
+                        person_split[i] +
+                        '", "number": "' +
+                        person_number_split[i] +
+                        '"}';
+
+                    var startTimeString = ' "startTime" : "' + startTime + '"';
+
+  if (otType_person[person_el_split[i]]){
+                        var otTypeString =
+                            ' "otType" : { "id": "' +
+                            otType_person[person_el_split[i]].otTypeValue  +
+                            '", "name": "' +
+                            otType_person[person_el_split[i]].otTypeText  +
+                            '"}';
+                    }else {
+                        var otTypeString =
+                            ' "otType" : { "id": "' +
+                            otType_el +
+                            '", "name": "' +
+                            otType +
+                            '"}';
+                    }
+
+
+                    var endTimeString = ' "endTime" : "' + endTime + '"';
+
+                    var otCompensString =
+                        ' "otCompens" : { "id": "' +
+                        otCompens_el +
+                        '", "name": "' +
+                        otCompens +
+                        '"}';
+
+                    var attAdminOrgUnitString = ' "attAdminOrgUnit" : { "id": "'
+                        + attAdminOrgUnit_el
+                        + '", "name": "'
+                        + attAdminOrgUnit
+                        + '"}';
+
+                    var restTimeString = ' "restTime" : "' + restTime + '"';
+                    var restStartTimeString =
+                        ' "restStartTime" : "' + restStartTime + '"';
+                    var restStartTime2String =
+                        ' "restStartTime2" : "' + restStartTime2 + '"';
+                    var restEndTimeString =
+                        ' "restEndTime" : "' + restEndTime + '"';
+                    var restEndTime2String =
+                        ' "restEndTime2" : "' + restEndTime2 + '"';
+                    var otReasonString =
+                        ' "otReason" : { "id": "' +
+                        otReason_el +
+                        '", "name": "' +
+                        otReason +
+                        '"}';
+
+                    var applyOTTimeString =
+                        ' "applyOTTime" : "' + applyOTTime + '"';
+
+                    var descriptionString =
+                        ' "description" : "' + description + '"';
+
+                    var dataString =
+                        ' { "data" : {' +
+                        otDateString +
+                        ", " +
+                        personString +
+                        ", " +
+                        startTimeString +
+                        ", " +
+                        otTypeString +
+                        ", " +
+                        endTimeString +
+                        ", " +
+                        otCompensString +
+                        ", " +
+                        attAdminOrgUnitString +
+                        ', ' +
+                        restTimeString +
+                        ", " +
+                        restStartTimeString +
+                        ", " +
+                        restEndTimeString +
+                        ", " +
+                        restStartTime2String +
+                        ", " +
+                        restEndTime2String +
+                        ", " +
+                        otReasonString +
+                        ", " +
+                        applyOTTimeString +
+                        ", " +
+                        descriptionString +
+                        "}} ";
+                    // var dataJson = jQuery.parseJSON(dataString);
+                    var dataJson = shr.explainJson(dataString);
+                    $("#entries").jqGrid("addRow", dataJson);
+                    //点击序号列 让人员失去焦点
+                    $("#entries tr:eq(1) td:eq(0)").click();
+                }
+            }
+        },
+        checkRowIsOver: function () {
+            if ($("#entries").jqGrid("getRowData").length > 100) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_6
+                });
+                return false;
+            } else {
+                return true;
+            }
+        },
+        // 如 加班小时数发生变化 则给予提示
+        changOtTimeTipInfo: function (rowid) {
+            //
+            var that = this;
+            var startTime = $("#entries").jqGrid("getCell", rowid, "startTime");
+            var endTime = $("#entries").jqGrid("getCell", rowid, "endTime");
+            var restTime = $("#entries").jqGrid("getCell", rowid, "restTime");
+            var applyOTTime = $("#entries").jqGrid(
+                "getCell",
+                rowid,
+                "applyOTTime"
+            );
+
+            if (startTime != "" && endTime != "") {
+                var restVal = 0;
+                if (restTime != "" && /^[0-9]*$/.test(restTime)) {
+                    restVal = restTime; // 分钟数
+                }
+                var startTime = new Date(startTime + ":00");
+                var endTime = new Date(endTime + ":00");
+                var se =
+                    endTime.getTime() -
+                    startTime.getTime() -
+                    restVal * 1000 * 60; // 毫秒
+                var tfl = se / (3600 * 1000);
+                if (tfl != applyOTTime) {
+                    if(tfl.toFixed(2)!=applyOTTime.toFixed(2)){
+                        // 不相等就给予提示
+                        that.preShowWarn(
+                            rowid,
+                            jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_24
+                        );
+                    }
+                }
+                //$("#entries").jqGrid('setCell',rowid,"applyOTTime",tfl); 计算的值
+            }
+        },
+        // if(cellname=="startTime" || cellname=="endTime" || cellname=="restTime"){
+        calRestTimeLen: function (rowid) {
+            var startTime = $("#entries").jqGrid("getCell", rowid, "startTime");
+            var endTime = $("#entries").jqGrid("getCell", rowid, "endTime");
+            if (startTime == "[object Object]") {
+                $("#" + rowid)
+                    .find("td")
+                    .eq("5")
+                    .text("");
+                $("#" + rowid)
+                    .find("td")
+                    .eq("5")
+                    .attr("title", "");
+                return;
+            }
+            if (endTime == "[object Object]") {
+                $("#" + rowid)
+                    .find("td")
+                    .eq("6")
+                    .text("");
+                $("#" + rowid)
+                    .find("td")
+                    .eq("6")
+                    .attr("title", "");
+                return;
+            }
+            if (!$("#entries").jqGrid("getCell", rowid, "otDate")) {
+                return;
+            } else {
+                otDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+            }
+            if (!$("#entries").jqGrid("getCell", rowid, "person")) {
+                return;
+            } else {
+                personId = $("#entries").jqGrid("getCell", rowid, "person").id;
+            }
+            this.remoteCall({
+                type: "post",
+                method: "getMyRestTime",
+                async: false,
+                param: {
+                    personId: personId,
+                    tDay: otDate,
+                    realStartTime: startTime,
+                    realEndTime: endTime
+                },
+                success: function (res) {
+                    var resLen = res.restTime < 0 ? 0 : res.restTime;
+                    var restStartTime = res.restStartTime;
+                    var restStartTime2 = res.restStartTime2;
+                    var restEndTime = res.restEndTime;
+                    var restEndTime2 = res.restEndTime2;
+                    $("#entries").jqGrid("setCell", rowid, "restTime", resLen);
+                    $("#entries").jqGrid(
+                        "setCell",
+                        rowid,
+                        "restStartTime",
+                        restStartTime
+                    );
+                    $("#entries").jqGrid(
+                        "setCell",
+                        rowid,
+                        "restStartTime2",
+                        restStartTime2
+                    );
+                    $("#entries").jqGrid(
+                        "setCell",
+                        rowid,
+                        "restEndTime",
+                        restEndTime
+                    );
+                    $("#entries").jqGrid(
+                        "setCell",
+                        rowid,
+                        "restEndTime2",
+                        restEndTime2
+                    );
+                }
+            });
+        },
+        calculateOTtimes: function (rowid) {
+            var startTime = $("#entries").jqGrid("getCell", rowid, "startTime");
+            var endTime = $("#entries").jqGrid("getCell", rowid, "endTime");
+            var restTime = $("#entries").jqGrid("getCell", rowid, "restTime");
+
+            if (startTime == "[object Object]") {
+                $("#" + rowid)
+                    .find("td")
+                    .eq("5")
+                    .text("");
+                $("#" + rowid)
+                    .find("td")
+                    .eq("5")
+                    .attr("title", "");
+            }
+            if (endTime == "[object Object]") {
+                $("#" + rowid)
+                    .find("td")
+                    .eq("6")
+                    .text("");
+                $("#" + rowid)
+                    .find("td")
+                    .eq("6")
+                    .attr("title", "");
+            }
+
+            if (startTime != "" && endTime != "") {
+                var restVal = 0;
+                if (restTime != "" && /^[0-9]*$/.test(restTime)) {
+                    restVal = restTime; // 分钟数
+                }
+                var startTime = NewDate(startTime + ":00");
+                var endTime = NewDate(endTime + ":00");
+                var se =
+                    endTime.getTime() -
+                    startTime.getTime() -
+                    restVal * 1000 * 60; // 毫秒
+                var tfl = se / (3600 * 1000);
+                $("#entries").jqGrid(
+                    "setCell",
+                    rowid,
+                    "applyOTTime",
+                    tfl.toFixed(fixedNum)
+                );
+            }
+        },
+        //获取档案历史加班类型的加班补偿方式
+        getOTCompensByOTType: function (personId, otTypeId, tDate) {
+            var _self = this;
+
+            var url =
+                shr.getContextPath() +
+                "/dynamic.do";
+            var otCompens = "";
+            _self.remoteCall({
+                type: "post",
+                method: "getOTCompensByOTType",
+                url: url,
+                param: {
+                    personId: personId,
+                    otTypeId: otTypeId,
+                    otDate: tDate
+                },
+                async: false,
+                success: function (res) {
+                    otCompens = res.otCompens;
+                }
+            });
+            return otCompens;
+        },
+        //获取当前加班类型的加班补偿方式
+        getOTCompensByOTTypes: function (personId, otTypeId) {
+            var _self = this;
+
+            var url =
+                shr.getContextPath() +
+                "/dynamic.do";
+            var otCompens = "";
+            _self.remoteCall({
+                type: "post",
+                method: "getOTCompensByOTTypes",
+                url: url,
+                param: { personId: personId, otTypeId: otTypeId },
+                async: false,
+                success: function (res) {
+                    otCompens = res.otCompens;
+                }
+            });
+            return otCompens;
+        },
+        changeOTCompens: function (rowid) {
+            var that = this;
+            var otCompensId;
+            if (!$("#entries").jqGrid("getCell", rowid, "otType")) {
+                return;
+            } else {
+                otTypeId = $("#entries").jqGrid("getCell", rowid, "otType").id;
+            }
+
+            if (!$("#entries").jqGrid("getCell", rowid, "person")) {
+                return;
+            } else {
+                var personId = $("#entries").jqGrid("getCell", rowid, "person")
+                    .id;
+            }
+
+            if (!$("#entries").jqGrid("getCell", rowid, "otDate")) {
+                return;
+            } else {
+                var otDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+            }
+
+            /*// zkbt5bMLQ3ehUivmKbtBOqlrTmA=  加班费 
+		var otCompensObejct = {id:"zkbt5bMLQ3ehUivmKbtBOqlrTmA=",name:"加班费"};
+		//等于法定节假日 id   sRWUOt7sRpOY0TCo6NMqGY6C/nU=
+*/
+            var otCompensIds = that.getOTCompensByOTTypes(personId, otTypeId);
+
+            var url =
+                shr.getContextPath() +
+                "/dynamic.do";
+            that.remoteCall({
+                type: "post",
+                method: "getDefaultOTCompens",
+                url: url,
+                param: {
+                    personId: personId,
+                    otTypeId: otTypeId,
+                    otDate: otDate
+                },
+                async: false,
+                success: function (res) {
+                    var info = res;
+                    if (info.defaultId == "" || info.defaultId == undefined) {
+                        shr.showWarning({
+                            message:
+                                jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_28
+                        });
+                    } else {
+                        var defaultOTCompens = {
+                            id: info.defaultId,
+                            name: info.defaultName
+                        };
+                        $("#entries").jqGrid(
+                            "setCell",
+                            rowid,
+                            "otCompens",
+                            defaultOTCompens
+                        );
+                        if (otCompensIds) {
+                            var otCompensIdsStr = otCompensIds.replace(
+                                /(,)/g,
+                                "','"
+                            );
+                            that.filter[rowid] =
+                                "BaseInfo.id in ('" + otCompensIdsStr + "')";
+                        }
+
+                        //$("#"+rowid+"_otCompens").shrPromptBox("setFilter","BaseInfo.id in ('"+otCompensIds+"')");
+                    }
+                    //
+                }
+            });
+
+            /*
+		that.remoteCall({
+			type:"post",
+			method:"getdefautAndOtOTCompens",
+			async: false,
+			success:function(res){
+					var info =  res;
+					var defaultcompens = info.defaultcompens;
+					var overTimeCompens = info.overTimeCompens;
+					var defaultJson = {id:defaultcompens.id , name:defaultcompens.name} ;
+					var overTimeJson = {id:overTimeCompens.id , name:overTimeCompens.name} ;
+					//  如果不是 工作日加班  则是要默认的补偿方式
+					//  如果是工作日加班  则是看有没有加班费
+					//$("#entries").jqGrid('setCell',rowid,"otCompens",'', 'editable-cell');
+					if(otTypeId == "sRWUOt7sRpOY0TCo6NMqGY6C/nU="){ // 
+						if(overTimeCompens!=null && overTimeCompens!=undefined){
+							$("#entries").jqGrid('setCell',rowid,"otCompens",overTimeJson);
+							//$("#entries").jqGrid('setCell',rowid,"otCompens",'', 'not-editable-cell');
+						}else{ 
+							$("#entries").jqGrid('setCell',rowid,"otCompens",defaultJson);
+						}
+					}else{
+						//$("#entries tr[id='"+rowid+"'] td[aria-describedby='entries_otCompens']").removeClass('not-editable-cell');
+						$("#entries").jqGrid('setCell',rowid,"otCompens",defaultJson);
+							//$("#entries").jqGrid('setCell',rowid,"otCompens",'', 'not-editable-cell');	
+					}
+				}
+			});*/
+
+            /*
+		if(otTypeId == "sRWUOt7sRpOY0TCo6NMqGY6C/nU="){
+			$("#entries").jqGrid('setCell',rowid,"otCompens",otCompensObejct);
+			$("#entries").jqGrid('setCell',rowid,"otCompens",'', 'not-editable-cell');
+		}else{
+			$("#entries tr[id='"+rowid+"'] td[aria-describedby='entries_otCompens']").removeClass('not-editable-cell');
+		}
+		*/
+        },
+        changeOverTimeType: function (rowid) {
+            var that = this;
+            var otDate;
+            var personId;
+            if (!$("#entries").jqGrid("getCell", rowid, "otDate")) {
+                return;
+            } else {
+                otDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+            }
+
+            if (!$("#entries").jqGrid("getCell", rowid, "person")) {
+                return;
+            } else {
+                personId = $("#entries").jqGrid("getCell", rowid, "person").id;
+            }
+            that.getOverTimeType(rowid, otDate, personId);
+        },
+        getOverTimeType: function (rowid, otDate, personId) {
+            var _self = this;
+            var tDate = otDate;
+            var url =
+                shr.getContextPath() +
+                "/dynamic.do?method=getOverTimeTypeAndOtCompens";
+            url +=
+                "&otDate=" +
+                encodeURIComponent(otDate) +
+                "&personId=" +
+                encodeURIComponent(personId)+"&uipk="+shr.getUrlRequestParam('uipk');
+            $.ajax({
+                url: url,
+                async: false,
+                success: function (response) {
+                    if (
+                        response.otTypeValue != null &&
+                        response.otTypeValue != undefined &&
+                        response.otTypeValue != ""
+                    ) {
+                        var responseObejct = {
+                            id: response.otTypeValue,
+                            name: response.otTypeText
+                        };
+                        if (_self.isOtTypeEffective(response.otTypeValue)) {
+                            // $('#entries').restoreCell(rowid,4); // 先恢复单元格状态再重新赋值,可以避免
+                            $("#entries").jqGrid(
+                                "setCell",
+                                rowid,
+                                "otType",
+                                responseObejct
+                            );
+                            //设置该加班类型的补偿方式过滤
+                            var otCompensIds = _self.getOTCompensByOTType(
+                                personId,
+                                response.otTypeValue,
+                                tDate
+                            );
+                            if (otCompensIds) {
+                                var otCompensIdsStr = _self
+                                    .getOTCompensByOTType(
+                                        personId,
+                                        response.otTypeValue,
+                                        tDate
+                                    )
+                                    .replace(/(,)/g, "','");
+                                _self.filter[rowid] =
+                                    "BaseInfo.id in ('" +
+                                    otCompensIdsStr +
+                                    "')";
+                            }
+
+                            var compens = response.compensInfo;
+                            if (compens != null) {
+                                var defaultJson = {
+                                    id: compens.id,
+                                    name: compens.name
+                                };
+                                $("#entries").jqGrid(
+                                    "setCell",
+                                    rowid,
+                                    "otCompens",
+                                    defaultJson
+                                );
+                            }
+                        } else {
+                            $("#entries").jqGrid(
+                                "setCell",
+                                rowid,
+                                "otType",
+                                null
+                            );
+                        }
+                    }
+                },
+                error: function (response) {}
+            });
+        },
+
+        //	判断加班补偿方式是否有效(存在且生效)
+        isOtTypeEffective: function (OtType) {
+            var _self = this;
+            var flag = true;
+            _self.remoteCall({
+                type: "post",
+                method: "isOtTypeEffective",
+                param: {
+                    OtType: OtType
+                },
+                async: false,
+                success: function (res) {
+                    var info = res;
+                    if (info.resFlag == false) {
+                        flag = false;
+                    } else {
+                        flag = true;
+                    }
+                }
+            });
+            return flag;
+        },
+        /**
+         * 设置分录行的默认值。重写框架此方法
+         */
+        createNewEntryModel: function () {
+            var that = this;
+            /*
+		var otCompens = that.getDefaultOTCompens();
+		return {otCompens:otCompens};*/
+        },
+        //设置默认的加班补偿方式
+        getDefaultOTCompens: function () {
+            var _self = this;
+            var defaultOTCompens = {};
+            //设置同步
+            _self.remoteCall({
+                type: "post",
+                method: "getDefaultOTCompens",
+                async: false,
+                success: function (res) {
+                    var info = res;
+                    if (info.defaultId) {
+                        defaultOTCompens = {
+                            id: info.defaultId,
+                            name: info.defaultName
+                        };
+                    }
+                }
+            });
+            return defaultOTCompens;
+        },
+        setButtonVisible: function () {
+            var billState = $("#billState").val();
+            //alert(billState);
+            if (billState) {
+                if (
+                    billState == 3 ||
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_22 ==
+                        billState ||
+                    billState == 4 ||
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_21 ==
+                        billState ||
+                    billState == 2 ||
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_23 ==
+                        billState
+                ) {
+                    $("#edit").hide();
+                    $("#submit").hide();
+                    $("#submitEffect").hide();
+                } else if (
+                    1 == billState ||
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_26 ==
+                        billState ||
+                    2 == billState ||
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_23 ==
+                        billState
+                ) {
+                    //未审批或审批中
+                    if (!this.isFromWF()) {
+                        $("#edit").hide();
+                        $("#submit").hide();
+                        $("#submitEffect").hide();
+                    }
+                }
+            }
+            if (this.getOperateState().toUpperCase() == "VIEW") {
+                //查看状态下不允许提交
+                //不允许提交生效
+                $("#submitEffect").hide();
+            }
+            //如果是工作流打回,界面上的"取消"不显示
+            if (this.isFromWF()) {
+                $("#cancelAll").hide();
+            }
+        },
+        setImportSelfParam: function () {
+            var billId = $("#id").val();
+            return (
+                $("#entries").getGridParam("reccount") + "&" + $("#id").val()
+            );
+        },
+        getOTContrlParams: function (rowid) {
+            var personId;
+            if (!$("#entries").jqGrid("getCell", rowid, "person")) {
+                return;
+            } else {
+                personId = $("#entries").jqGrid("getCell", rowid, "person").id;
+            }
+            var otDate;
+            if (!$("#entries").jqGrid("getCell", rowid, "otDate")) {
+                return;
+            } else {
+                otDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+            }
+            var that = this;
+
+            var url =
+                shr.getContextPath() +
+                "/dynamic.do?handler=com.kingdee.shr.ats.bill.util.BillBizUtil&method=getOTContrlParam";
+            shr.ajax({
+                type: "post",
+                async: false,
+                url: url,
+                data: { personId: personId, otDate: otDate },
+                success: function (res) {
+                    if (res) {
+                        that.OTContrlParams[rowid] = res;
+                        //					isOTControl=res.isOTControl;
+                        //					isOtrolByDateType=res.isOtrolByDateType;
+                    }
+                }
+            });
+        },
+        beforeSubmit: function () {
+            var _self = this,
+                workArea = _self.getWorkarea(),
+                $form = $("form", workArea);
+            _self.beforeWFValidStoreCellValue();
+            if ($form.valid() && _self.verify()) {
+                return true;
+            }
+            // return false 也能保存,固让js报错,后续让eas修改 return false 逻辑
+            var len = workArea.length();
+            return false;
+        },
+        validateIsFillOtVerify: function () {
+            var that = this;
+            var boo = true;
+            if (that.isFromWF()) {
+                var model = that.getCurrentModel();
+                that.remoteCall({
+                    method: "validateIsFillOt",
+                    param: { model: model },
+                    async: false,
+                    success: function (res) {
+                        info = res;
+                        if (res.errorString) {
+                            shr.showError({ message: res.errorString });
+                            boo = false;
+                        }
+                    }
+                });
+            }
+            return boo;
+        },
+        /**
+         * 工作流和其他页面统一校验入口,最好后续把校验都放在一起,方便维护.
+         * @return {}
+         */
+        verifyCheck: function () {
+            var that = this;
+            var boo = true;
+            if (that.isFromWF()) {
+                //暂时只处理流程提交,后续可放开把所有检验统一入口
+                var model = that.getCurrentModel();
+                that.remoteCall({
+                    method: "verifyCheck",
+                    param: { model: model },
+                    async: false,
+                    success: function (res) {
+                        info = res;
+                        if (res.errorString) {
+                            shr.showError({ message: res.errorString });
+                            boo = false;
+                        }
+                    }
+                });
+            }
+            return boo;
+        },
+        beforeWFValidStoreCellValue: function () {
+            var _self = this;
+
+            if (this.rowid && this.cellname && this.iRow && this.iCol) {
+                $("#entries").jqGrid("saveCell", this.rowid, this.iCol);
+                //_self.afterSaveCellTrigger(this.rowid, this.cellname, this.value, this.iRow , this.iCol) ;
+            }
+        },
+        checkattencePolicyParm: function (rownum) {
+            var that = this;
+            var errorString = "";
+
+            var model = that.getCurrentModel();
+            if (model.entries[0] && model.entries[0].person) {
+                delete model.entries[0].person["person.gender"];
+                delete model.entries[0].person["personOtherInfo.age"];
+            }
+            that.remoteCall({
+                method: "checkattencePolicyParm",
+                param: { model: model },
+                async: false,
+                success: function (res) {
+                    errorString = res.errorString;
+                }
+            });
+
+            return errorString;
+        },
+        validateOTEntry: function (rownum) {
+            var that = this;
+            var errorString = "";
+
+            var model = that.getCurrentModel();
+            if (model.entries[0] && model.entries[0].person) {
+                delete model.entries[0].person["person.gender"];
+                delete model.entries[0].person["personOtherInfo.age"];
+            }
+
+            //		openLoader();
+            that.remoteCall({
+                method: "validateOTEntry",
+                param: { model: model },
+                async: false,
+                success: function (res) {
+                    errorString = res.errorMSg;
+                }
+            });
+
+            return errorString;
+        },
+        openLoader: function (type, tip) {
+            if (!type) type = 1;
+            $("#loaderTip").text(
+                tip
+                    ? tip
+                    : jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_12
+            );
+            $("#loader").css("display", "block");
+        },
+        getCurrentModel: function () {
+            var model =shr.ats.AtsOverTimeBillBatchEdit.superClass.assembleModel.call(this);
+            model.ccPersonIds =
+                (model.ccPersonIds && model.ccPersonIds.id) || "";
+            model.ccPerson = model.ccPersonIds;
+
+
+
+
+
+            return model;
+        }
+    }
+);
+
+function NewDate(str) {
+    str = str.split(" ");
+    var day = str[0].split("-");
+    var hours = str[1].split(":");
+    var date = new Date();
+    date.setUTCFullYear(day[0], day[1] - 1, day[2]);
+    //, hours[3]
+    date.setUTCHours(hours[0], hours[1], hours[2]);
+    return date;
+}
+
+/**
+ * 创建日期时间
+ */
+function NewLongDate(str) {
+    str = str.split(" ");
+    var day = str[0].split("-");
+    var hours = str[1].split(":");
+    var date = new Date(
+        day[0],
+        day[1] - 1,
+        day[2],
+        hours[0],
+        hours[1],
+        hours[2] || ""
+    );
+    return date;
+}
+/**
+ * 创建日期
+ * 支持IE的创建方式
+ */
+function NewShortDate(str) {
+    str = str.split(" ");
+    var day = str[0].split("-");
+    var date = new Date(day[0], day[1] - 1, day[2]);
+    return date;
+}

+ 1549 - 0
js/addon/attendmanage/web/js/shr/ats/atsOverTimeBillBatchEditForPer.js

@@ -0,0 +1,1549 @@
+var _rowMap ;
+var isOTControl=false;
+var isOtrolByDateType=false;
+var fixedNum;
+shr.defineClass("shr.ats.atsOverTimeBillBatchEditForPer", shr.framework.Edit, {
+	OTContrlParams:{},
+	filter:{},
+	rowid : "" ,
+    cellname : "" ,
+    value : "" ,
+    iRow : "" ,
+	iCol : "" ,
+
+	initalizeDOM:function(){
+		shr.ats.atsOverTimeBillBatchEditForPer.superClass.initalizeDOM.call(this);
+		var that = this ;
+
+		that.remoteCall({
+        	type:"post",
+        	method:"getDecimalPlace",
+        	//handler:"com.kingdee.shr.ats.web.handler.AtsBillBaseEditHandler",
+        	success:function(res){
+        	    fixedNum =  res;
+        	}
+        });
+
+	    that.setNavigateLine();
+//		that.getOTContrlParams();
+		var classfullNameService = "com.kingdee.shr.ats.web.formEditImport.AtsOverTimeBillFileEditFormService";
+		
+		var entries_cont=waf("#entries");
+		entries_cont.jqGrid("option", {
+			  beforeSaveCell:function (rowid, cellname, value, iRow, iCol) {
+			  }
+			  ,afterSaveCell:function (rowid, cellname, value, iRow, iCol) {
+
+				  if(value["adminOrgUnit.id"]){
+						$("#entries").jqGrid('setCell',rowid,"adminOrgUnit.id",value["adminOrgUnit.id"]);
+					 }
+				_self.afterSaveCellTrigger(rowid, cellname, value, iRow, iCol);				 
+			  		
+			  }
+			  ,afterEditCell:function (rowid, cellname, value, iRow, iCol) 
+			  {
+			  	that.getOTContrlParams(rowid);
+			    if(cellname=="otType" && that.OTContrlParams[rowid].isOtrolByDateType){
+					$("#"+iRow+"_otType").shrPromptBox("disable");
+				}
+				//因为需求只是提了第一个时间时改变业务组织
+				$("#1_otDate").change(function(){
+				 that.changeOverHrOrgUnit();
+				});
+				if(cellname=="otCompens"){
+					
+					if(that.filter[rowid]==undefined){
+						// // R20221006-0542 修复选择加班费后 再点击“补偿方式”F7就变成了调休的问题
+			    		// that.changeOTCompens(rowid);
+			    	}
+			    	if(that.filter[rowid]){
+//						$("#"+rowid+"_otCompens").shrPromptBox("setFilter",that.filter[rowid]);
+			    		$("#"+$("#entries").jqGrid('getCell',rowid,"rn")+"_otCompens").shrPromptBox("setFilter",that.filter[rowid]);
+			    	}
+				}
+                  if(cellname == "attAdminOrgUnit"){
+                      var personId = $("#entries").jqGrid("getCell", rowid, "person").id;
+                      var attendanceDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+
+                      if(!(personId && attendanceDate)){
+                          shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_999});
+                          return false;
+                      }else{
+                          //$("#"+rowid+"_attPosition").shrPromptBox().attr("data-params", adminOrg);
+                          $("#"+iRow+"_attAdminOrgUnit").shrPromptBox("setOtherParams", {
+                              personId: personId,
+                              attendanceDate: attendanceDate
+                          });
+                      }
+
+
+                  }
+
+				_self.saveEditCellValue(rowid,cellname, value,iRow,iCol) ;
+			  }
+		});
+		
+		that.setButtonVisible(); //初始化页面安装状态,如果是已经提交的或者审批通过的单据编辑按钮不显示
+		//隐藏提交生效按钮
+		if (that.getOperateState() == 'EDIT') {			
+			if(that.isFromWF()){ // 来自流程中心
+				$("#submit").text(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_20);
+			}
+		}
+				
+		//审核编辑界面
+		if(that.isFromWF() && that.getOperateState() == 'EDIT'  && $("#billState").val() != 0)
+		{
+			$('#deleteRow_entries').unbind("click").attr("onclick","").css("cursor","default");
+			$('#addRow_entries').unbind("click").attr("onclick","").css("cursor","default");
+			$(".editGrid-toolbar").hide();
+			$("#submit").show();
+			var lastRowNum = $('#entries').getGridParam("reccount");
+			for (var i = 1;i<= lastRowNum;i++) {
+				var temp_id = $("#entries tr:eq("+ i +")").attr("id");
+				$("#entries").jqGrid('setCell',temp_id,'person','','not-editable-cell');
+			}	
+		}
+
+		that.initCcPersonPrompt();
+		that.isEdit();
+	},
+    clearCCPersonIdsPrompt :function() {
+        if ($('#ccPersonIds').length == 0) {
+            return;
+        }
+        atsCcPersonUtils.clearCCPersonIdsPrompt(this);
+    },
+	isEdit:function(){
+		var that = this;
+		if (that.getOperateState() == 'VIEW') {
+			if(that.initData.needHideEdit){
+				$("#edit").hide();
+				$("#submit").hide();
+			}
+		}
+	},
+    initCcPersonPrompt :function() {
+        if ($('#ccPersonIds').length == 0) {
+            return;
+        }
+        atsCcPersonUtils.initCCPersonIdsPrompt(this);
+        if (this.getOperateState() != 'VIEW') {
+            var person = $('#proposer').shrPromptBox("getValue");
+            if (!person) {
+                // shr.showWarning({message:"Please select people."});
+            } else {
+                $('#ccPersonIds').shrPromptBox("setOtherParams", {
+                    // handler: "com.kingdee.shr.ats.web.handler.team.F7.TeamPersonForEmpOrgF7ListHandler",
+                    personId: person.id
+                });
+            }
+        }
+    }
+	,afterSaveCellTrigger: function(rowid, cellname, value, iRow, iCol)
+	{	
+		var that = this ;
+		var entries_cont=waf("#entries");
+		that.removePreShowError(rowid);
+		if(cellname=="otDate"){
+
+            var val = value;
+            if (val.length <= 10) {
+                val = val + " 00:00:00";
+            }
+
+            val && $("#entries").jqGrid('setCell',rowid,"startTime",val);
+            val && $("#entries").jqGrid('setCell',rowid,"endTime",val);
+			that.changeOverTimeType(rowid);
+			that.calRestTimeLen(rowid);
+		}
+		
+		if(cellname=="otType"){
+			that.changeOTCompens(rowid);
+		}
+		// 添加 开始时间  结束时间   休息时长(分钟) 响应时间 
+		if(cellname=="startTime" || cellname=="endTime" || cellname=="restTime"){
+			if(cellname!="restTime"){
+				that.calRestTimeLen(rowid);
+			}
+			that.calculateOTtimes(rowid);
+		}
+		if(cellname=="person"){
+			
+			that.calRestTimeLen(rowid);
+		}
+		if(cellname=="applyOTTime"){ // 加班小时数  发生改变就给予提示
+			that.changOtTimeTipInfo(rowid);
+		}
+        if (cellname=="restStartTime" || cellname=="restStartTime2" || cellname=="restEndTime" ||cellname=="restEndTime2"){
+            //计算休息时间,加班时间
+            var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
+            var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
+            var restStartTime = $("#entries").jqGrid('getCell',rowid,"restStartTime") ;
+            var restEndTime = $("#entries").jqGrid('getCell',rowid,"restEndTime") ;
+            var restStartTime2 = $("#entries").jqGrid('getCell',rowid,"restStartTime2") ;
+            var restEndTime2 = $("#entries").jqGrid('getCell',rowid,"restEndTime2") ;
+            if (startTime=="" || endTime==""){
+                return
+            }
+            var totalRestTime=0;
+            var restStartTimeOfDate;
+            var restEndTimeOfDate;
+            if (restStartTime!="" && restEndTime!=""){
+                restStartTimeOfDate = new Date(restStartTime);
+                restEndTimeOfDate = new Date(restEndTime);
+                var times =restEndTimeOfDate.getTime()-restStartTimeOfDate.getTime();
+                if (times<0){
+                    times=0;
+                }
+                times=times/1000/60;
+                totalRestTime+=times;
+            }
+            if (restStartTime2!="" && restEndTime2!=""){
+                var restStartTime2OfDate = new Date(restStartTime2);
+                var restEndTime2OfDate = new Date(restEndTime2);
+                if ((restStartTime!="" && restEndTime2OfDate.getTime()>restStartTimeOfDate.getTime() && restStartTimeOfDate.getTime()>=restStartTime2OfDate.getTime())
+                    ||(restEndTime!="" && restEndTimeOfDate.getTime()<=restEndTime2OfDate.getTime() && restStartTime2OfDate.getTime()<restEndTimeOfDate.getTime())
+                    ||(restStartTime!="" && restEndTime!="" && restEndTimeOfDate.getTime()>=restEndTime2OfDate.getTime() && restStartTime2OfDate.getTime()>=restStartTimeOfDate.getTime())
+                ){
+                    //时间有交叉
+                    $("#entries").jqGrid('setCell',rowid,"restEndTime2",restStartTime2) ;
+                } else {
+                    var times =restEndTime2OfDate.getTime()-restStartTime2OfDate.getTime();
+                    if (times<0){
+                        times=0;
+                    }
+                    times=times/1000/60;
+                    totalRestTime+=times;
+                }
+            }
+            var  t1 = totalRestTime.toFixed(atsMlUtile.getSysDecimalPlace());
+            $("#entries").jqGrid('setCell',rowid,"restTime",t1) ;
+            var startTime =new Date(startTime+":00");
+            var endTime =new Date(endTime+":00");
+            var se = endTime.getTime()-startTime.getTime() -totalRestTime; // 毫秒
+            var tfl = se/(3600*1000) ;
+            $("#entries").jqGrid('setCell',rowid,"applyOTTime",tfl) ;
+            that.calculateOTtimes(rowid);
+            that.getOTContrlParams(rowid);
+        }
+	}
+	
+	//新增 jqgrid 行 方法, 复写
+	,addRowAction: function(event) {
+		//增加自己的逻辑
+	    var that = this ; 
+	    
+	    var num = $("#entries").jqGrid("getRowData").length ;
+	  	if(num>=100){
+	  	    shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_6});
+	  		return;
+	  	}
+	  	
+		var source = event.currentTarget,
+			$editGrid = this.getEditGrid(source);
+		
+		var data = this.createNewEntryModel(); // 默认的补偿方式
+		if (typeof data === 'undefined') {
+			data = {};
+		}
+		
+		var editGridCont = this._getEditGridCont(source);
+		if (editGridCont.data('editType') == 'inline') {
+			// 表格内编辑
+			$editGrid.jqGrid('addRow', { data: data	});
+		} else {
+			$editGrid.wafGrid('addForm');
+		}
+		
+		var event = document.createEvent('HTMLEvents');
+	   	    event.initEvent("editComplete_"+$editGrid.attr("id"), true, true);
+		    event.eventType = 'message';
+		    document.dispatchEvent(event);
+		
+		//设置不可 编辑 姓名
+		var lastRowNum = $('#entries').getGridParam("reccount");
+		var temp_id = $("#entries tr:eq("+ lastRowNum +")").attr("id");
+		$("#entries").editCell(lastRowNum, 11, true);
+		$("#entries").jqGrid('setCell',temp_id,'person','','not-editable-cell');
+		
+	},
+	changeOverHrOrgUnit : function(){
+		var that = this;
+		var overStartTime = atsMlUtile.getFieldOriginalValue("1_otDate");
+		if ( overStartTime!=""&&overStartTime!=null ) {
+		overStartTime = overStartTime.replace("\\-","/");
+		var personId = $("#proposer_el").val();
+		that.remoteCall({
+			type:"post",
+			async: false,
+			method:"getHrOrgUnit",
+			param:{personId:personId,beginTime:overStartTime},
+			success:function(res){
+				info =  res;
+				if(res.hrOrgUnitname && res.hrOrgUnitId){
+				$("#hrOrgUnit").val(res.hrOrgUnitname);
+				$("#hrOrgUnit_el").val(res.hrOrgUnitId);
+				}
+				
+			}
+		});
+		}
+	}
+	// 获取填充的 rowId,导入的rowId 
+	,getFillRowId:function(oldRowIds,newRowIds){
+		var size = newRowIds.length;
+		var sizeOld = oldRowIds.length;
+		if(sizeOld == 0){
+			return newRowIds;
+		}
+		var  rowIds = [];
+		for(var i=0;i<size;i++){
+		  if(i>=sizeOld){
+		       rowIds.push(newRowIds[i]);   
+		   }
+		}
+		return rowIds ;
+	}
+
+	,submitAction: function(event) {
+		var _self = this,
+			workArea = _self.getWorkarea(),
+			$form = $('form', workArea);
+		if(!_self.validate()){
+			return ;
+		}
+			
+		if ($form.valid() && _self.verify()) {
+			shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_14, function() {
+				_self.doSubmit(event, 'submit');
+			});
+		}		
+	}
+	,goNextPage: function(source) {
+		// 普通提交,返回上一页面
+		_self.reloadPage({
+				uipk: "com.kingdee.eas.hr.ats.app.AtsOverTimeBillList"
+		});
+	}
+	,prepareSubmitEffect : function (event, action){
+		var _self = this;
+		var data = _self.assembleSaveData(action);
+		
+		var target;
+		if (event && event.currentTarget) {
+			target = event.currentTarget;
+		}
+		shr.doAction({
+			target: target,
+			url: _self.dynamicPage_url,
+			type: 'post', 
+			data: data,
+			success : function(response) {
+				_self.back();
+			}
+		});	
+	}
+	
+	,importAction: function(gridID,classfullName) {
+		
+		var _self = this;
+		if(gridID != undefined)
+		{
+			grid = gridID	;
+		}
+		if(classfullName != undefined)
+		{
+			className = classfullName ;
+		}
+		
+		var importDiv = $('#importDiv');
+		if (importDiv.length > 0) {
+		//	importDiv.data('uipk', lastUipk);
+		//	importDiv.data('viewModel', viewModel);
+		//	importDiv.data('classify', classify);
+		//	importDiv.dialog('open');
+		//	return;
+		}
+		 $('#importDiv').remove();
+		 
+		 selfParam = _self.setImportSelfParam();
+		// 未生成dialog
+		importDiv = $('<div id="importDiv"></div>').appendTo($('body'));
+		importDiv.data('uipk', lastUipk);
+		importDiv.data('viewModel', viewModel);
+		importDiv.data('grid', grid);
+		importDiv.data('className', className);
+		importDiv.data('selfParam',selfParam);
+	//	importDiv.data('classify', classify);
+		var oldRowIds = $("#entries").getDataIDs();
+		if(_self.checkUpload()){ 
+			importDiv.dialog({
+				autoOpen: true,		
+				width: 708,
+				height: 700,
+				title: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_4,
+				resizable: true,
+				position: ['top','top'],
+				modal: true,
+				open: function(event, ui) {
+					if ($.browser.msie) {
+						var url = shr.assembleURL('hr.ats.com.atttendanceCommonImport', 'view', {
+							lastUipk: lastUipk,
+							viewModel: viewModel ,
+							className : className
+							//classify:classify
+						});
+						var content = '<iframe id="importFrame" name="importFrame" width="700" height="600" frameborder="0" scrolling="no" allowtransparency="true" src="' + url + '"></iframe>';
+						importDiv.append(content);
+					} else {
+						
+						var url = shr.assembleURL('hr.ats.com.atttendanceCommonImport$page', 'view');
+						shr.loadHTML({
+							url: url,
+							success: function(response) {
+								importDiv.append(response);
+							}
+						});
+					}
+					document.documentElement.style.overflow='hidden';
+				},
+				close: function(event, ui) {
+					document.documentElement.style.overflow='scroll';
+					importDiv.empty();
+					
+					// 触发计算 请假次数 剩余额度 时长
+					
+					//点击序号列 让人员失去焦点
+					$("#entries tr:eq(1) td:eq(0)").click();
+					
+					var newRowIds = $("#entries").getDataIDs();
+					var rowIds = _self.getFillRowId(oldRowIds,newRowIds);
+					$.each(rowIds,function(n,value) { 
+						_self.calRestTimeLen(value);
+						_self.changOtTimeTipInfo(value);
+					});
+					//检查不超过100条记录
+					//_self.checkRowIsOver();
+					
+				} 
+			});
+		}
+		
+		$(".ui-dialog-titlebar-close").bind("click" , function(){
+			importDiv.dialog("close");
+		});		
+	}
+	
+	,verify:function(){
+		var _self = this ;
+		var obj = $("#entries").jqGrid("getRowData");
+		var errorString = "";
+		var errorFlag = 0 ;
+
+		//不支持跨天加班,请使加班结束日期与加班开始时间日期保持一致  202502 总部提供
+		for(var i=0;i<obj.length;i++){
+			if(obj[i].startTime.substring(0,10)!=obj[i].endTime.substring(0,10)){
+				shr.showWarning({message: obj[i].person.name+"的加班日期有误,不支持跨天加班,结束日期必须与加班开始时间日期保持一致!"});
+				return false;
+			}			
+		}
+
+
+		if(obj.length == 0){
+			shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_7});
+			return false;
+		}
+		
+		if(!_self.checkRowIsOver()){
+			return false;
+		}
+		
+		_rowMap = {} ;
+		
+		jQuery(obj).each(function(n){
+		    	errorString = _self.checkEveryRow(n + 1 , this);
+		   		if(errorString){
+		   			_self.preShowError( n + 1 ,this.person.name + " " + errorString);
+		   			errorFlag = 1 ;
+		   		}
+			
+		 });	
+		 if(!_self.verifyCheck()){
+		 	return false;
+		 }
+
+		errorString = _self.validateOTEntry();
+		if(errorString && errorString != ""){
+			shr.showWarning({message: errorString});
+			closeLoader();
+			return false;
+		}
+
+
+		 
+		 if(errorFlag == 0){
+			 //工作流审批界面,加班补提控制。
+		    var boo = true;
+		    boo = _self.validateIsFillOtVerify();
+   			return boo;
+		 }else{
+			return false;
+		 }
+	},
+
+		validateOTEntry: function(rownum){
+			var that = this;
+			var errorString = "";
+
+			var model = that.assembleModel();
+			if(model.entries[0] && model.entries[0].person){
+				delete model.entries[0].person["person.gender"];
+				delete model.entries[0].person["personOtherInfo.age"];
+			}
+
+//		openLoader();
+			that.remoteCall({
+				method:"validateOTEntry",
+				param:{model:model},
+				async: false,
+				success:function(res){
+					errorString = res.errorMSg;
+				}
+			});
+
+			return errorString;
+		}
+
+	,openLoader: function (type, tip) {
+		if(!type)  type = 1;
+		$("#loaderTip").text(tip ? tip : jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_12);
+		$("#loader").css("display", "block");
+	},
+	getCurrentModel : function(){
+		var model = shr.ats.AtsOverTimeBillBatchEdit.superClass.getCurrentModel.call(this);
+		model.ccPersonIds = model.ccPersonIds && model.ccPersonIds.id || "";
+		model.ccPerson = model.ccPersonIds;
+		return model ;
+	}
+
+
+	,checkEveryRow : function(rownum,value){
+			var that = this ;
+			var regEx = new RegExp("\\-","gi"); //i不区分大小写 g匹配所有
+			
+		 	var startTime = value.startTime ;
+			var endTime = value.endTime ;
+			//这样写IE才支持。
+			var startTimeOfDate =  NewLongDate(startTime + ":00"); 
+		 	var endTimeOfDate = NewLongDate(endTime + ":00"); 
+		 	
+		 	var longTime = endTimeOfDate.getTime() - startTimeOfDate.getTime();
+		 	var otType = value.otType.id;
+		 	
+		 	//处理加班日期 与 加班开始时间 和结束时间的日期保持一致
+		 	var overDate = value.otDate ; //加班日期
+		 	overDate = overDate.substring(0,10);
+		 	var overTimeBegin = value.startTime ;
+		 	overTimeBegin = overTimeBegin.substring(0,10); //2014-01-02 00:00
+		 	var overTimeEnd = value.endTime ;
+		 	overTimeEnd = overTimeEnd.substring(0,10);
+		 	
+	 		var overTimeDate = NewShortDate(overDate);
+	 		var overTimeStartDate = NewShortDate(overTimeBegin); 
+	 		var overTimeEndDate = NewShortDate(overTimeEnd);
+	 	
+		 	
+			if ( overTimeStartDate.getTime() <overTimeDate.getTime()-24*60*60*1000  ) {
+				return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_2;
+		 	}
+		 	if ( overTimeEndDate.getTime()-24*60*60*1000  > overTimeDate.getTime() ) {
+		 		return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_2;
+		 	}
+		 	if (longTime <= 0) {
+		 		return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_9;
+		 	}
+
+		    var applyOTTime = value.applyOTTime;
+			if(applyOTTime <= 0){
+				return jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_0001;
+			}
+		 	
+		 	
+		 	// 检查jqgrid 表格里的是否有重复数据
+		 	var rowValue = new Array();
+				rowValue[0] = value.person.id;
+				rowValue[1] = value.startTime;
+				rowValue[2] = value.endTime;
+		 		_rowMap[rownum] = rowValue;
+		 	for(var prop in _rowMap){
+ 			   if(_rowMap.hasOwnProperty(prop)){
+ 			   	    var beginTimeTempStr = _rowMap[prop][1];
+ 			   	    var endTimeTempStr = _rowMap[prop][2];
+ 			   		var beginTimeTemp = NewLongDate(beginTimeTempStr);
+ 			   		var endTimeTemp = NewLongDate(endTimeTempStr);
+ 			   		if(prop!=rownum&&_rowMap[prop][0]==value.person.id&&!(beginTimeTemp.getTime()>=endTimeOfDate.getTime()||endTimeTemp.getTime()<=startTimeOfDate.getTime())){
+ 			   			return shr.formatMsg(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_3, [prop]);
+ 			   		
+ 			   		}
+    			}
+			}
+        var msg =this.verifyRestTime(true,value);
+        if (msg!=""){
+            return msg;
+        }
+		 	var isExistFile = that.isExistAttendanceFile(value.person.id);
+		 	if(isExistFile == false){
+		 	   return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_5;
+		 	}
+		 	//设置同步
+		 	var info ;
+		 	that.remoteCall({
+				type:"post",
+				method:"isWorkTime",
+				async: false,
+				param:{personId: value.person.id,overDate:value.otDate,overTimeBegin:value.startTime+":00",overTimeEnd:value.endTime+":00"},
+				success:function(res){
+					   info = res;
+				}
+			});
+		 	
+			if (info.isWorkTime){
+//				shr.showWarning({message:"加班开始结束时间和上班时间有交叉。"});
+				return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_8;
+			}	
+			var applyOTTime = value.applyOTTime;
+		 	//判断申请加班小时数是否达到加班起始值
+			var validOtStartString;
+		 	that.remoteCall({
+				type:"post",
+				method:"validOtStart",
+				async: false,
+				param:{personId: value.person.id,applyOTTime:applyOTTime},
+				success:function(res){
+					   var validInfo = res.info;
+					   if(validInfo!=null && validInfo!=""){
+						   validOtStartString=validInfo;
+					   }
+				}
+			});
+	 	    if(validOtStartString!=null && validOtStartString!=""){
+	 	    	return validOtStartString;
+	 	    }
+			//是否在“固定加班”时间段或者“固定加班不计异常”时间段内
+			var obj;
+		 	that.remoteCall({
+				type:"post",
+				method:"isAtFixedOverTimeOrExcep",
+				async: false,
+				param:{personId: value.person.id,overDate:value.otDate,overTimeBegin:value.startTime+":00",overTimeEnd:value.endTime+":00"},
+				success:function(res){
+					obj = res;
+				}
+			});
+		 	
+			if (obj.isAtFixedOverTimeOrExcep){
+				return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_1;
+			}	
+			
+		 	var errorString = that.validateIsExistBill(value.person.id,startTime,endTime,$('#id').val());
+	   		if(errorString){
+	   			/*shr.showInfo({message: "加班开始时间必须小于加班结束时间。"});
+				return false;*/
+	   			return errorString;
+	   		}
+   			if(value.otCompens.id =="AERg0TIcSnaM40EKvJCdRKlrTmA="){ // 只有等于调休的时候才校验
+   				var errorString = that.validateIsValidateLimit(value.person.id,value.otDate,value.applyOTTime,otType);
+   				if(errorString){
+   					return errorString;
+   				}
+   			}
+			
+		 	return "" ;
+	
+	}// 调休额度是否正确 ;
+	,validateIsValidateLimit : function(personId,otDate,currentValue,otType){
+		var that = this;
+			var info;
+			var infoLeaveBillNumber;
+			otDate =otDate.substring(0,10);
+			var errorString = "";
+		 		that.remoteCall({
+				type:"post",
+				async: false,
+				method:"isOverMaxQuota",
+				param:{personId:personId,otDate:otDate,currentValue:currentValue,otType:otType},
+				success:function(res){
+					if(!res.resFlag){
+						errorString = res.resMsg ;						
+					}
+				}
+			});
+		return errorString;
+	}
+	,validateIsExistBill : function(personId , beginTime , endTime , billId ){
+			var that = this;
+			var info;
+			var infoLeaveBillNumber;
+			var errorString = "";
+		 		that.remoteCall({
+				type:"post",
+				async: false,
+				method:"validateIsExistBill",
+				param:{personId:personId,beginTime:beginTime,endTime:endTime,billId:billId},
+				success:function(res){
+					info =  res;
+				}
+			});
+		    
+		    if (errorString) {
+		      errorString = shr.formatMsg(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_23,
+				  [info.overTimeNum, info.personName, info.beginTime, info.endTime]);
+			  return errorString;
+		    }  
+	},
+	// 获取表格序号列,修复平台表格序号列位置移动导致的提示列位置错误导致的显示异常bug
+	getColNumIndex: function(){
+		var _self = this;
+		if(_self.colNumIndex){
+			return _self.colNumIndex
+		}
+		$.each($("#entries").jqGrid("getAllColumn"),function(index,item){
+			if(item.name=="rn"){
+				_self.colNumIndex=index	
+			}
+		})
+		return _self.colNumIndex
+	}
+	//对校验结果进行页面个性化提示
+	,preShowError:function(iRow,errorString){
+		var rnColNum=this.getColNumIndex();
+			var that = this;
+			if (errorString){
+				$("#entries tr:eq("+iRow+") td:eq("+rnColNum+")").html("!").css("color","red").attr({"data-toggle":"tooltip","data-placement":"left","title":errorString});
+				$("#entries tr[id='"+iRow+"']").css("color","red");
+			/*
+				$("#entries tr:eq("+iRow+") td:eq(2)").css("color","red");
+				$("#entries tr:eq("+iRow+") td:eq(3)").css("color","red");
+				$("#entries tr:eq("+iRow+") td:eq(4)").css("color","red");
+			*/			
+			}
+	}
+	//对校验结果进行页面个性化提示
+	,preShowWarn:function(iRow,errorString){
+		var rnColNum=this.getColNumIndex();
+			var that = this;
+			$("#entries").find('tr').eq(iRow).find('td').eq("+rnColNum+").text("?").css("color","red").attr({"data-toggle":"tooltip","data-placement":"left","title":errorString});
+			
+	}
+	//去除个性化展示,每次校验前去除
+	,removePreShowError:function(rowid){
+		var rnColNum=this.getColNumIndex()
+		var rows = $('#entries').getGridParam("reccount");
+			$("#entries tr[id='"+rowid+"'] td:eq("+rnColNum+")").attr('title','');
+			$("#entries tr[id='"+rowid+"'] td:eq("+rnColNum+")").html($("#entries tr[id='"+rowid+"']")[0].rowIndex);
+			$("#entries tr[id='"+rowid+"'] td:eq("+rnColNum+")").css("color","rgb(153, 153, 153)")
+			$("#entries tr[id='"+rowid+"']").css("color","rgb(153, 153, 153)");//如果设置成css("color","initial")会变成黑色,而原界面为灰色
+	}
+	,checkF7Data : function(){
+			var that = this;
+			
+			var otDate = window.frames["orgFillDiv"].atsMlUtile.getFieldOriginalValue("otDate");
+			var  adminOrgUnit_el = $(window.frames["orgFillDiv"].document).find("#adminOrgUnit_el").val() ;
+			var  adminOrgUnit = $(window.frames["orgFillDiv"].document).find("#adminOrgUnit").val() ;
+			var  person_el = $(window.frames["orgFillDiv"].document).find("#person_el").val() ;
+			var  person = $(window.frames["orgFillDiv"].document).find("#person").val() ;
+			
+			var startTime = window.frames["orgFillDiv"].atsMlUtile.getFieldOriginalValue("startTime");
+			var otType_el =$(window.frames["orgFillDiv"].document).find("#otType_el").val() ;
+			var otType = $(window.frames["orgFillDiv"].document).find("#otType").val() ;
+			var endTime = window.frames["orgFillDiv"].atsMlUtile.getFieldOriginalValue("endTime");
+			
+			var otCompens_el = $(window.frames["orgFillDiv"].document).find("#otCompens_el").val();
+			var otCompens = $(window.frames["orgFillDiv"].document).find("#otCompens").val();
+			
+			
+			var restTime = $(window.frames["orgFillDiv"].document).find("#restTime").val() ;
+			var otReason_el =$(window.frames["orgFillDiv"].document).find("#otReason_el").val() ;
+			var otReason = $(window.frames["orgFillDiv"].document).find("#otReason").val() ;
+			var applyOTTime = window.frames["orgFillDiv"].atsMlUtile.getFieldOriginalValue("applyOTTime") ;
+			
+			var remark = $(window.frames["orgFillDiv"].document).find("#remark").val();
+			var remain = $(window.frames["orgFillDiv"].document).find("#remain").text();
+			var checkAmount = $(window.frames["orgFillDiv"].document).find("#checkAmount").text();
+	
+			/*
+			var otDate = $('iframe')[0].contentWindow.$('#otDate').val();
+					        	
+        	var adminOrgUnit_el = $('iframe')[0].contentWindow.$('#adminOrgUnit_el').val();
+        	var adminOrgUnit = $('iframe')[0].contentWindow.$('#adminOrgUnit').val();
+        	
+        	var person_el = $('iframe')[0].contentWindow.$('#person_el').val();
+        	var person = $('iframe')[0].contentWindow.$('#person').val();
+        	
+        	var startTime = $('iframe')[0].contentWindow.$('#startTime').val();
+        	
+        	var otType_el = $('iframe')[0].contentWindow.$('#otType_el').val();
+        	var otType = $('iframe')[0].contentWindow.$('#otType').val();
+        	
+        	var endTime = $('iframe')[0].contentWindow.$('#endTime').val();
+        	
+        	var otCompens_el = $('iframe')[0].contentWindow.$('#otCompens_el').val();
+        	var otCompens = $('iframe')[0].contentWindow.$('#otCompens').val();
+        
+        	var restTime = $('iframe')[0].contentWindow.$('#restTime').val();
+        	
+        	var otReason_el = $('iframe')[0].contentWindow.$('#otReason_el').val();
+        	var otReason = $('iframe')[0].contentWindow.$('#otReason').val();
+        	
+        	var applyOTTime = $('iframe')[0].contentWindow.$('#applyOTTime').val();
+        	var remark = $('iframe')[0].contentWindow.$('#remark').val();
+        	var remain = $('iframe')[0].contentWindow.$('#remain').text();
+        	var checkAmount = $('iframe')[0].contentWindow.$('#checkAmount').text();
+        	*/
+        	//校验
+        	if(parseInt(checkAmount) > parseInt(remain)){ 
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_26});
+	        		return false;
+    		}
+        	
+        	//校验
+        	if(!otDate){
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_11});
+	        		return false;
+    		}
+        	
+    		if((!adminOrgUnit_el||!adminOrgUnit)&&(!person_el||!person)){
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_25});
+	        		return false;
+    		}
+    		
+        	if(!startTime){
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_13});
+	        		return false;
+    		}
+    		
+    		if(!otType_el||!otType){
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_10});
+	        		return false;
+    		}
+    		
+    		if(!endTime){
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_12});
+	        		return false;
+    		}
+    		
+    		if(!otCompens_el||!otCompens){
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_0});
+	        		return false;
+    		}
+    		
+    		/*if(!restTime){
+	        		shr.showWarning({message: "休息时长(分钟)不能为空!"});
+	        		return false;
+    		}*/
+    		
+    		/*if(!otReason_el||!otReason){
+	        		shr.showWarning({message: "加班原因不能为空!"});
+	        		return false;
+    		}*/
+    		
+    		if(!applyOTTime){
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_15});
+	        		return false;
+    		}
+	
+    		return true;
+	}
+	
+	,checkRowIsOver : function(){
+		if( $("#entries").jqGrid("getRowData").length > 100){
+			shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_6});
+			return false;
+		}else{
+			return true;
+		}
+	}
+	// 如 加班小时数发生变化 则给予提示
+	,changOtTimeTipInfo :function(rowid){ //
+		var that = this ;
+		var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
+		var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
+		var restTime = $("#entries").jqGrid('getCell',rowid,"restTime") ;
+		var applyOTTime = $("#entries").jqGrid('getCell',rowid,"applyOTTime") ;
+		
+		if(startTime!="" && endTime!=""){
+			var restVal = 0;
+			if(restTime!="" && (/^[0-9]*$/.test(restTime))){
+				restVal = restTime; // 分钟数 
+			}
+			var startTime =new Date(startTime+":00");
+			var endTime =new Date(endTime+":00");
+			var se = endTime.getTime()-startTime.getTime() - (restVal * 1000 * 60); // 毫秒
+			var tfl = se/(3600*1000) ;  
+			if(tfl!=applyOTTime){ // 不相等就给予提示
+				that.preShowWarn( rowid , jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_19);
+			}
+			//$("#entries").jqGrid('setCell',rowid,"applyOTTime",tfl); 计算的值
+		}
+	
+	}
+	// if(cellname=="startTime" || cellname=="endTime" || cellname=="restTime"){
+	,calRestTimeLen : function(rowid){
+		var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
+		var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
+		if(startTime =="[object Object]"){
+			$("#"+rowid).find('td').eq('5').text("");
+			$("#"+rowid).find('td').eq('5').attr("title","");
+			return ;
+		}
+		if(endTime =="[object Object]"){
+			$("#"+rowid).find('td').eq('6').text("");
+			$("#"+rowid).find('td').eq('6').attr("title","");
+			return ;
+		}
+		if(!$("#entries").jqGrid('getCell',rowid,"otDate")){
+			return;
+		}else{
+			otDate = $("#entries").jqGrid('getCell',rowid,"otDate");
+		}
+		if(!$("#entries").jqGrid('getCell',rowid,"person")){
+			return;
+		}else{
+			personId = $("#entries").jqGrid('getCell',rowid,"person").id;
+		}
+		this.remoteCall({
+			type:"post",
+			method:"getMyRestTime",
+			async: false,
+			param:{personId:personId,tDay:otDate,realStartTime:startTime,realEndTime:endTime},
+			success:function(res){
+					var resLen = res.restTime<0?0:res.restTime;
+                $("#entries").jqGrid('setCell',rowid,"restTime",resLen);
+                $("#entries").jqGrid('setCell',rowid,"restStartTime",res.restStartTime);
+                $("#entries").jqGrid('setCell',rowid,"restEndTime",res.restEndTime);
+                $("#entries").jqGrid('setCell',rowid,"restStartTime2",res.restStartTime2);
+                $("#entries").jqGrid('setCell',rowid,"restEndTime2",res.restEndTime2);
+				}
+		});
+	}
+	,addTimeToDate: function(date){
+	    if(date != null && date != '' && date.length == 10){
+	        date += " 00:00:00";
+        }
+	    return date;
+    }
+
+	,calculateOTtimes : function(rowid){
+        var that = this ;
+		var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
+		var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
+		var restTime = $("#entries").jqGrid('getCell',rowid,"restTime") ;
+		 
+		if(startTime =="[object Object]"){
+			$("#"+rowid).find('td').eq('5').text("");
+			$("#"+rowid).find('td').eq('5').attr("title","");
+		}
+		if(endTime =="[object Object]"){
+			$("#"+rowid).find('td').eq('6').text("");
+			$("#"+rowid).find('td').eq('6').attr("title","");
+		}
+
+        startTime = that.addTimeToDate(startTime);
+        endTime = that.addTimeToDate(endTime);
+		
+		if(startTime!="" && endTime!=""){
+			var restVal = 0;
+			if(restTime!="" && (/^[0-9]*$/.test(restTime))){
+				restVal = restTime; // 分钟数 
+			}
+			var startTime = NewDate(startTime+":00");
+			var endTime = NewDate(endTime+":00");
+			var se = endTime.getTime()-startTime.getTime() - (restVal * 1000 * 60); // 毫秒
+			var tfl = (se/(3600*1000)).toFixed(fixedNum) ;
+			$("#entries").jqGrid('setCell',rowid,"applyOTTime",tfl);
+		}
+	}				
+	,changeOTCompens:function(rowid){
+		var that=this;
+    	var otCompensId ;
+    	if(!$("#entries").jqGrid('getCell',rowid,"otType")){
+			return;
+		}else{
+			otTypeId = $("#entries").jqGrid('getCell',rowid,"otType").id;
+		}
+    	
+    	if(!$("#entries").jqGrid('getCell',rowid,"person")){
+			return;
+		}else{
+			var personId = $("#entries").jqGrid('getCell',rowid,"person").id;
+		}
+    	
+    	
+		/*// zkbt5bMLQ3ehUivmKbtBOqlrTmA=  加班费 
+		var otCompensObejct = {id:"zkbt5bMLQ3ehUivmKbtBOqlrTmA=",name:"加班费"};
+		//等于法定节假日 id   sRWUOt7sRpOY0TCo6NMqGY6C/nU=
+*/		
+		var otCompensIds = that.getOTCompensByOTType(personId,otTypeId);
+
+		var url = shr.getContextPath()+'/dynamic.do';
+		that.remoteCall({
+			type:"post",
+			method:"getDefaultOTCompens",
+			url:url,
+			param:{personId:personId,otTypeId:otTypeId},
+			async: false,
+			success:function(res){
+				var info =  res;
+				if (info.defaultId == "" || info.defaultId ==undefined ){
+					shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_24});
+				}else {
+					var defaultOTCompens = {id:info.defaultId,name:info.defaultName};	
+					$("#entries").jqGrid('setCell',rowid,"otCompens",defaultOTCompens);
+					if(otCompensIds){
+						var otCompensIdsStr = otCompensIds.replace(/(,)/g, "','")
+						that.filter[rowid]="BaseInfo.id in ('"+otCompensIdsStr+"')";
+					}
+					
+					//$("#"+rowid+"_otCompens").shrPromptBox("setFilter","BaseInfo.id in ('"+otCompensIds+"')");
+				}			
+//				
+			}
+			});
+	}
+	,changeOverTimeType:function(rowid){
+		var that=this;
+    	var otDate ;
+    	var personId ;
+    	if(!$("#entries").jqGrid('getCell',rowid,"otDate")){
+			return;
+		}else{
+			otDate = $("#entries").jqGrid('getCell',rowid,"otDate");
+		}
+		
+		if(!$("#entries").jqGrid('getCell',rowid,"person")){
+			return;
+		}else{
+			personId = $("#entries").jqGrid('getCell',rowid,"person").id;
+		}
+    	that.getOverTimeType(rowid,otDate,personId);
+			
+	}
+	,getOverTimeType:function(rowid,otDate,personId){
+		var _self = this;
+		var url = shr.getContextPath() + "/dynamic.do?method=getOverTimeTypeAndOtCompens";
+		url += '&otDate=' + encodeURIComponent(otDate) + '&personId=' + encodeURIComponent(personId)+"&uipk="+shr.getUrlRequestParam('uipk');
+		$.ajax({
+			url: url, 
+			async:false, 
+			success: function(response){
+				if(response.otTypeValue!=null && response.otTypeValue !=undefined && response.otTypeValue!=''){
+					var responseObejct = {id:response.otTypeValue,name:response.otTypeText }
+					if (_self.isOtTypeEffective(response.otTypeValue)){
+						// $('#entries').restoreCell(rowid,4); // 先恢复单元格状态再重新赋值,可以避免
+						$("#entries").jqGrid('setCell',rowid,"otType",responseObejct);
+						
+						//设置该加班类型的补偿方式过滤
+						var otCompensIds =  _self.getOTCompensByOTType(personId,response.otTypeValue);
+						if(otCompensIds){
+							var otCompensIdsStr = _self.getOTCompensByOTType(personId,response.otTypeValue).replace(/(,)/g, "','");
+					    	_self.filter[rowid]="BaseInfo.id in ('"+otCompensIdsStr+"')";
+						}
+						
+						var compens = response.compensInfo ;
+						var defaultJson = {id:compens.id , name:compens.name} ;
+						$("#entries").jqGrid('setCell',rowid,"otCompens",defaultJson);
+					}
+					else {
+						$("#entries").jqGrid('setCell',rowid,"otType",null);
+					}
+				}
+			}  
+			,error: function(response) {
+			}
+		});
+	}
+	
+	//	判断加班补偿方式是否有效(存在且生效)
+	,isOtTypeEffective : function (OtType) {
+		var _self = this;
+		var flag = true;
+		_self.remoteCall({
+			type:"post",
+			method:"isOtTypeEffective",
+			param:{
+				OtType:OtType
+			},
+			async: false,
+			success:function(res){
+				var info =  res;
+				if (info.resFlag == false){
+					flag = false;
+				}else {
+					flag = true;
+				}
+			}
+		});
+		return flag;
+	}
+	/**
+	 * 将mode生成加班原因state属性去掉,控件生成的不对,生成了一串html。保存时json会解析不通过。
+	 */
+	,assembleModel : function(){
+	
+		var assModel = shr.ats.atsOverTimeBillBatchEditForPer.superClass.assembleModel.call(this);
+		var personDateStr = '';
+		var length = assModel.entries.length ;
+		for( var i = 0 ; i < length ; i++)
+		{
+			if(assModel.entries[i].otReason && assModel.entries[i].otReason.state){
+				 delete assModel.entries[i].otReason.state;
+			}
+			if(assModel.entries[i].otType && assModel.entries[i].otType.state){
+				 delete assModel.entries[i].otType.state;
+			}
+			if(assModel.entries[i].otCompens && assModel.entries[i].otCompens.state){
+				 delete assModel.entries[i].otCompens.state;
+			}
+			//组装参数
+			var personId = assModel.entries[i].person.id;
+			var date = assModel.entries[i].otDate;
+			if(date && personId){
+				if(i > 0){
+					personDateStr +=",";
+				}
+				personDateStr += personId +"_"+date.substring(0,10);
+			}
+		}
+		
+		//审核编辑界面重新点击出差类型 josn 转换出错
+		if(this.isFromWF())
+		{
+		  var lastRowNum = $('#entries').getGridParam("reccount");
+		     
+		    for(var i = 0; i < lastRowNum; i++ )
+		    {
+		       delete  assModel.entries[i].otType.state 
+			   delete  assModel.entries[i].otCompens.state 
+			   delete  assModel.entries[i].otReason.state 
+		    }
+		}
+		
+		if(personDateStr){
+			_self.remoteCall({
+				type:"post",
+				method:"getPersonAdminOrgUnit",
+				//handler:"com.kingdee.shr.ats.web.handler.AtsBillBaseEditHandler",
+				param:{ personDateStr:personDateStr},
+				async: false,
+				success:function(res){
+					var info =  res;
+					var personAtsInfo = {};
+					for (var i = 0; i < length; i++) {
+						var personId = assModel.entries[i].person.id;
+						var date = assModel.entries[i].otDate;
+						if(date && personId){
+							var person_date = personId +"_"+date.substring(0,10);
+							personAtsInfo = res[person_date];
+							if(personAtsInfo && personAtsInfo.adminOrgUnit){
+								assModel.entries[i]["adminOrgUnit"]= personAtsInfo.adminOrgUnit;
+								assModel.entries[i]["position"]= personAtsInfo.position;
+							}
+						}
+					}
+				}
+			});
+		}
+
+        assModel.ccPerson = assModel.ccPersonIds;
+		return assModel;
+		
+	}
+	/**
+	 * 设置分录行的默认值。重写框架此方法
+	 */
+	,createNewEntryModel: function() {
+		var that = this ; 
+		var otCompens = that.getDefaultOTCompens();
+		var defalutPerson = {id:$('#proposer_el').attr('value'),name:$('#proposer').attr('title')};
+		return {person:defalutPerson,otCompens:otCompens};
+		
+		//
+		
+	}
+	//设置默认的加班补偿方式
+	,getDefaultOTCompens : function () {
+		var _self = this;
+		var defaultOTCompens = {};
+		//设置同步
+		_self.remoteCall({
+			type:"post",
+			method:"getDefaultOTCompens",
+			param:{
+				personId : $('#proposer_el').attr('value')
+			},
+			async: false,
+			success:function(res){
+				var info =  res;
+				if (info.defaultId){
+					defaultOTCompens = {id:info.defaultId,name:info.defaultName};
+				}			
+			}
+			});
+			return defaultOTCompens;
+			
+	}
+	,setButtonVisible:function(){
+		var billState = $("#billState").val();
+		//alert(billState);
+		if (billState) {
+			if (billState==3 || 
+					jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_17==billState ||
+					billState ==4||
+					jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_16==billState ||
+					billState ==2||
+					jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_18==billState ) {
+				$("#edit").hide();
+				$("#submit").hide();
+			} else if (1==billState ||
+					jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_21== billState ||
+					2 == billState ||
+					jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_18==billState ) { //未审批或审批中
+				if(!this.isFromWF()){
+					$("#edit").hide();
+					$("#submit").hide();
+				}
+			}
+		}
+
+		//新增和编辑状态隐藏返回XX列表
+		if (this.getOperateState().toUpperCase() == 'ADDNEW' || this.getOperateState().toUpperCase() == 'EDIT' ) {
+			$("#returnToOverTimeBillList").hide();
+		}
+		//如果是工作流打回,界面上的"返回XX列表"不显示
+		if (this.isFromWF()) {
+			$("#returnToOverTimeBillList").hide(); 
+			$("#cancel").hide();  
+		}
+		
+		if (this.getOperateState().toUpperCase() == 'EDIT'){
+			var lastRowNum = $('#entries').getGridParam("reccount");
+			for (var i = 1;i<= lastRowNum;i++) {
+				var temp_id = $("#entries tr:eq("+ i +")").attr("id");
+				$("#entries").jqGrid('setCell',temp_id,'person','','not-editable-cell');
+			
+			}	
+		}
+		
+	}
+	,setImportSelfParam : function(){
+		var billId = $('#id').val();
+		return $("#entries").getGridParam("reccount")+"&"+$('#id').val();
+	},getOTContrlParams:function(rowid)
+	{   
+		var personId;
+		if(!$("#entries").jqGrid('getCell',rowid,"person")){
+			return;
+		}else{
+			personId = $("#entries").jqGrid('getCell',rowid,"person").id;
+		}
+	    var otDate;
+		if(!$("#entries").jqGrid('getCell',rowid,"otDate")){
+			return;
+		}else{
+			otDate =  $("#entries").jqGrid('getCell',rowid,"otDate");
+		}
+	    var that=this;
+
+		var url = shr.getContextPath()+'/dynamic.do?handler=com.kingdee.shr.ats.bill.util.BillBizUtil&method=getOTContrlParam';
+		shr.ajax({
+			type:"post",
+			async:false,
+			url:url,
+			data:{personId:personId,otDate:otDate},
+			success:function(res){
+				if(res)
+				{    
+					that.OTContrlParams[rowid] = res;
+//					isOTControl=res.isOTControl;
+//					isOtrolByDateType=res.isOtrolByDateType;
+					
+				}
+			}
+			});
+	}
+	,returnToOverTimeBillListAction:function(){
+	   this.reloadPage({
+			uipk: 'com.kingdee.eas.hr.ats.app.AtsOverTimeBillList'
+		});
+	}
+	
+	,cancelAction:function(){
+		this.reloadPage({
+			uipk: 'com.kingdee.eas.hr.ats.app.AtsOverTimeBillList'
+		});
+	},
+    verifyRestTime: function( beforeSubmit,value){
+        var startTime0 = value.startTime;
+        var endTime0 = value.endTime;
+        if(startTime0 == "" || startTime0 == undefined){
+            return  jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_2;
+        }
+        if(endTime0 == "" || endTime0 == undefined){
+            return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_1;
+        }
+        var startTimeOfDate = new Date(startTime0);
+        var endTimeOfDate = new Date(endTime0);
+        var restStartTime = value.restStartTime;
+        var restEndTime = value.restEndTime;
+        var restStartTime2 = value.restStartTime2;
+        var restEndTime2 = value.restEndTime2;
+        var restStartTimeOfDate = new Date(restStartTime);
+        var restEndTimeOfDateOfDate = new Date(restEndTime);
+        if (restStartTime!=undefined && restStartTime!=""){
+            if (restStartTimeOfDate.getTime()<startTimeOfDate.getTime() ||restStartTimeOfDate.getTime()>endTimeOfDate.getTime()){
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_6;
+
+            }
+        }
+        if (restEndTime!=undefined && restEndTime!="") {
+            if (restEndTimeOfDateOfDate.getTime() < startTimeOfDate.getTime() || restEndTimeOfDateOfDate.getTime() > endTimeOfDate.getTime()
+                ||restEndTimeOfDateOfDate.getTime() < restStartTimeOfDate.getTime()) {
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_3;
+            }
+        }
+        var restStartTimeOfDate2 = new Date(restStartTime2);
+        var restEndTimeOfDateOfDate2 = new Date(restEndTime2);
+        if (restStartTime2!=undefined && restStartTime2!=""){
+            if (restStartTimeOfDate2.getTime()<startTimeOfDate.getTime() ||restStartTimeOfDate2.getTime()>endTimeOfDate.getTime()){
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_8;
+            }
+        }
+        if (restEndTime2!=undefined && restEndTime2!="") {
+            if (restEndTimeOfDateOfDate2.getTime() < startTimeOfDate.getTime() || restEndTimeOfDateOfDate2.getTime() > endTimeOfDate.getTime()
+                ||restEndTimeOfDateOfDate2.getTime() < restStartTimeOfDate2.getTime()){
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_4;
+            }
+        }
+        if( (restStartTime!="" && restStartTime!=undefined && (restEndTime==""||restEndTime==undefined))
+            || (restEndTime!="" && restEndTime!=undefined && (restStartTime==""||restStartTime==undefined))
+        )
+        {
+            if (beforeSubmit){
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_5;
+            }
+            return "";
+        }
+        if( (restStartTime2!="" && restStartTime2!=undefined && (restEndTime2==""||restEndTime2==undefined))
+            || (restEndTime2!="" && restEndTime2!=undefined && (restStartTime2==""||restStartTime2==undefined))
+        )
+        {
+            if (beforeSubmit) {
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_7;
+            }
+            return "";
+        }
+        if (restStartTime != "" && restStartTime != undefined && restStartTime2 != "" && restStartTime2 != undefined) {
+            //两个加班休息时间都填了,那么判断不能交叉
+            if((restStartTimeOfDate.getTime()<restEndTimeOfDateOfDate2.getTime() && restStartTimeOfDate.getTime()>=restStartTimeOfDate2.getTime())
+                ||(restStartTimeOfDate2.getTime()<restEndTimeOfDateOfDate.getTime() && restStartTimeOfDate2.getTime()>=restStartTimeOfDate.getTime())
+            ){
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_0;
+            }
+        }
+
+    },
+	setNavigateLine: function(){
+	  	var fromFlag = localStorage.getItem("fromFlag");
+	   	var empolyeeBoardFlag =	sessionStorage.getItem("empolyeeBoardFlag");
+	   	var parentUipk = "";
+		if(parent.window.shr==null){
+     		parentUipk = shr.getCurrentViewPage().uipk;
+     	}else{
+     		parentUipk = parent.window.shr.getCurrentViewPage().uipk;
+     	}
+		if(fromFlag == "employeeBoard"){//来自我的考勤的时候。将导航条删除掉。
+	      $("#breadcrumb").parent().parent().remove();
+	      localStorage.removeItem("fromFlag");
+	    }
+	    if(("empolyeeBoardFlag" == empolyeeBoardFlag && "com.kingdee.eas.hr.ats.app.WorkCalendar.empATSDeskTop" == parentUipk)){
+	        $("#breadcrumb").remove();
+	        window.parent.changeDialogTitle(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_22);
+	    }
+	},
+	/**
+	 * 是否存在考勤档案
+	 */
+	isExistAttendanceFile: function(personId){
+		var isExistsFile = true;
+	   	_self.remoteCall({
+			type:"post",
+			method:"isExistsAttanceFile",
+			async: false,
+			param:{personId: personId},
+			success:function(res){
+				var info =  res;
+				if (!info.isExistsFile){
+					isExistsFile = false;
+				}	
+			}
+		});
+		if(!isExistsFile){
+		   return false;
+		}
+	}
+	,beforeSubmit :function(){
+		
+		var _self = this,
+		workArea = _self.getWorkarea(),
+		$form = $('form', workArea);
+		_self.beforeWFValidStoreCellValue();
+		
+		if (($form.valid() && _self.verify())) {
+			return true ;
+		}
+		// return false 也能保存,固让js报错,后续让eas修改 return false 逻辑
+		var len = workArea.length() ;
+		return false ;
+	}
+	,getCurrentModel : function(){
+		
+		var that = this ;
+		var model = shr.ats.atsOverTimeBillBatchEditForPer.superClass.getCurrentModel.call(this);
+		var len = model.entries.length ;
+		for(var i = 0; i < len; i++)
+		{
+		  model.entries[i].realStartTime =  model.entries[i].startTime ;
+		  model.entries[i].realEndTime =  model.entries[i].endTime ;
+		  model.entries[i].realOttime =  model.entries[i].applyOTtime ;
+		  
+		  delete  model.entries[i].otType.state ;
+		  delete  model.entries[i].otCompens.state ;
+		  delete  model.entries[i].otReason.state ;
+		}
+
+        model.ccPersonIds = model.ccPersonIds && model.ccPersonIds.id || "";
+        model.ccPerson = model.ccPersonIds;
+		return model ;
+	}
+	,saveEditCellValue :function(rowid,cellname, value,iRow,iCol) {
+		var _self = this;
+		// 工作流界面且是编辑状态且不是未提交界面
+		if(_self.isFromWF() && _self.getOperateState() == 'EDIT' && $("#billState").val() != 0)
+		{
+			this.rowid = rowid ;
+			this.cellname = cellname ;
+			this.value = value ;
+			this.iRow = iRow ;
+			this.iCol = iCol ;
+		}
+	}
+	/**
+	 * 工作流和其他页面统一校验入口,最好后续把校验都放在一起,方便维护.
+	 * @return {}
+	 */
+	,verifyCheck:function(){
+		var that = this;
+		var boo = true;
+		if(that.isFromWF()) //暂时只处理流程提交,后续可放开把所有检验统一入口
+		{
+			var model = that.getCurrentModel(); 
+			that.remoteCall({
+			    method:"verifyCheck",
+			    param:{model:model},
+				async: false,
+			    success:function(res){
+					info =  res;
+					if(res.errorString){
+						  shr.showError({message:res.errorString});
+						  boo = false;
+					}
+			    }
+			}); 
+			
+		}
+		return boo;
+	}
+	,beforeWFValidStoreCellValue :function() {
+		var _self = this;
+		
+		if(this.rowid && this.cellname && this.iRow && this.iCol)
+		{
+			$("#entries").jqGrid("saveCell",this.rowid,this.iCol);
+			//_self.afterSaveCellTrigger(this.rowid, this.cellname, this.value, this.iRow , this.iCol) ;
+		}
+	}
+	,validateIsFillOtVerify:function(){
+		var that = this;
+		var boo = true;
+		if(that.isFromWF()) 
+		{
+			var model = that.getCurrentModel(); 
+			that.remoteCall({
+			    method:"validateIsFillOt",
+			    param:{model:model},
+				async: false,
+			    success:function(res){
+					info =  res;
+					if(res.errorString){
+						  shr.showError({message:res.errorString});
+						   boo = false;
+					}
+			    }
+			}); 
+			
+		}
+		return boo;
+	}
+	//获取当前加班类型的加班补偿方式
+	,getOTCompensByOTType : function ( personId, otTypeId) {
+		var _self = this;
+		
+		var url = shr.getContextPath()+'/dynamic.do?handler=com.kingdee.shr.ats.web.handler.AtsOverTimeBillEditHandler';
+		var otCompens="";
+		_self.remoteCall({
+			type:"post",
+			method:"getOTCompensByOTTypes",
+			url:url,
+			param:{personId:personId,otTypeId:otTypeId},
+			async: false,
+			success:function(res){
+				otCompens =  res.otCompens;
+				
+			}
+		});
+		return otCompens;
+	}
+});
+
+//初始化时间,解决date在IE9+环境下的兼容性问题,年月日分隔符为-,时分秒分隔符是:,
+
+function NewDate(str) { 
+	str = str.split(" ");
+	var day = str[0].split("-");
+	var hours = str[1].split(":");
+	var date = new Date(); 
+	date.setUTCFullYear(day[0], day[1] - 1, day[2]); 
+	date.setUTCHours(hours[0], hours[1], hours[2], hours[3]); 
+	return date; 
+} 
+/**
+ * 创建日期时间
+ */
+function NewLongDate(str) { 
+	str = str.split(" ");
+	var day = str[0].split("-");
+	var hours = str[1].split(":");
+	var date = new Date(day[0],day[1] - 1,day[2],hours[0],hours[1],hours[2]); 
+	return date; 
+} 
+/**
+ * 创建日期
+ * 支持IE的创建方式
+ */
+function NewShortDate(str) { 
+	str = str.split(" ");
+	var day = str[0].split("-");
+	var date = new Date(day[0], day[1] - 1, day[2]); 
+	return date; 
+} 

+ 1745 - 0
js/addon/attendmanage/web/js/shr/ats/atsOverTimeBillEdit.js

@@ -0,0 +1,1745 @@
+shr.defineClass("shr.ats.AtsOverTimeBillEdit", shr.framework.Edit, {
+    _uiClass:"",
+    effectiveFlag:true,
+    isOTControl:false,
+    isOtrolByDateType:false,
+    defaultOTCompens:null,
+    personId : "",
+    _ATS_OVERTIME_LEGALHOLIDAYDAY_OVERTIME_ID: "sRWUOt7sRpOY0TCo6NMqGY6C/nU=", //法定节假日id   来源于AtsServerUtils.java
+    _ATS_OVERTIMECOMPENS_OVERTIME_ID: "zkbt5bMLQ3ehUivmKbtBOqlrTmA=", //加班费id
+    _invariantVale: {id:"zkbt5bMLQ3ehUivmKbtBOqlrTmA=",
+        name:jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_8},
+    initalizeDOM:function(){
+        shr.ats.AtsOverTimeBillEdit.superClass.initalizeDOM.call(this);
+        var that = this ;
+        that.setNavigateLine();
+        var paramMethod = shr.getUrlRequestParam("method");
+        //从我要加班菜单中点击进来的URL上没有method参数
+        if(paramMethod == null){
+            $("#breadcrumb").find(".active").text(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_24);
+            if(shrDataManager.pageNavigationStore.getDatas().length==0){
+                //  var url = window.location.protocol +"//" + window.location.host + ":" + window.location.port
+                //  		+ "/shr/dynamic.do?uipk=com.kingdee.eas.hr.ats.app.CancelLeaveBillForm&inFrame=true&fromHeader=true";
+                var object_bread_1 = {
+                    name: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_24,
+                    url: window.location.href,
+                    workPlatformId: "Qz9UfhLqB0+vmMJ4+80EykRLkh4="
+                }
+                shrDataManager.pageNavigationStore.pop();
+                shrDataManager.pageNavigationStore.addItem(object_bread_1);
+            }
+        }
+        that.getOTContrlParams();
+        that.setButtonVisible(); //初始化页面安装状态,如果是已经提交的或者审批通过的单据编辑按钮不显示
+        //隐藏加班列表按钮
+        if (that.getOperateState() == 'EDIT' || that.getOperateState() == 'VIEW') {
+            if(that.isFromWF()){ // 来自流程中心
+                $('#cancel').hide();
+                $('#cancelAll').hide();
+                if (that.getOperateState() == 'EDIT'){
+                    $("#hrOrgUnit").shrPromptBox("disable");
+                }
+            }
+        }
+        that.processF7ChangeEvent();
+
+        //增加业务组织处理
+        that.processF7ChangeEventHrOrgUnit();
+
+        that.processApplyOTTime();
+
+        if(that.getOperateState() == "VIEW"){//不显示秒
+            if(atsMlUtile.getFieldOriginalValue("entries_startTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_startTime",atsMlUtile.getFieldOriginalValue("entries_startTime").substring(0,16));
+            }
+            if(atsMlUtile.getFieldOriginalValue("entries_endTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_endTime",atsMlUtile.getFieldOriginalValue("entries_endTime").substring(0,16));
+            }
+            if(atsMlUtile.getFieldOriginalValue("entries_realStartTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_realStartTime",atsMlUtile.getFieldOriginalValue("entries_realStartTime").substring(0,16));
+            }
+            if(atsMlUtile.getFieldOriginalValue("entries_realEndTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_realEndTime",atsMlUtile.getFieldOriginalValue("entries_realEndTime").substring(0,16));
+            }
+        }else{
+            if(atsMlUtile.getFieldOriginalValue("entries_startTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_startTime",atsMlUtile.getFieldOriginalValue("entries_startTime").substring(0,16));
+            }
+            if(atsMlUtile.getFieldOriginalValue("entries_endTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_endTime",atsMlUtile.getFieldOriginalValue("entries_endTime").substring(0,16));
+            }
+            if(atsMlUtile.getFieldOriginalValue("entries_realStartTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_realStartTime",atsMlUtile.getFieldOriginalValue("entries_realStartTime").substring(0,16));
+            }
+            if(atsMlUtile.getFieldOriginalValue("entries_realEndTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_realEndTime",atsMlUtile.getFieldOriginalValue("entries_realEndTime").substring(0,16));
+            }
+        }
+        //新增页面的时候默认算出,编辑页面不计算
+        if ( that.getOperateState() == "ADDNEW" ) {
+            //默认值为当前申请天
+            //var otDate=$('#applyDate').val()||'';
+            //默认值为工作日
+            var otDate=atsMlUtile.getFieldOriginalValue('entries_otDate')||'';
+            var personId=$('#entries_person_el').val()||'';
+            that.getOverTimeType(otDate,personId);
+            that.calculataApplyOTTime();
+        }
+        /*$("#entries_restTime").blur(function(){
+            that.calculataApplyOTTime();
+        });*/
+
+        //处理时间加班开始时间与加班开始时间一致
+        that.realOverTimeSynOverTime();
+        that.changeOverTimeType();
+        that.setNumberFieldEnable();
+
+        var personId = $('#entries_person_el').val();
+        var otTypeId = $("#entries_otType_el").val();
+        if ( that.getOperateState()=="VIEW"){
+            personId = $('#entries_person').val();
+            otTypeId = $("#entries_otType").val();
+        }
+        // that.getDefaultOTCompens(personId,otTypeId);
+        //设置默认的补偿方式
+        if(!that.billId){
+            that.setDefaultOTCompens();
+        }
+//		判断【加班费】是否有效(存在且生效)
+        that.effectiveFlag = that.isOTCompensEffective(that._ATS_OVERTIMECOMPENS_OVERTIME_ID);
+        //当加班类型为法定节假日加班时
+        if(that.getOperateState() != "VIEW"){
+            that.handleLegalHoliday();
+            that.otCompensChange();
+        }
+
+        that.isOverWarnValue(this.getFieldValue('entries_otType'),this.getFieldValue('entries_otCompens'));
+        //启用加班管控 且加班类型受日期控制,加班类型不能编辑
+        if( that.isOtrolByDateType){
+            $("#entries_otType").shrPromptBox("disable");
+        }
+        /*面包屑问题*/
+        if (shr.getCurrentViewPage().uipk == "com.kingdee.eas.hr.ats.app.AtsOverTimeBillForm") {
+
+
+            if (shrDataManager.pageNavigationStore.getDatas() && shrDataManager.pageNavigationStore.getDatas().length == 2) {
+                $("#breadcrumb").find("li.active")
+                    .html(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_24);
+                var a = shrDataManager.pageNavigationStore.getDatas()[1];
+                a.name = jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_24;
+                shrDataManager.pageNavigationStore.pop();
+                shrDataManager.pageNavigationStore.addItem(a);
+            }else if (shrDataManager.pageNavigationStore.getDatas() && shrDataManager.pageNavigationStore.getDatas().length == 3) {
+                $("#breadcrumb li").eq(2).remove();
+                $("#breadcrumb").find("li.active")
+                    .html(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_24);
+                shrDataManager.pageNavigationStore.pop();
+            }else if (shrDataManager.pageNavigationStore.getDatas() && shrDataManager.pageNavigationStore.getDatas().length == 4) {
+                $("#breadcrumb li").eq(3).html(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_3);
+            }
+
+        }
+
+
+        if(that.isFromWF()){
+            $("#addInstanceToDeskItem").css('display','none');
+        }
+        //审核编辑界面
+        if(that.isFromWF() && that.getOperateState() == 'EDIT')
+        {
+            $("#entries_person").shrPromptBox("disable");
+        }
+        if (shr.getCurrentViewPage().uipk == "com.kingdee.eas.hr.ats.app.AtsOverTimeBillForm"){
+            that.isHaveEffectiveFile();
+        }
+        if(that.getOperateState() == 'EDIT')
+        {
+            var otCompensIds = that.getOTCompensByOTType($('#entries_person_el').val(),$('#entries_otType').shrPromptBox("getValue").id).replace(/(,)/g, "','") ;
+            if(otCompensIds && otCompensIds != ''){
+                $('#entries_otCompens').shrPromptBox("setFilter","BaseInfo.id in ('"+otCompensIds+"')");
+            }
+        }
+        that.processTripDays();
+        if(that.getOperateState() != 'VIEW'){
+            $('#entries_person').bind('change',function(){
+                that.initPersonMess();
+
+            });
+        }
+        if(that.getOperateState() != 'VIEW'){
+            $('#entries_otDate').bind('change',function(){
+                var otDate=atsMlUtile.getFieldOriginalValue('entries_otDate');
+                $('#entries_startTime').shrDateTimePicker('setValue', otDate);
+                $('#entries_endTime').shrDateTimePicker('setValue', otDate);
+                that.setOverTimeRemark();
+            });
+        }
+
+        that.initCcPersonPrompt();
+        that.setOverTimeRemark();
+    },
+
+    setOverTimeRemark:function(){
+        var that = this;
+        if(shr.getCurrentViewPage().uipk != "com.kingdee.eas.hr.ats.app.AtsOverTimeBillForm" && shr.getCurrentViewPage().uipk != "com.kingdee.eas.hr.ats.app.AtsOverTimeBillAllForm"){
+            return;
+        }
+        /*
+        if (that.getOperateState() == 'VIEW') {
+            return;
+        }*/
+        var otDate = atsMlUtile.getFieldOriginalValue("entries_otDate");
+        var personId = atsMlUtile.getFieldOriginalValue("entries_person");
+        if ( personId && personId != "") {
+            that.remoteCall({
+                type:"post",
+                async: false,
+                method:"getAttencePolicyStrMsg",
+                param:{personId:personId,otDate:otDate,fieldName:"otExplain"},
+                success:function(res){
+                    var info =  res;
+                    var msg = info.otExplain;
+                    $("#overTimeRemark").html(msg);
+                }
+            });
+        }
+    },
+
+    clearCCPersonIdsPrompt :function() {
+        if ($('#ccPersonIds').length == 0) {
+            return;
+        }
+        atsCcPersonUtils.clearCCPersonIdsPrompt(this);
+    },
+    initCcPersonPrompt :function() {
+        if ($('#ccPersonIds').length == 0) {
+            return;
+        }
+        atsCcPersonUtils.initCCPersonIdsPrompt(this);
+        if (this.getOperateState() != 'VIEW') {
+            var person = $('#entries_person').shrPromptBox("getValue");
+            if (!person) {
+                // shr.showWarning({message:"Please select people."});
+            } else {
+                $('#ccPersonIds').shrPromptBox("setOtherParams", {
+                    // handler: "com.kingdee.shr.ats.web.handler.team.F7.TeamPersonForEmpOrgF7ListHandler",
+                    personId: person.id
+                });
+            }
+        }
+    }
+    ,initPersonMess : function(){
+        var that = this ;
+
+        $('#entries_person_el').val(that.personId);
+
+    },processTripDays : function(){
+        var that = this ;
+
+        $("#entries_otDate").change(function(){
+            that.changeOverHrOrgUnit();
+
+            //判断是否存在有效的考勤档案
+            that.isExistsEffectiveAtsFile();
+
+        });
+
+    },
+    //判断是否存在有效的考勤档案
+    isExistsEffectiveAtsFile: function(){
+        var that = this;
+        var otDate = atsMlUtile.getFieldOriginalValue("entries_otDate");
+        var personId = $("#entries_person_el").val();
+        if (otDate && otDate!=""&&otDate!=null && personId && personId != "") {
+            that.remoteCall({
+                type:"post",
+                async: false,
+                method:"isExistsEffectiveAtsFile",
+                param:{personId:personId,otDate:otDate},
+                success:function(res){
+                    //如果没有有效的考勤档案,后台会抛出异常
+                }
+            });
+        }
+    },
+    changeOverHrOrgUnit : function(){
+        var that = this;
+        var overStartTime = atsMlUtile.getFieldOriginalValue("entries_otDate");
+        if ( overStartTime!=""&&overStartTime!=null ) {
+            overStartTime = overStartTime.replace("\\-","/");
+            var personId = $("#entries_person_el").val();
+            that.remoteCall({
+                type:"post",
+                async: false,
+                method:"getHrOrgUnit",
+                param:{personId:personId,beginTime:overStartTime},
+                success:function(res){
+                    info =  res;
+                    if(res.hrOrgUnitname && res.hrOrgUnitId){
+                        $("#hrOrgUnit").val(res.hrOrgUnitname);
+                        $("#hrOrgUnit_el").val(res.hrOrgUnitId);
+                    }
+
+                }
+            });
+        }
+    }
+
+    ,processF7ChangeEventHrOrgUnit : function(){
+        var that = this;
+        if (that.getOperateState() != 'VIEW') {
+            $("#hrOrgUnit").shrPromptBox("option", {
+                onchange : function(e, value) {
+                    var info = value.current;
+                    that.initCurrentHrOrgUnit(info.id);
+                    $("#entries_person_el").val("");
+                    $("#entries_person").val("");
+                    $("#entries_person_number").val("");//@
+                    $("#entries_adminOrgUnit").val("");
+                    $("#entries_position").val("");
+
+                }
+            });
+        }
+    }
+    ,initCurrentHrOrgUnit: function(hrOrgUnitId) {
+        var that = this;
+
+        //---??
+//		$("#entries_tripType").shrPromptBox().attr("data-params",hrOrgUnitId);
+        $("#entries_person").shrPromptBox().attr("data-params",hrOrgUnitId);
+        that.initQuerySolutionHrOrgUnit(hrOrgUnitId);
+
+    }
+    ,initQuerySolutionHrOrgUnit: function(hrOrgUnitId) {
+        var that = this;
+        that.remoteCall({
+            type:"post",
+            method:"initQuerySolution",
+            param:{
+                hrOrgUnitId : hrOrgUnitId
+            },
+            async: true, //false
+            success:function(res){
+
+            }
+        });
+    }
+
+    ,isHaveEffectiveFile : function() {
+        var _self = this;
+        _self.remoteCall({
+            type:"post",
+            method:"isHaveEffectiveFile",
+            param:{
+                personid:""
+            },
+            async: false,
+            success:function(res){
+                var info =  res;
+                if (!info.isHaveFile){
+                    shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_5});
+                }
+            }
+        });
+    }
+    ,handleLegalHoliday: function(){
+        var that = this;
+        //BT883973:编辑模式下 补偿方式可以开放选择
+//		if(that.getOperateState() == "EDIT"){
+//			if($("#entries_otType_el").val() == that._ATS_OVERTIME_LEGALHOLIDAYDAY_OVERTIME_ID){
+//				$('#entries_otCompens').attr("readonly",true);
+//				$('#entries_otCompens').parent().next().css("display","none");
+//			}
+//		}
+
+        $("#entries_otType").shrPromptBox("option", {
+            onchange : function(e, value) {
+                var info = value.current;
+                var typeId = info.id != undefined && info.id != "" ? info.id : info.submitFormat;
+                var otCompensIds = that.getOTCompensByOTType($('#entries_person_el').val(),typeId);
+                if(otCompensIds == null || otCompensIds == undefined){
+                    otCompensIds = "";
+                }else{
+                    otCompensIds = otCompensIds.replace(/(,)/g, "','") ;
+                }
+                that.getDefaultOTCompens($('#entries_person_el').val(),typeId);
+                that.setDefaultOTCompens();
+                if(otCompensIds && otCompensIds != ""){
+                    $('#entries_otCompens').shrPromptBox("setFilter","BaseInfo.id in ('"+otCompensIds+"')");
+                }
+
+            }
+        });
+
+        $("#entries_attAdminOrgUnit").shrPromptBox("option", {
+            verifyBeforeOpenCallback : function(e, value) {
+                var personId = $("#entries_person_el").val();
+                var attendanceDate = $("#entries_otDate").val()
+
+                if(!(personId && attendanceDate)){
+                    shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_999});
+                    return false;
+                }else{
+                    $('#entries_attAdminOrgUnit').shrPromptBox("setOtherParams", {
+                        personId: personId,
+                        attendanceDate: attendanceDate
+                    });
+                }
+            }
+        });
+
+    }
+
+
+
+    //获取默认的加班补偿方式
+    ,getDefaultOTCompens : function ( personId, otTypeId) {
+        var _self = this;
+        //var personId = $('#entries_person_el').val();
+        //var otTypeId = $("#entries_otType_el").val();
+        var otDate = atsMlUtile.getFieldOriginalValue('entries_otDate');
+        if(otDate && otDate != '' && personId != '' && otTypeId){
+            _self.remoteCall({
+                type:"post",
+                method:"getDefaultOTCompens",
+                param:{personId:personId,otTypeId:otTypeId,otDate:otDate},
+                async: false,
+                success:function(res){
+                    var info =  res;
+                    if (info.defaultId == "" || info.defaultId ==undefined ){
+                        _self.defaultOTCompens = {id:info.defaultId,name:info.defaultName};
+                        shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_29});
+                    }else {
+                        _self.defaultOTCompens = {id:info.defaultId,name:info.defaultName};
+                        if(!info.otrolByDateType){
+                            $("#entries_otType").shrPromptBox("enable");
+                        }else{
+                            $("#entries_otType").shrPromptBox("disable");
+                        }
+                    }
+                }
+            });
+        }
+    }
+
+    //获取当前加班类型的加班补偿方式
+    ,getOTCompensByOTType : function ( personId, otTypeId) {
+        var _self = this;
+        var otCompens="";
+        var otDate = atsMlUtile.getFieldOriginalValue('entries_otDate');
+        if(otDate && otDate != '' && personId != '' && otTypeId != ''){
+            _self.remoteCall({
+                type:"post",
+                method:"getOTCompensByOTType",
+                param:{personId:personId,otTypeId:otTypeId,hrOrgUnit:$("#hrOrgUnit").shrPromptBox("getValue").id,otDate:atsMlUtile.getFieldOriginalValue('entries_otDate')},
+                async: false,
+                success:function(res){
+                    otCompens =  res.otCompens;
+
+                }
+            });
+        }
+        return otCompens;
+    }
+
+    //设置默认的加班补偿方式
+    ,setDefaultOTCompens : function () {
+        var _self = this;
+        if (_self.defaultOTCompens!=null && _self.defaultOTCompens != ""){
+            $('#entries_otCompens').shrPromptBox("setValue",_self.defaultOTCompens);
+        }
+    }
+
+
+//	判断加班补偿方式是否有效(存在且生效)
+    ,isOTCompensEffective : function (OTCompens) {
+        var _self = this;
+        var flag = true;
+        _self.remoteCall({
+            type:"post",
+            method:"isOTCompensEffective",
+            param:{
+                OTCompens:OTCompens
+            },
+            async: false,
+            success:function(res){
+                var info =  res;
+                if (info.resFlag == false){
+                    flag = false;
+                }else {
+                    flag = true;
+                }
+            }
+        });
+        return flag;
+
+    }
+
+    //	判断加班补偿方式是否有效(存在且生效)
+    ,isOtTypeEffective : function (OtType) {
+        var _self = this;
+        var flag = true;
+        _self.remoteCall({
+            type:"post",
+            method:"isOtTypeEffective",
+            param:{
+                OtType:OtType
+            },
+            async: false,
+            success:function(res){
+                var info =  res;
+                if (info.resFlag == false){
+                    flag = false;
+                }else {
+                    flag = true;
+                }
+            }
+        });
+        return flag;
+    }
+
+    /**
+     * 设置编码字段是否可编辑
+     */
+    ,setNumberFieldEnable : function() {
+        var that = this ;
+        if (that.getOperateState().toUpperCase() == 'EDIT' || that.getOperateState().toUpperCase() == 'ADDNEW') {
+            var overtimeBillNumberFieldCanEdit = that.initData.overtimeBillNumberFieldCanEdit;
+            if (typeof overtimeBillNumberFieldCanEdit != 'undefined' && !overtimeBillNumberFieldCanEdit) {
+                that.getField('number').shrTextField('option', 'readonly', true);
+            }
+            //初始化HR组织ID
+            var hrOrgUnitID = that.initData.initCurrentHrOrgUnit;
+            if (typeof hrOrgUnitID != 'undefined' && hrOrgUnitID) {
+                that.initCurrentHrOrgUnit(hrOrgUnitID);
+            }
+        }
+    }
+
+    //提交即生效
+    ,submitEffectAction : function (event) {
+        var _self = this,
+            workArea = _self.getWorkarea(),
+            $form = $('form', workArea);
+
+        if ( _self.validate() && $form.valid() && _self.verify()) {
+            var beginDate = atsMlUtile.getFieldOriginalValue("entries_startTime").split(" ")[0];
+            var endDate = atsMlUtile.getFieldOriginalValue("entries_endTime").split(" ")[0];
+            var billType = "overTime";
+            var personId = $('#entries_person_el').val()
+            _self.remoteCall({
+                type:"post",
+                method:"billCheck",
+                param:{beginDate:beginDate,endDate:endDate,personId:personId,billType:billType},
+                async: true,
+                success:function(res){
+                    var result = res.result;
+                    if(result==""){
+                        if(shr.atsBillUtil.isInWorkFlow(_self.billId)){
+                            shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_6, function() {
+                                _self.prepareSubmitEffect(event, 'submitEffect');
+                            });
+                        }else{
+                            shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_14, function() {
+                                _self.prepareSubmitEffect(event, 'submitEffect');
+                            });
+                        }
+                    }else{
+                        shr.showConfirm(result+jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_20,function(){
+                            if(shr.atsBillUtil.isInWorkFlow(_self.billId)){
+                                shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_6, function() {
+                                    _self.prepareSubmitEffect(event, 'submitEffect');
+                                });
+                            }else{
+                                shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_14, function() {
+                                    _self.prepareSubmitEffect(event, 'submitEffect');
+                                });
+                            }
+                        });
+                    }
+                }
+            });
+
+        }
+    }
+
+    ,prepareSubmitEffect : function (event, action){
+        var _self = this;
+        var data = _self.assembleSaveData(action);
+
+        var target;
+        if (event && event.currentTarget) {
+            target = event.currentTarget;
+        }
+        shr.doAction({
+            target: target,
+            url: _self.dynamicPage_url,
+            type: 'post',
+            data: data,
+            success : function(response) {
+                _self.back();
+            }
+        });
+    }
+
+    /**
+     * 点击取消按钮 返回到个人请假列表list(个人) || com.kingdee.eas.hr.ats.app.AtsOverTimeBillList
+     */
+    ,cancelAction:function(){
+        /*var that = this ;
+         window.location.href = shr.getContextPath()+"/dynamic.do?uipk=com.kingdee.eas.hr.ats.app.AtsOverTimeBillList";*/
+
+        var serviceId = shr.getUrlParam("serviceId");
+        if(!serviceId){
+            serviceId = 'vA0Y5XHfR8eJESywHpQQSPI9KRA=';
+        }
+
+        this.reloadPage({
+            uipk: 'com.kingdee.eas.hr.ats.app.AtsOverTimeBillList',
+            serviceId:serviceId
+        });
+    }
+    /**
+     * 专员列表点击取消的方法
+     * 这里有点特殊,采用屏蔽按钮,增加专员取消按钮的方法 替代 维护2次 atsOverTimeBillEdit.js 的方式
+     */
+    ,cancelAllAction:function(){
+        /*var that = this ;
+         window.location.href = shr.getContextPath()+"/dynamic.do?uipk=com.kingdee.eas.hr.ats.app.AtsOverTimeBillAllList";*/
+        this.reloadPage({
+            uipk: 'com.kingdee.eas.hr.ats.app.AtsOverTimeBillAllList'
+        });
+    }
+    ,getOverTimeType:function(otDate,personId){
+        var _self = this;
+        var url = shr.getContextPath() + "/dynamic.do?method=getOverTimeType";
+        url += '&otDate=' + encodeURIComponent(otDate) + '&personId=' + encodeURIComponent(personId)+"&uipk="+shr.getUrlRequestParam('uipk');
+        if(otDate != "" && personId != ""){
+            $.ajax({
+                url: url,
+                async:false,
+                //data:{otDate:,personId:encodeURIComponent(personId)},
+                //data:{otDate:encodeURIComponent(otDate),personId:encodeURIComponent(personId)},
+                success: function(response){
+                    if(response.otTypeValue!=null && response.otTypeValue !=undefined && response.otTypeValue!=''){
+                        if (_self.isOtTypeEffective(response.otTypeValue)){
+                            var responseObejct = {id:response.otTypeValue,name:response.otTypeText }
+                            $('#entries_otType').shrPromptBox("setValue",responseObejct);
+                        }else {
+                            $('#entries_otType').shrPromptBox("setValue","");
+                        }
+
+                    }else {
+                        $('#entries_otType').shrPromptBox("setValue","");
+                    }
+                }
+                ,error: function(response) {
+                }
+            })
+        };
+
+    }
+    ,changeOverTimeType:function(){
+        var that=this;
+        $('#entries_otDate').change(function(){ //加班日期
+//	    	var otDate=$(this).val()||'';
+            var otDate = atsMlUtile.getFieldOriginalValue("entries_otDate")||'';
+            var personId=$('#entries_person_el').val()||'';
+            that.getOverTimeType(otDate,personId);
+            that.isOverWarnValue($("#entries_otType_el").val(),$("#entries_otCompens_el").val());
+
+            //获取休息时长
+            var startTime = atsMlUtile.getFieldOriginalValue("entries_startTime");
+            var endTime = atsMlUtile.getFieldOriginalValue("entries_endTime");
+            if(startTime == "" || startTime == undefined){
+                return ;
+            }
+            if(endTime == "" || endTime == undefined){
+                return ;
+            }
+            var startTimeOfDate = new Date(startTime);
+            var endTimeOfDate = new Date(endTime);
+            var longTime = endTimeOfDate.getTime() - startTimeOfDate.getTime();
+            if(longTime <= 0)
+            {
+                atsMlUtile.setTransNumValue("entries_applyOTTime",0);
+                atsMlUtile.setTransNumValue("entries_restTime",0,{'decimalPrecision':0});
+                return ;
+            }else{
+                that.calculataApplyRestTime();
+            }
+        });
+
+
+    },
+
+    //获取系统小数位长度
+    getDecimalPlace : function (floatTime, otTimeType ) {
+        var fixeNum =  atsMlUtile.getSysDecimalPlace();
+        floatTime = floatTime.toFixed(fixeNum);
+        if(floatTime < 0){
+            atsMlUtile.setTransNumValue(otTimeType,0);
+        }else{
+            atsMlUtile.setTransNumValue(otTimeType,floatTime);
+        }
+    }
+    ,getJsonLength:function(jsonData){
+        var jsonLength = 0;
+        for(var item in jsonData){
+            jsonLength++;
+        }
+        return jsonLength;
+    },
+
+    processF7ChangeEvent:function(){
+        var that = this;
+        //that.initActionF7();
+        if (that.getOperateState() != 'VIEW') {
+            $("#entries_person").shrPromptBox("option", {
+                onchange : function(e, value) {
+                    //alert( JSON.stringify( value ) );
+                    var info = value.current;
+                    if(info != null){
+                        if(info.hasOwnProperty("id")){
+                            $("#entries_person_number").val(info["person.number"]);//@
+                            $("#entries_adminOrgUnit").val(info["adminUnit.name"]);//行政组织
+                            $("#entries_position").val(info["position.name"]);//职位
+                            $('#entries_person_el').val(info["person.id"]);
+                            that.personId=info["person.id"];
+                            var otDate=atsMlUtile.getFieldOriginalValue('entries_otDate')||'';
+                            that.getOverTimeType(otDate,info["id"]);
+                            that.getOTContrlParams();
+                            if( that.isOtrolByDateType){
+                                $("#entries_otType").shrPromptBox("disable");
+                            }
+                        }
+                    }
+                }, afterOnSelectRowHandler: function (e, value) {
+                    that.clearCCPersonIdsPrompt();
+                    that.initCcPersonPrompt();
+                }
+            });
+        }
+    },
+    /**
+     * 初始化ActionFilter,过滤用工状态,把离职的去掉
+     */
+    /*initActionF7 : function () {
+        var that = this;
+        var fliter = " employeeType.number != 'S09' "; //001正式 002试用 003停薪留职  004离退休   s09 离职
+        $("#entries_person").shrPromptBox("setFilter",fliter);
+    },*/
+    //处理申请加班小时数,申请加班小时数默认等于实际加班小时数
+    processApplyOTTime : function(){
+        var that = this ;
+        /*$("#entries_applyOTTime").keyup(function(){
+             $("#entries_realOTTime").val($("#entries_applyOTTime").val());
+        });*/
+        $("#entries_restTime").change(function(){
+            that.calculataApplyOTTime();
+            that.calculataRealOTTime();
+        }) ;
+        //加班结束时间选择完后 计算申请加班小时数
+        $("#entries_endTime,#entries_startTime").change(function(){
+
+            var startTime = atsMlUtile.getFieldOriginalValue("entries_startTime");
+            var endTime = atsMlUtile.getFieldOriginalValue("entries_endTime");
+            if(startTime == "" || startTime == undefined){
+                return ;
+            }
+            if(endTime == "" || endTime == undefined){
+                return ;
+            }
+            var startTimeOfDate = new Date(startTime);
+            var endTimeOfDate = new Date(endTime);
+            var longTime = endTimeOfDate.getTime() - startTimeOfDate.getTime();
+            if(longTime <= 0)
+            {
+                atsMlUtile.setTransNumValue("entries_applyOTTime",0);
+                atsMlUtile.setTransNumValue("entries_restTime",0,{'decimalPrecision':0});
+                return ;
+            }else{
+                that.calculataApplyRestTime();
+            }
+            that.calculataApplyOTTime();
+            that.calculataRealOTTime();
+            //that.calculataApplyRestTime();
+        });
+        function calculataRestTime() {
+            var regEx = new RegExp("\\-", "gi"); //i不区分大小写 g匹配所有
+            var restTime =0;
+            var restStartTime = atsMlUtile.getFieldOriginalValue("entries_restStartTime");
+            var restEndTime = atsMlUtile.getFieldOriginalValue("entries_restEndTime");
+
+            if (restStartTime!=undefined && restStartTime!="" && restEndTime!=undefined && restEndTime!="") {
+                restStartTime = restStartTime.replace(regEx, "/");
+                restEndTime = restEndTime.replace(regEx, "/");
+                var startTimeOfDate = new Date(restStartTime);
+                var endTimeOfDate = new Date(restEndTime);
+                var longTime = endTimeOfDate.getTime() - startTimeOfDate.getTime();
+                restTime += longTime / 1000.0 / 60;//分钟
+            }
+
+            var restStartTime2 = atsMlUtile.getFieldOriginalValue("entries_restStartTime2");
+            var restEndTime2 = atsMlUtile.getFieldOriginalValue("entries_restEndTime2");
+
+            if (restStartTime2!=undefined && restStartTime2!="" && restEndTime2!=undefined && restEndTime2!="") {
+                restStartTime2 = restStartTime2.replace(regEx, "/");
+                restEndTime2 = restEndTime2.replace(regEx, "/");
+                var startTimeOfDate2 = new Date(restStartTime2);
+                var endTimeOfDate2 = new Date(restEndTime2);
+                var longTime2 = endTimeOfDate2.getTime() - startTimeOfDate2.getTime();
+                restTime += longTime2 / 1000.0 / 60;//分钟
+            }
+            atsMlUtile.setTransNumValue("entries_restTime",restTime,{'decimalPrecision':0});
+            that.calculataRealOTTime();
+            that.calculataApplyOTTime();
+            // that.calculataApplyRestTime();
+        }
+
+        $("#entries_restStartTime,#entries_restEndTime,#entries_restStartTime2,#entries_restEndTime2").change(function(){//开始休息时间1
+            that.disableRestTime();
+            if (! that.verifyRestTime(false)){
+                return
+            }
+            calculataRestTime();
+        });
+        //实际加班结束时间选择完后 计算实际小时数
+        $("#entries_realEndTime,#entries_realStartTime").change(function(){
+            that.calculataRealOTTime();
+        });
+    },
+    disableRestTime:function (){
+        var restStartTime = atsMlUtile.getFieldOriginalValue("entries_restStartTime");
+        var restEndTime = atsMlUtile.getFieldOriginalValue("entries_restEndTime");
+        var restStartTime2 = atsMlUtile.getFieldOriginalValue("entries_restStartTime2");
+        var restEndTime2 = atsMlUtile.getFieldOriginalValue("entries_restEndTime2");
+        if (
+            (restStartTime ==undefined || restStartTime=="")
+            &&(restStartTime2 ==undefined || restStartTime2=="")
+            &&(restEndTime ==undefined || restEndTime=="")
+            &&(restEndTime2 ==undefined || restEndTime2=="")
+        ){
+            $("#entries_restTime").shrTextField("enable");
+            atsMlUtile.setTransNumValue("entries_restTime",0,{'decimalPrecision':0});
+            this.calculataApplyOTTime();
+            this.calculataRealOTTime();
+        } else {
+            $("#entries_restTime").shrTextField("disable");
+        }
+    },
+    calculataApplyOTTime : function(){
+        var startTime = atsMlUtile.getFieldOriginalValue("entries_startTime");
+        var endTime = atsMlUtile.getFieldOriginalValue("entries_endTime");
+        var restTime = atsMlUtile.getFieldOriginalValue("entries_restTime");
+        if( (new String(restTime)).trim()=='' ){
+            restTime=0;
+            atsMlUtile.setTransNumValue("entries_restTime",0,{'decimalPrecision':0});
+        }else{
+            restTime=parseFloat(restTime);
+            if(restTime<0.0){
+                atsMlUtile.setTransNumValue("entries_restTime",0,{'decimalPrecision':0});
+                restTime=0.0;
+            }
+        }
+
+        if ( startTime!=""&&startTime!=null && endTime!=""&&endTime!=null ) {
+
+            var regEx = new RegExp("\\-","gi");
+            startTime = startTime.replace(regEx,"/");
+            endTime = endTime.replace(regEx,"/");
+
+            var startTimeOfDate = new Date(startTime);
+            var endTimeOfDate = new Date(endTime);
+            var longTime = endTimeOfDate.getTime() - startTimeOfDate.getTime();
+            if (longTime <= 0) {
+                atsMlUtile.setTransNumValue("entries_applyOTTime",0);
+                //$("#entries_realOTTime").val(0);//时刻根据  实际的止-实际的起-休息通过在调用that.calculataApplyOTTime()后调用that.calculataRealOTTime()来达到的
+            }else{
+                t1 = parseFloat(longTime)/1000.0/60/60;
+                t1 = t1 - parseFloat(restTime)/60;
+                var that = this;
+                that.getDecimalPlace(t1,"entries_applyOTTime");
+            }
+        }
+    },
+    calculataRealOTTime : function(){
+        var realStartTime = atsMlUtile.getFieldOriginalValue("entries_realStartTime");
+        var realEndTime = atsMlUtile.getFieldOriginalValue("entries_realEndTime");
+        var restTime = atsMlUtile.getFieldOriginalValue("entries_restTime")||'';
+        if( (new String(restTime)).trim()=='' ){
+            restTime=0;
+            atsMlUtile.setTransNumValue("entries_restTime",0,{'decimalPrecision':0});
+        }else{
+            restTime=parseFloat(restTime);
+            if(restTime<0.0){
+                atsMlUtile.setTransNumValue("entries_restTime",0,{'decimalPrecision':0});
+                restTime=0.0;
+            }
+        }
+        if ( realStartTime!=""&&realStartTime!=null && realEndTime!=""&&realEndTime!=null ) {
+            var regEx = new RegExp("\\-","gi");
+            realStartTime = realStartTime.replace(regEx,"/");
+            realEndTime = realEndTime.replace(regEx,"/");
+            var realStartTimeOfDate = new Date(realStartTime);
+            var realEndTimeOfDate = new Date(realEndTime);
+            //lzq 加上减去休息时间
+            var floatTime = parseFloat( realEndTimeOfDate.getTime() - realStartTimeOfDate.getTime() )/1000.0/60/60 - parseFloat(restTime)/60;;
+            if (floatTime <= 0.0) {
+                atsMlUtile.setTransNumValue("entries_realOTTime",0);
+            }else{
+                //t1 = parseFloat(longTime)/1000.0/60/60;\
+                var that = this;
+                that.getDecimalPlace(floatTime,"entries_realOTTime");
+            }
+        }
+    },
+    realOverTimeSynOverTime : function(){
+        var that = this ;
+        $("#entries_startTime").change(function(){
+            var startTime = atsMlUtile.getFieldOriginalValue("entries_startTime");
+            atsMlUtile.setTransDateTimeValue("entries_realStartTime",startTime);
+            that.calculataRealOTTime();
+        });
+        $("#entries_endTime").change(function(){
+            var endTime = atsMlUtile.getFieldOriginalValue("entries_endTime");
+            atsMlUtile.setTransDateTimeValue("entries_realEndTime",endTime);
+
+            var startTime = atsMlUtile.getFieldOriginalValue("entries_startTime");
+            if (startTime!="" && startTime!=undefined){
+                atsMlUtile.setTransDateTimeValue("entries_realStartTime",startTime);
+            }
+            that.calculataRealOTTime();
+        });
+
+        $("#entries_applyOTTime").change(function(){
+            atsMlUtile.setTransNumValue("entries_realOTTime",atsMlUtile.getFieldOriginalValue('entries_applyOTTime'));
+        })
+    },
+    calculataApplyRestTime : function(){
+        var that = this ;
+        var otDate = atsMlUtile.getFieldOriginalValue("entries_otDate");
+        var personId=$('#entries_person_el').val() ;
+        var realStartTime = atsMlUtile.getFieldOriginalValue("entries_startTime");
+        var realEndTime = atsMlUtile.getFieldOriginalValue("entries_endTime");
+        var url = shr.getContextPath() + "/dynamic.do?method=getMyRestTime";
+        url += '&tDay=' + encodeURIComponent(otDate) + '&personId=' + encodeURIComponent(personId);
+        url +='&realStartTime=' + encodeURIComponent(realStartTime) + '&realEndTime=' + encodeURIComponent(realEndTime)+"&uipk="+shr.getUrlRequestParam('uipk');
+        $.ajax({
+            url: url,
+            async:false,
+            success: function(response){
+                var restTime = response.restTime ;
+                var restStartTime = response.restStartTime ;
+                var restStartTime2 = response.restStartTime2 ;
+                var restEndTime = response.restEndTime ;
+                var restEndTime2 = response.restEndTime2 ;
+                atsMlUtile.setTransNumValue("entries_restTime",restTime,{'decimalPrecision':0});
+                atsMlUtile.setTransDateTimeValue("entries_restStartTime",restStartTime);
+                atsMlUtile.setTransDateTimeValue("entries_restEndTime",restEndTime);
+                atsMlUtile.setTransDateTimeValue("entries_restStartTime2", restStartTime2);
+                atsMlUtile.setTransDateTimeValue("entries_restEndTime2", restEndTime2);
+
+                that.disableRestTime()
+            }
+            ,error: function(response) {
+            }
+        });
+
+    },
+
+
+    verify:function(){
+        var _self = this ;
+
+        var workArea = _self.getWorkarea();
+        $form = $('form', workArea);
+        if (!$form.valid()) {
+            return false;
+        }
+        if ( !_self.verifyRestTime(true)) {
+            return
+        }
+
+        var startTime = atsMlUtile.getFieldOriginalValue("entries_startTime");
+        var endTime = atsMlUtile.getFieldOriginalValue("entries_endTime");
+        var regEx = new RegExp("\\-","gi"); //i不区分大小写 g匹配所有
+        startTime = startTime.replace(regEx,"/");
+        endTime = endTime.replace(regEx,"/");
+        var startTimeOfDate = new Date(startTime);
+        var endTimeOfDate = new Date(endTime);
+        var longTime = endTimeOfDate.getTime() - startTimeOfDate.getTime();
+
+        var realstartTime = atsMlUtile.getFieldOriginalValue("entries_realStartTime");
+        var realendTime = atsMlUtile.getFieldOriginalValue("entries_realEndTime");
+        var realstartTimeOfDate = new Date( realstartTime.replace(regEx,"/") );
+        var realendTimeOfDate = new Date( realendTime.replace(regEx,"/") );
+        var longTime_real = realendTimeOfDate.getTime() - realstartTimeOfDate.getTime();
+
+        //处理加班日期 与 加班开始时间 和结束时间的日期保持一致
+        var overDate = atsMlUtile.getFieldOriginalValue("entries_otDate");
+        var overTimeBegin = atsMlUtile.getFieldOriginalValue("entries_startTime");
+        overTimeBegin = overTimeBegin.substring(0,10); //2014-01-02 00:00
+        var overTimeEnd = atsMlUtile.getFieldOriginalValue("entries_endTime");
+        overTimeEnd = overTimeEnd.substring(0,10);
+
+        var overTimeDate = new Date(overDate.replace(regEx,"/"));
+        var overTimeStartDate = new Date(overTimeBegin.replace(regEx,"/"));
+        var overTimeEndDate = new Date(overTimeEnd.replace(regEx,"/"));
+
+        //var longTime_start = overTimeStartDate.getTime() - overTimeDate.getTime()-24*60*60*1000 ;
+        //var longTime_end  = overTimeEndDate.getTime() - overTimeDate.getTime()-24*60*60*1000;
+        
+
+        var otTypeId = "";
+        //加班日期必须与加班开始时间日期保持一致 202502 总部提供
+        if(overTimeBegin.substring(0,10)!=overTimeEnd.substring(0,10)){
+            shr.showInfo({message: "不支持跨天加班,请使加班结束日期与加班开始时间日期保持一致"});
+            return false;
+        }
+        if (_self.getOperateState().toUpperCase() == 'VIEW') {
+            otTypeId = $("#entries_otType").val();
+        }else {
+            otTypeId = $("#entries_otType_el").val();
+        }
+        if(otTypeId == null || otTypeId == undefined || otTypeId.length == 0){
+            shr.showInfo({message: overDate + jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_12});
+            return false;
+        }
+
+        //检查人员是否有考勤档案
+        var isExistsFile = true;
+        var personNum = "";
+        if("ADDNEW" == this.getOperateState() || "EDIT" == this.getOperateState()){
+            personNum = $("#entries_person_number").val()//@
+        }else if("VIEW" == this.getOperateState()){
+            personNum = $("#entries_person_number").text()//@
+        }
+        /*	 	_self.remoteCall({
+                    type:"post",
+                    method:"isExistsAttanceFile",
+                    async: false,
+                    param:{personNum: personNum},
+                    success:function(res){
+                        var info =  res;
+                        if (!info.isExistsFile){
+                            shr.showWarning({message:"该员工还没有生效的假期档案/考勤档案!"});
+                            isExistsFile = false;
+                        }
+                    }
+                });
+                if(!isExistsFile){
+                   return false;
+                }*/
+
+        if ( overTimeStartDate.getTime() <overTimeDate.getTime()-24*60*60*1000  ) {//longTime_start != 0 &&  longTime_end != 0
+            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_2});
+            return false;
+        }
+        if ( overTimeEndDate.getTime()-24*60*60*1000  > overTimeDate.getTime() ) {
+            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_2});
+            return false;
+        }
+        if ( overTimeEndDate.getTime()- overTimeStartDate.getTime() >=2*24*60*60*1000) {
+            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_2});
+            return false;
+        }
+
+        if (longTime <= 0) {
+            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_10});
+            return false;
+        }else if (longTime_real <= 0) {
+            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_19});
+            return false;
+        }else if ($("#entries_otCompens").attr("title")
+            ==jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_4 && !_self.isOverMaxQuota()){
+            return false;
+        }
+        var otTime = atsMlUtile.getFieldOriginalValue("entries_applyOTTime");
+        if(parseFloat(otTime) < 0){
+            shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_11});
+            return false;
+        }
+
+        if(parseFloat(otTime) == 0){
+            shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_0001});
+            return false;
+        }
+
+        var personId = $('#entries_person_el').val();
+        if (_self.getOperateState().toUpperCase() == 'VIEW') {
+            personId = $('#entries_person').val();
+        }
+        var flag = true ;
+        _self.remoteCall({
+            type:"post",
+            method:"isCrossShift",
+            async: false,
+            param:{personId: personId,overDate:overDate,overTimeBegin:atsMlUtile.getFieldOriginalValue("entries_startTime")+":00",overTimeEnd:atsMlUtile.getFieldOriginalValue("entries_endTime")+":00"},
+            success:function(res){
+                var info =  res;
+                if (info.isCrossShift){
+                    shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_42});
+                    flag = false ;
+                }
+            }
+        });
+
+        var model = _self.getCurrentModel();
+
+        _self.remoteCall({
+            method:"validateIsFillOt",
+            param:{model:model},
+            async: false,
+            success:function(res){
+                info =  res;
+                if(res.errorString){
+                    shr.showError({message:res.errorString});
+                    flag = false;
+                    // return false;
+                }
+            }
+        });
+
+        _self.remoteCall({
+            type:"post",
+            method:"isWorkTime",
+            async: false,
+            param:{personId: personId,overDate:overDate,overTimeBegin:atsMlUtile.getFieldOriginalValue("entries_startTime")+":00",overTimeEnd:atsMlUtile.getFieldOriginalValue("entries_endTime")+":00"},
+            success:function(res){
+                var info =  res;
+                if (info.isWorkTime){
+                    shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_9});
+                    flag = false ;
+                }
+            }
+        });
+        _self.remoteCall({
+            type:"post",
+            method:"isAtFixedOverTimeOrExcep",
+            async: false,
+            param:{personId: personId,overDate:overDate,overTimeBegin:atsMlUtile.getFieldOriginalValue("entries_startTime")+":00",overTimeEnd:atsMlUtile.getFieldOriginalValue("entries_endTime")+":00"},
+            success:function(res){
+                var info =  res;
+                if (info.isAtFixedOverTimeOrExcep){
+                    shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_1});
+                    flag = false ;
+                }
+            }
+        });
+        //工作流审批中编辑校验补提加班单
+        if(_self.isFromWF())
+        {
+            var model = _self.getCurrentModel();
+            _self.remoteCall({
+                method:"validateIsFillOt",
+                param:{model:model},
+                async: false,
+                success:function(res){
+                    info =  res;
+                    if(res.errorString){
+                        shr.showError({message:res.errorString});
+                        flag = false;
+                        // return false;
+                    }
+                }
+            });
+
+            _self.remoteCall({
+                method:"validOtStart",
+                param:{personId:personId,applyOTTime:otTime},
+                async: false,
+                success:function(res){
+                    info =  res;
+                    if(res.info){
+                        shr.showError({message:res.info});
+                        flag = false ;
+                    }
+                }
+            });
+        }
+
+        return flag;
+
+    },
+    verifyRestTime: function( beforeSubmit){
+        var startTime0 = atsMlUtile.getFieldOriginalValue("entries_startTime");
+        var endTime0 = atsMlUtile.getFieldOriginalValue("entries_endTime");
+        if(startTime0 == "" || startTime0 == undefined){
+            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_2});
+            return false;
+        }
+        if(endTime0 == "" || endTime0 == undefined){
+            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_1});
+            return false;
+        }
+        var startTimeOfDate = new Date(startTime0);
+        var endTimeOfDate = new Date(endTime0);
+        var restStartTime = atsMlUtile.getFieldOriginalValue("entries_restStartTime");
+        var restEndTime = atsMlUtile.getFieldOriginalValue("entries_restEndTime");
+        var restStartTime2 = atsMlUtile.getFieldOriginalValue("entries_restStartTime2");
+        var restEndTime2 = atsMlUtile.getFieldOriginalValue("entries_restEndTime2");
+        var restStartTimeOfDate = new Date(restStartTime);
+        var restEndTimeOfDateOfDate = new Date(restEndTime);
+        if (restStartTime!=undefined && restStartTime!=""){
+            if (restStartTimeOfDate.getTime()<startTimeOfDate.getTime() ||restStartTimeOfDate.getTime()>endTimeOfDate.getTime()){
+                shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_6});
+                return false;
+            }
+        }
+        if (restEndTime!=undefined && restEndTime!="") {
+            if (restEndTimeOfDateOfDate.getTime() < startTimeOfDate.getTime() || restEndTimeOfDateOfDate.getTime() > endTimeOfDate.getTime()
+                ||restEndTimeOfDateOfDate.getTime() < restStartTimeOfDate.getTime()) {
+                shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_3});
+                return false;
+            }
+        }
+        var restStartTimeOfDate2 = new Date(restStartTime2);
+        var restEndTimeOfDateOfDate2 = new Date(restEndTime2);
+        if (restStartTime2!=undefined && restStartTime2!=""){
+            if (restStartTimeOfDate2.getTime()<startTimeOfDate.getTime() ||restStartTimeOfDate2.getTime()>endTimeOfDate.getTime()){
+                shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_8});
+                return false
+            }
+        }
+        if (restEndTime2!=undefined && restEndTime2!="") {
+            if (restEndTimeOfDateOfDate2.getTime() < startTimeOfDate.getTime() || restEndTimeOfDateOfDate2.getTime() > endTimeOfDate.getTime()
+                ||restEndTimeOfDateOfDate2.getTime() < restStartTimeOfDate2.getTime()){
+                shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_4});
+                return false;
+            }
+        }
+        if( (restStartTime!="" && restStartTime!=undefined && (restEndTime==""||restEndTime==undefined))
+            || (restEndTime!="" && restEndTime!=undefined && (restStartTime==""||restStartTime==undefined))
+        )
+        {
+            if (beforeSubmit){
+                shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_5});
+            }
+            return false;
+        }
+        if( (restStartTime2!="" && restStartTime2!=undefined && (restEndTime2==""||restEndTime2==undefined))
+            || (restEndTime2!="" && restEndTime2!=undefined && (restStartTime2==""||restStartTime2==undefined))
+        )
+        {
+            if (beforeSubmit) {
+                shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_7});
+            }
+            return false;
+        }
+        if (restStartTime != "" && restStartTime != undefined && restStartTime2 != "" && restStartTime2 != undefined) {
+            //两个加班休息时间都填了,那么判断不能交叉
+            if((restStartTimeOfDate.getTime()<restEndTimeOfDateOfDate2.getTime() && restStartTimeOfDate.getTime()>=restStartTimeOfDate2.getTime())
+                ||(restStartTimeOfDate2.getTime()<restEndTimeOfDateOfDate.getTime() && restStartTimeOfDate2.getTime()>=restStartTimeOfDate.getTime())
+            ){
+                shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_0});
+                return false;
+            }
+        }
+        return true;
+    },
+//	verify:function(){
+//		var regEx = new RegExp("\\-","gi");//i不区分大小写 g匹配所有
+//	 	var msgValue = this.getFieldValue("entries_msgValue");
+//	 	
+//	 	var beginTime = this.getFieldValue("entries_beginTime");
+//	 	var endTime = this.getFieldValue("entries.endTime");
+//	 	beginTime = beginTime.replace(regEx,"/");//2013/6/12 19:38:02
+//	 	endTime = endTime.replace(regEx,"/");
+//	 	var beginTimeOfDate = new Date(beginTime); 
+//	 	var endTimeOfDate = new Date(endTime);
+//	 	if(beginTimeOfDate.getTime()>endTimeOfDate.getTime()){
+//			shr.showInfo({message: "请假开始日期不能大于请假结束日期"});
+//			return false;
+//		}else if(parseFloat(msgValue) == 0  ){
+//			shr.showInfo({message: "当前人的可用年假为"+msgValue+"天,不能提交或保存"});
+//			return false;
+//		}
+//		else{
+//			return true;
+//		}
+//	},
+
+    /**
+     * HRBillStateEnum(与转正,调动,离职单据的一致) || BizStateEnum 这个是 EAS7.5版的请假单使用的审批状态值,后续不用这个了<br/>
+     * 后续的加班,出差,请假,补签卡都用HRBillStateEnum这个单据状态,以便可以统一修改<br/>
+     * view: <field name="billState"  label="单据状态" type="text"></field>	   <br/>
+     * 查看页面取值 var billState = $("#billState").html();
+     * view: <field name="billState"  label="单据状态" type="text"></field>	   <br/>
+     * 查看页面取值 var billState = $("#billState").val();
+     *
+     * 设置编辑按钮是否隐藏		|| 对应EAS7.5 Version 审批状态字段值<br/>
+     * 0-save  未提交			||  -1  未提交					   <br/>
+     * 1-submited 未审批			||   0  未审核					   <br/>
+     * 2-auditing 审批中			||   1  审核中					   <br/>
+     * 3-audited  审批通过		||   3  审核完成					   <br/>
+     * 4-auditend 审批不通过		||   4  审核终止					   <br/>
+     */
+    setButtonVisible:function(){
+        var that = this;
+        var billState = $("#billState").val();
+        //alert(billState);
+        if (billState) {
+            if (billState==3 ||
+                jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_17==billState ||
+                billState ==4||
+                jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_16==billState ||
+                billState ==2||
+                jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_18==billState ) {
+                $("#edit").hide();
+                $("#submit").hide();
+                $("#submitEffect").hide();
+            } else if (1==billState ||
+                jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_22== billState ||
+                2 == billState ||
+                jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_18==billState ) { //未审批或审批中
+                if(!this.isFromWF()){
+                    $("#edit").hide();
+                    $("#submit").hide();
+                    $("#submitEffect").hide();
+                }
+            }
+        }
+        if (this.getOperateState().toUpperCase() == 'VIEW') { //查看状态下不允许提交
+            //不允许提交生效
+            $("#submitEffect").hide();
+            if(billState == 0)
+            {
+                $("#submit").show();
+            }else {
+                $("#submit").hide();
+            }
+            if(this.isFromWF()){ // 来自任务中心
+                $('#cancelAll').hide();
+                $('#submit')
+                    .text(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_21);
+                $('#edit').hide();
+            }
+        }
+
+        //新增和编辑状态隐藏返回XX列表
+        if (this.getOperateState().toUpperCase() == 'ADDNEW' || this.getOperateState().toUpperCase() == 'EDIT' ) {
+            $("#returnToOverTimeBillList").hide();
+        }
+
+        //如果是工作流打回,界面上的"返回XX列表"不显示
+        if (this.isFromWF()) {
+            $("#returnToOverTimeBillList").hide();
+            $("#cancel").hide();
+        }
+        /*
+        if(billState){
+            if(!this.isFromWF()){
+                if("审批通过" == billState || "审批中" == billState || "未审批" == billState){
+                    $("#edit").hide();
+                    $("#submit").hide();
+                    $("#submitEffect").hide();
+                }
+            }
+        }
+        */
+    }
+    //没有找到调休规则
+    ,isOverMaxQuota : function(){
+        var resFlag = true;
+        var _self = this;
+        if($('#hrOrgUnit_el')==null || $('#hrOrgUnit_el') ==""){
+            shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_15});
+            return;
+        }
+        _self.remoteCall({
+            type:"post",
+            method:"isOverMaxQuota",
+            async: false,
+            param:{
+                personId:$('#entries_person_el').val() || $('#entries_person').val() ||'',
+                otDate:atsMlUtile.getFieldOriginalValue('entries_otDate')||'',
+                currentValue:atsMlUtile.getFieldOriginalValue('entries_applyOTTime'),
+                otType:$('#entries_otType_el').val() || $('#entries_otType').val() || '',
+                hrOrgUnitId:$('#hrOrgUnit_el').val()
+
+            },
+            success:function(res){
+                var info =  res;
+                if (!info.resFlag) {
+                    shr.showWarning({message:info.resMsg});
+                    resFlag = false;
+                }
+            }
+        });
+        return resFlag;
+    },
+    isOverWarnValue:function(otType,otCompens)
+    {
+        //add by aniskin_guosj,otType、otCompens非空限制
+        if (otType!=null && otType!=undefined && otType!="" &&
+            otCompens!=null && otCompens!=undefined && otCompens!="")
+        {
+            if(!this.isOTControl)
+            {
+                return;
+            }
+            var data={
+                personId: this.getFieldValue('entries_person'),
+                otDate:  this.getFieldValue('entries_otDate'),
+                otType:otType,
+                otCompens:otCompens
+            }
+            this.remoteCall({
+                type:"post",
+                method:"getPersonOTLimitInfo",
+                param:data,
+                success:function(res){
+                    var info = res;
+                    if(info.isOverWarnValue)
+                    {
+                        var html="";
+                        if(info.cycleDateType!=3)
+                        {
+                            html=jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_23
+                                + shr.formatMsg(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_0, [info.personName, info.dateValue, info.used])
+                                +jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_26
+                                +"<span style='color:red'>"+info.substract
+                                +jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_25
+                                + "</span>"
+                                +"【"
+                                + jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_27
+                                + info.warnValue+","
+                                + jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_7
+                                + info.limitValue+"】";
+                        }
+                        else
+                        {
+                            html=jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_23
+                                + shr.formatMsg(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_28, [info.dateValue, info.startDate, info.endDate, info.used])
+                                + info.personName+""
+                                + jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_26
+                                +"<span style='color:red'>"+info.substract
+                                +jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_25
+                                + "</span>"
+                                +"【"
+                                + jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_27
+                                +info.warnValue+","
+                                + jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_7
+                                +info.limitValue+"】";
+                        }
+                        $("#show_info").html(html);
+                        $("#message_head").show();
+                    }
+                    else
+                    {
+                        $("#message_head").hide();
+                    }
+
+                }
+            });
+        }
+
+    },otCompensChange:function()
+    {
+        var that=this;
+        $("#entries_otCompens").shrPromptBox("option", {
+            onchange : function(e, value) {
+                var info = value.current;
+                var comId = info.id != undefined && info.id != "" ? info.id : info.submitFormat;
+                if (info!=null){
+                    that.isOverWarnValue($("#entries_otType_el").val(),comId);
+                }
+
+            }
+        });
+    },getOTContrlParams:function()
+    {
+        var that=this;
+       if( that.getOperateState() == 'VIEW' ){
+           return;
+       }
+
+        var personId = $('#entries_person_el').val();
+        if(personId == null || personId == ''){
+            personId = $('#entries_person').val();
+        }
+
+
+        var url = shr.getContextPath()+'/dynamic.do?handler=com.kingdee.shr.ats.bill.util.BillBizUtil&method=getOTContrlParams';
+        shr.ajax({
+            type:"post",
+            async:false,
+            url:url,
+            data:{personId:personId},
+            success:function(res){
+                if(res)
+                {
+                    that.isOTControl=res.isOTControl;
+                    that.isOtrolByDateType=res.isOtrolByDateType;
+
+                }
+            }
+        });
+    }
+
+    //返回个人加班单链接跳转
+    ,returnToOverTimeBillListAction:function(){
+        // window.location.href = shr.getContextPath()+"/dynamic.do?uipk=com.kingdee.eas.hr.ats.app.AtsLeaveBillList";
+        this.reloadPage({
+            uipk: 'com.kingdee.eas.hr.ats.app.AtsOverTimeBillList'
+        });
+    },
+
+    goNextPage: function(source) {
+        // 普通提交,返回上一页面
+        if ($("#bill_flag").val() == "employeeself"){
+            _self.reloadPage({
+                uipk: "com.kingdee.eas.hr.ats.app.AtsOverTimeBillList"
+            });
+        }else{
+            _self.reloadPage({
+                uipk: "com.kingdee.eas.hr.ats.app.AtsOverTimeBillAllList"
+            });
+        }
+    },
+
+    setNavigateLine : function(){
+        var fromFlag = localStorage.getItem("fromFlag");
+        var empolyeeBoardFlag =	sessionStorage.getItem("empolyeeBoardFlag");
+
+        var parentUipk = "";
+        if(parent.window.shr==null){
+            parentUipk = shr.getCurrentViewPage().uipk;
+        }else{
+            parentUipk = parent.window.shr.getCurrentViewPage().uipk;
+        }
+        if(fromFlag == "employeeBoard"){//来自我的考勤的时候。将导航条删除掉。
+            $("#breadcrumb").parent().parent().remove();
+            localStorage.removeItem("fromFlag");
+        }
+        if(("empolyeeBoardFlag" == empolyeeBoardFlag && "com.kingdee.eas.hr.ats.app.WorkCalendar.empATSDeskTop" == parentUipk)){
+            $("#breadcrumb").remove();
+            window.parent.changeDialogTitle(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_24);
+        }
+    }
+    ,getCurrentModel : function(){
+
+        var that = this ;
+        var model = shr.ats.AtsOverTimeBillEdit.superClass.getCurrentModel.call(this);
+        var startTime = model.entries[0].startTime ;
+        var endTime = model.entries[0].endTime;
+
+        var realStartTime = model.entries[0].realStartTime ;
+        var realEndTime = model.entries[0].realEndTime;
+
+        if(!(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/.test(startTime)))
+        {
+            model.entries[0].startTime = startTime+":00";
+        }
+        if(!(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/.test(endTime)))
+        {
+            model.entries[0].endTime = endTime+":00";
+        }
+
+        if(!(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/.test(realStartTime)))
+        {
+            if(!(realStartTime.trim() == "")){
+                model.entries[0].realStartTime = realStartTime+":00";
+            }
+        }
+        if(!(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/.test(realEndTime)))
+        {
+            if(!(realEndTime.trim() == "")){
+                model.entries[0].realEndTime = realEndTime+":00";
+            }
+        }
+
+
+        var personId = model.entries[0].person;
+        var date = model.entries[0].otDate;
+        var personDateStr = personId +"_"+date.substring(0,10);
+
+        if(personDateStr){
+            _self.remoteCall({
+                type:"post",
+                method:"getPersonAdminOrgUnit",
+                param:{ personDateStr:personDateStr},
+                async: false,
+                success:function(res){
+                    var info =  res;
+                    var personAtsInfo = res[personDateStr];
+                    if(personAtsInfo && personAtsInfo.adminOrgUnit){
+                        model.entries[0]["adminOrgUnit"]= personAtsInfo.adminOrgUnit;
+                        model.entries[0]["position"]= personAtsInfo.position;
+                    }
+                }
+            });
+        }
+
+        model.ccPersonIds = model.ccPersonIds && model.ccPersonIds.id || "";
+        model.ccPerson = model.ccPersonIds;
+        return model ;
+    }
+    ,saveAction: function(event) {
+        var _self = this,
+            workArea = _self.getWorkarea(),
+            $form = $('form', workArea);
+        if (_self.validate()&&_self.verify()&&($form.valid())) {
+            var beginDate = atsMlUtile.getFieldOriginalValue("entries_startTime").split(" ")[0];
+            var endDate = atsMlUtile.getFieldOriginalValue("entries_endTime").split(" ")[0];
+            var billType = "overTime";
+            var personId = $('#entries_person_el').val()
+            _self.remoteCall({
+                type:"post",
+                method:"billCheck",
+                param:{beginDate:beginDate,endDate:endDate,personId:personId,billType:billType},
+                async: true,
+                success:function(res){
+                    var result = res.result;
+                    if(result==""){
+                        _self.doSave(event, 'save');
+                    }else{
+                        shr.showConfirm(result+jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_20,function(){
+                            _self.doSave(event, 'save');
+                        });
+                    }
+                }
+            });
+        }
+    },
+    assembleSaveData: function(action) {
+        var data = shr.ats.AtsOverTimeBillEdit.superClass.assembleSaveData.call(this,action);
+        var model = JSON.parse(data.model);
+        var personDateStr = '';
+        var personId = model.entries.person;
+        var date = model.entries.otDate;
+        if(date && personId){
+            personDateStr += personId +"_"+date.substring(0,10);
+        }
+        _self.remoteCall({
+            type:"post",
+            method:"getPersonAdminOrgUnit",
+            param:{
+                personDateStr:personDateStr
+            },
+            async: false,
+            success:function(res){
+                var info =  res;
+                var person_date = personId +"_"+date.substring(0,10);
+                if(res[person_date] != null){
+                    model.entries["adminOrgUnit"] = res[person_date].adminOrgUnit;
+                    model.entries["position"] = res[person_date].position;
+                }
+            }
+        });
+
+        model.ccPerson = model.ccPersonIds;
+        var assModeljson = $.toJSON(model) ;
+        data.model = assModeljson ;
+        return data;
+    }
+    ,submitAction: function(event) {
+
+        var _self = this,
+            workArea = _self.getWorkarea(),
+            $form = $('form', workArea);
+        var flag = false ;
+
+        if (shr.getCurrentViewPage().uipk == "com.kingdee.eas.hr.ats.app.AtsOverTimeBillForm") {
+            var personId = $('#entries_person_id').val();
+            var proposerId = $('#proposer_id').val();
+            if(undefined != personId && undefined != proposerId && personId != "" && proposerId != "" && personId != proposerId){
+                shr.showError({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_30, hiddenAfter: 5});
+                return;
+            }
+        }
+
+        if (_self.validate()&&_self.verify()&&($form.valid())) {
+            var beginDate = atsMlUtile.getFieldOriginalValue("entries_startTime").split(" ")[0];
+            var endDate = atsMlUtile.getFieldOriginalValue("entries_endTime").split(" ")[0];
+            var billType = "overTime";
+            var personId = $('#entries_person_el').val()
+            _self.remoteCall({
+                type:"post",
+                method:"billCheck",
+                param:{beginDate:beginDate,endDate:endDate,personId:personId,billType:billType},
+                async: false,
+                success:function(res){
+                    var result = res.result;
+                    if(result==""){
+                        shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_13, function() {
+                            _self.doSubmit(event, 'submit');
+                        });
+                    }else{
+                        shr.showConfirm(result+jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_20,function(){
+                            shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_13, function() {
+                                _self.doSubmit(event, 'submit');
+                            });
+                        });
+                    }
+                }
+            });
+        }
+
+    }
+    ,before :function(){
+
+        var _self = this,
+            workArea = _self.getWorkarea(),
+            $form = $('form', workArea);
+        var flag = false ;
+        if (_self.validate()&&($form.valid())) {
+            var beginDate = atsMlUtile.getFieldOriginalValue("entries_startTime").split(" ")[0];
+            var endDate = atsMlUtile.getFieldOriginalValue("entries_endTime").split(" ")[0];
+            var billType = "overTime";
+            var personId = $('#entries_person_el').val()
+            _self.remoteCall({
+                type:"post",
+                method:"billCheck",
+                param:{beginDate:beginDate,endDate:endDate,personId:personId,billType:billType},
+                async: false,
+                success:function(res){
+                    var result = res.result;
+                    if(result==""){
+                        flag= true;
+                    }else{
+                        shr.showConfirm(result+jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_20,function(){
+                            flag= true;
+                        });
+                    }
+                }
+            });
+        }
+        // return false 也能保存,固让js报错,后续让eas修改 return false 逻辑
+        //var len = workArea.length() ;
+        return flag ;
+    }
+    ,beforeSave:function(){
+        var _self = this,
+            workArea = _self.getWorkarea(),
+            $form = $('form', workArea);
+        if (($form.valid() && _self.verify())) {
+            var beginDate = atsMlUtile.getFieldOriginalValue("entries_startTime").split(" ")[0];
+            var endDate = atsMlUtile.getFieldOriginalValue("entries_endTime").split(" ")[0];
+            var billType = "overTime";
+            var personId = $('#entries_person_el').val()
+            _self.remoteCall({
+                type:"post",
+                method:"billCheck",
+                param:{beginDate:beginDate,endDate:endDate,personId:personId,billType:billType},
+                async: true,
+                success:function(res){
+                    var result = res.result;
+                    if(result==""){
+                        return true;
+                    }else{
+                        shr.showConfirm(result+jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_20,function(){
+                            return true;
+                        });
+                    }
+                }
+            });
+        }
+        // return false 也能保存,固让js报错,后续让eas修改 return false 逻辑
+        var len = workArea.length() ;
+        return false ;
+    }
+
+});

+ 141 - 0
js/attendmanage/canTripBillEditEx.js

@@ -0,0 +1,141 @@
+/****
+ * 出差变更单拓展
+ * 20250120
+ * 匡原值_coyle
+ */
+shr.defineClass("shr.ats.CanTripBillEditEx", shr.ats.CanTripBillEdit, {
+
+    initalizeDOM: function () {
+        shr.ats.CanTripBillEditEx.superClass.initalizeDOM.call(this);
+        var that = this;
+    },
+    
+
+
+    /**
+     * 增加保存验证
+     * @return {Boolean}
+     */
+    verify: function () {
+        var that = this;
+        var workArea = that.getWorkarea();
+        $form = $('form', workArea);
+        if (!$form.valid()) {
+            return false;
+        }
+
+        var realbeginTime = atsMlUtile.getFieldOriginalValue("entries_realStartTime");
+        var realendTime = atsMlUtile.getFieldOriginalValue("entries_realEndTime");
+        var realTripDays = atsMlUtile.getFieldOriginalValue("entries_realTripDays");
+        //202501 
+        var triptime = atsMlUtile.getFieldOriginalValue("entries_triptime");
+        if (triptime <= 0) {
+            shr.showError({message: jsBizMultLan.atsManager_canTripBillEdit_i18n_24});
+            return false;
+        }
+
+        //出差变更开始时间不能大于请假确认 结束时间
+        var regEx = new RegExp("\\-", "gi");
+        realbeginTime = realbeginTime.replace(regEx, "/");
+        realendTime = realendTime.replace(regEx, "/");
+        var beginTimeOfDate = new Date(realbeginTime);
+        var endTimeOfDate = new Date(realendTime);
+        var longTime = endTimeOfDate.getTime() - beginTimeOfDate.getTime();
+        if (longTime < 0) {
+            shr.showWarning({message: jsBizMultLan.atsManager_canTripBillEdit_i18n_9});
+            return false;
+        }
+        return true;
+
+
+    }
+   
+    /**
+     * 计算 设置出差变更单中,实际出差开始时间,实际出差结束时间之间的时长
+     */
+    , getRealTripLength: function () {
+        var that = this;
+        var personId = $("#entries_person_el").val();
+        var startTime;
+        var endTime;
+        var startDate;
+        var endDate;
+        var tripBillId = $('#entries_tripEntryBill_el').val();
+        var startTimeStr = atsMlUtile.getFieldOriginalValue("entries_realStartTime");
+        var endTimeStr = atsMlUtile.getFieldOriginalValue("entries_realEndTime");
+
+        if (startTimeStr != "" && startTimeStr != null && endTimeStr != "" && endTimeStr != null) {
+            startTime = startTimeStr.replace("\\/", "-");
+            endTime = endTimeStr.replace("\\/", "-");
+            if (startTime.substring(0, 16) > endTime.substring(0, 16)) {
+                return;
+            }
+            var isAllDay = atsMlUtile.getFieldOriginalValue("entries_isAllDay");
+            that.remoteCall({
+                type: "post",
+                async: false,
+                method: "getRealLeaveLengthInfo",
+                param: {
+                    personId: personId,
+                    beginTime: startTime,
+                    endTime: endTime,
+                    tripBillId: tripBillId,
+                    isAllDay: isAllDay,
+                    isElasticCalLen: $("#entries_isElasticCalLen").shrCheckbox("isSelected")
+                },
+                success: function (res) {
+                    info = res;
+                    var day = parseFloat(info.leaveBillDays);
+                    day = day.toFixed(atsMlUtile.getSysDecimalPlace());
+                    atsMlUtile.setTransNumValue("entries_realTripDays", day);
+                    //二开拓展 202501
+                    that.tripTimeVal(day);
+                }
+            });
+        }
+    }
+     
+    ,setRealStartAndEndTime: function (res) {
+        var that = this;
+        atsMlUtile.setTransDateTimeValue("entries_realStartTime", res.startTime);
+        atsMlUtile.setTransDateTimeValue("entries_realEndTime", res.endTime);
+        atsMlUtile.setTransNumValue("entries_realTripDays", res.tripDays);
+        //二开拓展 202501
+        //计算总时间 定制 向上取整
+            var dayVal = res.tripDays;
+            var triptime = 0;
+            if(dayVal == 0.29 || dayVal == 0.43 || dayVal == 0.86){
+                triptime = Math.floor( dayVal * 7 );
+              }else{
+                triptime = Math.ceil( dayVal * 7 );
+              }
+        atsMlUtile.setTransNumValue("entries_triptime", triptime);
+        $('#entries_startTimeDateType').shrSelect("setValue", res.startTimeDateType ? res.startTimeDateType.value : "1");
+        $('#entries_endTimeDateType').shrSelect("setValue", res.endTimeDateType ? res.endTimeDateType.value : "1");
+        that.setDateAndHMS(res.startTime, res.endTime);
+    },
+     
+
+      //202501 二开拓展时长
+    tripTimeVal: function (dayVal) {
+    var triptime = 0;
+    if(dayVal == 0.29 || dayVal == 0.43 || dayVal == 0.86){
+      triptime = Math.floor( dayVal * 7 );
+    }else{
+      triptime = Math.ceil( dayVal * 7 );
+    }
+    atsMlUtile.setTransNumValue("entries_triptime", triptime);
+  
+  }
+});
+
+ 
+ 
+
+
+
+
+
+
+
+

+ 4890 - 0
js/attendmanage/shr.js

@@ -0,0 +1,4890 @@
+/*
+* 描述:shr命名空间构造器
+* @class 用来构建js 对象的命名空间
+* @constructor
+* @return 返回构造完成的命名空间(JS对象)
+*/
+var Namespace = {
+	/*
+	 * 描述:注册命名空间
+	 * @param {String} fullNS 命名空间名称
+	 * @return 返回造建完成的命名空间
+	 */
+	register : function(fullNS) {
+		var nsArray = fullNS.split('.');
+		var sEval = "";
+		var sNS = "";
+		for (var i = 0; i < nsArray.length; i++) {
+			if (i != 0)
+				sNS += ".";
+			sNS += nsArray[i];
+			sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS
+					+ " = new Object();"
+		}
+		if (sEval != "")
+			return eval(sEval);
+	}
+};
+
+/**
+ * 重写jquery init方法来过滤下selector中的特殊字符
+ * 不能处理"#test1,#test2"多个选择器的情况
+ */
+var selector_special_char_regex = /[!"#$%&'()*+,.\/:;<=>?@\[\\\]\^`{|}~]/g; 
+
+var waf = $;
+var shr = $;
+var _top = getTop();
+
+var _ajaxFnCache = $.ajax;
+$.ajax = function (url, options){
+	// toodo 参考 jquery.js ajax实现
+	if ( typeof url === "object" ) {
+		options = url;
+		url = undefined;
+	}
+	options = options || {};
+	//shr.dealPostParam会修改options,防止影响外部参数引用
+	var newOptions = $.extend(true,{},options);
+	shr.dealPostParam( newOptions );
+	return _ajaxFnCache(url, newOptions);
+};
+
+function detectBrowser () {
+	// Useragent RegExp
+	var rwebkit = /(webkit)[ \/]([\w.]+)/;
+	var ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/;
+	var rmsie = /(msie) ([\w.]+)/;
+	var rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/;
+	var browser = {};
+	// Use of jQuery.browser is frowned upon.
+	// More details: http://docs.jquery.com/Utilities/jQuery.browser
+	var uaMatch = function( ua ) {
+		ua = ua.toLowerCase();
+		var match = rwebkit.exec( ua ) ||
+			ropera.exec( ua ) ||
+			rmsie.exec( ua ) ||
+			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+			[];
+		return { browser: match[1] || "", version: match[2] || "0" };
+	}
+	var browserMatch = uaMatch( window.navigator.userAgent );
+	if ( browserMatch.browser ) {
+		browser[ browserMatch.browser ] = true;
+		browser.version = browserMatch.version;
+	}
+	// Deprecated, use jQuery.browser.webkit instead
+	if ( browser.webkit ) {
+		browser.safari = true;
+	}
+	return browser;
+}
+
+shr.extend({
+	/**
+	 * 解决jQuery高版本下不支持浏览器检测问题
+	 */
+	browser: jQuery.browser || detectBrowser(),
+
+	initPrivacyAgreement: function(options){
+        var $mask = $('<div id="shr-mask-agreement"><div>').appendTo($('body'));
+		$mask.css({
+			"display" : "block",
+			"color" : "#fff",
+			"position" : "fixed",
+			"top" : "0px",
+			"left" : "0px",
+			"background-color" : 'black',
+			"opacity" : 0.4,
+			"-moz-opacity" : 0.4,
+			"filter" : "alpha(opacity=" + (0.4 * 100) + ")",
+			"width" : "100%",
+			"height" : "100%",
+			"z-index": "1024"
+		});
+        $('html').css({'overflow':'hidden'});
+        var tpl = [
+            '<div class="privacyPolicy">',
+                '<div class="title" title="${name}">${name}</div>',
+                '<div class="content">$${content}</div>',
+                '<div class="privacyPolicyFoot">', 
+                    '<button id="privacyAgree" type="button" class="shrbtn">' + $.shrI18n.privacy.msg2 +'</button>',
+                    '<button id="privacyReject" type="button" class="shrbtn">' + $.shrI18n.privacy.msg14 +'</button>',
+                '</div>',
+            '</div>'
+        ].join('');
+        var privacyHtml = juicer(tpl,options.data);
+        $("body").append(privacyHtml);
+
+        $('#privacyAgree').click(function(){
+            if (typeof options.agree !== "function") return;	
+            options.agree();
+        });
+        $('#privacyReject').click(function(){
+            if (typeof options.reject !== "function") return;
+            options.reject();
+        });
+    },
+	hidePrivacyAgreement: function(){
+		var iframes = top.document.getElementsByTagName('iframe');
+		if(iframes.length > 0) {
+			for(var i = 0;i < iframes.length;i++) {
+				mask = iframes[i].contentWindow.document.getElementById('shr-mask-agreement');
+				$(mask).remove();
+			}
+		}
+
+		$("div#shr-mask-agreement").remove();
+		$("div#shr-mask-agreement", top.parent.document).remove();
+		$('html').css({'overflow':'visible'});
+		$('.privacyPolicy').remove();
+	},
+
+	startMask: function(opacity, load){
+		opacity = (opacity || 0.16);
+
+		if(load) {
+			var $mask = $('<div id="shr-mask"><img src="/shr/styles/images/loading.gif" style="position:absolute;left:50%;top:50%;margin-left:-40px;margin-top:-40px;"><div>').appendTo($('body'));
+			$mask.css({
+				"display" : "block",
+				"color" : "#fff",
+				"position" : "fixed",
+				"top" : "0px",
+				"left" : "0px",
+				"background-color" : 'gray',
+				"opacity" : opacity,
+				"-moz-opacity" : opacity,
+				"filter" : "alpha(opacity=" + (opacity * 100) + ")",
+				"width" : "100%",
+				"height" : "100%",
+				"z-index": "9999"
+			});
+
+			return;
+		}
+		var $mask = $('<div id="shr-mask"><div>').appendTo($('body'));
+		$mask.css({
+			"display" : "block",
+			"color" : "#fff",
+			"position" : "fixed",
+			"top" : "0px",
+			"left" : "0px",
+			"background-color" : 'black',
+			"opacity" : opacity,
+			"-moz-opacity" : opacity,
+			"filter" : "alpha(opacity=" + (opacity * 100) + ")",
+			"width" : "100%",
+			"height" : "100%",
+			"z-index": "1024"
+		});
+	},
+    //重写eval方法
+    codeEval: function ( code ){
+        var script;
+        if ( code ) {
+            var data_key = '_process_json_data_'+parseInt(shr.randMath());
+            code = 'window["'+data_key+'"]=('+code+');'
+            script = document.createElement("script");
+            script.text = code;
+            document.head.appendChild( script ).parentNode.removeChild( script );
+            return window[data_key];
+        }
+        return null;
+    },
+	//附件上传中需要用到的fileUUID
+	getAttachmentFileUUID: function(){
+		if( $(".attachmentUploadArea").length > 0 
+		&& $(".attachmentUploadArea").hasClass('standardAttachment')){
+			var mainPageDom = $(".attachmentUploadArea").closest(".view_mainPage");
+			var uuid = '';
+			//多行表单的时候需要取view_mainPage上的uuid去拿viewPage
+			if(mainPageDom.length && mainPageDom.attr('id')){
+				uuid = mainPageDom.attr('id');
+			}
+			var currentPage = shr.getCurrentViewPage(uuid);
+			var attachmentFileUUID = currentPage ? currentPage.attachmentFileUUID: '';
+			return attachmentFileUUID;
+		}
+	},
+
+	//生成附件fileUUID
+	generateAttachmentFileUUID : function(){
+		var attachmentFileUUID = '';
+		if ($(".attachmentUploadArea").length > 0) {
+			attachmentFileUUID = shr.generateUUID();
+		}
+		return attachmentFileUUID;
+	},
+
+	//在接口中设置附件上传中需要用到的UUID
+	_addAttachmentFileUUID : function(data){
+		if(data){
+			var attachmentFileUUID = shr.getAttachmentFileUUID();
+			if( $(".attachmentUploadArea").length > 0 
+			&& $(".attachmentUploadArea").hasClass('standardAttachment') 
+			&& attachmentFileUUID ){
+				data.fileUUID = attachmentFileUUID;
+			}
+		}
+	},
+	
+	//生成UUID
+	generateUUID: function() {
+		var uuid = '';
+		var d = new Date().getTime();
+		if (window.performance && typeof window.performance.now === "function") {
+			d += performance.now(); 
+		}
+		uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
+			var r = (d + Math.random() * 16) % 16 | 0; 
+			d = Math.floor(d / 16);
+			return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16); 
+		});
+		
+		return uuid;
+	},
+    //随机数
+    randMath: function(number){
+        number = number? number : 100000;
+        var seed = (new Date()).getTime();
+        function r(){
+            seed = (seed*9301+49297)%233280;
+            return seed/(233280.0);
+        }
+        return Math.ceil(r()*number);
+    },
+	stopMask: function(){
+		//对于界面存在多个iframe时,关闭提示不能移除所有遮罩
+		var iframes = top.document.getElementsByTagName('iframe');
+		if(iframes.length > 0) {
+			for(var i = 0;i < iframes.length;i++) {
+				mask = iframes[i].contentWindow.document.getElementById('shr-mask');
+				$(mask).remove();
+			}
+		}
+
+		$("div#shr-mask").remove(); 
+	},
+	// 增加一个关闭Mask的方法,用来提示浏览器缩放时的关闭。
+	stopAllMask: function(){
+		//对于界面存在多个iframe时,关闭提示不能移除所有遮罩
+		var iframes = top.document.getElementsByTagName('iframe');
+		if(iframes.length > 0) {
+			for(var i = 0;i < iframes.length;i++) {
+				mask = iframes[i].contentWindow.document.getElementById('shr-mask');
+				$(mask).remove();
+			}
+		}
+		
+		$("div#shr-mask").remove();
+		$("div#shr-mask", top.parent.document).remove();
+	},
+
+	/**
+	 * 获取当前的语言类型
+	 * 判断语言类型规则:当字符串中存在中午字符、英文字符和数字时,规则是中文字符安>英文字符>数字
+	 * @param {value}
+	 */
+	getValueLanguageType: function(value) {
+		if(escape(value).indexOf('%u') > -1) {
+			return 'zh_CN';
+		}else if(/[a-z]/i.test(value)) {
+			return 'en_US';
+		}else{
+			return 'number';
+		}
+	},
+
+	getCommonForUrl: function (someWindow, re) {
+		if (!someWindow) {
+			someWindow = _top;
+		}
+		var ret = re.exec(someWindow.location.href);
+		return (ret && ret.length > 1) ? ret[1] : '';
+	},
+
+	/**
+ 	* 过滤掉jquery选择器中的特殊字符串
+ 	*/
+	 filterSelectorSpecialChar: function (selector) {
+		var _selector = selector;
+		if (typeof selector == "string") {
+			_selector = selector.replace(selector_special_char_regex, "\\$&");
+		}
+		return _selector;
+	},
+
+	/**
+		 * 描述:获取当前语种标识
+		 * zh_CN |中文
+		 *en_US |英文
+		 *zh_TW |繁体
+	*/
+	getContext: function () {
+		if (!shr.context) {
+			shr.context = { locale: window.contextLanguage };
+		}
+		return shr.context;
+	},
+
+	//处理安全漏洞扫描出来的json注入
+	explainJson: function( data ) {
+		var rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
+		var rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
+		var rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g;
+		var rvalidchars = /^[\],:{}\s]*$/;
+		if ( typeof data !== "string" || !data ) {
+			return null;
+		}
+		
+		// Make sure leading/trailing whitespace is removed (IE can't handle it)
+		data = jQuery.trim( data );
+		// Make sure the incoming data is actual JSON
+		// Logic borrowed from http://json.org/json2.js
+		if ( rvalidchars.test(data.replace(rvalidescape, "@").replace(rvalidtokens, "]").replace(rvalidbraces, "")) ) {
+			// Try to use the native JSON parser first
+			return window.JSON && window.JSON.parse ?window.JSON.parse( data ) : (new Function("return " + data))();
+		} else {
+			jQuery.error( "Invalid JSON: " + data );
+		}
+	},
+
+	 /**
+	  * 根据语言环境获取多语言字段对应语言值
+	  * 作用:当前的en_US,zh_CN,zh_TW环境与l1,l2,13的映射 
+	  * @param lan en_US、zh_CN、zh_TW 可以通过shr.getContext().locale或者window.contextLanguage获取
+	  * @return l1、l2、13
+	  * */
+	getFieldLangByContext: function (lan) {
+		var locale = 'zh_CN';
+		if(lan){
+			locale = lan;
+		}else if(shr.getContext().locale){
+			locale = shr.getContext().locale;
+		}
+		var each = null;
+		for (var i = 0, total = window.languageMappingList.length;i<total;i++){
+			each = window.languageMappingList[i];
+			if(each['locale'] == locale){
+				return each['lang'];
+			}
+		}
+		return 'l2';
+	},
+
+	/**
+	* 校验是否有xss注入
+	*/
+	verifyXss: function(targetVal,noVerify){
+		if(noVerify) return;
+		//过滤script|link|style|iframe标签
+		var reg1 = /<(script|link|style|iframe)(.|\n)*\/\1>\s*/ig;
+		//过滤on开头的标签属性
+		var reg2 = /\s*(ontoggle|ondragend|onunload|onsubmit|onscroll|onclick|onchange|onblur|onbefore|onafter|onactivate|onselect|onload|onkey|onfocus|onhelp|ondrop|onfinish|onerror|eval|expression|onclick|ondbclick|onmousedown|onmouseup|prompt)\s*=/ig;
+		//过滤src和href的伪协议
+		var reg3 = /\s*(href|src)\s*=/ig;
+		//过滤alert的伪协议
+		var reg4 = /\s*(alert|confirm(?!\s*ed))\s*/ig;
+		if(reg1.test(targetVal) || reg2.test(targetVal) || reg3.test(targetVal) || reg4.test(targetVal)){
+			return true;
+		}else{
+			return false;
+		}
+	},
+
+	/**
+	* xss过滤
+	*/
+	xssFilter: function(targetVal){
+		//XSS过滤
+		if((typeof targetVal) != 'string'){
+			return targetVal;
+		}
+
+		if(shr.verifyXss(targetVal)){
+			// 1.前端简单转义,主要对 < > 处理  2,服务端对特殊字符拦截
+			return $.htmlEncode(targetVal);
+		}else{
+			return targetVal;
+		}
+	},
+
+	/**
+	* 防止恶意url
+	*/
+	safeUrl: function(url, whiteChars){
+		var strRegex = '^((https|http|ftp)://)?'//(https或http或ftp):// 可有可无
+			+ '(([\\w_!~*\'()\\.&=+$%-]+: )?[\\w_!~*\'()\\.&=+$%-]+@)?' //ftp的user@  可有可无
+			+ '(([0-9]{1,3}\\.){3}[0-9]{1,3}' // IP形式的URL- 3位数字.3位数字.3位数字.3位数字
+			+ '|' // 允许IP和DOMAIN(域名) 
+			+ '(localhost)|'	//匹配localhost
+			+ '([\\w_!~*\'()-]+\\.)*' // 域名- 至少一个[英文或数字_!~*\'()-]加上.
+			+ '\\w+\\.' // 一级域名 -英文或数字  加上.
+			+ '[a-zA-Z]{1,6})' // 顶级域名- 1-6位英文 
+			+ '(:[0-9]{1,5})?' // 端口- :80 ,1-5位数字
+			+ '((/?)|' // url无参数结尾 - 斜杆或这没有
+			+ '(/[\\w_!~*\'()\\.;?:@&=+$,%#-]+)+/?)$';//请求参数结尾- 英文或数字和[]内的各种字符
+
+		var re=new RegExp(strRegex,'i');//i不区分大小写
+		//将url做uri转码后再匹配,解除请求参数中的中文和空字符影响
+		if (re.test(encodeURI(url))) {
+			return url;
+		}else {
+			return url;
+		}
+	},
+
+	/**
+	* 获取协议和域名
+	*/
+	getProtocolAndDomain: function (someWindow) {
+		var re = (/^((?:http|https)(?:\:\/\/)[^\/]+)/i);
+		return this.getCommonForUrl(someWindow, re);
+	},
+	
+	/**
+	* 获取协议
+	*/
+	getProtocol: function (someWindow) {
+		var _window = (someWindow || _top);
+		return _window.location.protocol;
+	},
+	
+	/**
+	* 获取域名
+	*/
+	getDomain: function (someWindow) {
+		var _window = (someWindow || _top);
+		return _window.location.host;
+	},
+	
+	/**
+	* 获取serviceId
+	*/
+	getServiceId: function (someWindow) {
+		var _win = _top;
+		if (someWindow) {
+			_win = someWindow;
+		}
+		return shr.getUrlRequestParam('serviceId', _win.location.href);
+	},
+	/**
+	 * F7请求头的特征值
+	 */
+	getXShrEncryptF7Value: function(){
+		return window.systemParamForShr['encryptDB']+'_'+window.systemParamForShr['encryptUser']+'_'+window.systemParamForShr['encryptContext'];
+	},
+	
+	/**
+	* 获取数据中心
+	*/
+	getDataCenter: function () {
+		var dataCenter = _top.localStorage.getItem('FAccountDCName');
+		if (dataCenter === 'undefined') {
+			return;
+		}
+		return dataCenter;
+	},
+	
+	/**
+	 * 提供通用的SessionStorage存储方法
+	 * 整个系统最好统一调用此方法
+	 * @param key 关键字 必须
+	 * @param billId 表单Id 可选
+	 * @param value 必须
+	 */
+	setSessionStorage:function(key,billId,value){
+		sessionStorage.setItem(this.genStorageKey(key,billId),value);
+	},
+	/**提供通用的SessionStorage获取方法
+	 * 整个系统最好统一调用此方法
+	 * @param key 关键字 必须
+	 * @param billId 表单Id 可选
+	 * @param value 必须
+	 */
+	getSessionStorage:function(key,billId){
+		return sessionStorage.getItem(this.genStorageKey(key,billId));
+	},
+	
+	/**
+	 * 提供通用的LocalStorage 存入方法
+	 * 整个系统最好统一调用此方法
+	 * @param key 关键字 必须
+	 * @param billId 表单Id 可选
+	 * @param value 必须
+	 */
+	setLocalStorage:function(key,billId,value){
+		localStorage.setItem(this.genStorageKey(key,billId),value);
+	},
+	
+	/**
+	 * 提供通用的LocalStorage 获取方法
+	 * 整个系统最好统一调用此方法
+	 * @param key 关键字 必须
+	 * @param billId 表单Id 可选
+	 */
+	getLocalStorage:function(key,billId){
+		return localStorage.getItem(this.genStorageKey(key,billId));
+	},
+	
+	/**
+	 * SessionStorage 或者 LocalStorage 的key的生成方式,以contextId+key[+单据id(可选)]
+	 */
+	genStorageKey:function(key,billId){
+		if(key == 'data-navigationData'){
+			return 'data-navigationData';
+		}
+		var key = window.systemParamForShr.encryptContext + '#' + key;
+		if(billId){
+			key += '#' + billId;
+		}
+		return key;
+	},
+	
+	/**
+	 * 提供通用的LocalStorage 值移除方法
+	 * 整个系统最好统一调用此方法
+	 * @param key 关键字 必须
+	 * @param billId 表单Id 可选
+	 */
+	removeLocalStorageItem:function(key,billId){
+		localStorage.removeItem(this.genStorageKey(key,billId));
+	},
+	/**
+	 * 提供通用的SessionStorage 值移除方法
+	 * 整个系统最好统一调用此方法
+	 * @param key 关键字 必须
+	 * @param billId 表单Id 可选
+	 */
+	removeSessionStorageItem:function(key,billId){
+		sessionStorage.removeItem(this.genStorageKey(key,billId));
+	},
+
+	/**
+	* 获取浏览器类型
+	*/
+	getBowserInfo : function(){
+		var Sys = {};
+		var ua = navigator.userAgent.toLowerCase();
+		var s;
+		(s = ua.match(/rv:([\d.]+)\) like gecko/)) ? Sys.ie = s[1] :
+		(s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] :
+		(s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] :
+		(s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] :
+		(s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] :
+		(s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;
+		
+		if (Sys.ie) return { browser : "IE" , version :Sys.ie}; 
+		if (Sys.firefox) return { browser : "Firefox" , version :Sys.firefox};
+		if (Sys.chrome) return { browser : "Chrome" , version :Sys.chrome };
+		if (Sys.opera) return { browser : "Opera" , version :Sys.opera };
+		if (Sys.safari) return { browser : "Safari" ,version : Sys.safari };
+	},
+	
+	/**
+	 *描述:ajax请求超时时间
+	 */
+	ajaxTimeout: 600000,
+	
+	/**
+	 * ajax请求时出现阻塞提示最小间隔时间
+	 */
+	blockMinTime: 100,
+	
+	dynamicURL: '/dynamic.do',
+	
+	openServiceURL: '/shr/msf/service.do',
+	getTreeDataURL: '/dynamic.do?method=getTreeData',
+	
+	/**
+	 * 描述:注册命名空间,并返回
+	 * @param {String} 名称空间路径
+	 */
+	registerNamespace : function(ns){
+		var nsArray = fullNS.split('.');
+		var sEval = "";
+		var sNS = "";
+		for (var i = 0; i < nsArray.length; i++) {
+			if (i != 0)
+				sNS += ".";
+			sNS += nsArray[i];
+			sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS
+					+ " = new Object();"
+		}
+		if (sEval != "")
+			return eval(sEval);
+	},
+	/**
+	 * 描述:shr 的js 类继承
+	 * @param {subClass} 当前类
+	 * @param {superClass} 需要继承的超类
+	 */
+	inherit : function(subClass, superClass) {
+		if(superClass==null) return ;
+		var Fun = function(){};//用一个空的函数作为中间缓冲,如果直接用父类的实例作为原型,可能有潜在问题,如计算量超大等
+		Fun.prototype = superClass.prototype;
+		subClass.prototype = new Fun();
+		subClass.prototype.constructor = subClass;
+
+		//提供 superClass 属性,这个属性可以弱化父类子类之间的耦合
+		//否则,在子类中调用父类的构造函数就需要指明父类,此时只需调用这个属性即可
+		subClass.superClass = superClass.prototype;
+		if(superClass.prototype.constructor == Object.prototype.constructor){
+			superClass.prototype.constructor = superClass;
+		}
+	},
+	/**
+	 * 描述:shr 的js 类定义
+	 * @param subClassName 当前类
+	 * @param superClass   超类
+	 * @param prototype 	     当前类体
+	 * @return 返回创建好的JS类
+	 */
+	defineClass:function(subClassName,superClass,prototype){
+		var clzPath=subClassName.substr(0,subClassName.lastIndexOf('.'));
+		var ns=Namespace.register(clzPath);
+		var subClass=eval(subClassName + "=function(){};");
+
+		shr.inherit(subClass,superClass);
+
+		for(var p in prototype){
+			eval(subClassName + ".prototype." + p.toString() + "=prototype." + p.toString());
+		}
+	},
+	/**
+	 * 描述: 创建对象
+	 * @param {clazz} 创建该类的对象
+	 */
+	createObject:function(clazz){
+		var obj=new clazz();
+		if(clazz.superClass!=null){
+			obj.superClass=clazz.superClass;
+		}
+		//对JS类中的方法 作AOP处理
+		shr.aspectClassFun(clazz,obj);
+		return obj;
+	},
+	/**
+	 * 描述:对JS类中的方法作AOP处理
+	 * @param {} url
+	 * @return {}
+	 */
+	aspectClassFun:function(clazz,object){
+		var clazz_temp=clazz;
+		while(clazz_temp!=null && clazz_temp!=undefined) {
+			for(var p in clazz_temp.prototype){
+				var methodName=p.toString();
+				var beforeMethodFun=p.toString() + "_before";
+				var afterMethodFun=p.toString() + "_after";
+				var aroundMethodFun=p.toString() + "_replace";
+				if(eval("object." + beforeMethodFun)!=null) {
+					shr.aspectBefore(object,p.toString(),eval("object." + beforeMethodFun));
+				}
+				if(eval("object." + afterMethodFun)!=null){
+					shr.aspectAfter(object,p.toString(),eval("object." + afterMethodFun));
+				}
+				if(eval("object." + aroundMethodFun)!=null){
+					shr.aspectAround(object,p.toString(),eval("object." + aroundMethodFun));
+				}
+			}
+			clazz_temp=clazz_temp.superClass;
+		}
+	},
+	/**
+	 * 描述:JS类方法调用代理
+	 * @param method 方法名称
+	 * @param clazz  JS类名称
+	 * @param obj	 调用对象
+	 */
+	proxyCall:function(methodName,objectName){
+		var fun=null;
+		if(objectName==null){
+			objectName="jsBinder";
+		}
+		if( typeof(methodName)=="object") {
+			fun=methodName;
+		}
+		else {
+			if(typeof(objectName)=="object"){
+				fun=eval(objectName[methodName]);
+			}
+			else {
+				fun=eval(objectName + "." + methodName);
+			}
+		}
+		if (!fun) {
+			return;
+		}
+		
+		var paramArray=[];
+		if(arguments.length>2) {
+			paramArray=new Array();
+			for(var nIndex=2;nIndex<arguments.length;nIndex++) {
+				paramArray.push(arguments[nIndex]);
+			}
+		}
+		fun.apply(objectName,paramArray);
+	},
+	
+	getCurrentViewPage: function(source) {
+		var viewPageManager = window.viewPageManager;
+		if (typeof(viewPageManager) == 'undefined') {
+			return null;
+		}
+		
+		if (typeof source == 'undefined' || source == '') {
+			return viewPageManager['emptyObject'];
+		}
+
+		var ui = viewPageManager[source];
+		if (ui) {
+			return ui;
+		}
+		
+		var $viewPage = $(source).closest('.view_mainPage'); 
+		if ($viewPage) {
+			var id = $viewPage.attr('id');
+			if ($.isEmptyObject(id)) {
+				id = 'emptyObject';
+			}
+			return viewPageManager[id];
+		} else {
+			return null; 
+		}
+	},
+	
+	registerViewPage: function(key, viewPage) {
+		if ($.isEmptyObject(key)) {
+			key = 'emptyObject';
+		}
+		
+		var viewPageManager = window.viewPageManager;
+		if (typeof(viewPageManager) == 'undefined') {
+			viewPageManager = {};
+			window.viewPageManager = viewPageManager;
+		}
+		viewPageManager[key] = viewPage;
+	},
+	
+	unRegisterViewPage: function(key) {
+		if ($.isEmptyObject(key)) {
+			key = 'emptyObject';
+		}
+		var viewPageManager = window.viewPageManager;
+		if (viewPageManager) {
+			delete viewPageManager[key];
+		}
+	},
+	
+	// 新增打开新窗口的方法,url需要调用者提供
+	openNew: function (url, someWindow) {
+		if (!someWindow) {
+			someWindow = _top;
+		}
+		void(someWindow.open(url));
+	},
+	//检测数组中是否包含某个字符串
+	arrayIndexOf: function(arr,key){
+		if(!Array.isArray(arr)){
+			return -1;
+		}
+		var bol = -1;
+		arr.forEach(function(item,index){
+			if(item === key){
+				bol = index;
+			}
+		});
+		return bol;
+	},
+	redirect: function(url, params) {
+		var newUrl = url;
+
+		if (params && typeof(params) == "object") {
+			if (newUrl.indexOf('?') == -1) {
+				newUrl = newUrl + '?';
+			}
+			if (newUrl.charAt(newUrl.length - 1) != '?') {
+				newUrl = newUrl + '&';
+			}
+			newUrl = newUrl + $.param(params);
+		}
+
+		shr.hideErrorMsg();
+		document.location.replace(newUrl);
+	},
+	
+	urlLocate: function(url, params) {
+		var newUrl = url;
+
+		if (params && typeof(params) == "object") {
+			if (newUrl.indexOf('?') == -1) {
+				newUrl = newUrl + '?';
+			}
+			if (newUrl.charAt(newUrl.length - 1) != '?') {
+				newUrl = newUrl + '&';
+			}
+			newUrl = newUrl + $.param(params);
+		}
+
+		shr.hideErrorMsg();
+		document.location.href = newUrl;
+	},
+	
+	assembleModel: function(fields, context, uuid) {
+		var model = new Object();
+		if (fields) {
+			var fieldName, value;
+			for (var i = 0, length = fields.length; i < length; i++) {
+				fieldName = fields[i];
+				if(!this.isNoEditPermField(fieldName)){ //无编辑权限字段不参与提交
+					value = this.getFieldValue(fieldName, uuid);
+					this.setModelFieldValue(model, fieldName, value);
+				}
+			}
+		}
+		
+		var uiObject = shr.getCurrentViewPage(uuid);
+		if (uiObject) {
+			// add id field
+			model.id = uiObject.billId;
+			// add entity name
+			model._entityName = uiObject.view_model;
+		}
+		
+		return model;
+	},
+
+	assembleTemplateModel: function(fields, context, uuid) {
+		var model = new Object();
+		if (fields) {
+			var fieldName, value;
+			for (var i = 0, length = fields.length; i < length; i++) {
+				fieldName = fields[i];
+				value = this.getTemplateFieldValue(fieldName, uuid);
+				
+				this.setTamplateModelFieldValue(model, fieldName, value);
+			}
+		}
+		
+		return model;
+	},
+
+	getTemplateFieldValue: function(fieldName, uuid, context) {
+		var id = this.getRealId(fieldName, uuid);
+		var $element = $('#' + id, context);
+		var value;
+		var ctrlrole = $element.attr('ctrlrole');
+		var isToTemplate = $element.attr('istotemplate');
+		if(isToTemplate == 'false') return;
+		if(ctrlrole) {
+			ctrlrole = ctrlrole.toLowerCase();
+		}
+		if (ctrlrole == 'checkbox') {
+			value = $element.shrCheckbox('getValue');
+		}else if(ctrlrole == 'text') {
+			value = $element.shrTextField('getValue');
+		}else if(ctrlrole == 'promptbox') {
+			value = $element.shrPromptBox('getValue');
+		}else if(ctrlrole == 'datepicker') {
+			value = $element.shrDatePicker('getValue');
+		}else if(ctrlrole == 'datetimepicker') {
+			value = $element.shrDateTimePicker('getValue');
+		}else if(ctrlrole == 'textarea') {
+			value = $element.shrTextarea('getValue');
+		}else if(ctrlrole == 'radio') {
+			value = $element.shrRadio('getValue');
+		}else if(ctrlrole == 'select') {
+			value = $element.shrSelect('getValue');
+		}
+
+		return value;
+	},
+
+	/* 
+		* url 目标url 
+		* arg 需要替换的参数名称 
+		* arg_val 替换后的参数的值 
+		* return url 参数替换后的url 
+		*/
+	changeURLArg: function (url, arg, arg_val) {
+		var pattern = arg + '=([^&]*)';
+		var replaceText = arg + '=' + arg_val;
+		if (url.match(pattern)) {
+			var tmp = '/(' + arg + '=)([^&]*)/gi';
+			tmp = url.replace(eval(tmp), replaceText);
+			return tmp;
+		} else {
+			if (url.match('[\?]')) {
+				return url + '&' + replaceText;
+			} else {
+				return url + '?' + replaceText;
+			}
+		}
+		return url + '\n' + arg + '\n' + arg_val;
+	},	
+	
+	convertId: function(id) {
+		return id.replace(/\./g, '_');
+	},
+	
+	strToEscape: function(str) {
+		return str.replace(/&/g, '&amp;');
+	},
+	
+	htmlEncode: function(value) {
+		return $('<div/>').text(value).html();
+	},
+	
+	htmlDecode: function(value) {
+		return $('<div/>').html(value).text();
+	},
+	/**
+	 * 转义符换成普通字符
+	 */
+	strEscape: function (str) {
+		var arrEntities = { 'lt': '<', 'gt': '>', 'nbsp': ' ', 'amp': '&', 'quot': '"' };
+		var result = '';
+		if (str) {
+			result = str.replace(/&(lt|gt|nbsp|amp|quot);/ig, function (all, t) {
+				return arrEntities[t];
+			});
+		}
+		return result;
+	},
+
+	getRealId: function(id, uuid) {
+		id = this.convertId(id);
+		if (uuid) {
+			id = id + uuid;
+		}
+		return id;
+	},
+	
+	getValueByRole: function (role, $element, id, context, isFromWF) {
+		var value;
+		var handler = {
+			'checkbox': function(){
+				var value;
+				if (typeof $element.attr("checked") == 'undefined') {
+					value = 0;
+				} else {
+					var _v_ = $element.shrCheckbox('getValue');
+					if(_v_){
+						value= 1;
+					}else{
+						value = 0;
+					}
+				}
+				return value;
+			},
+			'editGrid': function () {
+				var collection = $element.jqGrid('getAllPageData');
+				return collection;
+			},
+			'shrMultiLangBox': function () {
+				return $element.shrMultiLangBox('getTransformedValue');
+			},			
+			'datetimepicker': function(){
+				return $element.shrDateTimePicker('getValue');
+			},
+			'numberField': function () {
+				return $element.shrNumberField('getValue');
+			},
+			'shrFieldDisplay': function() {
+				return $element.shrFieldDisplay('getOriginalValue') || $element.shrFieldDisplay('getValue');
+			}
+		}
+		//兼容ie下select控件'01'value值会被浏览器改变为'1'
+        if(shr.getBowserInfo().browser == 'IE'){
+            handler.select = function() {
+				return $element.shrSelect('getValue').value;
+			}
+        }
+
+		//查看状态下的分录role为grid
+		if(role === 'grid' && _self.getOperateState() === 'VIEW'){
+			role = 'editGrid';
+		}
+		if (handler.hasOwnProperty(role)) {
+			value = handler[role]();
+		} else {
+			value = shr.createObject(shr.framework.Widget).getInputValue(id, context, isFromWF);
+		}
+		return value;
+	},
+	
+	getFieldValue: function (fieldName, uuid, context) {
+		var id = this.getRealId(fieldName, uuid);
+		var $element = $('#' + id, context);
+		var role = $element.attr('ctrlrole');
+		var value = this.getValueByRole(role, $element, id, context,false);
+		return value;
+	},
+
+	/**
+	 * 根据字段id和方法名来执行方法
+	 * 使用该方法的前提是具有ctrlrole属性,并且组件中有传入的方法名对应的方法
+	 * fieldId:是字段的id
+	 * methodName:方法名
+	 * arguments:执行的方法要传递的参数
+	 * context:上下文,可选参数,如果某些iframe中获取不到元素,则需要传上下文
+	 */
+	execByFieldIdAndMethod: function (fieldId, methodName, _arguments, context) {
+		var id = this.getRealId(fieldId);
+		var $element = $('#' + id, context);
+		try {
+			if ($element.length == 0) {
+				throw 'can not find the suitable element';
+			}
+			var ctrlrole = $element.attr('ctrlrole');
+			if (!ctrlrole) {
+				throw 'this elment has no ctrlrole attribute'
+			}
+			var componentName = this.getComponentNameByCtrlrole(ctrlrole);
+			if (_arguments) {
+				return $element[componentName](methodName, _arguments);
+			}
+			return $element[componentName](methodName);
+		} catch (e) {
+			console.error(e);
+		}
+	},
+	
+	/**
+	 * 根据字段id和方法名来执行方法
+	 * 使用该方法的前提是具有ctrlrole属性,并且组件中有传入的方法名对应的方法
+	 * $element:是jquery对象
+	 * methodName:方法名
+	 * arguments:执行的方法要传递的参数
+	 */
+	execByElementAndMethod: function ($element, methodName, _arguments) {
+		try {
+			if ($element.length == 0) {
+				throw 'can not find the suitable element';
+			}
+			var ctrlrole = $element.attr('ctrlrole');
+			if (!ctrlrole) {
+				throw 'this elment has no ctrlrole attribute'
+			}
+			var componentName = this.getComponentNameByCtrlrole(ctrlrole);
+			if (_arguments) {
+				return $element[componentName](methodName, _arguments);
+			}
+			return $element[componentName](methodName);
+		} catch (e) {
+			console.error(e);
+		}
+	},
+
+	/**
+	 * 根据ctrlrole获取对应的组件名称
+	 */
+	getComponentNameByCtrlrole: function (ctrlrole) {
+		var componentName;
+		var mapping = {
+			'checkbox': 'shrCheckbox',
+			'radio':'shrRadio',
+			'select':'shrSelect',
+			'text':'shrTextField',
+			'shrSetIndexCode':'shrSetIndexCode',
+			'shrDetailTips':'shrDetailTips',
+			'shrFastFilter':'shrFastFilter',
+			'shrGridConfig':'shrGridConfig',
+			'shrIconUpload':'shrIconUpload',
+			'intlCell':'shrIntlCell',
+			'shrMessageTips':'shrMessageTips',
+			'multiSelect':'shrMultiSelect',
+			'shrSaveFilterSchemeDialog':'shrSaveFilterSchemeDialog',
+			'shrSpreadChooseAll':'shrSpreadChooseAll',
+			'shrTableDialog':'shrTableDialog',
+			'textarea':'shrTextarea',	
+			'shrMultiLangBox': 'shrMultiLangBox',
+			'datetimepicker': 'shrDateTimePicker',
+			'dateSpanPicker':'shrDateSpanPicker',
+			'numberField': 'shrNumberField',
+			'shrFieldDisplay': 'shrFieldDisplay',
+			'promptBox':'shrPromptBox',
+		}
+		if (mapping.hasOwnProperty(ctrlrole)) {
+			componentName = mapping[ctrlrole];
+		}else{
+			throw 'can not find the suitable component';
+		}
+		return componentName;
+	},
+	
+	setModelFieldValue: function(model, fieldName, value) {
+		if (fieldName.indexOf('.') != -1) {
+			var fields = fieldName.split('.');
+			var subModel;
+			for (var i = 0, length = fields.length - 1; i < length; i++) {
+				fieldName = fields[i];
+				subModel = model[fieldName];
+				if (typeof subModel == 'undefined') {
+					subModel = {};
+					model[fieldName] = subModel;
+				}
+				model = subModel;
+			}
+			fieldName = fields[fields.length - 1];
+		}
+		model[fieldName] = value;
+	},
+
+	setTamplateModelFieldValue: function(model, fieldName, value) {
+		if (fieldName.indexOf('.') != -1) {
+			var fields = fieldName.split('.');
+			fieldName = fields.join('_');
+		}
+		model[fieldName] = value;
+	},
+	/**
+     * 增加表单数据进行加密传输
+     * 表单数据有些格式数据会被防火墙或者网络安全策略拦截,导致保存失败
+     * @param data
+     */
+	 encryptFormModelData:function(data){
+    	var option={model:data.model};
+		var encryptObj = shr.encryptForObj(option, null);
+		data.model = encryptObj.obj['model'];
+		data.encryptKeys='encryptKeys:' + $.allEncrypt('model');
+    },
+	addEncryptParams:function(postData,key,value){
+		var option ={};
+		option[key]=value;
+		var encryptObj = $.encryptForObj(option, null);
+		$.extend(postData, encryptObj.obj);
+		if (!postData.encryptKeys){
+			postData.encryptKeys = encryptObj.keyStr;
+		} else if(shr.arrayIndexOf(postData.encryptKeys.split(','),encryptObj.keyStr) == -1 && key != 'encryptKeys') {
+			postData.encryptKeys = postData.encryptKeys+','+ encryptObj.keyStr;
+		}
+	},
+	/**
+     * 增加接口数据进行加密传输
+     * @param postData
+     */
+	addEncryptPostData: function(postData,isAllEncrypt){
+		if(postData){
+			var encryptKeysStr = postData.encryptKeys;
+			var needEncryptKey = shr.needEncryptKey();
+			if(encryptKeysStr && encryptKeysStr.indexOf('encryptKeys:') != -1){
+				encryptKeysStr = $.allDecrypt(encryptKeysStr.substring(12,encryptKeysStr.length));
+			}else if(encryptKeysStr && encryptKeysStr.indexOf('encryptKeys:') < 0){
+				var optEncryptKeysArray = encryptKeysStr.split(',');
+				optEncryptKeysArray.forEach(function(item){
+					if(shr.arrayIndexOf(needEncryptKey,item) < 0){
+						needEncryptKey.push(item);
+					}
+				});
+			}
+			if(postData.encryptKeys && encryptKeysStr){
+				var encryptKeys = encryptKeysStr;
+				for(var key in postData){
+					if(shr.arrayIndexOf(encryptKeys.split(','),key) != -1 && key != 'encryptKeys'){
+						try {
+							if($.allDecrypt(postData[key])){
+								postData[key] = $.allDecrypt(postData[key]);
+							}
+						} catch (error) {}
+					}
+				}
+				postData.encryptKeys = '';
+			}else if(!postData.encryptKeys){
+				postData.encryptKeys = '';
+			}
+		}
+		for(var key in postData){
+			if(postData[key] && !Array.isArray(postData[key])){
+				if(!isAllEncrypt && shr.arrayIndexOf(needEncryptKey,key) >= 0){
+					shr.addEncryptParams(postData, key, postData[key]);
+				}else if(isAllEncrypt && shr.arrayIndexOf(['method','serviceName','uipk','encryptKeys'],key) < 0){
+					shr.addEncryptParams(postData, key, postData[key]);
+				}
+			}
+		}
+		if(postData.encryptKeys){
+			postData.encryptKeys = 'encryptKeys:' + $.allEncrypt(postData.encryptKeys);
+		}
+	},
+	needEncryptKey: function(){
+		return ['filterItems','filter',
+		'fastFilterItems','sorterItems','advancedFilter','custom_params',
+		'tree_params','columnModel','queryMode','exportPrivteProtected',
+		'keyField','dataPerm','fieldName_key','searchFilterItems','categoryFilter',
+		'contractFilter','dynamicSql','model','order'];
+	},
+	//将url参数转换成对象类型,并且参数值做了 decodeURIComponent,所以 仅供与dealPostParam去使用,别的地方不可以使用
+	urlParamsToObject: function(url) {
+		var queryString = url.split('?').length > 1?url.split('?')[1]:'';
+		var paramsArr = queryString.split('&');
+		var paramObj = {};
+	  
+		for ( var i = 0; i < paramsArr.length; i++) {
+			var pos = paramsArr[i].indexOf('=');// 查找name=value
+			if (pos == -1) continue;// 如果没有找到就跳过
+			var argname = paramsArr[i].substring(0, pos);// 提取name
+			var value = paramsArr[i].substring(pos + 1);// 提取value
+			try {
+				paramObj[argname] = decodeURIComponent(value);
+			} catch (error) {
+				paramObj[argname] = value;
+			}
+		}
+		return paramObj;
+	},
+	dealPostParam: function(option){
+		var isHasKey = false;
+		var isUrlHasKey = false;
+		if(option.data){
+			if(option.data.noEncrypt) return;
+			var encryptKey = shr.needEncryptKey();
+			var optEncryptKeys = option.data.encryptKeys;
+			if(optEncryptKeys && optEncryptKeys.indexOf('encryptKeys:') < 0){
+				var optEncryptKeysArray = optEncryptKeys.split(',');
+				optEncryptKeysArray.forEach(function(item){
+					if(shr.arrayIndexOf(shr.needEncryptKey(),item) < 0){
+						encryptKey.push(item);
+					}
+				});
+			}
+			for(var item in option.data){
+				if(shr.arrayIndexOf(encryptKey,item) >= 0){
+					isHasKey = true;
+				}
+			}
+			if(option.url.indexOf('/shr/dynamic.do') >= 0){
+				encryptKey.forEach(function(item){
+					if(option.url.indexOf(item) >= 0){
+						isUrlHasKey = true;
+					}
+				});
+			}
+		}
+		
+		if(option.url.indexOf('getListData') >= 0 || isUrlHasKey){
+			var paramObj = shr.urlParamsToObject(option.url);
+			option.url = option.url.split('?')[0];
+			$.extend(option.data,paramObj);
+			shr.addEncryptPostData(option.data);
+			option.type = 'POST';
+		}else if(option.data && option.data.method == 'callService'){
+			shr.addEncryptPostData(option.data,true);
+		}else if(option.data && option.data.method == 'exportToExcel'
+		|| option.data && option.data.method ==  'newTask'){
+			shr.addEncryptPostData(option.data);
+		}else if(option.data && option.data.method == 'getCompareResults'){
+			option.data.a = $.allEncrypt(option.data.a);
+			option.data.b = $.allEncrypt(option.data.b);
+			option.data.encryptKeys='encryptKeys:' + $.allEncrypt('a,b');
+		}else if(isHasKey){
+			shr.addEncryptPostData(option.data);
+		}
+	},
+	doAction: function(option) {
+		//shr.dealPostParam会修改options,防止影响外部参数引用
+		var option = $.extend(true,{},option);
+		// disible button
+		if (option.target) {
+			var $target = $(option.target);
+			if ($target.is('button')) {
+				$target.addClass('shrbtn-disabled');
+				$target.attr('disabled', 'disabled');
+			}
+		}
+		
+		//拼接请求URL
+		if(option.url == null){
+			if(option.param != null) {
+				option.url = "?method=" + option.action + "&" + option.param;
+			}
+			else {
+				option.url="?method=" + option.action;
+			}
+		}
+		
+		//默认传输格式为json
+		if(option.dataType==null){
+			option.dataType = "json";
+		}
+
+		//默认请求超时时间为ajaxTimeout
+		if(option.timeout==null) {
+			option.timeout=this.ajaxTimeout;
+		}
+
+		//默认表单名称为form
+		/*if(option.form==null){
+			option.form="form";
+		}*/
+
+		//默认提交方式为异步方式
+		if(option.async==null){
+			option.async=true;
+		}
+		
+		//默认阻塞界面
+		if(option.showBlock == null){
+			option.showBlock = true;
+		}
+		// add check data
+		this._addCommonExtParam( option );
+
+		this.dealPostParam( option );
+		//var timer=null;
+		var requestOption = {
+			url: option.url,
+			data: option.data,
+			/* 默认ajax数据交互格式为json */
+			dataType: option.dataType,
+			type: option.type,
+			async: option.async,
+			timeout: option.timeout,
+			success: function(obj, textStatus) {
+				
+				if (option.showBlock == true) {
+					clearTimeout(timer);
+					$.block.hide();
+				}	
+				
+				if(obj == null){
+					option.success(null);
+					return ;
+				}
+				if (option.dataType == 'json') {
+					//自行处理返回
+					if(option.ignoreHandlerMessage && option.ignoreHandlerMessage == true){
+						option.success(obj, textStatus);
+						return;
+					}
+					if(obj.result == "success") {
+						var message = obj.successMessage;
+						if (!message) {
+							message = $.shrI18n.common.tips.operateSuccess;
+						}
+						shr.showSuccess({
+							message: message,
+							hideAfter: 3
+						});
+						//如果是portal跳转过来,top为0,否则为60px
+						if (isFromPortal()) {
+							$("ul[class='messenger messenger-fixed messenger-theme-air messenger-on-top messenger-theme-future']").css('top', 0);
+						} else {
+							$("ul[class='messenger messenger-fixed messenger-theme-air messenger-on-top messenger-theme-future']").css('top', '60px');
+						}
+						//调用回调函数
+						if(option.success) {
+							option.success(obj.data, obj.uiItems, obj.script);
+						}
+					} else if(obj.result == "error") {
+						var message = obj.summary;
+						// if (!$.isEmptyObject(obj.detailInfo)) {
+						// 	message = message + '<br>' + obj.detailInfo;
+						// }
+						if (!message) {
+							message = $.shrI18n.common.tips.operateFail;
+						}
+						shr.showError({message: message});
+						//调用回调函数
+						if(option.error) {
+							option.error(obj.data, obj.uiItems, obj.script);
+						}
+					}
+				} else {
+					if(option.success != null) {
+						shr.showInfo({
+							message: $.shrI18n.common.tips.operateSuccess,
+							hideAfter: 3
+						});
+						shr.stopAllMask();
+						//调用回调函数
+						if(option.success) {
+							option.success(obj);
+						}
+					}
+				}
+			},
+			error:function(response, textStatus, errorThrown) {
+				return shr.handleError(option, response, textStatus, errorThrown);
+			},
+            complete:function(jqXHR, textStatus){
+                if(option.complete && waf.isFunction(option.complete)){
+                    option.complete.call(this, jqXHR, textStatus);
+                }
+				/*if (option.showBlock == true) {
+					clearTimeout(timer);
+					$.block.hide();
+				}*/
+        		if (option.target) {
+        			var $target = $(option.target);
+        			if ($target.is('button')) {
+        				$target.removeClass('shrbtn-disabled');
+        				$target.removeAttr('disabled');
+        			}
+        		}
+            }
+		};
+
+		var messageOptions = {
+			//successMessage : '操作成功!',
+			errorMessage : $.shrI18n.common.tips.operateFail,
+			progressMessage : $.shrI18n.common.tips.operating,
+			showCloseButton: true,
+			singleton: true,
+			hideAfter: null
+		};
+		shr.msgHideAll();
+		
+		//锁定BODY
+		if (option.showBlock == true) {
+			/*$.block.show({
+				text: '正在执行,请稍候...'
+			});*/
+			timer = setTimeout(function() {
+				$.block.show({
+					text: $.shrI18n.common.loadingText.runningPlsWait
+				});
+			}, shr.blockMinTime);
+		}
+		
+		_top.Messenger().run(messageOptions, requestOption);
+		
+		/*//锁定BODY
+		if(option.showBlock==true){
+			timer=setTimeout(function(){
+				waf.block.show({text:waf.localeResourceObj.AJAX_ASYNC_BLOCK_INFO});
+			},
+			500);
+		}*/
+
+		/*报出提交事件 */
+        /*$('#' + option.form).trigger("onSubmit");
+		 提交 
+		$('#' + option.form).ajaxSubmit(requestOption);*/
+	},
+	//检测数组中是否包含某个字符串
+	arrayIndexOf: function(arr,key){
+		if(!Array.isArray(arr)){
+			return -1;
+		}
+		var bol = -1;
+		arr.forEach(function(item,index){
+			if(item === key){
+				bol = index;
+			}
+		});
+		return bol;
+	},
+	/**
+	 * 判断是否是一个json
+	 */
+	isJSON: function(str) {
+		if (typeof str == 'string') {
+			try {
+				var obj = JSON.parse(str);
+				if(typeof obj == 'object' && obj ){
+					return true;
+				}else{
+					return false;
+				}
+			} catch(e) {
+				return false;
+			}
+		}
+	},
+	doWithBatchAction: function(option) {
+		//shr.dealPostParam会修改options,防止影响外部参数引用
+		var option = $.extend(true,{},option);
+
+		// disible button
+		if (option.target) {
+			var $target = $(option.target);
+			if ($target.is('button')) {
+				$target.addClass('shrbtn-disabled');
+				$target.attr('disabled', 'disabled');
+			}
+		}
+		
+		//拼接请求URL
+		if(option.url == null){
+			if(option.param != null) {
+				option.url = "?method=" + option.action + "&" + option.param;
+			}
+			else {
+				option.url="?method=" + option.action;
+			}
+		}
+		
+		//默认传输格式为json
+		if(option.dataType==null){
+			option.dataType = "json";
+		}
+
+		//默认请求超时时间为ajaxTimeout
+		if(option.timeout==null) {
+			option.timeout=this.ajaxTimeout;
+		}
+
+		//默认表单名称为form
+		/*if(option.form==null){
+			option.form="form";
+		}*/
+
+		//默认提交方式为异步方式
+		if(option.async==null){
+			option.async=true;
+		}
+		
+		//默认阻塞界面
+		if(option.showBlock == null){
+			option.showBlock = true;
+		}
+		// add check data
+		this._addCommonExtParam( option );
+
+		shr.dealPostParam( option );
+		//var timer=null;
+		var requestOption = {
+			url: option.url,
+			data: option.data,
+			/* 默认ajax数据交互格式为json */
+			dataType: option.dataType,
+			type: option.type,
+			async: option.async,
+			timeout: option.timeout,
+			success: function(obj, textStatus) {
+				
+				if (option.showBlock == true) {
+					clearTimeout(timer);
+					$.block.hide();
+				}	
+				
+				if(obj == null){
+					option.success(null);
+					return ;
+				}
+				if (option.dataType == 'json') {
+					if(obj.result == "success") {
+						// var message = obj.successMessage;
+						// if (!message) {
+						// 	message = '操作成功!';
+						// }
+						// shr.showInfo({
+						// 	message: message,
+						// 	hideAfter: 3
+						// });
+						//调用回调函数
+						if(option.success) {
+							option.success(obj.data, obj.uiItems, obj.script);
+						}
+					} else if(obj.result == "error") {
+						var message = obj.summary;
+						// if (!$.isEmptyObject(obj.detailInfo)) {
+						// 	message = message + '<br>' + obj.detailInfo;
+						// }
+						if (!message) {
+							message = $.shrI18n.common.tips.operateFail;
+						}
+						shr.showError({message: message});
+						//调用回调函数
+						if(option.error) {
+							option.error(obj.data, obj.uiItems, obj.script);
+						}
+					}
+				} else {
+					if(option.success != null) {
+						// shr.showInfo({
+						// 	message: "操作成功!",
+						// 	hideAfter: 3
+						// });
+						//调用回调函数
+						if(option.success) {
+							option.success(obj);
+						}
+					}
+				}
+			},
+			error:function(response, textStatus, errorThrown) {
+				return shr.handleError(option, response, textStatus, errorThrown);
+			},
+            complete:function(jqXHR, textStatus){
+                if(option.complete && waf.isFunction(option.complete)){
+                    option.complete.call(this, jqXHR, textStatus);
+                }
+				/*if (option.showBlock == true) {
+					clearTimeout(timer);
+					$.block.hide();
+				}*/
+        		if (option.target) {
+        			var $target = $(option.target);
+        			if ($target.is('button')) {
+        				$target.removeClass('shrbtn-disabled');
+        				$target.removeAttr('disabled');
+        			}
+        		}
+            }
+		};
+
+		var messageOptions = {
+			//successMessage : '操作成功!',
+			errorMessage : $.shrI18n.common.tips.operateFail,
+			progressMessage : $.shrI18n.common.tips.operating,
+			showCloseButton: true,
+			singleton: true,
+			hideAfter: null
+		};
+		shr.msgHideAll();
+		
+		//锁定BODY
+		if (option.showBlock == true) {
+			/*$.block.show({
+				text: '正在执行,请稍候...'
+			});*/
+			timer = setTimeout(function() {
+				$.block.show({
+					text: $.shrI18n.common.loadingText.runningPlsWait
+				});
+			}, shr.blockMinTime);
+		}
+		
+		var messageFun;
+		if($.isFunction(_top.Messenger)){
+			messageFun = _top.Messenger();
+		}else{
+			messageFun = Messenger();
+		}
+		messageFun.run(messageOptions, requestOption);
+		
+		/*//锁定BODY
+		if(option.showBlock==true){
+			timer=setTimeout(function(){
+				waf.block.show({text:waf.localeResourceObj.AJAX_ASYNC_BLOCK_INFO});
+			},
+			500);
+		}*/
+
+		/*报出提交事件 */
+        /*$('#' + option.form).trigger("onSubmit");
+		 提交 
+		$('#' + option.form).ajaxSubmit(requestOption);*/
+	},
+	/**
+	*此请求,要求success函数一定要进行回调重写
+	*/
+	doAjaxNeedSuccess: function(option) {
+		option.successResultSelfHandler = true;
+		return $.doAjax(option);
+	},
+
+	doAjax: function(option) {
+		//拼接请求URL
+		if(option.url == null && option.action){
+			if(option.param != null) {
+				option.url = "?method=" + option.action + "&" + option.param;
+			} else {
+				option.url= "?method=" + option.action;
+			}
+		}
+		if (option.data && !(option.data.method) && option.action) {
+			option.data.method = option.action;
+		}
+		
+		//默认传输格式为json
+		if(option.dataType==null){
+			option.dataType = "json";
+		}
+
+		//默认请求超时时间为ajaxTimeout
+		if(option.timeout==null) {
+			option.timeout=this.ajaxTimeout;
+		}
+
+		//默认表单名称为form
+		/*if(option.form==null){
+			option.form="form";
+		}*/
+
+		//默认提交方式为异步方式
+		if(option.async==null){
+			option.async=true;
+		}
+		
+		//默认阻塞界面
+		/*if(option.showBlock==null){
+			option.showBlock = true;
+		}*/
+		// add check data
+		this._addCommonExtParam( option );
+
+		//var timer=null;
+		var requestOption = {
+			url: option.url,
+			data: option.data,
+			/* 默认ajax数据交互格式为json */
+			dataType: option.dataType,
+			type: option.type,
+			async: option.async,
+			timeout: option.timeout,
+			error: function(response, textStatus, errorThrown) {
+				if(option.error && $.isFunction(option.error)){
+                    return option.error.call(this, response, textStatus, errorThrown);
+                } else {
+                	return shr.handleError(option, response, textStatus, errorThrown);
+                }
+			},
+            complete: function(jqXHR, textStatus){
+                if(option.complete && $.isFunction(option.complete)){
+                    option.complete.call(this, jqXHR, textStatus);
+                }
+				if (option.showBlock == true) {
+					clearTimeout(timer);
+					$.block.hide();
+				}
+            }
+		};
+		
+		if (option.success) {
+			requestOption.success = function(obj, textStatus) {
+				//解锁BODY
+				if (option.showBlock == true) {
+					clearTimeout(timer);
+					$.block.hide();
+				}
+				
+				if(obj == null){
+					option.success(null);
+					return ;
+				}
+				
+				if(option.successResultSelfHandler === true){
+					option.success(obj, textStatus);
+					return;
+				}
+
+				if (option.dataType == 'json') {
+					if(obj.result == "success") {
+						if(option.success != null) {
+							//调用回调函数
+							option.success(obj.data, obj.uiItems, obj.script);
+						}
+					} else if(obj.result == "error") {
+						//$('body').html(obj);
+						//var message = obj.summary + '<br>' + obj.detailInfo;
+						var message = obj.summary;
+						shr.showError({message: message});
+						if(option.error != null) {
+							option.error(obj);
+						}
+					} else {
+						option.success(obj);
+					}
+				} else {
+					if(option.success != null) {
+						//调用回调函数
+						option.success(obj);
+					}
+				}
+			};
+		}
+
+		//锁定BODY
+		if (option.showBlock == true) {
+			timer = setTimeout(function() {
+				$.block.show({
+					text: $.shrI18n.common.loadingText.runningPlsWait
+				});
+			}, shr.blockMinTime);
+		}		
+		
+
+		if(option.contentType){
+			requestOption.contentType = option.contentType;
+		}
+		if(option.headers){
+			requestOption.headers = option.headers;
+		}
+
+		return $.ajax(requestOption);
+	},
+	
+	/**
+	 * 判断是否是session失效,重定向到登录页面
+	 */
+	checkIsRedirectLogin: function(response) {
+		var content;
+		if (typeof response == 'string') {
+			content = response;
+		} else if (typeof response == 'object' && response.responseText) {
+			content = response.responseText;
+		}
+		
+		if (content && content.indexOf('action="login?') != -1) {
+			shr.redirectLogin();
+			return true;
+		}
+		return false;
+	},
+	
+	/**
+	 * 重定向登录页面
+	 */
+	redirectLogin: function() {
+		_top.location.href = _top.location.href
+	},
+	
+	doGet: function(option) {
+		//拼接请求URL
+		if(option.url == null){
+			if(option.param != null) {
+				option.url = "?method=" + option.action + "&" + option.param;
+			}
+			else {
+				option.url="?method=" + option.action;
+			}
+		}
+		
+		//默认传输格式为json
+		if(option.dataType==null){
+			option.dataType = "html";
+		}
+
+		//默认请求超时时间为ajaxTimeout
+		if(option.timeout==null) {
+			option.timeout=this.ajaxTimeout;
+		}
+
+		//默认提交方式为异步方式
+		if(option.async==null){
+			option.async = true;
+		}
+		//添加shruicode
+		this._addShruicode( option.data );
+		//var timer=null;
+		var url = option.url;
+		var requestOption = {
+			url: option.url,
+			data: option.data,
+			/* 默认ajax数据交互格式为json */
+			dataType: option.dataType,
+			type: option.type,
+			async: option.async,
+			timeout: option.timeout,
+			success: function(obj, textStatus) {
+				//obj返回可能为空
+				var $response;
+				try {
+					$response = $(obj);
+				}catch (e){
+					console.log('response data exception: null data response.');
+				}
+				
+				if ($response && $response.filter('meta[content=error-page]').length > 0) {
+					var regexp1 = /<script .*?src=\"(.+)\"><\/script>/g;
+					var regexp2 = /<script>([\s\S]*)<\/script>/g;
+					var codes1 = [];
+					var result = obj.replace(regexp1,function(script,code){
+						codes1.push(code);
+						return '';
+					});
+					
+					var codes2 = [];
+					result = obj.replace(regexp2,function(script,code){
+						codes2.push(code);
+						return '';
+					});
+					var container = _top.document.body;
+					container.innerHTML = result;
+					
+					codes1.forEach(function(code){
+						var script = document.createElement('script');
+						script.type = 'text/javascript';
+						script.src = code;
+						container.appendChild(script);
+					});
+					codes2.forEach(function(code){
+						var script = document.createElement('script');
+						script.innerHTML = code;
+						container.appendChild(script);
+					});
+					return;
+				}
+				
+				if(obj == null){
+					option.success(null);
+					return ;
+				}
+				
+				if(option.success != null) {
+					//调用回调函数
+					option.success(obj);
+				}
+			},
+			error:function(response, textStatus, errorThrown) {
+				return shr.handleError(option, response, textStatus, errorThrown);
+			},
+            complete:function(jqXHR, textStatus){
+            	// TODO 稍后补充
+            }
+		};
+
+		/*var messageOptions = {
+			errorMessage : '操作失败!',
+			//progressMessage : '操作中',
+			showCloseButton: true,
+			singleton: true,
+			hideAfter: null
+		};
+		//shr.msgHideAll();
+		_top.Messenger().run(messageOptions, requestOption);*/
+		$.ajax(requestOption);
+	},
+	
+	handleError: function(option, response, textStatus, errorThrown) {
+		// 同一用户登录,踢出的时候,还有未完成的ajax请求,返回退出页面这里,特殊处理
+		if((response.responseText && response.responseText.indexOf("window.logoutHR()") !=-1 ) || (response.responseText && response.responseText.indexOf("#reloadtips") !=-1)){
+			window.location = '/shr/reloadtips.jsp';
+			return ;
+		}
+		if (shr.checkIsRedirectLogin(response)) {
+			return false;
+		}
+		
+		if (option.showBlock == true) {
+			clearTimeout(timer);
+			$.block.hide();
+		}	
+		
+		var message;
+		if ((response != null ? response.status : void 0) === 404) {
+			message = $.shrI18n.common.loadingText.pageNotFound;
+		} else {
+			var nExMsgStartIdx = response.responseText && response.responseText.indexOf("<title>");
+			var nExMsgEndIdx = response.responseText && response.responseText.indexOf("</title>");
+			var strErrorSummary = response.responseText && response.responseText.substr(nExMsgStartIdx + 7, nExMsgEndIdx - nExMsgStartIdx - 7);
+			
+			if (strErrorSummary != '') {
+				message = strErrorSummary;
+			} else {
+				nExMsgStartIdx = response.responseText && response.responseText.indexOf("{");
+				nExMsgEndIdx = response.responseText && response.responseText.indexOf("}");
+				strErrorSummary = response.responseText && response.responseText.substr(nExMsgStartIdx, nExMsgEndIdx+1);
+				try{
+					var _tempError_ = JSON.parse(strErrorSummary);
+					if(_tempError_ && _tempError_ instanceof Object && _tempError_['summary']){
+						message = _tempError_['summary'];
+					}else{
+						message = response.responseText;
+					}
+				}catch(error){
+					console.log(error);
+					message = response.responseText;
+				}
+			}
+		}
+		shr.showError({message: message});
+		//console.log('ajax error, url: ' + option.url + '?' + $.param(option.data));
+		return false;		
+	},	
+	/**
+	 * 处理OSF入参加密
+	 * @data 为OSF信息
+	 * @param 为OSF需要传入的参数
+	 */
+	handlerServiceParam:function(data, param){
+		if(data.inputParams || data.inputParams.length == 0){
+			return;
+		}
+		if(!data.encryptKey){
+			return;
+		}
+		$.each(param, function(name, value) {
+			if(shr.isNeedEncryptParam(name,data.inputParams)){
+				param[name] = this.encryptForAes_CBC(value, data.encryptKey);
+			}
+		});
+	},
+	/**
+	 * 判断OSF中参数是否需要加密的参数
+	 * @name 参数名称
+	 * @inputParams OSF参数集合
+	 */
+	isNeedEncryptParam:function(name, inputParams){
+		for (var i = 0,total = inputParams.length; i < total; i++) {
+			if(name==inputParams[i]['paramName']){
+				return true;
+			}
+		}
+		return false;
+	},
+	
+	/**
+	 * @option 中
+	 * 新增属性isEncrypt 标记返回值是否已经加密
+	 * 新增属性encryptKey 配置isEncrypt标记进行cbc解密,需要调用(this.decryptForAes_CBC)
+	 * OSF的参数中某个具体参数需要进行加密传输,需要调用(this.encryptForAes_CBC)
+	 */
+	callService: function(option) {
+		if ($.isEmptyObject(option)) {
+			return;
+		}
+		// url
+		var url = shr.getContextPath() + '/shr/msf/service.do';
+		option.url = url;
+		// data
+		var param = shr.getRequestParam(option);
+		param.method = 'callService';
+		param.serviceName = option.serviceName;
+		delete option.serviceName;
+		option.data = param;
+		//强制POST请求
+		option.type = 'POST';
+		// 默认为同步
+		if (typeof option.async == 'undefined') {
+			option.async = false;
+		}
+
+		return this.doRemoteCall(option);
+	},
+	// private
+	getRequestParam: function(option) {
+		var param;
+		if (option.param) {
+			param = option.param;
+			// 如参数中的对象参数进行处理,如果为对象则转换为JSON格式
+			$.each(param, function(name, value) {
+				if ($.isPlainObject(value)) {
+					param[name] = $.toJSON(value);
+				}
+			});
+			delete option.param;
+		} else {
+			param = {};
+		}
+		
+		return param;
+	},
+	
+	doRemoteCall: function(option) {
+		var xhr = $.doAjax(option);
+		if (option.async) {
+			return xhr;
+		}else {
+			var response;
+			if(xhr.adapteOSFResponseDataFormat && xhr.isOSFRequest){
+				response = xhr.responseJSON;
+			} else { 
+				response = shr.explainJson(xhr.responseText);
+			}
+
+			if (response && response.data) {
+				return response.data;
+			} else {
+				return response;
+			}
+		}
+	},
+	
+	callHandler: function(option) {
+		if ($.isEmptyObject(option)) {
+			return;
+		}
+		
+		// url
+		var url = shr.getContextPath() + shr.dynamicURL;
+		option.url = url;
+		// data
+		var param = shr.getRequestParam(option);
+		param.method = option.action;
+		param.handler = option.handler;
+		delete option.action;
+		delete option.handler;
+		
+		option.data = param;
+		//option.showBlock = true;
+		
+		// 默认为异步
+		if (typeof option.async == 'undefined') {
+			option.async = true;
+		}
+		// 默认为get请求
+		if (typeof option.type == 'undefined') {
+			option.type = 'GET';
+		}
+		
+		return this.doRemoteCall(option);
+	},	
+
+	remoteCall: function(option) {
+		// 这里加一个变量用来控制,参数是否需要转化,isTransformParam = true时,不需要对参数进行转化,直接用传进来的参数即可
+		var isTransformParam = option.isTransformParam || false;
+		if ($.isEmptyObject(option)) {
+			return;
+		}
+		
+		// url
+		if (typeof option.url == 'undefined') {
+			option.url = shr.getContextPath() + shr.dynamicURL;
+		}
+		
+		// data
+		var param
+		if (!isTransformParam) {
+			param = shr.getRequestParam(option);
+		} else {
+			param = option.param
+		}
+		
+		param.method = option.method;
+		param.uipk = option.uipk;
+		delete option.method;
+		delete option.uipk;
+		
+		option.data = param;
+		
+		// 默认为异步
+		if (typeof option.async == 'undefined') {
+			option.async = true;
+		}
+		// 默认为POST请求
+		if (typeof option.type == 'undefined') {
+			option.type = 'POST';
+		}
+		
+		return this.doRemoteCall(option);
+	},	
+	
+	/**
+	 * 添加自定义统计事件
+	 */
+	trackEvent: function(category, action, opt_label, opt_value) {
+		var hmt = shr.getOwnerWindow()._hmt;
+		if (hmt) {
+			if ($.isEmptyObject(category)) {
+				category = document.location.href;
+			}
+			hmt.push(['_trackEvent', category, action, opt_label, opt_value]);
+		}
+	},
+	
+	/**
+	 * 获得数据所存放的位置
+	 */
+	getOwnerWindow: function() {
+		var win;
+		if (window.parent != window) {
+			// 表示存在父窗口
+			win = window.parent;
+		} else {
+			win = window;
+		}
+		return window;
+	},	
+	
+	/**
+	 * 描述:获取URL所对应的参数数组
+	 * @param {url} url 路径
+	 * @return 返回URL后追加的参数数组
+	 */
+	getUrlParams : function(url) {
+		var args = new Object();
+		var query = location.search.substring(1);// 获取查询串
+		var pairs = query.split("&");// 在逗号处断开
+		for ( var i = 0; i < pairs.length; i++) {
+			var pos = pairs[i].indexOf('=');// 查找name=value
+			if (pos == -1)
+				continue;// 如果没有找到就跳过
+			var argname = pairs[i].substring(0, pos);// 提取name
+			var value = pairs[i].substring(pos + 1);// 提取value
+			args[argname] = unescape(value);// 存为属性
+		}
+		return args;
+	},
+	
+	getUrlRequestParam : function(param, url) {
+		if (typeof url == 'undefined') {
+			url = location.href;
+		}
+		
+		var paraString = url.substring(url.indexOf("?") + 1, url.length).split("&"),
+			paraObj = {};
+		//url中参数格式含a=&&这种的容错处理 2017/06/28	tiangang_yang
+		for (i = 0; /* j = paraString[i] ;*/i < paraString.length; i++) {
+			var j = paraString[i];
+			paraObj[j.substring(0, j.indexOf("=")).toLowerCase()] = j
+					.substring(j.indexOf("=") + 1, j.length);
+		}
+		var returnValue = paraObj[param.toLowerCase()];
+		if (typeof (returnValue) == 'undefined' || returnValue == 'undefined') {
+			return "";
+		} else {
+			if (returnValue.charAt(returnValue.length - 1) == '#') {
+				returnValue = returnValue.substr(0, returnValue.length - 1);
+			}
+			
+			return decodeURIComponent(returnValue);
+		}
+	},
+	
+	/**
+	 * 描述:获取页面根路径
+	 * @return 返回页面根路径 如:http://{domain}:{port}/{当前应用实例名称}
+	 */
+	getContextPath:function() {
+		var contextPath = window._contextPath;
+		if (typeof contextPath == 'undefined') {
+			var href = window.location.href;
+			var host = window.location.host;
+			var f1 = href.substring(href.indexOf(host))
+			var f2 = f1.substring(f1.indexOf("/"));
+			var next = f2.indexOf('/', 1);
+			if (next != -1) {
+				contextPath = f2.substring(0, next);
+			} else {
+				contextPath = '';
+			}
+		}
+		return contextPath;
+	},	
+	
+	getOpenServiceFullPath: function() {
+		return shr.getContextPath() + shr.openServiceURL;
+	},
+	
+	showInfo: function(options) {
+		shr.msgHideAll();
+		options = $.extend({
+			type: 'info',
+			hideAfter: 3,
+			showCloseButton: true
+		}, options);
+		if($.isFunction(_top.Messenger)) {
+			_top.Messenger().post(options);
+		}else{
+			Messenger().post(options);
+		}
+	},
+
+	showSuccess: function(options) {
+		shr.msgHideAll();
+		options = $.extend({
+			type: 'success',
+			hideAfter: 3,
+			showCloseButton: true
+		}, options);
+		if($.isFunction(_top.Messenger)) {
+			_top.Messenger().post(options);
+		}else{
+			Messenger().post(options);
+		}
+	},
+	
+	showError: function(options) {
+		shr.msgHideAll();
+		
+		if ($.isEmptyObject(options.message)) {
+			return;
+		}
+		options = $.extend({
+			type: 'error',
+			hideAfter: null,
+			showCloseButton: true
+		}, options);
+		if($.isFunction(_top.Messenger)) {
+			_top.Messenger().post(options);
+		}else{
+			Messenger().post(options);
+		}
+	},
+	
+	showWarning: function(options) {
+		shr.msgHideAll();
+		shr.stopAllMask();
+		if ($.isEmptyObject(options.message)) {
+			return;
+		}
+		options = $.extend({
+			type: 'warning',
+			hideAfter: null,
+			showCloseButton: true
+		}, options);
+		if($.isFunction(_top.Messenger)) {
+			_top.Messenger().post(options);
+		}else{
+			Messenger().post(options);
+		}		
+	},
+
+	// 增加一个有遮罩的提示,用来处理当浏览器缩放和窗口变小时 使用。
+	showMaskWarning: function(options) {
+		shr.msgHideAll();
+		shr.stopMask();
+		shr.stopAllMask();
+		if ($.isEmptyObject(options.message)) {
+			return;
+		}
+		var actionsObj = {};
+		actionsObj[$.shrI18n.common.buttonName.noMoreReminders] = {
+			action: function() {
+				$.stopAllMask();
+				shr.msgHideAll();
+				localStorage.setItem(shr.getUserInfo().id + '#ScreenZoom', $.toJSON({'noMoreReminders': 1}));
+				$(top.window).off('resize', throttle(addWindowResize, 500));
+			}
+		}
+		actionsObj[$.shrI18n.common.buttonName.close] = {
+			action: function() {
+				$.stopAllMask();
+				shr.msgHideAll();
+			}
+		}
+		
+		options = $.extend({
+			type: 'warning',
+			hideAfter: null,
+			showCloseButton: false,
+			actions: actionsObj
+		}, options);
+		_top.Messenger().post(options);	
+		shr.startMask();		
+	},
+	// 添加args支持确认的时候的参数传递   格式如[a, b, c]  数组形式
+	showConfirm: function(message, action, cancel, args) {
+		shr.msgHideAll();
+		shr.startMask();
+		$('#shr-mask').css({'z-index':1050});
+		var messageFun;
+		if($.isFunction(_top.Messenger)){
+			messageFun = _top.Messenger();
+		}else{
+			messageFun = Messenger();
+		}
+		var msg = messageFun.post({
+			message: message,
+			hideAfter: null, 
+			showCloseButton: true,
+			close: function(){
+				shr.stopMask();
+			},
+			actions: {
+				retry: {
+					label: $.shrI18n.common.title.confirm,
+					auto: false,
+					delay: 0,
+					showCloseButton: true,
+					action: function() {
+					  	shr.msgHideAll();
+					  	shr.stopMask();
+						if (action && $.isFunction(action)) {
+							if(args){
+								action.apply(this,args);
+							}else{
+								action.apply(this);
+							}
+						}
+					}
+				},
+				cancel: {
+					label:  $.shrI18n.common.title.close,
+					action: function() {
+						shr.msgHideAll();
+						shr.stopMask();
+						if (cancel && $.isFunction(cancel)) {
+							if(args){
+								cancel.apply(this,args);
+							}else{
+								cancel.apply(this);
+							}
+						} else {
+							return msg.cancel();
+						}
+					}
+				}
+			}
+		});
+		return msg;
+	},
+	
+	msgHideAll: function(){
+		var topElem = getTop();
+		if(topElem && typeof(topElem.Messenger) != 'undefined'){
+			topElem.Messenger().hideAll();
+		}
+		
+	},
+	
+	/**
+	 * 描述:判断当前传递的json对象是否为枚举类型
+	 */
+	isEnumValue:function(json){
+        if(!json || json == null) return false;
+		if(json.isenum!==undefined && json.alias!==undefined && json.value!==undefined){
+			return true;
+		}
+		return false;
+	},
+	
+	hideErrorMsg: function() {
+		var historyMsg = _top.Messenger().history;
+		if (historyMsg) {
+			var msg;
+			for (var i = 0, length = historyMsg.length; i < length; i++) {
+				msg = historyMsg[i].msg;
+				if (msg.shown && msg.options.type != 'info') {
+					shr.msgHideAll();
+					return;
+				}
+			}
+		}
+	},	
+	
+	blockModal: function(hasBg){
+		var opts = {
+			  lines: 10, // The number of lines to draw
+			  length: 10, // The length of each line
+			  width: 5, // The line thickness
+			  radius: 10, // The radius of the inner circle
+			  corners: 1, // Corner roundness (0..1)
+			  rotate: 0, // The rotation offset
+			  direction: 1, // 1: clockwise, -1: counterclockwise
+			  color: '#000', // #rgb or #rrggbb
+			  speed: 1.4, // Rounds per second
+			  trail: 100, // Afterglow percentage
+			  shadow: false, // Whether to render a shadow
+			  hwaccel: false, // Whether to use hardware acceleration
+			  className: 'spinner', // The CSS class to assign to the spinner
+			  zIndex: 2e9, // The z-index (defaults to 2000000000)
+			  top: 'auto', // Top position relative to parent in px
+			  left: 'auto' // Left position relative to parent in px
+		};
+		
+		var modal = _top.$.scojs_modal({
+			width: 0,
+			height: 0,
+			top: -1000
+		});
+		if(!hasBg){
+			modal.show();
+		}
+
+		var target = _top.document.getElementById('wrap');
+		var spinner = new Spinner(opts).spin(target);
+		
+		var blockModal = {"modal": modal, "spinner": spinner};
+		return blockModal;
+	},
+	
+	destroyBlockModal: function(blockModal){
+		blockModal.modal.destroy();
+		blockModal.spinner.stop();
+	},
+	
+	/**
+	 * 获得页面对应的短网址
+	 */
+	getShortUrl: function() {
+		var doc;
+		if ($('#workArea').length > 0) {
+			doc = $('#workArea')[0].contentDocument;
+		} else {
+			doc = document;
+		}
+		var realUrl = this.getPageUrl(document);
+		
+		var response = shr.callService({
+			serviceName: 'url2short', 
+			type: 'POST',
+			param: {
+				url: realUrl
+			}
+		});
+		if (response) {
+			var breadcrumb = shrDataManager.pageNavigationStore.getDatas();
+			var names = [];
+			for (var i = 0, length = breadcrumb.length; i < length; i++) {
+				if (i != 0) {
+					names.push(' / ');
+				}
+				names.push(breadcrumb[i].name);
+			}
+			if (names.length == 0) {
+				names.push(doc.title);
+			}
+			return {
+				shortUrl: response.short,
+				desc: names.join('')
+			}
+		}
+	},
+	
+	/**
+	 * 根据短网址显示页面
+	 */
+	renderPage: function(short) {
+		var response = shr.callService({
+			serviceName: 'short2url', 
+			type: 'POST',
+			param: {
+				id: short
+			}
+		});
+		if (response && response.url) {
+			var url = shr.getContextPath() + response.url;
+			if ($('#workArea').length > 0) {
+				$('#workArea')[0].contentDocument.location.replace(url);
+			} else {
+				document.location.href = url;
+			}
+		}
+	},
+	
+	getPageUrl: function(document) {
+		if (typeof document == 'undefined') {
+			document = window.document;
+		}
+		var url = document.location.href;
+		var contextPath = shr.getContextPath();
+		return url.substr(url.indexOf(contextPath) + contextPath.length);
+	},
+	
+	loadScript: function(url, callback) {
+		if (callback) {
+			return $LAB.script(url).wait(callback);
+		} else {
+			return $LAB.script(url);
+		}
+	},
+	
+	loadCss: function(url){
+	    var link = document.createElement('link');
+		link.type = 'text/css';
+		link.rel = 'stylesheet';
+		link.href = url;
+		document.getElementsByTagName('head')[0].appendChild(link);
+	},
+	
+	//默认设置workArea高度, 如需设置其他高度, 则传入iframe的id
+	setIframeHeight: function(iframeId) {
+		var _self = this;
+		if (typeof iframeId == 'undefined') {
+			iframeId = shr.getUrlRequestParam('iframe');
+		}
+		
+		if(iframeId && iframeId != null){
+			id = iframeId;
+		} else {
+			id = 'workArea';
+		}
+		var _iframe = $('#'+id)[0]; 
+		if(!_iframe){ //在iframe中调用时需要通过父页面获取iframe标签
+			_iframe = $('#'+id, parent.document)[0];
+		}
+		setTimeout(function() {
+			if (_iframe){
+				if ($(_iframe).attr('autoHeight') == 'false') {
+					return;
+				}
+				
+				var _iframeHeight = null;
+				if (_iframe.contentDocument && _iframe.contentDocument.body.offsetHeight){
+					_iframeHeight = _iframe.contentDocument.body.offsetHeight;
+				} else if (_iframe.Document && _iframe.Document.body.scrollHeight){
+					_iframeHeight = _iframe.Document.body.scrollHeight;
+				}
+				if(id === 'workArea'){
+					var excludeIframeHeight = _self.getWorkareaVisibleHeight();
+					if(_iframeHeight <= excludeIframeHeight){
+						_iframe.height = excludeIframeHeight;
+					}else{
+						_iframe.height = _iframeHeight;
+					}
+				} else {
+					//_iframe.height = _iframeHeight + 60;
+					//_iframe.height = _iframeHeight;
+					
+					var $iframe = $(_iframe);
+					$iframe.height(_iframeHeight + 20 );
+					
+					var printMode = shr.getUrlRequestParam('printMode');
+					if (!printMode == 'true') {
+						var _iframeWidth = $iframe.parent().width();
+						$iframe.width(_iframeWidth);
+					}
+				}
+				
+				// 如果当前window不是最顶部window,则递归调用setIframeHeight设置高度
+				if (!$.isWindow(parent)) {
+					if( parent.shr ){ // 解决父窗口不是s-HR页面登录的时候报错问题
+						parent.shr.setIframeHeight();
+					}
+				}
+			}	
+		}, 100)
+		
+		
+		shr.setFixedBlockPosition();
+	},
+
+	getWorkareaVisibleHeight: function() {
+		var topWindow = $(_top.window);
+		var visibleHeight = topWindow.height();
+		var container = $('#home-container', topWindow[0].document);
+		
+		//row-fluid的外边距为10
+		var container_margin = container.outerHeight(true) - container.outerHeight(),
+			row_margin_top = 0,
+			offset = 10;
+		var margin = container_margin + row_margin_top + offset;
+		return visibleHeight - margin;
+	},
+	
+	getWorkarea: function() {
+		//判断当前界面是否是导航界面,如果是导航界面则去当前的界面进行渲染,不能取外层
+		if($('.wz_navi_new', _top.document).length > 0) {
+            return $('#workAreaDiv');
+        }else{
+            return $('#workAreaDiv', _top.document);
+        }
+	},
+	
+	/**
+	 * 构造动态URL
+	 * @param value 	需要打开的视图UIPK或是URL地址
+	 * @param type 		URL类型,可传入的值:view,url。
+	 * @param params 	打开页面时需传递的参数
+	 */
+	assembleURL: function(value, type, params) {
+		if (!value || !type) {
+			return;
+		}
+		if(value.indexOf("http") === 0 || value.indexOf("/easweb") === 0){
+			return value;
+		}
+		var url, options;
+		if (type.toLowerCase() == 'view') {
+			// 视图
+			url = shr.dynamicURL;
+			options = { uipk: value };
+		} else if (type.toLowerCase() == 'handler') { 
+			// handler
+			url = shr.dynamicURL;
+			options = { handler: value };
+		} else {
+			// url
+			url = value;
+			options = {};
+		}
+		
+		url = shr.getContextPath() + url;
+		
+		if (params) {
+			$.extend(options, params);
+		}
+		url = this.appendParam(url, options);
+		
+		return url;
+	},
+	
+	appendParam: function(url, param) {
+		// append param
+		if (!$.isEmptyObject(param)) {
+			if (url.indexOf('?') == -1) {
+				url += '?';
+			} else {
+				url += '&';
+			}
+			url += $.param(param);
+		}
+		return url;
+	},
+	
+	removeParam: function(url, param) {
+		// remove param
+		if ($.isEmptyObject(param)) {
+			return url;
+		}
+		
+		var start = url.indexOf(param + '=');
+		if (start == -1) {
+			return url;
+		}
+		
+		var end = url.indexOf('&', start + 1);
+		if (end == -1) {
+			end = url.length;
+		}
+		var c = url.charAt(start - 1); 
+		if (c == '&') {
+			start = start - 1;
+		} else if (c == '?' && url.charAt(end) == '&') {
+			end = end + 1;
+		}
+		
+		return url.substring(0, start) + url.substring(end);
+	},	
+	
+	assembleViewUrl: function(uipk, params) {
+		return shr.assembleURL(uipk, 'view', params);
+	},
+	
+	assembleHandlerUrl: function(handler, action, params) {
+		if (params == 'undefined' || !params) {
+			params = {};
+		}
+		params.method = action;
+		return shr.assembleURL(handler, 'handler', params);
+	},
+	
+	/**
+	 * 加载页面
+	 * @param value 	需要打开的视图UIPK或是URL地址
+	 * @param type 		URL类型,可传入的值:view,url。
+	 * @param params 	打开页面时需传递的参数
+	 */
+	loadPage: function(value, type, params) {
+		var url = this.assembleURL(value, type, params);
+		if (url) {
+			this.urlLocate(url);
+		}
+	},
+	
+	/**
+	 * 是否是主工作区iframe
+	 */
+	isWorkareaFrame: function() {
+		var inFrame = shr.getUrlRequestParam('inFrame');
+		if (inFrame && inFrame.indexOf('true') > -1) {
+			return true;
+		}
+		
+		var iframeName = shr.getUrlRequestParam('iframe');
+		if (iframeName) {
+			value = iframeName == 'workArea';
+		} else {
+			value = $('#workArea', parent.document).length > 0;
+		}
+		return value;
+	},
+	
+	/**
+	*菜单操作日志
+	*/
+	operateLogger: function(value) {},
+	
+	base64Encode: function(input) {
+		var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 
+		var output = "";  
+        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;  
+        var i = 0;  
+        input = shr.utf8Encode(input);  
+        while (i < input.length) {  
+            chr1 = input.charCodeAt(i++);  
+            chr2 = input.charCodeAt(i++);  
+            chr3 = input.charCodeAt(i++);  
+            enc1 = chr1 >> 2;  
+            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);  
+            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);  
+            enc4 = chr3 & 63;  
+            if (isNaN(chr2)) {  
+                enc3 = enc4 = 64;  
+            } else if (isNaN(chr3)) {  
+                enc4 = 64;  
+            }  
+            output = output +  _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4);  
+        }  
+        return output;
+	},
+	base64Decode:function(input){
+		var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 
+		var output = "";  
+        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;  
+        var i = 0;  
+        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");  
+        while (i < input.length) {  
+            enc1 = _keyStr.indexOf(input.charAt(i++));  
+            enc2 = _keyStr.indexOf(input.charAt(i++));  
+            enc3 = _keyStr.indexOf(input.charAt(i++));  
+            enc4 = _keyStr.indexOf(input.charAt(i++));  
+            chr1 = (enc1 << 2) | (enc2 >> 4);  
+            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);  
+            chr3 = ((enc3 & 3) << 6) | enc4;  
+            output = output + String.fromCharCode(chr1);  
+            if (enc3 != 64) {  
+                output = output + String.fromCharCode(chr2);  
+            }  
+            if (enc4 != 64) {  
+                output = output + String.fromCharCode(chr3);  
+            }  
+        }  
+        output = shr.utf8Encode(output);  
+        return output;  
+	},
+
+	/**
+	 * encryptObj:{key: value, key: value} key:需要加密的字段; value: 需要加密的值;
+	 * url: 必填,会将参数最终拼接在url上
+	 * 加密 for url
+	 */
+	encryptForUrl: function(encryptObj, url) {
+		var aKeys = Object.keys(encryptObj),
+			keyStr = aKeys.join(',');;
+		url = $.appendParam(url, {'encryptKeys': keyStr});
+		for(var n =  0; n < aKeys.length; n++) {
+			var key = aKeys[n];
+			var value = encryptObj[key];
+			var encode = $.allEncrypt(value);
+		 	url += '&'+key+'='+encode;
+		}
+		return url
+	},
+	/**
+	 * encryptObj:{key: value, key: value} key:需要加密的字段; value: 需要加密的值;
+	 * url: 选填,需要在url上添加时则传,否则不传
+	 * 加密 for obj
+	 */
+	encryptForObj: function(encryptObj, url) {
+		var aKeys = Object.keys(encryptObj),
+			obj = {},
+			keyStr = aKeys.join(',');
+		for(var n =  0; n < aKeys.length; n++) {
+			var key = aKeys[n];
+			var value = encryptObj[key];
+			var encode = $.allEncrypt(value);
+			obj[key] = encode;
+		}
+		url ? url = $.appendParam(url, {'encryptKeys': keyStr}) : null;
+		return {
+			obj: obj,
+			keyStr: keyStr,
+			url: url
+		}
+	},
+	/**
+	 * 盐+base64加密
+	 */
+	encryptForB64: function(value) {
+		if ($.isUndef(value)) {
+			return value;
+		} 
+		var encode = $.base64Encode(value,"utf-8");
+		return '_SHRREQPARA_'+encode;
+	},
+	/**
+	 * 盐+base64解密
+	 */
+	decryptForB64: function(value) {
+		if ($.isUndef(value)) {
+			return value;
+		} 
+		value= value.replace('_SHRREQPARA_','');
+		var decode = $.base64Decode(value,"utf-8");
+		return decode;
+	},
+	
+	/**
+	 * 盐+base64加密
+	 */
+	encryptForB64PreFix: function(value,preFix) {
+		if ($.isUndef(value)) {
+			return value;
+		} 
+		var encode = $.base64Encode(value,"utf-8");
+		return preFix + encode;
+	},
+	/**
+	 * 盐+base64解密
+	 */
+	decryptForB64PreFix: function(value,preFix) {
+		if ($.isUndef(value)) {
+			return value;
+		} 
+		value= value.replace(preFix,'');
+		var decode = $.base64Decode(value,"utf-8");
+		return decode;
+	},
+	
+	/**
+	 * AES加密
+	 */
+	encryptForAes: function(content, secretKey) {
+		if ($.isUndef(content)) {
+			return content;
+		}
+		
+		var secretKey = secretKey || "g5AJVI7fQGWZKrdZ";
+		var key = CryptoJS.enc.Utf8.parse(secretKey);
+		var iv = shr.randomRange(16);
+		var srcs = CryptoJS.enc.Utf8.parse(content);
+		var encrypted = CryptoJS.AES.encrypt(srcs, key, { iv:CryptoJS.enc.Utf8.parse(iv), mode:CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
+		return iv + encrypted.toString();
+	},
+	
+	/**
+	 * AES解密
+	 */
+	decryptForAes: function(content, secretKey) {
+		if ($.isUndef(content)) {
+			return content;
+		}
+		
+		var secretKey = secretKey || "g5AJVI7fQGWZKrdZ";
+		var key = CryptoJS.enc.Utf8.parse(secretKey);
+		var iv = content.slice(0, 16);
+		var realContent = content.slice(16, content.length);
+		var decrypted = CryptoJS.AES.decrypt(realContent, key, { iv:CryptoJS.enc.Utf8.parse(iv), mode:CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
+		return decrypted.toString(CryptoJS.enc.Utf8);
+	},
+
+	/**
+	 * AES-CBC加密
+	 */
+	encryptForAes_CBC: function(content, secretKey) {
+		if ($.isUndef(content)) {
+			return content;
+		}
+		
+		var secretKey = secretKey || "g5AJVI7fQGWZKrdZ";
+		var key = CryptoJS.enc.Utf8.parse(secretKey);
+		var iv = shr.randomRange(16);
+		var srcs = CryptoJS.enc.Utf8.parse(content);
+		var encrypted = CryptoJS.AES.encrypt(srcs, key, { iv:CryptoJS.enc.Utf8.parse(iv), mode:CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
+		return iv + encrypted.toString();
+	},
+	
+	/**
+	 * AES-CBC解密
+	 */
+	decryptForAes_CBC: function(content, secretKey) {
+		if ($.isUndef(content)) {
+			return content;
+		}
+		
+		var secretKey = secretKey || "g5AJVI7fQGWZKrdZ";
+		var key = CryptoJS.enc.Utf8.parse(secretKey);
+		var iv = content.slice(0, 16);
+		var realContent = content.slice(16, content.length);
+		var decrypted = CryptoJS.AES.decrypt(realContent, key, { iv:CryptoJS.enc.Utf8.parse(iv), mode:CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
+		return decrypted.toString(CryptoJS.enc.Utf8);
+	},
+
+	/**
+	 * 总加密方法,根据window.shrUrlParamEncryptRule的取值去分发  'BASE64' / 'AES', 后续如果要添加新加密方法在这里加即可。
+	 */
+	allEncrypt: function(value) {
+		var encryptWay = window.shrUrlParamEncryptRule || 'BASE64'; // 加密方式 根据后端传回
+		value = $.isUndef(value) ? value : encodeURIComponent(value);
+		var encryptMethod = {
+			'BASE64': $.encryptForB64,
+			'AES': $.encryptForAes_CBC
+		}
+		return encryptMethod[encryptWay](value)
+	},
+
+	/**
+	 * 总解密方法,根据window.shrUrlParamEncryptRule的取值去分发  'BASE64' / 'AES', 后续如果要添加新解密方法在这里加即可。
+	 * @param value
+	 * @returns
+	 */
+	allDecrypt:function(value){
+		try {
+			var encryptWay = window.shrUrlParamEncryptRule || 'BASE64'; // 解密方式 根据后端传回
+			if($.isUndef(value)){
+				return value;
+			}
+			var decryptMethod = {
+					'BASE64': $.decryptForB64,
+					'AES': $.decryptForAes_CBC
+				};
+			return decodeURIComponent(decryptMethod[encryptWay](value));
+		} catch (error) {
+			console.log(error);
+			return value;
+		}
+	},
+
+	utf8Encode: function(string){
+		if(!string){
+			string = '';
+		}
+		string = string.replace(/\r\n/g,"\n");  
+        var utftext = "";  
+        for (var n = 0; n < string.length; n++) {  
+            var c = string.charCodeAt(n);  
+            if (c < 128) {  
+                utftext += String.fromCharCode(c);  
+            } else if((c > 127) && (c < 2048)) {  
+                utftext += String.fromCharCode((c >> 6) | 192);  
+                utftext += String.fromCharCode((c & 63) | 128);  
+            } else {  
+                utftext += String.fromCharCode((c >> 12) | 224);  
+                utftext += String.fromCharCode(((c >> 6) & 63) | 128);  
+                utftext += String.fromCharCode((c & 63) | 128);  
+            }  
+   
+        }  
+        return utftext; 
+	},
+	/**
+	 * 是否是向导iframe
+	 */
+	isWizardFrame: function() {
+		return $('#_wz_iframe', parent.document).length > 0;
+	},
+
+	/**
+	 * 是否是新向导iframe
+	 */
+	isNewWizardFrame: function() {
+		return $('.wz_navi_new ', parent.document).length > 0;
+	},
+	
+	/**
+	 * 定位至某个区域块
+	 */
+	locateTo: function(newElement, complete, duration) {
+		var offsetTop;
+		if ($.isNumeric(newElement)) {
+			offsetTop = newElement;
+		} else {
+			offsetTop= $(newElement).offset().top;
+		}
+		
+		var doc;
+		if (parent == window) {
+			doc = document;
+		} else if (parent == _top){
+			// in iframe
+			doc = parent.document;
+			// get parent offset
+			var iframeId = shr.getUrlRequestParam('iframe') || 'iframe';
+			var iframe_top = $('#' + iframeId, doc).offset() ? $('#' + iframeId, doc).offset().top : 0;
+			offsetTop += iframe_top;
+		}
+
+		// add header offset
+		var workarea = this.getWorkarea();
+		if (workarea.length > 0) {
+			//offsetTop -= workarea.offset().top;
+			offsetTop = offsetTop - (workarea.offset().top + 160);
+		}
+		
+		var isIE = false;
+		if( "ActiveXObject" in window ){
+			isIE = true;
+		}
+		
+		if ( isIE) {
+			doc.documentElement.scrollTop = offsetTop;
+			if (complete) {
+				complete.call(this);
+			}
+		} else {
+			if (typeof duration == 'undefined') {
+				duration = 500;
+			}
+			
+			$('body,html', doc).animate({scrollTop: offsetTop}, duration, function() {
+				if (complete) {
+					complete.call(this);
+				}
+			});
+		}
+	},
+	
+	closeWindow: function() {
+		window.open('','_self');
+		window.opener = null;
+		window.close();
+	},
+	
+	/**
+	 * 加载HTML片断
+	 */
+	loadHTML: function(options) {
+		$.extend(options, {
+			dataType: 'html'
+		});
+		var success = options.success;
+		options.success = function(response) {
+			try{
+				var result = JSON.parse(response);
+				if(result && result.result === 'error'){
+					shr.showError({message: result.summary});
+					return;
+				}
+			}catch(e){
+				
+			}
+			//var urlParams = shr.getUrlParams();
+			var repData = shr.callService({
+				serviceName:'getBizMultLanService',
+				param:{uipk:shr.getUrlRequestParam('uipk',options.url)},
+				type: 'POST',
+                async: false,
+                ignoreDataPerm: true,
+			});
+			window.contextLanguage = repData['contextLanguage'];
+			$.extend(window.jsBizMultLan, repData['jsBizMultLan']);
+			$.extend(window.utcData, repData['utcData']);
+			$.extend(window.numberFormat, repData['numberFormat']);
+			$.extend(window.languageMappingList, repData['languageMappingList']);
+			$.extend(window.isTCtoTWopen, repData['isTCtoTWopen']);
+			if (shr.checkIsRedirectLogin(response)) {
+				window.location.href = shr.getContextPath();
+				return;
+			}
+			
+			var $content = $(response);
+			var item;
+			var scripts = [];
+			// 解析script标签,为手动加载script文件
+			for (var i = $content.length - 1; i >= 0; i--) {
+				item = $content[i];
+				if (item.tagName == 'SCRIPT' && item.getAttribute('src')) {
+					scripts.push(item.getAttribute('src'));
+					$content.splice(i, 1);
+				}
+			}
+			if (scripts.length > 0) {
+				scripts = scripts.reverse();
+				// 手动加载script文件,为解决不能调试的问题
+				shr.loadScript(scripts, function() {
+					if (success && $.isFunction(success)) {
+						success.call(this, $content);
+					}
+				});
+			} else {
+				if (success && $.isFunction(success)) {
+					success.call(this, $content);
+				}
+			}
+		}
+		shr.doGet(options);
+	},
+	
+	setFixedBlockPosition: function() {
+		var bodywidth = $(window.top.document.body).width();
+		var iframewidth = $(window.top.document.body).find("#home-container").width();
+		if((bodywidth-iframewidth) < 20){
+			/*$(window._top.document.body).find("#adviseUp").css("right", 0);*/
+			$(window._top.document.body).find("#scrollUp").css("right", 0);
+		}else{
+			/*$(window._top.document.body).find("#adviseUp").css("left", iframewidth+(bodywidth-iframewidth)/2);*/
+			$(window._top.document.body).find("#scrollUp").css("left", iframewidth+(bodywidth-iframewidth)/2);
+		}
+		//根据窗口大小动态
+		$(window).resize(function(){
+			var bodywidth = $(window.top.document.body).width();
+			var iframewidth = $(window.top.document.body).find("#home-container").width();
+			if((bodywidth-iframewidth) < 20){
+				/*$(window._top.document.body).find("#adviseUp").css("right", 0);*/
+				$(window.top.document.body).find("#scrollUp").css("right", 0);
+			}else{
+				/*$(window._top.document.body).find("#adviseUp").css("left", iframewidth+(bodywidth-iframewidth)/2);*/
+				$(window.top.document.body).find("#scrollUp").css("left", iframewidth+(bodywidth-iframewidth)/2);
+			}
+		});
+		
+		
+	},
+	
+	/**
+	 * 获得当前登录用户信息
+	 */
+	getUserInfo: function() {
+		var context = _top.document;
+		return {
+			id: $('#userId', context).val(),
+			number: $('#userNumber', context).val()
+		}
+	},
+	
+	/**
+	 * 获得页面信息
+	 */
+	getPageInfo: function() {	
+		var getPageCode = function(url) {
+			var uipk = shr.getUrlRequestParam('uipk', url);
+			if (uipk) {
+				return uipk;
+			}
+			
+			var contextPath = shr.getContextPath();
+			var firstIndex = url.indexOf(contextPath) + contextPath.length;
+			var lastIndex = url.indexOf('?')
+			if (lastIndex == -1) {
+				lastIndex = url.length;
+			}
+			return url.substring(firstIndex, lastIndex);
+		};		
+		
+		var doc;
+		if ($('#workArea').length > 0) {
+			doc = $('#workArea')[0].contentDocument;
+		} else {
+			doc = document;
+		}
+		
+		var serviceId = shr.getServiceId();
+		
+		var param;
+		if (serviceId) {
+			param = {
+				category_code: serviceId,
+				page_code: getPageCode(doc.location.href),
+				page_desc: $('title', doc).data('value')
+			};
+			
+			var service = shr.createObject(shr.base.ServiceData).getServiceById(serviceId);
+			var category;
+			if (service && service.category && service.category.length > 0) {
+				category = service.category[0];
+			} else {
+				category = '';
+			}
+			param.category_desc = category;
+		} else {
+			var title;
+			if (doc.location.href.indexOf('/home.do') >= 0) {
+				title = $.shrI18n.base.title.homePage;
+			} else {
+				title = $('title', doc).data('value')
+			}
+			param = {
+				page_code: getPageCode(doc.location.href),
+				page_desc: title
+			};
+		}
+	
+		return param;
+	},
+	
+	/**
+	 * js设置placeholder,解决IE9下显示不了的问题
+	 */
+	funPlaceholder: function(element) {
+	    var placeholder = '';
+	    if (element && !("placeholder" in document.createElement("input")) && (placeholder = element.getAttribute("placeholder"))) {
+	        element.onfocus = function() {
+	            if (this.value === placeholder) {
+	                this.value = "";
+	            }
+	            this.style.color = '';
+	        };
+	        element.onblur = function() {
+	            if (this.value === "") {
+	                this.value = placeholder;
+	            }
+	        };
+	        
+	        //样式初始化
+	        if (element.value === "") {
+	            element.value = placeholder;
+	        }
+	    }
+	},
+	
+	/**
+	 *	选择器中包含“.”导致JQuery选择器不可用,转义处理 
+	 */
+	selectorFormat : function (selectorStr){
+		return selectorStr.replace(/(:|\.|\[|\])/g, '\\$1');
+	},
+	
+	/**
+	 * 本窗口采用post方式加载某个URL,解决URL超长问题
+	 */
+	reloadUrlByPost: function(url, param, name) {
+		if (!name) {
+			name = (new Date()).getTime();
+		}
+		name = 'urlpost_' + name;
+		var form = $('#' + name);
+		
+		if (form.length > 0) {
+			form.remove();
+		}
+		
+		var str = ['<form id="${name}" action="" method="post" target="${name}-frame"></form>',
+		           '<iframe id="${name}-frame" name="${name}-frame" src="" style="display: none;"></iframe>'].join('');
+		$(juicer(str, {name: name})).appendTo('body');
+		form = $('#' + name);
+		
+		// 将相应的参数值填充至form中
+		var option = {
+			url: url,
+			data: param
+		}
+		shr.dealPostParam(option);
+		var content = this.paramToInputHidden(option.data);
+		form.attr('action', option.url).append(content).submit();
+	},
+	
+	/**
+	 * 采用post方式打开新窗口,解决URL超长问题
+	 */
+	openWindowByPost: function(url, param) {
+		$('#openwindow-form').remove();
+		
+		window.open('', 'openwindow-frame');
+		
+		var content = this.paramToInputHidden(param);
+		var str = '<form id="openwindow-form" action="" method="post" target="openwindow-frame"></form>';
+		$(str).attr('action', url).append(content).appendTo('body').submit();
+	},
+	
+	/**
+	 * 将参数转换为input hidden字符串
+	 */
+	paramToInputHidden: function(param) {
+		var content = '', tpl = '<input type="hidden" name="${name}" value="${value}" />';
+		for (var key in param) {
+			content += juicer(tpl, {
+				name: key,
+				value: param[key]
+			});
+		}
+		return content;
+	},
+
+	/*
+	 *检测 FlashPlayer 
+	 * */
+	getFlashVersion : function () {
+       var flashVer = NaN;
+       var ua = navigator.userAgent;
+    
+       if (window.ActiveXObject) {
+           var swf = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
+    
+           if (swf) {
+               flashVer = Number(swf.GetVariable('$version').split(' ')[1].replace(/\,/g, '.').replace(/^(\d+\.\d+).*$/, "$1"));
+           }
+       } else {
+           if (navigator.plugins && navigator.plugins.length > 0) {
+               var swf = navigator.plugins['Shockwave Flash'];
+               if (swf) {
+                   var arr = swf.description.split(' ');
+                   for (var i = 0, len = arr.length; i < len; i++) {
+                       var ver = Number(arr[i]);
+    
+                       if (!isNaN(ver)) {
+                           flashVer = ver;
+                           break;
+                       }
+                   }
+               }
+           }
+       }
+       return flashVer;
+   },
+   
+   /*
+	 *检测 是否可以上传文件
+	 * */
+	checkCanUpload :function(){
+	   var _self = this;
+	   var flashVer = shr.getFlashVersion();
+  	   if (!isNaN(flashVer)) {
+	  		 ua = navigator.userAgent;
+	  		 ua = ua.toLocaleLowerCase();
+	  		 if (ua.match(/msie/) != null || ua.match(/trident/) != null) {
+	  			 var browserType = "IE";
+	  			 var browserVersion = ua.match(/msie ([\d.]+)/) != null ? ua.match(/msie ([\d.]+)/)[1] : ua.match(/rv:([\d.]+)/)[1];
+	  		 }  
+	  		 if(browserVersion == "11.0" && flashVer <12){
+	  			shr.showError({
+							message: $.shrI18n.framework.tips.flashVersionRequirePrefix + flashVer +$.shrI18n.framework.tips.flashVersionRequireSuffix
+						});    
+	  			return false;
+	  		 } 
+	  	 return true;
+  	   } else {
+  		 shr.showError({
+						 message: $.shrI18n.framework.tips.noInstallFlashSimple
+  		 			});
+  		 return false
+  	   }
+	  return true;
+  },
+  
+  	imCloudInstance: void(0),
+
+	// 真正初始化云之家消息组件
+	initImCloudRun: function (response) {
+		// if (!this.imCloudInstance) {
+		// 	this.imCloudInstance = new imCloud({ //组件初始化
+		// 		eid: response.eid,  //填写企业id号
+		// 		data: response.data  //填写上面步骤生成的加密字段
+		// 	});
+		// }
+
+		// 点击非控件区域,控件可关闭
+		$("iframe").on("load", function(event){//判断 iframe是否加载完成  这一步很重要
+			  $("body",this.contentDocument).click(function(e){//添加点击事件
+				if($(e.target).closest('.im-wrap').length < 1 && !$('#im-session-left').is(':hidden')){
+                    if(!$('#im-session-left').is(':hidden') && !$(e.target).hasClass('ot-del-person')){
+                        $('.im-tray').click();
+                    }
+                }
+			  });
+	    });
+		$(document).click(function(e){
+			if($(e.target).closest('.im-wrap').length < 1 && !$('#im-session-left').is(':hidden') && document.body.contains(e.target)){
+				if(!$('#im-session-left').is(':hidden') && !$(e.target).hasClass('ot-del-person')){
+                    if($('.im-tray', window.parent.document).length > 0){
+                        $('.im-tray', window.parent.document).click();
+                    }else{
+                        $('.im-tray').click();
+                    }
+				}
+			}
+		})
+
+		return this.imCloudInstance;
+	},
+
+	// 初始化云之家消息组件
+	initImCloud: function (response) {
+		var _self = this;
+		if (_top.imCloud) {
+			if (!this.imCloudInstance) {
+				this.imCloudInstance = _top.imCloud;
+			}
+			_self.initImCloudRun(response);
+		} else {
+			try {
+				shr.loadScript('https://www.yunzhijia.com/imsdk/imcloud/js/imcloud.js', function () {
+					if (!this.imCloudInstance) {
+						this.imCloudInstance = new imCloud({ //组件初始化
+							eid: response.eid,  //填写企业id号
+							data: response.data  //填写上面步骤生成的加密字段
+						});
+					}
+					_self.initImCloudRun(response);
+				});
+			} catch (error) {
+
+			}
+		}
+	},
+
+	/**
+	 * https://www.yunzhijia.com/imsdk/imcloud/js/imcloud.js
+	 * 云之家消息组件集成
+	 */
+	getIMCloudHubComponent: function(){
+		var _self = this;
+		shr.callService({
+			serviceName: 'getCloudHubParams',
+			async: true,
+			type: 'POST',
+			param: {},
+			success: function (response) {
+				if(!response.isShowCloudHub){
+					$('#loginCloudHub').hide();
+					$('.feedback-box').height(60);
+					$('.feedback-box .feedback-box-left i').css('marginTop','24px');
+				}
+				if(response.eid && response.data){
+					_self.initImCloud(response);
+				}
+			}
+		});
+	},
+
+  
+/**
+ * 导入
+ */
+doImportData: function(curIOModelString, customData,classify,serviceId,permItemId,gridId) {
+	var self = shr.getCurrentViewPage();
+	if (typeof curIOModelString == 'undefined') {
+		curIOModelString = self.getImportModel();
+	}
+	
+	var importDiv = $('#importDiv');
+	if (importDiv.length > 0) {
+		importDiv.data('curIOModelString', curIOModelString);
+		importDiv.data('customData', customData);
+		importDiv.data('classify', classify);
+		importDiv.dialog('open');
+		return;
+	}
+	
+	// 未生成dialog
+	importDiv = $('<div id="importDiv"></div>').appendTo($('body'));
+	importDiv.data('curIOModelString', curIOModelString);
+	importDiv.data('customData', customData);
+	importDiv.data('classify', classify);
+	importDiv.data('serviceId', serviceId);
+	importDiv.data('permItemId', permItemId);
+	
+	var _self = this;
+//	if(shr.checkCanUpload()){
+	importDiv.dialog({
+		autoOpen: true,		
+		width: 708,
+		height: 700,
+		title: $.shrI18n.framework.title.importData,
+		resizable: true,
+		position: ['top','top'],
+		modal: true,
+		open: function(event, ui) {
+			if ($.browser.msie) {
+				var url = shr.assembleURL('com.kingdee.shr.io.app.ImportInfo', 'view', {
+					curIOModelString: curIOModelString,
+					customData: customData,
+					classify:classify,
+					serviceId:serviceId,
+					permItemId:permItemId
+				});
+				var content = '<iframe id="importFrame" name="importFrame" width="700" height="600" frameborder="0" scrolling="no" allowtransparency="true" src="' + url + '"></iframe>';
+				importDiv.append(content);
+			} else {
+				importDiv.css('padding', "0 20px");
+				var url = shr.assembleURL('com.kingdee.shr.io.app.ImportInfo$page', 'view');
+				shr.loadHTML({
+					url: url,
+					success: function(response) {
+						importDiv.append(response);
+					}
+				});
+			}
+		},
+		close: function(event, ui) {
+			importDiv.empty();
+			$(gridId).jqGrid("reloadGrid");
+		} 
+	});
+//	}
+	
+	$(".ui-dialog-titlebar-close").bind("click" , function(){
+		importDiv.dialog("close");
+		});		
+	},
+	
+	/**
+	 * 组装 按钮数据权限 模型
+	 */
+	getButtonDataPermissionModel:function(){
+		var model = [];
+		try {
+			if( jsBinder && jsBinder.assembleDataPermModel instanceof Function){
+				if( jsBinder.initData && jsBinder.initData.checkModel == "client" ){
+					model = jsBinder.assembleDataPermModel();
+				}
+			}
+		} catch (error) {// jsBinder 还没有生成,会异常,这里直接catch住,不处理
+			//console.warn("[ getButtonDataPermissionModel error ]");
+		}
+		return model;
+	},
+	
+	addDataPermissionModel:function( data ){
+		if(data){
+			var dataPerm = this.getButtonDataPermissionModel();
+			if( dataPerm && dataPerm.length ){
+				data.dataPerm = shr.toJSON(dataPerm);
+			}
+		}
+		return data;
+	},
+	
+	// 添加公共扩展参数
+	_addCommonExtParam:function( option ){
+		var data = option.data,ignoreDataPerm = false;
+			ignoreDataPerm = option.ignoreDataPerm;
+		// 添加按钮 数据 权限数据,如果忽略添加数据权限,不构造数据
+		if( !ignoreDataPerm ){
+			this.addDataPermissionModel( data );
+			// 客户端按钮数据权限,修改请求提交方式为POST,解决GET请求URL超长问题
+			option.type = 'POST';
+		}
+		if( data ){
+			var assigmentId = data['assigmentId'] || this.getAssignmentId();
+			data.assigmentId = assigmentId || "";
+			var ProcInstId = data['ProcInstId'] || this.getProcInstId();
+			data.ProcInstId = ProcInstId || "";
+			var msgId = data['msgId'] || this.getMsgId();
+			data.msgId = msgId || "";
+		}
+		// 添加权限项ID
+		this._addPermItemId( data );
+		//添加shruicode
+		this._addShruicode( data );
+		//添加uipk
+		this._addUipk(data);
+		//添加billId  工作流单据的所有单独请求都需要传入uipk,billId才能正确跳过数据验权
+		this._addBillId(data);
+		//添加附件fileUUID
+		this._addAttachmentFileUUID(data);
+	},
+ 	getProcInstId:function(){
+ 		var procInstId = shr.getUrlRequestParam('ProcInstId');
+ 		if(procInstId){
+ 			return procInstId;
+ 		}
+ 		procInstId = shr.getUrlRequestParam('proInstId');
+ 		if(procInstId){
+ 			return procInstId;
+ 		}
+ 		return '';
+ 	},
+ 	getMsgId:function(){
+ 		var msgId = shr.getUrlRequestParam('msgId');
+ 		if(msgId){
+ 			return msgId;
+ 		}
+ 		return '';
+ 	},
+	_addUipk:function(data){
+		if( data ){
+			var uipk = data['uipk'] || this.getUipk();
+			data.uipk = uipk || "";
+		}
+	},
+	getUipk:function(){
+		return shr.getUrlRequestParam('uipk');
+	},
+	
+	_addShruicode:function(data){
+		if( data ){
+			var shruicode = data['shruicode'] || this.getShruicode();
+			data.shruicode = shruicode || "";
+		}
+	},
+	getShruicode:function(){
+		return shr.getUrlRequestParam('shruicode');
+	},
+	_addBillId:function(data){
+		if( data ){
+			var billId = data['billId'] || this.getBillId();
+			data.billId = billId || "";
+		}
+	},
+	getBillId:function(){
+		var billId =  shr.getUrlRequestParam('billID');
+		if(!billId){
+			billId =  shr.getUrlRequestParam('billId');
+		}
+		return billId;
+	},
+	
+	_addPermItemId:function( data ){
+		if( data ){
+			// 优先获取button上的权限项ID, 如果获取button上的权限项ID为空 ,从url上获取
+			var permItemId = data['permItemId'] || this.getButtonPermItemId( data ) || this.getPermItemId();
+			data.permItemId = permItemId || "";
+		}
+		return data;
+	},
+	
+	getButtonPermItemId:function( data ){
+		var permItemId = "", method = data.method;
+		if( method ){
+			try{
+				permItemId = $("#"+method).shrButton("getValue")["permItemId"];
+			}catch (error) {
+			}
+		}
+		return permItemId;
+	},
+
+	getPermItemId:function(_window){
+		var _win = _top;
+		if (_window) {
+			_win = _window;
+		}
+		return shr.getUrlRequestParam('permItemId', _win.location.href);
+	},
+	
+	getCurrentPagePermItemId:function(){
+		var _permItemId = this.getCurrentPagePermItemIdByClient();
+		if(!_permItemId){
+			_permItemId = this.getCurrentPagePermItemIdByServer();
+		}
+			
+		return _permItemId;
+	},
+	
+	getCurrentPagePermItemIdByClient:function(){
+		var _permItemId = "";
+			try {
+				if( jsBinder && jsBinder.currentPagePermItemId ){
+					_permItemId = jsBinder.currentPagePermItemId;
+				}
+			} catch (error) {
+				
+			}
+			
+		return _permItemId;
+		
+	},
+	
+	getCurrentPagePermItemIdByServer:function(){
+		var _permItemId = "",
+		_uipk = shr.getUrlRequestParam("uipk") || "",
+		_method = shr.getUrlRequestParam("method") || "",
+		_permItemId = shr.getUrlRequestParam("permItemId") || "",
+		_serviceId = shr.getUrlRequestParam("serviceId") || "",
+		_shruicode = shr.getUrlRequestParam("shruicode") || "",
+		//应人事要求,从工作流过来的表单,如果们有method,并且url带有operateState,则将operateState小写作为method
+		_isShrBill = shr.getUrlRequestParam("isShrBill") || "";
+		if(_isShrBill && _isShrBill == 'true'){
+			var _operateState = shr.getUrlRequestParam("operateState");
+			if(_operateState && !_method){
+				_method = _operateState.toLowerCase();
+			}
+		}
+		
+		shr.callService({
+			serviceName: 'getCurrentPagePermItemId', 
+			param: {
+				uipk : _uipk,
+				methodName :_method,
+				permItemId :_permItemId,
+				serviceId :_serviceId,
+				shruicode:_shruicode
+			},
+			type: 'POST',
+			async: false,
+			success: function(data) {
+				_permItemId = data;
+			}
+		});
+		return _permItemId;
+	},
+	
+	replaceAll:function( source,target,replacement ){
+		var reg = new RegExp(target,"g");
+		return source.replace(reg,replacement);
+	},	
+
+	//获取浏览器缩放比例
+	detectZoom: function() {
+		var e = 0,
+		t = window.screen;
+		return (
+			void 0 !== window.devicePixelRatio
+			? (e = window.devicePixelRatio)
+			: -1 !== navigator.userAgent.toLowerCase().indexOf('msie')
+			? t.deviceXDPI && t.logicalXDPI && (e = t.deviceXDPI / t.logicalXDPI)
+			: void 0 !== window.outerWidth && void 0 !== window.innerWidth && (e = window.outerWidth / window.innerWidth),
+			e && (e = Math.round(100*e)),
+			(99 !== e && 101 !== e) || (e = 100),
+			e
+		)
+	},
+
+	/** 
+	 * 动态加载js、css文件
+	*/
+	loadJsOrCssFile : function(filename, filetype){
+		if (filetype == "js"){
+			var fileref = document.createElement('script');
+			fileref.setAttribute("type","text/javascript");
+			fileref.setAttribute("src",filename);
+		} else if (filetype == "css"){
+			var fileref = document.createElement("link");
+			fileref.setAttribute("rel","stylesheet");
+			fileref.setAttribute("type","text/css");
+			fileref.setAttribute("href",filename);
+		}
+		if (typeof fileref != "undefined") document.getElementsByTagName("head")[0].appendChild(fileref);
+	},
+
+	/** 
+	 * 动态移除js、css文件
+	*/
+	removeJsOrCssFile : function(filename,filetype){
+		var targetelement = (filetype == "js")? "script" :(filetype == "css")? "link" : "none";
+		var targetattr = (filetype == "js")?"src" : (filetype == "css")? "href" :"none";
+		var allsuspects = document.getElementsByTagName(targetelement);
+		for (var i = allsuspects.length; i >= 0;i--){
+			if (allsuspects[i] && allsuspects[i].getAttribute(targetattr) != null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1) allsuspects[i].parentNode.removeChild(allsuspects[i]);
+		}
+	},
+
+	/** 
+	 * 动态创建js、css文件
+	*/
+	createJsOrCssFile : function (filename,filetype){
+		if (filetype=="js"){
+			var fileref=document.createElement('script')
+			fileref.setAttribute("type","text/javascript")
+			fileref.setAttribute("src",filename)
+		}
+		else if (filetype=="css"){
+			var fileref=document.createElement("link")
+			fileref.setAttribute("rel","stylesheet")
+			fileref.setAttribute("type","text/css")
+			fileref.setAttribute("href",filename)
+		}
+		return fileref
+	},
+
+	replaceJsOrCssFile : function (oldfilename,newfilename, filetype){
+		var targetelement=(filetype=="js")?"script" : (filetype=="css")? "link" :"none"
+		var targetattr=(filetype=="js")?"src" : (filetype=="css")? "href" :"none"
+		var allsuspects=document.getElementsByTagName(targetelement)
+		for (var i=allsuspects.length; i>=0;i--){
+			if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null &&allsuspects[i].getAttribute(targetattr).indexOf(oldfilename)!=-1){
+				var newelement=shr.createjscssfile(newfilename, filetype)
+				allsuspects[i].parentNode.replaceChild(newelement, allsuspects[i])
+			}
+		}
+	},
+
+	/** 
+	 * 获取一段字符串中,外部引入的js
+	*/
+	getOutInputScripts: function (str) {
+		var html_pool = []; 
+		var scripts = []; 
+		var scriptText = '';
+		str = str.split(/<\/script>/i); 
+		for (var i = 0; i < str.length; i++) { 
+			html_pool[i] = str[i].replace(/<script[\s\S]*$/ig, ""); 
+			scripts[i] = {type: 'text/javascript', src: ''}; 
+			scriptText = str[i].substr(html_pool[i].length); 
+			scripts[i].src = scriptText.substr(0, scriptText.indexOf('>') + 1); 
+			scripts[i].src = scripts[i].src.match(/src\s*=\s*(\"([^\"]*)\"|\'([^\']*)\'|([^\s]*)[\s>])/i); 
+			if(!scripts[i].src) {scripts.splice(i, 1);continue;}
+			if (scripts[i].src) { 
+				if (scripts[i].src[2]) { 
+					scripts[i].src = scripts[i].src[2]; 
+				} 
+				else if (scripts[i].src[3]) { 
+					scripts[i].src = scripts[i].src[3]; 
+				} 
+				else if (scripts[i].src[4]) { 
+					scripts[i].src = scripts[i].src[4]; 
+				} 
+				else { 
+					scripts[i].src = ""; 
+				} 
+			} 
+		}
+		
+		return scripts;
+	},
+	
+	formatMsg: function (){
+		// 数据长度为空,则直接返回
+		var result = '';
+		
+		if (arguments.length == 0){
+			return result;
+		}
+		
+		var str = arguments[0] ? arguments[0] : '';
+		var valArr = arguments[1] ? arguments[1] : [];
+	 
+		if(typeof str !== 'string' || Object.prototype.toString.call(valArr) !== '[object Array]'){
+			return result;
+		}
+		// 使用正则表达式,循环替换占位符数据
+		for (var i = 0; i < valArr.length; i++){
+			str = str.replace(new RegExp("\\{\\s*" + i + "\\s*\\}", "g"), valArr[i]);
+		}
+		
+		result = str;
+		
+		return result;
+	},
+	escapeSpecChar: function(srcString) {
+	    // 转义之后的结果
+	    var escapseResult = srcString;
+
+	    // javascript正则表达式中的特殊字符
+	    var jsSpecialChars = ["\\", "^", "$", "*", "?", ".", "+", "(", ")", "[",
+	        "]", "|", "{", "}"];
+
+	    // jquery中的特殊字符,不是正则表达式中的特殊字符
+	    var jquerySpecialChars = ["~", "`", "@", "#", "%", "&", "=", "'", "\"",
+	        ":", ";", "<", ">", ",", "/"];
+
+	    for (var i = 0; i < jsSpecialChars.length; i++) {
+	        escapseResult = escapseResult.replace(new RegExp("\\"
+	            + jsSpecialChars[i], "g"), "\\"
+	            + jsSpecialChars[i]);
+	    }
+
+	    for (var i = 0; i < jquerySpecialChars.length; i++) {
+	        escapseResult = escapseResult.replace(new RegExp(jquerySpecialChars[i],
+	            "g"), "\\" + jquerySpecialChars[i]);
+	    }
+
+	    return escapseResult;
+	},
+
+	isUndef: function(v) {
+		return v === undefined || v === null || v === "";
+	},
+
+	// 判断是否渲染了多页签
+	isRenderTabBar:function(){
+		return window._isTabBar === 'true' && $('#shrTabBar',top.document).length >0;
+	},
+
+	//获取assignmentID,提供公共方法进行调用
+	getAssignmentId: function (url) {
+		var assignID = shr.getUrlRequestParam("assignmentID", url);
+		if(!assignID){
+			assignID = shr.getUrlRequestParam("assignmentId", url);
+		}
+		if(!assignID){
+			assignID = shr.getUrlRequestParam("assigmentId", url);
+		}
+
+		return assignID;
+	},
+
+	isNoPermField: function(noPermFields, field){
+		if(null != noPermFields && noPermFields.length > 0){
+			for(var i=0;i<noPermFields.length;i++){
+				if(noPermFields[i].name == field) {
+					return true;
+				}
+			}
+		}
+		return false;
+	},
+
+	//是否无查看权限字段
+	isNoViewPermField: function (field) {
+		return this.isNoPermField(noPermFields, field);
+	},
+
+	//是否无编辑权限字段
+	isNoEditPermField: function (field) {
+		return this.isNoPermField(noEditPermFields, field);
+	},
+
+	/** 随机生成固定位数或者一定范围内的字符串数字组合
+	 * @param {Number} min 范围最小值
+	 * @param {Number} max 范围最大值,当不传递时表示生成指定位数的组合
+	 * @param {String} charStr指定的字符串中生成组合
+	 * @returns {String} 返回字符串结果
+	 * */
+	randomRange: function(min, max, charStr){
+		var returnStr = "", //返回的字符串
+			range; //生成的字符串长度
+			
+		//随机生成字符
+		var autoGetStr = function(){
+			var charFun = function(){
+				var n= Math.floor(Math.random()*62);
+				if(n<10){
+					return n; //1-10
+				}
+				else if(n<36){
+					return String.fromCharCode(n+55); //A-Z
+				}
+				else{
+					return String.fromCharCode(n+61); //a-z    
+				}
+			}
+			while(returnStr.length< range){
+				returnStr += charFun();
+			}
+		};
+		
+		//根据指定的字符串中生成组合
+		var accordCharStrGet = function(){
+			for(var i=0; i<range; i++){
+				var index = Math.round(Math.random() * (charStr.length-1));
+				returnStr += charStr.substring(index,index+1);
+			}
+		};
+		if(typeof min == 'undefined'){
+			min = 10;
+		}
+		if(typeof max == 'string'){
+			charStr = max;
+		}
+		range = ((max && typeof max == 'number') ? Math.round(Math.random() * (max-min)) + min : min);
+		
+		if(charStr){
+			accordCharStrGet();
+		}else{
+			autoGetStr();
+		}
+		return returnStr;
+	},
+
+	//对象型数组根据对象的某个属性进行排序   type:默认是升序排序,传参DES则降序排列
+	compare: function(property, type) {
+		return function(a, b){
+			var value1 = a[property];
+			var value2 = b[property];
+			if(type == 'DES') {
+				return value2 - value1;
+			}else{
+				return value1 - value2;
+			}
+			
+		}
+	},
+
+	//父界面直接调用jquery ui方法时,由于选择不同导致提示未初始化,所以采用增加方法的方式解决
+	setBreadcrumb: function(tabAndCard, switchNode) {
+		var breadcrumbItems = $('#breadcrumb').shrBreadcrumb('getItems');
+		var breadCrumbLocationTop = top.shr.getUrlRequestParam('breadCrumbLocationTop');
+        
+        if(breadCrumbLocationTop == 'true') {
+            breadcrumbItems[0].location = 'top';
+            breadcrumbItems[1].location = 'top';
+            breadcrumbItems[2].location = 'top';
+		}
+		
+		if(breadcrumbItems[0].location == undefined) {
+			breadcrumbItems[0].location = 'top';
+			if(tabAndCard) {
+				breadcrumbItems.splice(1, 0, tabAndCard.tabs);
+				breadcrumbItems.splice(2, 0, {url: parent.window.location + '&index=1', name: tabAndCard.cards.name, location: 'top'});
+			}
+
+			if(breadcrumbItems.length > 4 && switchNode) {
+                breadcrumbItems.splice(3, breadcrumbItems.length - 4);
+            }else if(breadcrumbItems.length > 5) {
+                breadcrumbItems.splice(3, breadcrumbItems.length - 5);
+            }
+        }else{
+            breadcrumbItems[0].location = 'top';
+            if(tabAndCard) {
+                if(breadcrumbItems[2].name != tabAndCard['cards'].name) {
+                    breadcrumbItems.splice(2, 0, {url: parent.window.location + '&index=1', name: tabAndCard.cards.name, location: 'top'});
+                }
+			}
+			
+			if(breadcrumbItems.length > 4 && switchNode) {
+                breadcrumbItems.splice(3, breadcrumbItems.length - 4);
+            }else if(breadcrumbItems.length > 5) {
+                breadcrumbItems.splice(3, breadcrumbItems.length - 5);
+            }
+        }
+        
+        $('#breadcrumb').shrBreadcrumb('setItems', breadcrumbItems);
+	},
+	
+	/**
+	 * 适配OSF响应数据格式
+	 */
+	adapteOSFResponseDataFormat: function( obj ) {
+		var returnObject = obj;
+		 if( shr.isStandardOSFResponseFormatByResponseData( obj ) ) {
+	   		 if(obj['errCode'] ==0){
+	   			 if(obj['_e_x_t_d_'] && obj['_e_x_t_d_']['_e_s_k_'] && obj['_e_x_t_d_']['_d_k_']){
+	       			 var esk = shr.decryptForAes_CBC(obj['_e_x_t_d_']['_e_s_k_'],obj['_e_x_t_d_']['_d_k_']);
+	       			 returnObject = shr.decryptForAes_CBC(obj.data,esk);
+	       		 }else{
+	       			 returnObject = JSON.stringify( obj.data );
+	       		 }
+	   		 }else{
+	   			 returnObject = null;
+	   			 shr.showError({message: obj['errMsg']});
+	   		 }
+		 }
+		 return returnObject;
+	},
+	
+	isStandardOSFResponseFormatByResponseData: function( responseDataObject ) {
+
+		if( !$.isPlainObject( responseDataObject ) ) {
+			return false ;
+		}
+		// attribute list 
+		var standardOSFResponseObjectProperties = ['errCode','bizCode','data','errMsg','_e_x_t_d_'];
+		for( var property in standardOSFResponseObjectProperties ) {
+			if( !responseDataObject.hasOwnProperty( standardOSFResponseObjectProperties[property] ) ) {
+				return false;
+			}
+		}
+		
+		return true;
+	},
+	
+	generateOSFSignature: function(openServiceUrl){
+		return shr.encryptForAes_CBC(openServiceUrl+','+Math.floor(Math.random() * (50000 - 1) + 1)+','+new Date().getTime());
+	},
+	
+	/**
+     * 图片预览
+     * url: 需要预览图片的src,如果不存在url可以直接传null
+     * $picArr: 需要预览图片的jquery对象集合
+     */
+	previewPic: function(url, $picArr) {
+		var $topBody = $(window.top.document.body);
+        if(!url) {
+            $picArr.on('click', function() {
+                var index = getPreviewImgIndex($(this).attr('src'));
+                $topBody.append(getPicTemplate($(this).attr('src'), index));
+                $topBody.find('.zoomableContainer').data('imgArr', $picArr);
+                $topBody.find('.zoomableContainer').css('top', window.top.document.documentElement.scrollTop);
+                $topBody.css({'overflow': 'hidden'});
+                $topBody.css({'top': $(_top.document).scrollTop()});
+    
+                previewPicListener();
+            });
+        }else{
+            $topBody.append(getPicTemplate(url));
+		}
+		
+		var getPicTemplate = function(url, index) {
+            var picPreview = [
+                '<div class="zoomableContainer" style="width:100%;height:100%;position: absolute;top: 0;z-index: 9999;background-color: rgba(0, 0, 0, 0.7);text-align: center;">',
+                    '<img id="previewClose" src="/shr/styles/images/attachment-icon-close.png" style="position: absolute;top: 25px;right: 30px;cursor:pointer;z-index: 99999">',
+                    '<div style="margin:auto;width: 100%;height: 100%;overflow: hidden;justify-content: center;align-items: center;display: flex;position: relative;">',
+                        '<img id="preViewImg" imgIndex="' + index + '" src="' + url + '" style="width: auto;transform: translate3d(0px, 0px, 0px) scale3d(1, 1, 1);position: absolute;cursor: move;">',
+                    '</div>',
+                    '<div class="bottomBtn" style="margin-top: 15px;position: absolute;left: calc(50% - 120px);bottom: 15px;">',
+                        '<img id="previewPrev" src="/shr/styles/images/attachment_prev.png" style="cursor:pointer;">',
+                        '<img id="previewDownload" src="/shr/styles/images/attachment_enlarge.png" style="cursor:pointer;margin-left: 20px;margin-right: 20px;">',
+                        '<img id="previewRotate" src="/shr/styles/images/attachment_rotate.png" style="cursor:pointer;margin-left: 20px;margin-right: 20px;">',
+                        '<img id="previewOrigin" src="/shr/styles/images/attachment_narrow.png" style="cursor:pointer;margin-left: 20px;margin-right: 20px;">',
+                        '<img id="previewNext" src="/shr/styles/images/attachment_next.png" style="cursor:pointer;">',
+                    '</div>',
+                '</div>'
+            ];
+    
+            return picPreview.join('');
+		};
+		
+		var previewPicListener = function() {
+            //放大
+            var $topBody = $(window.top.document.body);
+            var $preViewImg = $topBody.find('#preViewImg');
+            var imgArr = $topBody.find('.zoomableContainer').data('imgArr');
+            $topBody.find('#previewDownload').on('click', function(){
+                var scale = getPreviewPicScale();
+                var deg = getPreviewPicDeg();
+                
+                $preViewImg.css('transform', 'translate3d(0px, 0px, 0px) scale3d(' + 1.2 * scale + ', ' + 1.2 * scale + ', 1) rotate(' + deg + 'deg)');
+            })
+    
+            //翻转图片
+            $topBody.find('#previewRotate').on('click', function(){
+                var scale = getPreviewPicScale();
+                if(getPreviewPicDeg() == 0) {
+                    $preViewImg.css('transform', 'translate3d(0px, 0px, 0px) scale3d(' + scale + ', ' + scale + ', 1) rotate(90deg)');
+                    return;
+                }
+    
+                if(getPreviewPicDeg() == 90) {
+                    $preViewImg.css('transform', 'translate3d(0px, 0px, 0px) scale3d(' + scale + ', ' + scale + ', 1) rotate(180deg)');
+                    return;
+                }
+    
+                if(getPreviewPicDeg() == 180) {
+                    $preViewImg.css('transform', 'translate3d(0px, 0px, 0px) scale3d(' + scale + ', ' + scale + ', 1) rotate(270deg)');
+                    return;
+                }
+    
+                if(getPreviewPicDeg() == -90) {
+                    $preViewImg.css('transform', 'translate3d(0px, 0px, 0px) scale3d(' + scale + ', ' + scale + ', 1) rotate(0deg)');
+                    return;
+                }
+            })
+    
+            //缩小
+            $topBody.find('#previewOrigin').on('click', function(){
+                var scale = getPreviewPicScale();
+                var deg = getPreviewPicDeg();
+    
+                $preViewImg.css('transform', 'translate3d(0px, 0px, 0px) scale3d(' + 0.8 * scale + ', ' + 0.8 * scale + ', 1) rotate(' + deg + 'deg)');
+            })
+    
+            $topBody.find('#previewClose').on('click', function(){
+                $topBody.css({'overflow': 'auto'});
+                $topBody.find('#previewClose').parent().remove();
+            })
+    
+            //上一张
+            $topBody.find('#previewPrev').on('click', function(){
+                var index = parseInt($preViewImg.attr('imgindex'));
+                if(index == imgArr.length - 1) {
+                    $topBody.find('#previewNext').attr('src', '/shr/styles/images/attachment_next.png')
+                }
+    
+                if(index == 1) {
+                    $(this).attr('src', '/shr/styles/images/attachment_prev_disable.png')
+                }
+    
+                if(index == 0) return;
+    
+                $preViewImg.attr('src', $(imgArr[index - 1]).attr('src'));
+                $preViewImg.attr('imgindex', index - 1);
+            });
+    
+            //下一张
+            $topBody.find('#previewNext').on('click', function(){
+                var index = parseInt($preViewImg.attr('imgindex'));
+    
+                if(index == 0) {
+                    $topBody.find('#previewPrev').attr('src', '/shr/styles/images/attachment_prev.png')
+                }
+    
+                if(index == imgArr.length - 2) {
+                    $(this).attr('src', '/shr/styles/images/attachment_next_disable.png')
+                }
+    
+                if(index == imgArr.length - 1) return;
+    
+                $preViewImg.attr('src', $(imgArr[index + 1]).attr('src'));
+                $preViewImg.attr('imgindex', index + 1);
+            });
+    
+            //拖动图片
+            var canMove = false;
+            var dragX, dragY;
+            $preViewImg.on('mousedown', function(e) {
+                e.preventDefault()
+                canMove = true;
+                dragX = e.clientX - $preViewImg[0].offsetLeft;
+                dragY = e.clientY - $preViewImg[0].offsetTop;
+            });
+    
+            $preViewImg.on('mousemove', function(e) {
+                e.preventDefault()
+                if(canMove) {
+                    var left = e.clientX - dragX;
+                    var top = e.clientY - dragY;
+                }
+    
+                if(left < 0) {
+                    left = left;
+                }else if(left > _top.window.innerWidth - $preViewImg[0].offsetWidth) {
+                    left = left;
+                }
+                
+                if(top < 0) {
+                    top = top;
+                }else if(top > _top.window.innerHeight - $preViewImg[0].offsetHeight) {
+                    top = top;
+                }
+    
+                $preViewImg.css({
+                    left: left + 'px',
+                    top: top + 'px'
+                });
+            });
+            
+            $preViewImg.on('mouseup', function(e) {
+                e.preventDefault()
+                canMove = false;
+            });
+            
+            //滑动滚轮实现图片的放大和缩小
+            $preViewImg.on("mousewheel", function (e) {
+                e.preventDefault();
+                var deg = getPreviewPicDeg();
+                var scale = getPreviewPicScale();
+                var del = 0;
+                if(e.originalEvent.wheelDelta) {
+                    del = e.originalEvent.wheelDelta;
+                }else if(e.originalEvent.detail) {
+                    del = e.originalEvent.detail * -1;
+                } 
+    
+                if(del > 0) {
+                    // 放大
+                    $preViewImg.css('transform', 'translate3d(0px, 0px, 0px) scale3d(' + 1.2 * scale + ', ' + 1.2 * scale + ', 1) rotate(' + deg + 'deg)');
+                }else if(del < 0) {
+                    // 缩小
+                    $preViewImg.css('transform', 'translate3d(0px, 0px, 0px) scale3d(' + 0.8 * scale + ', ' + 0.8 * scale + ', 1) rotate(' + deg + 'deg)');
+                }
+            });
+		};
+		
+		//获取图片当前的旋转角度
+        var getPreviewPicDeg = function() {
+            var $topBody = $(window.top.document.body);
+            var $preViewImg = $topBody.find('#preViewImg');
+            var values = $preViewImg.css('transform').split('(')[1].split(')')[0].split(',');
+            var deg = Math.round(Math.atan2(values[1], values[0]) * (180 / Math.PI));
+
+            return deg;
+        };
+
+        //获取图片当前的放大或者缩小值
+        var getPreviewPicScale = function() {
+            var $topBody = $(window.top.document.body);
+            var $preViewImg = $topBody.find('#preViewImg');
+            var values = $preViewImg.css('transform').split('(')[1].split(')')[0].split(',');
+            var scale = Math.sqrt(values[0] * values[0] + values[1] * values[1]);
+
+            return scale;
+        };
+
+        //获取点击预览时的图片数组下标
+        var getPreviewImgIndex = function(src) {
+            var imgArr = $picArr;
+            var index = 0;
+            for(var i = 0;i < imgArr.length;i++) {
+                if(src == $(imgArr[i]).attr('src')) {
+                    index = i;
+                    break;
+                }
+            }
+
+            return index;
+        };
+	}
+});
+
+/**
+ * jQuery JSON Plugin
+ * version: 2.3 (2011-09-17)
+ *
+ * This document is licensed as free software under the terms of the
+ * MIT License: http://www.opensource.org/licenses/mit-license.php
+ *
+ * Brantley Harris wrote this plugin. It is based somewhat on the JSON.org
+ * website's http://www.json.org/json2.js, which proclaims:
+ * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that
+ * I uphold.
+ *
+ * It is also influenced heavily by MochiKit's serializeJSON, which is
+ * copyrighted 2005 by Bob Ippolito.
+ */
+
+(function( $ ) {
+
+	var	escapeable = /["\\\x00-\x1f\x7f-\x9f]/g,
+		meta = {
+			'\b': '\\b',
+			'\t': '\\t',
+			'\n': '\\n',
+			'\f': '\\f',
+			'\r': '\\r',
+			'"' : '\\"',
+			'\\': '\\\\'
+		};
+	
+	$.ajaxSetup({
+		
+	    // add ext RequestHeader For OSF request.
+		beforeSend: function( jqXHR,ajaxOptions ) {
+			// if current request is OSF Request, then check adapteOSFResponseDataFormat. default value is true;
+			// if you want to use standard response data format ,then set options.adapteOSFResponseDataFormat = false;
+			var adapteOSFResponseDataFormat = ( ajaxOptions && ajaxOptions.adapteOSFResponseDataFormat ) ? ajaxOptions.adapteOSFResponseDataFormat : true;
+			var openServiceUrl =  shr.getOpenServiceFullPath() ;
+			var _requsetUrl = ajaxOptions.url ;
+			var isOSFRequest = ( _requsetUrl && _requsetUrl.indexOf(openServiceUrl) >= 0 ) ? true : false ;
+			var isGetTreeDataURL = ( _requsetUrl && _requsetUrl.indexOf(shr.getTreeDataURL) >= 0 ) ? true : false ;
+			function getOSFReqHeaderSignature(ajaxOptions){
+				
+			}
+			// set ajaxOptions.adapteOSFResponseDataFormat
+			ajaxOptions.adapteOSFResponseDataFormat = adapteOSFResponseDataFormat;
+			ajaxOptions.isOSFRequest = isOSFRequest;
+			
+			if( isOSFRequest ) {
+				jqXHR.adapteOSFResponseDataFormat = adapteOSFResponseDataFormat;
+				jqXHR.isOSFRequest = isOSFRequest;
+				jqXHR.setRequestHeader("X-OSF-Signature", shr.generateOSFSignature(openServiceUrl));
+			}
+			if(isGetTreeDataURL){
+				jqXHR.setRequestHeader("x-shr-encrypt-F7", shr.getXShrEncryptF7Value());
+			}
+		},
+		
+		// adapte OSF Response Data by extend dataFilter.
+		dataFilter: function( data, dataType ) {
+		    var _options = this,jsonObj;
+
+		    // if not OSFRequest, return original data
+		    if( !( _options && _options.isOSFRequest )  ){
+		    	return data ;
+		    }
+		    
+			if( _options && _options.adapteOSFResponseDataFormat ) {
+				if( data ){
+					jsonObj = ( shr.isJSON(data)) ?  JSON.parse( data ) : data  ;
+					// Judgment base on results
+					//  need Judgment dataType,here is JSON Type, maybe text,xml and so on. to do other Logic .........
+					return shr.isStandardOSFResponseFormatByResponseData( jsonObj ) ? shr.adapteOSFResponseDataFormat( jsonObj ) :  data;
+				}
+			}else{
+				return data;
+			}
+		}
+	});
+    
+    
+	/**
+	 * jQuery.toJSON
+	 * Converts the given argument into a JSON respresentation.
+	 *
+	 * @param o {Mixed} The json-serializble *thing* to be converted
+	 *
+	 * If an object has a toJSON prototype, that will be used to get the representation.
+	 * Non-integer/string keys are skipped in the object, as are keys that point to a
+	 * function.
+	 *
+	 */
+	$.toJSON = typeof JSON === 'object' && JSON.stringify
+		? JSON.stringify
+		: function( o ) {
+
+		if ( o === null ) {
+			return 'null';
+		}
+
+		var type = typeof o;
+
+		if ( type === 'undefined' ) {
+			return undefined;
+		}
+		if ( type === 'number' || type === 'boolean' ) {
+			return '' + o;
+		}
+		if ( type === 'string') {
+			return $.quoteString( o );
+		}
+		if ( type === 'object' ) {
+			if ( typeof o.toJSON === 'function' ) {
+				return $.toJSON( o.toJSON() );
+			}
+			if ( o.constructor === Date ) {
+				var	month = o.getUTCMonth() + 1,
+					day = o.getUTCDate(),
+					year = o.getUTCFullYear(),
+					hours = o.getUTCHours(),
+					minutes = o.getUTCMinutes(),
+					seconds = o.getUTCSeconds(),
+					milli = o.getUTCMilliseconds();
+
+				if ( month < 10 ) {
+					month = '0' + month;
+				}
+				if ( day < 10 ) {
+					day = '0' + day;
+				}
+				if ( hours < 10 ) {
+					hours = '0' + hours;
+				}
+				if ( minutes < 10 ) {
+					minutes = '0' + minutes;
+				}
+				if ( seconds < 10 ) {
+					seconds = '0' + seconds;
+				}
+				if ( milli < 100 ) {
+					milli = '0' + milli;
+				}
+				if ( milli < 10 ) {
+					milli = '0' + milli;
+				}
+				return '"' + year + '-' + month + '-' + day + 'T' +
+					hours + ':' + minutes + ':' + seconds +
+					'.' + milli + 'Z"';
+			}
+			if ( o.constructor === Array ) {
+				var ret = [];
+				for ( var i = 0; i < o.length; i++ ) {
+					ret.push( $.toJSON( o[i] ) || 'null' );
+				}
+				return '[' + ret.join(',') + ']';
+			}
+			var	name,
+				val,
+				pairs = [];
+			for ( var k in o ) {
+				type = typeof k;
+				if ( type === 'number' ) {
+					name = '"' + k + '"';
+				} else if (type === 'string') {
+					name = $.quoteString(k);
+				} else {
+					// Keys must be numerical or string. Skip others
+					continue;
+				}
+				type = typeof o[k];
+
+				if ( type === 'function' || type === 'undefined' ) {
+					// Invalid values like these return undefined
+					// from toJSON, however those object members
+					// shouldn't be included in the JSON string at all.
+					continue;
+				}
+				val = $.toJSON( o[k] );
+				pairs.push( name + ':' + val );
+			}
+			return '{' + pairs.join( ',' ) + '}';
+		}
+	};
+
+	/**
+	 * jQuery.evalJSON
+	 * Evaluates a given piece of json source.
+	 *
+	 * @param src {String}
+	 */
+	$.evalJSON = typeof JSON === 'object' && JSON.parse
+		? JSON.parse
+		: function( src ) {
+		return eval('(' + src + ')');
+	};
+
+	/**
+	 * jQuery.secureEvalJSON
+	 * Evals JSON in a way that is *more* secure.
+	 *
+	 * @param src {String}
+	 */
+	$.secureEvalJSON = typeof JSON === 'object' && JSON.parse
+		? JSON.parse
+		: function( src ) {
+
+		var filtered = 
+			src
+			.replace( /\\["\\\/bfnrtu]/g, '@' )
+			.replace( /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
+			.replace( /(?:^|:|,)(?:\s*\[)+/g, '');
+
+		if ( /^[\],:{}\s]*$/.test( filtered ) ) {
+			return eval( '(' + src + ')' );
+		} else {
+			throw new SyntaxError( 'Error parsing JSON, source is not valid.' );
+		}
+	};
+
+	/**
+	 * jQuery.quoteString
+	 * Returns a string-repr of a string, escaping quotes intelligently.
+	 * Mostly a support function for toJSON.
+	 * Examples:
+	 * >>> jQuery.quoteString('apple')
+	 * "apple"
+	 *
+	 * >>> jQuery.quoteString('"Where are we going?", she asked.')
+	 * "\"Where are we going?\", she asked."
+	 */
+	$.quoteString = function( string ) {
+		if ( string.match( escapeable ) ) {
+			return '"' + string.replace( escapeable, function( a ) {
+				var c = meta[a];
+				if ( typeof c === 'string' ) {
+					return c;
+				}
+				c = a.charCodeAt();
+				return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
+			}) + '"';
+		}
+		return '"' + string + '"';
+	};
+	
+	$.getUrlParam = function(name){
+		var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
+		var r = window.location.search.substr(1).match(reg);
+		// if (r!=null) return unescape(r[2]); return null;
+		if (r!=null) return decodeURIComponent(r[2]); return null;
+	}
+
+})( jQuery );
+
+/**
+ * 打开滚动条
+ * @param type
+ */
+function openLoader(type, tip) {
+	if(!type)  type = 1;
+	$("#loaderTip", _top.document).text(tip ? tip : $("#loaderTip" + type, _top.document).text());
+	
+	$("#loader", _top.document).show().css("display", "block");
+}
+
+/**
+ * JSON转化时,对循环结构的转化则会出错
+ * 解决方法:避免对循环结构进行转化
+ */
+JSON.stringifyOnce = function(obj, replacer, indent){
+	var printedObjects = [];
+	var printedObjectKeys = [];
+	
+	function printOnceReplacer(key, value){
+		if ( printedObjects.length > 20000){
+			return 'object too long';
+		}
+		var printedObjIndex = false;
+		printedObjects.forEach(function(obj, index){
+			if(obj===value){
+				printedObjIndex = index;
+			}
+		});
+	
+		if ( key == ''){ 
+			printedObjects.push(obj);
+			printedObjectKeys.push("root");
+			return value;
+		} else if (printedObjIndex+"" != "false" && typeof(value)=="object"){
+			if ( printedObjectKeys[printedObjIndex] == "root"){
+				return "(pointer to root)";
+			}else{
+				return "(see " + ((!!value && !!value.constructor) ? value.constructor.name.toLowerCase() : typeof(value)) + " with key " + printedObjectKeys[printedObjIndex] + ")";
+			}
+		} else {
+			var qualifiedKey = key || "(empty key)";
+			printedObjects.push(value);
+			printedObjectKeys.push(qualifiedKey);
+			if(replacer){
+				return replacer(key, value);
+			}else{
+				return value;
+			}
+		}
+	}
+	return JSON.stringify(obj, printOnceReplacer, indent);
+};
+
+/**
+ * 关闭滚动条
+ */
+function closeLoader() {
+	$("#loader", _top.document).hide().css("display", "none");
+}
+
+
+$(document).ready(function() {
+	if(!window.console) {console={}; console.log = function(){};}
+	if ($.browser.msie && $.browser.version < 9) {
+		window.location.href = "browser/browser.html";
+	}
+	_top = getTop();
+
+	// IE9 support (input, textarea tag) placeholder attribute, use jQuery Placeholder Plugin v2.3.1
+	var textElements = $('input, textarea');
+	if( textElements && textElements.placeholder ){
+		try {
+			textElements.placeholder();
+		} catch (error) {
+			console.log( " placeholder  init error " );
+		}
+	}
+
+	if(window.localStorage.getItem('screenModel') == 'true') {
+		$('#castScreenModel a').text($.shrI18n.common.screenModel.standScreenModel);
+		shr.loadCss('/shr/styles/castScreenModel.css');
+	}
+	
+	// 使用节流函数来监听页面的缩放,间隔时间可自行设置,防止每次滚动实时监听导致卡顿。(当浏览器宽度小于1200时,不建议用户使用,当浏览器缩放时,提示用户复原)
+	// 并且增加“不再提醒”功能,如果用户点击了不再提醒,则通过localStorage存一个标识,和账号绑定,即该账号不会在当前设备上提示。
+	// 增加一个判断,当有些页面没有用户id时,则不进行缩放监听。
+	// var isScading = shr.getUserInfo().id;
+	// if (isScading) {
+	// 	try{
+	// 		var isPrompts = localStorage.getItem(isScading + '#ScreenZoom');
+	// 		if (!isPrompts) {
+	// 			addWindowResize();
+	// 			$(top.window).off('resize', throttle(addWindowResize, 500)).on('resize', throttle(addWindowResize, 500));
+	// 		}
+	// 	} catch (error){
+	// 		console.log(error);
+	// 	}
+	// }
+	
+	$(document).on('click', function(e) {
+		if(e.target.className != 'parallelNodeNum' && e.target.className != 'rateProgress' && e.target.className != 'rateProgressImg') {
+			$(window.parent.document).find('.parallelNode').hide();
+			$(window.parent.document).find('.rateProgressToolsDiv').hide();
+		}
+	});
+
+	//console.log($('#breadcrumb').shrBreadcrumb('getItems'));
+});
+
+function addWindowResize() {
+	try{
+		// 再次增加一个判断,如果点了不再提醒,则直接返回
+		var isPrompts = localStorage.getItem(shr.getUserInfo().id + '#ScreenZoom');
+		if (isPrompts) {
+			return
+		}
+		var currentZoom = shr.detectZoom();
+		// 当缩放比例大于150或者小于100时,和当浏览器宽度小于1200时,提示!
+		if(currentZoom  < 100 || currentZoom > 150 ) { 
+			shr.showMaskWarning({
+				message: $.shrI18n.common.tips.screenZoom
+			});
+		} else if ($(top.window).width() < 1200) {
+			shr.showMaskWarning({
+				message: $.shrI18n.common.tips.screenWidth
+			});
+		}
+	} catch (error){
+		console.log(error);
+	}
+}
+
+// 节流函数,防止频繁触发,可以通过时间间隔来控制触发的间隔,即在规定时间间隔内只会触发一次。
+function throttle(callback,delay){
+	var timer,
+		begin = new Date();
+	return function(){
+		var current = new Date();
+		clearTimeout(timer);
+		if(current - begin >= delay){
+			callback();
+			begin = current;
+		}else{
+			timer = setTimeout(function() {
+				callback();
+			},delay);
+		}
+	}
+}
+
+//内嵌入EAS页面时,改变Top指向
+function getTop(){
+	// 当shr单据在门户中打开时,嵌套在iframe id='bill-frame'中,iframe的创建过程参考门户工作流 approve.js 492行
+	// shr单据在门户中打开时,从8.5版本发生变化,对应id为:$(".portal-page","#pageContainer").not(".hide").attr("id"); update by tiangang_yang 2018/03/07
+	// shr单据在门户中打开时,从8.5版本发生变化,根据class='portal-page'来获取; update by tiangang_yang 2018/06/25
+	return  isFromPortal()?window:top;
+}
+
+function isFromPortal(){
+	var billFrame  = (frameElement && (frameElement.getAttribute("id") == "bill-frame" || frameElement.getAttribute("id") == "billFrame"));
+	if(billFrame){
+		return frameElement;
+	}
+	//兼容portal-page
+	var billFrame2 = (frameElement && frameElement.getAttribute("class") == "portal-page");
+	if(billFrame2){
+		return billFrame2;
+	}
+	var billFrames = $(".portal-page","#pageContainer").not(".hide");
+	if(billFrames && billFrames.length >= 1){
+		return billFrames[0];
+	}
+	
+	// 兼容bos的85版本新流程中心iframe的id改动,增加按proInstId参数判断 by wei_yw_yang 2019/11/12
+	var src = frameElement && frameElement.getAttribute("src");
+	var billFrame3  = (src && src.indexOf('&proInstId=') != -1);
+	if(billFrame3){
+		return billFrame3;
+	}
+	return null;
+}
+
+/**
+* 描述:重写namedItem方法,解决IE下由于ID大小写问题导致窜行的问题。
+* @author BJJLG
+* @class 
+* @constructor
+* @return 
+*/
+if (window.HTMLCollection){
+	HTMLCollection.prototype.namedItem = function(name){
+	    var len = this.length,ret = null;
+	    if(len>0){
+	        for(var i=0;i<len;i++){
+	            if(this[i].id && this[i].id == name){
+	                ret = this[i];
+	                break;
+	            }
+	        }
+	    }
+	    return ret;
+	}
+}
+
+//进入全屏
+function enterfullscreen() {
+    var docElm = document.documentElement;
+    var requestMethod = docElm.requestFullScreen || //W3C
+    	docElm.webkitRequestFullScreen || //FireFox
+    	docElm.mozRequestFullScreen || //Chrome等
+    	docElm.msRequestFullscreen; //IE11
+	if (requestMethod) {
+	    requestMethod.call(docElm);
+	} else if (typeof window.ActiveXObject !== "undefined") {
+	    var wscript = new ActiveXObject("WScript.Shell");
+	    if (wscript !== null) {
+	        wscript.SendKeys("{F11}");
+	    }
+	}
+}
+
+function exitfullscreen() {
+	 // 判断各种浏览器,找到正确的方法
+    var exitMethod = document.exitFullscreen || //W3C
+        document.mozCancelFullScreen || //FireFox
+        document.webkitExitFullscreen || //Chrome等
+        document.msExitFullscreen; //IE11
+    if (exitMethod) {
+        exitMethod.call(document);
+    } else if (typeof window.ActiveXObject !== "undefined") { //for Internet Explorer
+        var wscript = new ActiveXObject("WScript.Shell");
+        if (wscript !== null) {
+            wscript.SendKeys("{F11}");
+        }
+    }
+}
+
+function checkFull() {
+	return document.fullscreenElement ||
+    	document.msFullscreenElement  ||
+    	document.mozFullScreenElement ||
+    	document.webkitFullscreenElement;
+}
+
+/**
+* 描述:重写Date,处理在不同时区的时候用中国时间格式横杆少一天,员工离职页点离职日期可以重现
+*/
+try {
+	if(Intl && Intl.DateTimeFormat().resolvedOptions().timeZone != 'Asia/Shanghai'){
+		var OldDate = Date;
+		// 重写arguments[0]
+		Date = function () {
+				var datePattern = /^\d{4}-\d{2}-\d{2}$/;
+				// 检查日期字符串是否符合格式
+				
+				var p = '';
+				// IOS环境,时间转化的问题,现在没有客户反馈暂时先不处理
+				// if (navigator.userAgent.includes('iPhone') || navigator.userAgent.includes('iPad')) {
+				// 	if (arguments.length > 0 && typeof (arguments[0]) === 'string' && arguments[0].includes('-')) {
+				// 		p = arguments[0].replace(/-/g, '/');
+				// 		arguments[0] = p;
+				// 	}
+				// } 
+				if (arguments.length > 0 && typeof (arguments[0]) === 'string' && arguments[0].indexOf('-') >= 0 && datePattern.test(arguments[0])) {
+					//p = arguments[0] + ' 00:00:00'; IE不兼容这种写法
+					p = arguments[0].replace(/-/g, '/');
+					arguments[0] = p;
+				}
+				var arr = Array.prototype.slice.call(arguments);
+				var str = '';
+				if(arr.length == 1){
+					return new OldDate(arr[0]);
+				}else{
+					str = arr.join(',');
+					return eval('new OldDate(' + str + ')');
+				}
+		}
+		// 继承原型函数
+		Date.prototype = OldDate.prototype;
+		// 继承静态函数,过滤已有的静态函数和参数,取数组差集
+		var oldDateStaticParam = Object.getOwnPropertyNames(OldDate);
+		var dateStaticParam = Object.getOwnPropertyNames(Date);
+		var diffParam = [];
+		for (var i = 0; i < oldDateStaticParam.length; i++) {
+			var find = false;
+			for (var j = 0; j < dateStaticParam.length; j++) {
+				if (oldDateStaticParam[i] === dateStaticParam[j]) {
+					find = true;
+					break;
+				}
+			}
+			if (!find) {
+				diffParam.push(oldDateStaticParam[i]);
+			}
+		}
+		for (var i = 0; i < diffParam.length; i++) {
+			Date[diffParam[i]] = OldDate[diffParam[i]];
+		}
+	}
+} catch (error) {
+	console.log(error);
+}

+ 2663 - 0
js/备份/atsOverTimeBillBatchEdit.js

@@ -0,0 +1,2663 @@
+var _rowMap;
+var isOTControl = false;
+var isOtrolByDateType = false;
+var fixedNum;
+shr.defineClass(
+    "shr.ats.AtsOverTimeBillBatchEdit",
+    shr.ats.atttenceEditFormImport,
+    {
+        filter: {},
+        OTContrlParams: {},
+        initalizeDOM: function () {
+            shr.ats.AtsOverTimeBillBatchEdit.superClass.initalizeDOM.call(this);
+            var that = this;
+            that.remoteCall({
+                type: "post",
+                method: "getDecimalPlace",
+                //handler:
+                //    "com.kingdee.shr.ats.web.handler.AtsBillBaseEditHandler",
+                success: function (res) {
+                    fixedNum = res;
+                }
+            });
+
+            //		that.getOTContrlParams();
+            //按组织填充按钮
+            $(
+                '<button type="button" style="margin-left:4px;margin-right:4px" class="shrshrbtn-primary shrbtn" id="orgfill">' +
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_17 +
+                    "</button>"
+            ).insertAfter($("#addRow_entries"));
+
+            var classfullNameService =
+                "com.kingdee.shr.ats.web.formEditImport.AtsOverTimeBillFileEditFormService";
+            //导入 按钮
+            $(
+                '<button type="button" style="margin-left:4px;margin-right:4px;display: none" class="shrshrbtn-primary shrbtn" id="import">' +
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_3 +
+                    "</button>"
+            ).insertAfter($("#addRow_entries"));
+            $("#import").click(function () {
+                that.importAction(null, classfullNameService);
+            });
+
+            $(".editGrid-toolbar").append(
+                '<div style="display: inline;padding-left: 20px;">' +
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_32 +
+                    '<div><div id="hasNum"></div>'
+            );
+            var serviceId = shr.getUrlRequestParam("serviceId");
+            var url =
+                shr.getContextPath() +
+                "/dynamic.do?checkLicense=true&uipk=com.kingdee.eas.hr.ats.app.OverTimeOrgFillForm";
+            url += "&serviceId=" + encodeURIComponent(serviceId);
+            $("#orgfill").click(function () {
+                $("#orgFillDiv").attr("src", url);
+                var gridNum = $("#entries").getGridParam("reccount");
+                $("#hasNum").val(gridNum);
+                $("#orgFillDiv").dialog({
+                    title:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_17,
+                    width: 1020,
+                    height: 450,
+                    modal: true,
+                    resizable: false,
+                    position: {
+                        my: "center",
+                        at: "top+20%",
+                        of: window
+                    },
+                    open: function (event, ui) {},
+                    buttons: [
+                        {
+                            text:
+                                jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_19,
+                            click: function () {
+                                //校验F7数据
+                                if (that.checkF7Data()) {
+                                    var oldRowIds = $("#entries").getDataIDs();
+                                    that.fillGrid();
+                                    var newRowIds = $("#entries").getDataIDs();
+                                    rowIds = that.getFillRowId(
+                                        oldRowIds,
+                                        newRowIds
+                                    );
+                                    $.each(rowIds, function (n, value) {
+                                        //that.calRestTimeLen(value); 2015-11-03:组织填充不用自动计算时长
+                                        that.changOtTimeTipInfo(value);
+                                    });
+                                    //检查不超过100条记录
+                                    //that.checkRowIsOver();
+                                    $(this).dialog("close");
+                                } else {
+                                    return;
+                                }
+                            }
+                        },
+                        {
+                            text:
+                                jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_5,
+                            click: function () {
+                                $(this).dialog("close");
+                            }
+                        }
+                    ]
+                });
+
+                $("#orgFillDiv").attr("style", "width:1020px;height:550px;");
+            });
+
+            var entries_cont = waf("#entries");
+            entries_cont.jqGrid("option", {
+                onChange: function (rowid, cellname, value, iRow, iCol) {
+                    console.log(rowid, cellname, value, iRow, iCol, 123123);
+                },
+                beforeSaveCell: function (
+                    rowid,
+                    cellname,
+                    value,
+                    iRow,
+                    iCol
+                ) {},
+                afterSaveCell: function (rowid, cellname, value, iRow, iCol) {
+                    if (value["adminOrgUnit.id"]) {
+                        $("#entries").jqGrid(
+                            "setCell",
+                            rowid,
+                            "adminOrgUnit.id",
+                            value["adminOrgUnit.id"]
+                        );
+                    }
+
+                    that.removePreShowError(rowid);
+                    if (cellname == "otDate") {
+                        var val = value;
+                        if (val.length <= 10) {
+                            val = val + " 00:00:00";
+                        }
+                        val &&
+                            $("#entries").jqGrid(
+                                "setCell",
+                                rowid,
+                                "startTime",
+                                val
+                            );
+                        val &&
+                            $("#entries").jqGrid(
+                                "setCell",
+                                rowid,
+                                "endTime",
+                                val
+                            );
+                        that.changeOverTimeType(rowid);
+                        that.calRestTimeLen(rowid);
+                        that.getOTContrlParams(rowid);
+                    }
+
+                    if (cellname == "otType") {
+                        that.changeOTCompens(rowid);
+                    }
+                    // 添加 开始时间  结束时间   休息时长(分钟) 响应时间
+                    if (
+                        cellname == "startTime" ||
+                        cellname == "endTime" ||
+                        cellname == "restTime"
+                    ) {
+                        if (cellname != "restTime") {
+                            that.calRestTimeLen(rowid);
+                        }
+                        that.calculateOTtimes(rowid);
+                    }
+                    if (cellname == "person") {
+                        that.calRestTimeLen(rowid);
+                        that.getOTContrlParams(rowid);
+                    }
+                    if (cellname == "applyOTTime") {
+                        // 加班小时数  发生改变就给予提示
+                        that.changOtTimeTipInfo(rowid);
+                    }
+                    if (
+                        cellname == "restStartTime" ||
+                        cellname == "restStartTime2" ||
+                        cellname == "restEndTime" ||
+                        cellname == "restEndTime2"
+                    ) {
+                        //计算休息时间,加班时间
+                        var startTime = $("#entries").jqGrid(
+                            "getCell",
+                            rowid,
+                            "startTime"
+                        );
+                        var endTime = $("#entries").jqGrid(
+                            "getCell",
+                            rowid,
+                            "endTime"
+                        );
+                        var restStartTime = $("#entries").jqGrid(
+                            "getCell",
+                            rowid,
+                            "restStartTime"
+                        );
+                        var restEndTime = $("#entries").jqGrid(
+                            "getCell",
+                            rowid,
+                            "restEndTime"
+                        );
+                        var restStartTime2 = $("#entries").jqGrid(
+                            "getCell",
+                            rowid,
+                            "restStartTime2"
+                        );
+                        var restEndTime2 = $("#entries").jqGrid(
+                            "getCell",
+                            rowid,
+                            "restEndTime2"
+                        );
+                        if (startTime == "" || endTime == "") {
+                            return;
+                        }
+                        
+                        var totalRestTime = 0;
+                        var totalRestTimeLong = 0;
+                        var restStartTimeOfDate;
+                        var restEndTimeOfDate;
+                        if(shr.getBowserInfo().browser === 'IE' || shr.getBowserInfo().browser === 'Safari'){
+                            restStartTime = restStartTime.replace(/-/g,'/');
+                            restEndTime = restEndTime.replace(/-/g,'/');
+                            restStartTime2 = restStartTime2.replace(/-/g,'/');
+                            restEndTime2 = restEndTime2.replace(/-/g,'/');
+                        }
+                        if (restStartTime != "" && restEndTime != "") {
+                            restStartTimeOfDate = new Date(restStartTime);
+                            restEndTimeOfDate = new Date(restEndTime);
+                            var times =
+                                restEndTimeOfDate.getTime() -
+                                restStartTimeOfDate.getTime();
+                            if (times < 0) {
+                                times = 0;
+                            }
+                            totalRestTimeLong += times;
+                            times = times / 1000 / 60;
+                            totalRestTime += times;
+                        }
+                        if (restStartTime2 != "" && restEndTime2 != "") {
+                            var restStartTime2OfDate = new Date(restStartTime2);
+                            var restEndTime2OfDate = new Date(restEndTime2);
+                            if (
+                                (restStartTime != "" &&
+                                    restEndTime2OfDate.getTime() >
+                                        restStartTimeOfDate.getTime() &&
+                                    restStartTimeOfDate.getTime() >=
+                                        restStartTime2OfDate.getTime()) ||
+                                (restEndTime != "" &&
+                                    restEndTimeOfDate.getTime() <=
+                                        restEndTime2OfDate.getTime() &&
+                                    restStartTime2OfDate.getTime() <
+                                        restEndTimeOfDate.getTime()) ||
+                                (restStartTime != "" &&
+                                    restEndTime != "" &&
+                                    restEndTimeOfDate.getTime() >=
+                                        restEndTime2OfDate.getTime() &&
+                                    restStartTime2OfDate.getTime() >=
+                                        restStartTimeOfDate.getTime())
+                            ) {
+                                //时间有交叉
+                                $("#entries").jqGrid(
+                                    "setCell",
+                                    rowid,
+                                    "restEndTime2",
+                                    restStartTime2
+                                );
+                            } else {
+                                var times =
+                                    restEndTime2OfDate.getTime() -
+                                    restStartTime2OfDate.getTime();
+                                if (times < 0) {
+                                    times = 0;
+                                }
+                                totalRestTimeLong += times;
+                                times = times / 1000 / 60;
+                                totalRestTime += times;
+                            }
+                        }
+                        var t1 = totalRestTime.toFixed(
+                            atsMlUtile.getSysDecimalPlace()
+                        );
+                        $("#entries").jqGrid("setCell", rowid, "restTime", t1);
+                        var startTime = NewDate(startTime + ":00");
+                        var endTime = NewDate(endTime + ":00");
+                        var se =
+                            endTime.getTime() -
+                            startTime.getTime() -
+                            totalRestTimeLong; // 毫秒
+                        var tfl = se / (3600 * 1000);
+                        $("#entries").jqGrid(
+                            "setCell",
+                            rowid,
+                            "applyOTTime",
+                            tfl
+                        );
+                        that.getOTContrlParams(rowid);
+                    }
+                },
+                afterEditCell: function (rowid, cellname, value, iRow, iCol) {
+                    if (
+                        cellname == "otType" &&
+                        that.OTContrlParams[rowid] &&
+                        that.OTContrlParams[rowid].isOtrolByDateType
+                    ) {
+                        $("#" + iRow + "_otType").shrPromptBox("disable");
+                    }
+                    if (cellname == "otCompens") {
+                        if (that.filter[rowid] == undefined) {
+                            // R20221006-0542 修复选择加班费后 再点击“补偿方式”F7就变成了调休的问题
+                            // that.changeOTCompens(rowid);
+                        }
+                        if (that.filter[rowid]) {
+                            //						$("#"+rowid+"_otCompens").shrPromptBox("setFilter",that.filter[rowid]);
+                            $(
+                                "#" +
+                                    $("#entries").jqGrid(
+                                        "getCell",
+                                        rowid,
+                                        "rn"
+                                    ) +
+                                    "_otCompens"
+                            ).shrPromptBox("setFilter", that.filter[rowid]);
+                        }
+                    }
+                    if (cellname == "person") {
+                        var hrOrgUnitId = $("#hrOrgUnit_el").val();
+                        $("#" + rowid + "_person")
+                            .shrPromptBox()
+                            .attr("data-params", hrOrgUnitId);
+                        $("#" + iRow + "_person").shrPromptBox("option", {
+                            onchange: function (e, value) {
+                                $("#entries").jqGrid(
+                                    "setCell",
+                                    rowid,
+                                    "person.number",
+                                    value.current
+                                        ? value.current["person.number"]
+                                        : ""
+                                );
+                            }
+                        });
+
+                    }
+                    if(cellname == "attAdminOrgUnit"){
+                        var personId = $("#entries").jqGrid("getCell", rowid, "person").id;
+                        var attendanceDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+
+                        if(!(personId && attendanceDate)){
+                            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_999});
+                            return false;
+                        }else{
+                            //$("#"+rowid+"_attPosition").shrPromptBox().attr("data-params", adminOrg);
+                            $("#"+iRow+"_attAdminOrgUnit").shrPromptBox("setOtherParams", {
+                                personId: personId,
+                                attendanceDate: attendanceDate
+                            });
+                        }
+
+
+                    }
+
+
+                }
+            });
+
+            that.setButtonVisible(); //初始化页面安装状态,如果是已经提交的或者审批通过的单据编辑按钮不显示
+            //隐藏提交生效按钮
+            if (that.getOperateState() == "EDIT") {
+                if (that.isFromWF()) {
+                    // 来自流程中心
+                    $("#submitEffect").hide();
+                    $("#submit").text(
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_25
+                    );
+                }
+            }
+
+            //审核编辑界面
+            if (
+                that.isFromWF() &&
+                that.getOperateState() == "EDIT" &&
+                $("#billState").val() != 0
+            ) {
+                $("#deleteRow_entries")
+                    .unbind("click")
+                    .attr("onclick", "")
+                    .css("cursor", "default");
+                $("#addRow_entries")
+                    .unbind("click")
+                    .attr("onclick", "")
+                    .css("cursor", "default");
+                $(".editGrid-toolbar").hide();
+                $("#submit").hide();
+
+                var lastRowNum = $("#entries").getGridParam("reccount");
+                for (var i = 1; i <= lastRowNum; i++) {
+                    var temp_id = $("#entries tr:eq(" + i + ")").attr("id");
+                    $("#entries").jqGrid(
+                        "setCell",
+                        temp_id,
+                        "person",
+                        "",
+                        "not-editable-cell"
+                    );
+                }
+            }
+
+            //考勤计算--已计算页签--明细显示模式--请假按钮进来,只显示提交生效按钮
+            if (
+                shr.getUrlParam("fromCalDetail") != null &&
+                shr.getUrlParam("fromCalDetail") == "1"
+            ) {
+                $("#save").hide();
+                $("#submit").hide();
+                $("#cancelAll").hide();
+                $("#import").hide();
+                $("#orgfill").hide();
+                $(".view_manager_header > div > div").eq(0).remove();
+                $("#submitEffect").addClass("shrbtn-primary");
+			$('#workAreaDiv .ui-jqgrid-bdiv').css('max-height','253px') // 当页面作为弹框时 表格过长则隐藏滑动
+            }
+            //增加业务组织处理
+            that.processF7ChangeEventHrOrgUnit();
+            var hrOrgUnitId = $("#hrOrgUnit_el").val();
+            that.initCurrentHrOrgUnit(hrOrgUnitId);
+            that.initCcPersonPrompt();
+        },
+        clearCCPersonIdsPrompt: function () {
+            if ($('#ccPersonIds').length == 0) {
+            return;
+        }
+        atsCcPersonUtils.clearCCPersonIdsPrompt(this);
+        },
+        initCcPersonPrompt: function () {
+            if ($('#ccPersonIds').length == 0) {
+            return;
+        }
+        atsCcPersonUtils.initCCPersonIdsPrompt(this);
+            if (this.getOperateState() != "VIEW") {
+                var person = $("#proposer").shrPromptBox("getValue");
+                if (!person) {
+                    // shr.showWarning({message:"Please select people."});
+                } else {
+                    $("#ccPersonIds").shrPromptBox("setOtherParams", {
+                        // handler: "com.kingdee.shr.ats.web.handler.team.F7.TeamPersonForEmpOrgF7ListHandler",
+                        personId: person.id
+                    });
+                }
+            }
+        },
+        processF7ChangeEventHrOrgUnit: function () {
+            var that = this;
+            if (that.getOperateState() != "VIEW") {
+                $("#hrOrgUnit").shrPromptBox("option", {
+                    onchange: function (e, value) {
+                        var info = value.current;
+                        that.initCurrentHrOrgUnit(info.id);
+                        //					that.emptyHrOrgBasedEntryData();
+                        // $("#entries_person_number").val("");
+                        // $("#entries_adminOrgUnit").val("");
+                        // $("#entries_position").val("");
+                    }
+                });
+            }
+        },
+        initCurrentHrOrgUnit: function (hrOrgUnitId) {
+            var that = this;
+            // $("#entries_person").shrPromptBox().attr("data-params",hrOrgUnitId);
+            that.initQuerySolutionHrOrgUnit(hrOrgUnitId);
+        },
+        //切换业务组织,清空分录与业务组织相关的字段:人员、补签卡原因(视图上配)
+        //	,emptyHrOrgBasedEntryData : function(){
+        //		$("#entries").find('[aria-describedby=entries_person], [aria-describedby=entries_otCompens],'
+        //			+ '[aria-describedby=entries_otReason]').text("");
+        //	}
+        initQuerySolutionHrOrgUnit: function (hrOrgUnitId) {
+            var that = this;
+            that.remoteCall({
+                type: "post",
+                method: "initQuerySolution",
+                param: {
+                    hrOrgUnitId: hrOrgUnitId
+                },
+                async: true,
+                success: function (res) {}
+            });
+        },
+        //新增 jqgrid 行 方法, 复写
+        addRowAction: function (event) {
+            //增加自己的逻辑
+            var that = this;
+
+            var num = $("#entries").jqGrid("getRowData").length;
+            if (num >= 100) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_6
+                });
+                return;
+            }
+
+            var source = event.currentTarget,
+                $editGrid = this.getEditGrid(source);
+
+            var data = this.createNewEntryModel(); // 默认的补偿方式
+            if (typeof data === "undefined") {
+                data = {};
+            }
+
+            var editGridCont = this._getEditGridCont(source);
+            if (editGridCont.data("editType") == "inline") {
+                // 表格内编辑
+                $editGrid.jqGrid("addRow", { data: data });
+            } else {
+                $editGrid.wafGrid("addForm");
+            }
+
+            var event = document.createEvent("HTMLEvents");
+            event.initEvent("editComplete_" + $editGrid.attr("id"), true, true);
+            event.eventType = "message";
+            document.dispatchEvent(event);
+        },
+        // 获取填充的 rowId,导入的rowId
+        getFillRowId: function (oldRowIds, newRowIds) {
+            var size = newRowIds.length;
+            var sizeOld = oldRowIds.length;
+            if (sizeOld == 0) {
+                return newRowIds;
+            }
+            var rowIds = [];
+            for (var i = 0; i < size; i++) {
+                if (i >= sizeOld) {
+                    rowIds.push(newRowIds[i]);
+                }
+            }
+            return rowIds;
+        },
+        /**
+         * 专员列表点击取消的方法
+         * 这里有点特殊,采用屏蔽按钮,增加专员取消按钮的方法 替代 维护2次 atsOverTimeBillEdit.js 的方式
+         */
+        cancelAllAction: function () {
+            /*var that = this ;
+	 	window.location.href = shr.getContextPath()+"/dynamic.do?uipk=com.kingdee.eas.hr.ats.app.AtsOverTimeBillAllList";*/
+            this.reloadPage({
+                uipk: "com.kingdee.eas.hr.ats.app.AtsOverTimeBillAllList",
+                serviceId: shr.getUrlRequestParam("serviceId")
+            });
+        },
+
+        submitAction: function (event) {
+            var _self = this,
+                workArea = _self.getWorkarea(),
+                $form = $("form", workArea);
+            if (!_self.validate()) {
+                return;
+            }
+
+            if ($form.valid() && _self.verify()) {
+                shr.showConfirm(
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_15,
+                    function () {
+                        _self.doSubmit(event, "submit");
+                    }
+                );
+            }
+        },
+        //提交即生效
+        submitEffectAction: function (event) {
+            var _self = this,
+                workArea = _self.getWorkarea(),
+                $form = $("form", workArea);
+
+            if (!_self.validate()) {
+                return;
+            }
+
+            if ($form.valid() && _self.verify()) {
+                if (shr.atsBillUtil.isInWorkFlow(_self.billId)) {
+                    shr.showConfirm(
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_4,
+                        function () {
+                            _self.prepareSubmitEffect(event, "submitEffect");
+                        }
+                    );
+                } else {
+                    shr.showConfirm(
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_16,
+                        function () {
+                            _self.prepareSubmitEffect(event, "submitEffect");
+                        }
+                    );
+                }
+            }
+        },
+        assembleSaveData: function (action) {
+            var data = shr.ats.AtsOverTimeBillBatchEdit.superClass.assembleSaveData.call(
+                this,
+                action
+            );
+            var model = JSON.parse(data.model);
+            var personDateStr = "";
+            var length = 0;
+            if (model.entries) {
+                length = model.entries.length;
+                for (var i = 0; i < length; i++) {
+                    if (
+                        model.entries[i].otReason &&
+                        model.entries[i].otReason.state
+                    ) {
+                        delete model.entries[i].otReason.state;
+                    }
+                    if (
+                        model.entries[i].otType &&
+                        model.entries[i].otType.state
+                    ) {
+                        delete model.entries[i].otType.state;
+                    }
+                    if (
+                        model.entries[i].otCompens &&
+                        model.entries[i].otCompens.state
+                    ) {
+                        delete model.entries[i].otCompens.state;
+                    }
+
+                    if (model.entries[i]["adminOrgUnit.id"]) {
+                        model.entries[i]["adminOrgUnit"] =
+                            model.entries[i]["adminOrgUnit.id"];
+                    }
+
+                    //2018-06-04 不知道怎么莫名其妙多了两个字段,而且是从第二个分录开始才有的
+                    //先屏蔽,有空再研究
+                    delete model.entries[i].person["person.gender"];
+                    delete model.entries[i].person["personOtherInfo.age"];
+                    delete model.entries[i].person["attendanceFileHIS.isAttendance"];
+
+                    //组装参数
+                    var personId = model.entries[i].person.id;
+                    var date = model.entries[i].otDate;
+                    if (date && personId) {
+                        if (i > 0) {
+                            personDateStr += ",";
+                        }
+                        personDateStr += personId + "_" + date.substring(0, 10);
+                    }
+                }
+
+                if (personDateStr) {
+                    _self.remoteCall({
+                        type: "post",
+                        method: "getPersonAdminOrgUnit",
+                        param: { personDateStr: personDateStr },
+                        async: false,
+                        success: function (res) {
+                            var info = res;
+                            var personAtsInfo = {};
+                            for (var i = 0; i < length; i++) {
+                                var personId = model.entries[i].person.id;
+                                var date = model.entries[i].otDate;
+                                if (date && personId) {
+                                    var person_date =
+                                        personId + "_" + date.substring(0, 10);
+                                    personAtsInfo = res[person_date];
+                                    if (
+                                        personAtsInfo &&
+                                        personAtsInfo.adminOrgUnit
+                                    ) {
+                                        model.entries[i]["adminOrgUnit"] =
+                                            personAtsInfo.adminOrgUnit;
+                                        model.entries[i]["position"] =
+                                            personAtsInfo.position;
+                                    }
+                                }
+                            }
+                        }
+                    });
+                }
+
+                model.ccPerson = model.ccPersonIds;
+                var assModeljson = $.toJSON(model);
+                data.model = assModeljson;
+            }
+
+            return data;
+        },
+        prepareSubmitEffect: function (event, action) {
+            var _self = this;
+            var data = _self.assembleSaveData(action);
+
+            var target;
+            if (event && event.currentTarget) {
+                target = event.currentTarget;
+            }
+            shr.doAction({
+                target: target,
+                url: _self.dynamicPage_url,
+                type: "post",
+                data: data,
+                success: function (response) {
+                    //考勤计算--已计算页签--明细显示模式--请假按钮进来,提交生效后直接返回列表
+                    if($('#detailOperationDialog', parent.document).length > 0) {
+                        top.jsBinder.closeDialog();
+                    }
+                    if (
+                        shr.getUrlParam("fromCalDetail") != null &&
+                        shr.getUrlParam("fromCalDetail") == "1"
+                    ) {
+                        _self.cancelAllAction();
+                    } else {
+                        _self.back();
+                    }
+                }
+            });
+        },
+        /*
+	,importAction: function(gridID,classfullName) {
+		
+		var _self = this;
+		if(gridID != undefined)
+		{
+			grid = gridID	;
+		}
+		if(classfullName != undefined)
+		{
+			className = classfullName ;
+		}
+		
+		var importDiv = $('#importDiv');
+		if (importDiv.length > 0) {
+		//	importDiv.data('uipk', lastUipk);
+		//	importDiv.data('viewModel', viewModel);
+		//	importDiv.data('classify', classify);
+		//	importDiv.dialog('open');
+		//	return;
+		}
+		 $('#importDiv').remove();
+		 
+		 selfParam = _self.setImportSelfParam();
+		// 未生成dialog
+		importDiv = $('<div id="importDiv"></div>').appendTo($('body'));
+		importDiv.data('uipk', lastUipk);
+		importDiv.data('viewModel', viewModel);
+		importDiv.data('grid', grid);
+		importDiv.data('className', className);
+		importDiv.data('selfParam',selfParam);
+	//	importDiv.data('classify', classify);
+		var oldRowIds = $("#entries").getDataIDs();
+		if(_self.checkUpload()){ 
+			importDiv.dialog({
+				autoOpen: true,		
+				width: 708,
+				height: 700,
+				title: "导入数据",
+				resizable: true,
+				position: ['top','top'],
+				modal: true,
+				open: function(event, ui) {
+					//ie10不支持这段。
+					/*if ($.browser.msie) {
+						var url = shr.assembleURL('hr.ats.com.atttendanceCommonImport', 'view', {
+							lastUipk: lastUipk,
+							viewModel: viewModel ,
+							className : className
+							//classify:classify
+						});
+						var content = '<iframe id="importFrame" name="importFrame" width="700" height="600" frameborder="0" scrolling="no" allowtransparency="true" src="' + url + '"></iframe>';
+						importDiv.append(content);
+					} else {---------------------
+						
+						var url = shr.assembleURL('hr.ats.com.atttendanceCommonImport$page', 'view');
+						shr.loadHTML({
+							url: url,
+							success: function(response) {
+								importDiv.append(response);
+							}
+						});
+					//}
+					document.documentElement.style.overflow='hidden';
+				},
+				close: function(event, ui) {
+					document.documentElement.style.overflow='scroll';
+					importDiv.empty();
+					
+					// 触发计算 请假次数 剩余额度 时长
+					
+					//点击序号列 让人员失去焦点
+					$("#entries tr:eq(1) td:eq(0)").click();
+					
+					var newRowIds = $("#entries").getDataIDs();
+					var rowIds = _self.getFillRowId(oldRowIds,newRowIds);
+					$.each(rowIds,function(n,value) { 
+						//若用户不填休息时间,自动计算休息时间;否则使用用户填写的休息时间
+						var restTime = $("#entries").jqGrid('getCell',value,"restTime") ;
+					    if(restTime===''){
+							_self.calRestTimeLen(value);
+                        }
+						_self.changOtTimeTipInfo(value);
+					});
+					//检查不超过100条记录
+					//_self.checkRowIsOver();
+					
+				} 
+			});
+		}
+		
+		$(".ui-dialog-titlebar-close").bind("click" , function(){
+			importDiv.dialog("close");
+		});		
+	}
+	*/
+        verify: function () {
+            var _self = this;
+            var obj = $("#entries").jqGrid("getRowData");
+            var errorString = "";
+            var errorFlag = 0;
+            var billerrorString = "";
+            if (obj.length == 0) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_7
+                });
+                return false;
+            }
+            if (!_self.checkRowIsOver()) {
+                //			closeLoader();
+                return false;
+            }
+
+            _rowMap = {};
+
+            openLoader(
+                1,
+                jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_29
+            );
+
+            jQuery(obj).each(function (n) {
+                errorString = _self.checkEveryRow(n + 1, this);
+
+                if (errorString) {
+                    _self.preShowError(
+                        n + 1,
+                        this.person.name + " " + errorString
+                    );
+                    billerrorString =
+                        billerrorString +
+                        shr.formatMsg(
+                            jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_44,
+                            [n + 1]
+                        ) +
+                        errorString;
+
+                    errorFlag = 1;
+                }
+            });
+            if (errorString && errorString != "") {
+                var showMes = "";
+                showMes += billerrorString.replace(/。/g, "。</br>");
+                shr.showWarning({ message: showMes });
+                closeLoader();
+                return false;
+            }
+
+            errorString = _self.validateOTEntry();
+            if (errorString && errorString != "") {
+                shr.showWarning({ message: errorString });
+                closeLoader();
+                return false;
+            }
+
+            //		 if(!_self.verifyCheck()){
+            //		 	closeLoader();
+            //		 	return false;
+            //		 }
+
+            var hasOtType = _self.checkOtType();
+            if (!hasOtType) {
+                return false;
+            }
+
+            if (errorFlag == 0) {
+                //工作流审批界面,加班补提控制。
+                var boo = true;
+                boo = _self.validateIsFillOtVerify();
+                closeLoader();
+                return boo;
+            } else {
+                closeLoader();
+                return false;
+            }
+        },
+        checkOtType: function () {
+            var rows = $("#entries").getGridParam("reccount");
+            if (rows > 0) {
+                for (var i = 1; i <= rows; i++) {
+                    var tempId = $("#entries tr").eq(i).attr("id");
+                    var person = $("#entries").jqGrid(
+                        "getCell",
+                        tempId,
+                        "person"
+                    );
+                    var otType = $("#entries").jqGrid(
+                        "getCell",
+                        tempId,
+                        "otType"
+                    ); //otDate
+                    var otDate = $("#entries").jqGrid(
+                        "getCell",
+                        tempId,
+                        "otDate"
+                    );
+                    if (otType == null || otType == "") {
+                        var errorString = shr.formatMsg(
+                            jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_checkOtType_01,
+                            [person.name, otDate]
+                        );
+                        shr.showWarning({ message: errorString });
+                        closeLoader();
+                        return false;
+                    }
+                }
+            }
+            return true;
+        },
+        verifyRestTime: function (beforeSubmit, value) {
+            var startTime0 = value.startTime;
+            var endTime0 = value.endTime;
+            if (startTime0 == "" || startTime0 == undefined) {
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_2;
+            }
+            if (endTime0 == "" || endTime0 == undefined) {
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_1;
+            }
+            var startTimeOfDate = new Date(startTime0);
+            var endTimeOfDate = new Date(endTime0);
+            var restStartTime = value.restStartTime;
+            var restEndTime = value.restEndTime;
+            var restStartTime2 = value.restStartTime2;
+            var restEndTime2 = value.restEndTime2;
+            var restStartTimeOfDate = new Date(restStartTime);
+            var restEndTimeOfDateOfDate = new Date(restEndTime);
+            if (restStartTime != undefined && restStartTime != "") {
+                if (
+                    restStartTimeOfDate.getTime() < startTimeOfDate.getTime() ||
+                    restStartTimeOfDate.getTime() > endTimeOfDate.getTime()
+                ) {
+                    return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_6;
+                }
+            }
+            if (restEndTime != undefined && restEndTime != "") {
+                if (
+                    restEndTimeOfDateOfDate.getTime() <
+                        startTimeOfDate.getTime() ||
+                    restEndTimeOfDateOfDate.getTime() >
+                        endTimeOfDate.getTime() ||
+                    restEndTimeOfDateOfDate.getTime() <
+                        restStartTimeOfDate.getTime()
+                ) {
+                    return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_3;
+                }
+            }
+            var restStartTimeOfDate2 = new Date(restStartTime2);
+            var restEndTimeOfDateOfDate2 = new Date(restEndTime2);
+            if (restStartTime2 != undefined && restStartTime2 != "") {
+                if (
+                    restStartTimeOfDate2.getTime() <
+                        startTimeOfDate.getTime() ||
+                    restStartTimeOfDate2.getTime() > endTimeOfDate.getTime()
+                ) {
+                    return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_8;
+                }
+            }
+            if (restEndTime2 != undefined && restEndTime2 != "") {
+                if (
+                    restEndTimeOfDateOfDate2.getTime() <
+                        startTimeOfDate.getTime() ||
+                    restEndTimeOfDateOfDate2.getTime() >
+                        endTimeOfDate.getTime() ||
+                    restEndTimeOfDateOfDate2.getTime() <
+                        restStartTimeOfDate2.getTime()
+                ) {
+                    return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_4;
+                }
+            }
+            if (
+                (restStartTime != "" &&
+                    restStartTime != undefined &&
+                    (restEndTime == "" || restEndTime == undefined)) ||
+                (restEndTime != "" &&
+                    restEndTime != undefined &&
+                    (restStartTime == "" || restStartTime == undefined))
+            ) {
+                if (beforeSubmit) {
+                    return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_5;
+                }
+                return "";
+            }
+            if (
+                (restStartTime2 != "" &&
+                    restStartTime2 != undefined &&
+                    (restEndTime2 == "" || restEndTime2 == undefined)) ||
+                (restEndTime2 != "" &&
+                    restEndTime2 != undefined &&
+                    (restStartTime2 == "" || restStartTime2 == undefined))
+            ) {
+                if (beforeSubmit) {
+                    return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_7;
+                }
+                return "";
+            }
+            if (
+                restStartTime != "" &&
+                restStartTime != undefined &&
+                restStartTime2 != "" &&
+                restStartTime2 != undefined
+            ) {
+                //两个加班休息时间都填了,那么判断不能交叉
+                if (
+                    (restStartTimeOfDate.getTime() <
+                        restEndTimeOfDateOfDate2.getTime() &&
+                        restStartTimeOfDate.getTime() >=
+                            restStartTimeOfDate2.getTime()) ||
+                    (restStartTimeOfDate2.getTime() <
+                        restEndTimeOfDateOfDate.getTime() &&
+                        restStartTimeOfDate2.getTime() >=
+                            restStartTimeOfDate.getTime())
+                ) {
+                    return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_0;
+                }
+            }
+        },
+
+        checkEveryRow: function (rownum, value) {
+            var that = this;
+            var regEx = new RegExp("\\-", "gi"); //i不区分大小写 g匹配所有
+
+            var startTime = value.startTime;
+            var endTime = value.endTime;
+
+            var startTimeOfDate = NewLongDate(startTime + ":00");
+            var endTimeOfDate = NewLongDate(endTime + ":00");
+
+            var longTime = endTimeOfDate.getTime() - startTimeOfDate.getTime();
+            var otType = value.otType.id;
+
+            //处理加班日期 与 加班开始时间 和结束时间的日期保持一致
+            var overDate = value.otDate; //加班日期
+            overDate = overDate.substring(0, 10);
+            var overTimeBegin = value.startTime;
+            overTimeBegin = overTimeBegin.substring(0, 10); //2014-01-02 00:00
+            var overTimeEnd = value.endTime;
+            overTimeEnd = overTimeEnd.substring(0, 10);
+
+            var overTimeDate = NewShortDate(overDate);
+            var overTimeStartDate = NewShortDate(overTimeBegin);
+            var overTimeEndDate = NewShortDate(overTimeEnd);
+
+            if (
+                overTimeStartDate.getTime() <
+                overTimeDate.getTime() - 24 * 60 * 60 * 1000
+            ) {
+                //longTime_start != 0 &&  longTime_end != 0
+                //		 		shr.showInfo({message: "不支持跨多天加班。"});
+                //				return false;
+                return jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_1;
+            }
+            if (
+                overTimeEndDate.getTime() - 24 * 60 * 60 * 1000 >
+                overTimeDate.getTime()
+            ) {
+                /*shr.showInfo({message: "不支持跨多天加班。"});
+				return false;*/
+                return jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_1;
+            }
+            if (
+                overTimeEndDate.getTime() - overTimeStartDate.getTime() >=
+                2 * 24 * 60 * 60 * 1000
+            ) {
+                return jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_1;
+            }
+            if (longTime <= 0) {
+                /*shr.showInfo({message: "加班开始时间必须小于加班结束时间。"});
+				return false;*/
+                return jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_8;
+            }
+            var applyOTTime = value.applyOTTime;
+            if (applyOTTime < 0) {
+                return jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_11;
+            }
+            if (applyOTTime == 0) {
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_0001;
+            }
+
+            // 检查jqgrid 表格里的是否有重复数据
+            var rowValue = new Array();
+            rowValue[0] = value.person.id;
+            rowValue[1] = value.startTime;
+            rowValue[2] = value.endTime;
+            _rowMap[rownum] = rowValue;
+            for (var prop in _rowMap) {
+                if (_rowMap.hasOwnProperty(prop)) {
+                    var beginTimeTemp = NewLongDate(_rowMap[prop][1]);
+                    var endTimeTemp = NewLongDate(_rowMap[prop][2]);
+                    if (
+                        prop != rownum &&
+                        _rowMap[prop][0] == value.person.id &&
+                        !(
+                            beginTimeTemp.getTime() >=
+                                endTimeOfDate.getTime() ||
+                            endTimeTemp.getTime() <= startTimeOfDate.getTime()
+                        )
+                    ) {
+                        return shr.formatMsg(
+                            jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_2,
+                            [prop]
+                        );
+                    }
+                }
+            }
+            var msg = this.verifyRestTime(true, value);
+            if (msg != "") {
+                return msg;
+            }
+
+            //设置同步
+            //		 	var info ;
+            //		 	that.remoteCall({
+            //				type:"post",
+            //				method:"isWorkTime",
+            //				async: false,
+            //				param:{personId: value.person.id,overDate:value.otDate,overTimeBegin:value.startTime+":00",overTimeEnd:value.endTime+":00"},
+            //				success:function(res){
+            //					   info = res;
+            //				}
+            //			});
+            //
+            //			if (info.isWorkTime){
+            //				return "加班开始结束时间和上班时间有交叉。";
+            //			}
+            //
+            //			//判断申请加班小时数是否达到加班起始值
+            //			var validOtStartString;
+            //		 	that.remoteCall({
+            //				type:"post",
+            //				method:"validOtStart",
+            //				async: false,
+            //				param:{personId: value.person.id,applyOTTime:applyOTTime},
+            //				success:function(res){
+            //					   var validInfo = res.info;
+            //					   if(validInfo!=null && validInfo!=""){
+            //						   validOtStartString=validInfo;
+            //					   }
+            //				}
+            //			});
+            //	 	    if(validOtStartString!=null && validOtStartString!=""){
+            //	 	    	return validOtStartString;
+            //	 	    }
+            //
+            //			//是否在“固定加班”时间段或者“固定加班不计异常”时间段内
+            //			var obj;
+            //		 	that.remoteCall({
+            //				type:"post",
+            //				method:"isAtFixedOverTimeOrExcep",
+            //				async: false,
+            //				param:{personId: value.person.id,overDate:value.otDate,overTimeBegin:value.startTime+":00",overTimeEnd:value.endTime+":00"},
+            //				success:function(res){
+            //					obj = res;
+            //				}
+            //			});
+            //
+            //			if (obj.isAtFixedOverTimeOrExcep){
+            //				return "不能在固定加班时间段内提交加班单。";
+            //			}
+            //
+            //		 	var errorString = that.validateIsExistBill(value.person.id,startTime,endTime,$('#id').val());
+            //	   		if(errorString){
+            //	   			return errorString;
+            //	   		}
+            //   			if(value.otCompens.id =="AERg0TIcSnaM40EKvJCdRKlrTmA="){ // 只有等于调休的时候才校验
+            //   				var errorString = that.validateIsValidateLimit(value.person.id,value.otDate,value.applyOTTime,otType);
+            //   				if(errorString){
+            //   					return errorString;
+            //   				}
+            //   			}
+            //
+            //   			var errorString = that.checkattencePolicyParm(rownum);
+            //   			if(errorString){
+            //	   			return errorString;
+            //			}
+
+            //燕菊说,补提控制校验放这里 2018-05-30
+            //人机问题,集成测试阶段再细细改
+            /*
+			var fillOTRes;
+		 	that.remoteCall({
+				type:"post",
+				method:"validIsFillOT",
+				async: false,
+				param:{
+					personId : value.person.id,
+					overDate : value.otDate,
+					overTimeBegin : value.startTime+":00",
+					overTimeEnd : value.endTime+":00"
+				},
+				success:function(res){
+					fillOTRes = res;
+				}
+			});
+		 	
+			if (fillOTRes.isIllegal){
+				return "超过加班补提控制期限!";
+			}	
+			*/
+            return "";
+        }, // 调休额度是否正确 ;
+        validateIsValidateLimit: function (
+            personId,
+            otDate,
+            currentValue,
+            otType
+        ) {
+            var that = this;
+            if ($("#hrOrgUnit_el") == null || $("#hrOrgUnit_el") == "") {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_18
+                });
+                return;
+            }
+            var info;
+            var infoLeaveBillNumber;
+            otDate = otDate.substring(0, 10);
+            var errorString = "";
+            that.remoteCall({
+                type: "post",
+                async: false,
+                method: "isOverMaxQuota",
+                param: {
+                    personId: personId,
+                    otDate: otDate,
+                    currentValue: currentValue,
+                    otType: otType,
+                    hrOrgUnitId: $("#hrOrgUnit_el").val()
+                },
+                success: function (res) {
+                    if (!res.resFlag) {
+                        errorString = res.resMsg;
+                    }
+                }
+            });
+            return errorString;
+        },
+        validateIsExistBill: function (personId, beginTime, endTime, billId) {
+            var that = this;
+            var info;
+            var infoLeaveBillNumber;
+            var errorString = "";
+            that.remoteCall({
+                type: "post",
+                async: false,
+                method: "validateIsExistBill",
+                param: {
+                    personId: personId,
+                    beginTime: beginTime,
+                    endTime: endTime,
+                    billId: billId
+                },
+                success: function (res) {
+                    info = res;
+                }
+            });
+
+            if (errorString) {
+                errorString = shr.formatMsg(
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_27,
+                    [
+                        info.overTimeNum,
+                        info.personName,
+                        info.beginTime,
+                        info.endTime
+                    ]
+                );
+                return errorString;
+            }
+        },
+        // 获取表格序号列,修复平台表格序号列位置移动导致的提示列位置错误导致的显示异常bug
+        getColNumIndex: function () {
+            var _self = this;
+            if (_self.colNumIndex) {
+                return _self.colNumIndex;
+            }
+            $.each(
+                $("#entries").jqGrid("getAllColumn"),
+                function (index, item) {
+                    if (item.name == "rn") {
+                        _self.colNumIndex = index;
+                    }
+                }
+            );
+            return _self.colNumIndex;
+        },
+        //对校验结果进行页面个性化提示
+        preShowError: function (iRow, errorString) {
+            var rnColNum = this.getColNumIndex();
+            var that = this;
+            if (errorString) {
+                $("#entries tr:eq(" + iRow + ") td:eq(" + rnColNum + ")")
+                    .html("!")
+                    .css("color", "red")
+                    .attr({
+                        "data-toggle": "tooltip",
+                        "data-placement": "left",
+                        title: errorString
+                    });
+                $("#entries tr[id='" + iRow + "']").css("color", "red");
+                /*
+				$("#entries tr:eq("+iRow+") td:eq(2)").css("color","red");
+				$("#entries tr:eq("+iRow+") td:eq(3)").css("color","red");
+				$("#entries tr:eq("+iRow+") td:eq(4)").css("color","red");
+			*/
+            }
+        },
+        //对校验结果进行页面个性化提示
+        preShowWarn: function (iRow, errorString) {
+            var rnColNum = this.getColNumIndex();
+            var that = this;
+            $("#entries")
+                .find("tr")
+                .eq(iRow)
+                .find("td")
+                .eq(rnColNum)
+                .text("?")
+                .css("color", "red")
+                .attr({
+                    "data-toggle": "tooltip",
+                    "data-placement": "left",
+                    title: errorString
+                });
+        },
+        //去除个性化展示,每次校验前去除
+        removePreShowError: function (rowid) {
+            var rnColNum = this.getColNumIndex();
+            var rows = $("#entries").getGridParam("reccount");
+            var td = $("#entries").find("tr[id='" + rowid + "'] td:eq(" + rnColNum + ")");
+            td.attr(
+                "title",
+                ""
+            );
+            td.html(
+                $("#entries").find("tr[id='" + rowid + "']")[0].rowIndex
+            );
+            td.css(
+                "color",
+                "rgb(153, 153, 153)"
+            );
+            $("#entries").find("tr[id='" + rowid + "']").css(
+                "color",
+                "rgb(153, 153, 153)"
+            ); //如果设置成css("color","initial")会变成黑色,而原界面为灰色
+        },
+        checkF7Data: function () {
+            var that = this;
+
+            var otDate = window.frames[
+                "orgFillDiv"
+            ].atsMlUtile.getFieldOriginalValue("otDate");
+            var adminOrgUnit_el = $(window.frames["orgFillDiv"].document)
+                .find("#adminOrgUnit_el")
+                .val();
+            var adminOrgUnit = $(window.frames["orgFillDiv"].document)
+                .find("#adminOrgUnit")
+                .val();
+            var person_el = $(window.frames["orgFillDiv"].document)
+                .find("#person_el")
+                .val();
+            var person = $(window.frames["orgFillDiv"].document)
+                .find("#person")
+                .val();
+
+            var startTime = window.frames[
+                "orgFillDiv"
+            ].atsMlUtile.getFieldOriginalValue("startTime");
+            var otType_el = $(window.frames["orgFillDiv"].document)
+                .find("#otType_el")
+                .val();
+            var otType = $(window.frames["orgFillDiv"].document)
+                .find("#otType")
+                .val();
+            var endTime = window.frames[
+                "orgFillDiv"
+            ].atsMlUtile.getFieldOriginalValue("endTime");
+
+            var otCompens_el = $(window.frames["orgFillDiv"].document)
+                .find("#otCompens_el")
+                .val();
+            var otCompens = $(window.frames["orgFillDiv"].document)
+                .find("#otCompens")
+                .val();
+
+            var restTime = $(window.frames["orgFillDiv"].document)
+                .find("#restTime")
+                .val();
+            var otReason_el = $(window.frames["orgFillDiv"].document)
+                .find("#otReason_el")
+                .val();
+            var otReason = $(window.frames["orgFillDiv"].document)
+                .find("#otReason")
+                .val();
+            var applyOTTime = $(window.frames["orgFillDiv"].document)
+                .find("#applyOTTime")
+                .val();
+
+            var remark = $(window.frames["orgFillDiv"].document)
+                .find("#remark")
+                .val();
+            var remain = $(window.frames["orgFillDiv"].document)
+                .find("#remain")
+                .text();
+            var checkAmount = $(window.frames["orgFillDiv"].document)
+                .find("#checkAmount")
+                .text();
+            var attencegroup_el = $(window.frames["orgFillDiv"].document)
+                .find("#prop_attencegroup_el")
+                .val();
+            var prop_attencegroup = $(window.frames["orgFillDiv"].document)
+                .find("#prop_attencegroup")
+                .val();
+            /*
+			var otDate = $('iframe')[0].contentWindow.$('#otDate').val();
+					        	
+        	var adminOrgUnit_el = $('iframe')[0].contentWindow.$('#adminOrgUnit_el').val();
+        	var adminOrgUnit = $('iframe')[0].contentWindow.$('#adminOrgUnit').val();
+        	
+        	var person_el = $('iframe')[0].contentWindow.$('#person_el').val();
+        	var person = $('iframe')[0].contentWindow.$('#person').val();
+        	
+        	var startTime = $('iframe')[0].contentWindow.$('#startTime').val();
+        	
+        	var otType_el = $('iframe')[0].contentWindow.$('#otType_el').val();
+        	var otType = $('iframe')[0].contentWindow.$('#otType').val();
+        	
+        	var endTime = $('iframe')[0].contentWindow.$('#endTime').val();
+        	
+        	var otCompens_el = $('iframe')[0].contentWindow.$('#otCompens_el').val();
+        	var otCompens = $('iframe')[0].contentWindow.$('#otCompens').val();
+        
+        	var restTime = $('iframe')[0].contentWindow.$('#restTime').val();
+        	
+        	var otReason_el = $('iframe')[0].contentWindow.$('#otReason_el').val();
+        	var otReason = $('iframe')[0].contentWindow.$('#otReason').val();
+        	
+        	var applyOTTime = $('iframe')[0].contentWindow.$('#applyOTTime').val();
+        	var remark = $('iframe')[0].contentWindow.$('#remark').val();
+        	var remain = $('iframe')[0].contentWindow.$('#remain').text();
+        	var checkAmount = $('iframe')[0].contentWindow.$('#checkAmount').text();
+        	*/
+            //校验
+            if (parseInt(checkAmount) > parseInt(remain)) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_33,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            //校验
+            if (!otDate) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_10,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            if (
+                (!adminOrgUnit_el || !adminOrgUnit) &&
+                (!person_el || !person) &&
+                (attencegroup_el == undefined ||
+                    attencegroup_el == null ||
+                    attencegroup_el == "" ||
+                    prop_attencegroup == undefined ||
+                    prop_attencegroup == null ||
+                    prop_attencegroup == "")
+            ) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_30,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            if (!startTime) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_14,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            if (!otType_el || !otType) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_9,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            if (!endTime) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_13,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            if (!otCompens_el || !otCompens) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_0,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            /*if(!restTime){
+	        		shr.showWarning({message: "休息时长(分钟)不能为空!"});
+	        		return false;
+    		}*/
+
+            /*if(!otReason_el||!otReason){
+	        		shr.showWarning({message: "加班原因不能为空!"});
+	        		return false;
+    		}*/
+
+            if (!applyOTTime) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_20,
+                    hideAfter: 5
+                });
+                return false;
+            }
+
+            return true;
+        },
+
+        fillGrid: function () {
+            var that = this;
+            var otType_person={};
+            var otDate = window.frames[
+                "orgFillDiv"
+            ].atsMlUtile.getFieldOriginalValue("otDate");
+            var adminOrgUnit_el = $(window.frames["orgFillDiv"].document)
+                .find("#adminOrgUnit_el")
+                .val();
+            var adminOrgUnit = $(window.frames["orgFillDiv"].document)
+                .find("#adminOrgUnit")
+                .val();
+            var person_el = $(window.frames["orgFillDiv"].document)
+                .find("#person_el")
+                .val();
+            var person = $(window.frames["orgFillDiv"].document)
+                .find("#person")
+                .val();
+            var person_number = $(window.frames["orgFillDiv"].document)
+                .find("#person_number")
+                .val();
+            var startTime = window.frames[
+                "orgFillDiv"
+            ].atsMlUtile.getFieldOriginalValue("startTime");
+            var otType_el = $(window.frames["orgFillDiv"].document)
+                .find("#otType_el")
+                .val();
+            var otType = $(window.frames["orgFillDiv"].document)
+                .find("#otType")
+                .val();
+            var endTime = window.frames[
+                "orgFillDiv"
+            ].atsMlUtile.getFieldOriginalValue("endTime");
+
+            var otCompens_el = $(window.frames["orgFillDiv"].document)
+                .find("#otCompens_el")
+                .val();
+            var otCompens = $(window.frames["orgFillDiv"].document)
+                .find("#otCompens")
+                .val();
+
+            var restTime = $(window.frames["orgFillDiv"].document)
+                .find("#restTime")
+                .val();
+            var restStartTime = $(window.frames["orgFillDiv"].document)
+                .find("#restStartTime")
+                .val();
+            var restStartTime2 = $(window.frames["orgFillDiv"].document)
+                .find("#restStartTime2")
+                .val();
+            var restEndTime = $(window.frames["orgFillDiv"].document)
+                .find("#restEndTime")
+                .val();
+            var restEndTime2 = $(window.frames["orgFillDiv"].document)
+                .find("#restEndTime2")
+                .val();
+            var otReason_el = $(window.frames["orgFillDiv"].document)
+                .find("#otReason_el")
+                .val();
+            var otReason = $(window.frames["orgFillDiv"].document)
+                .find("#otReason")
+                .val();
+            var applyOTTime = $(window.frames["orgFillDiv"].document)
+                .find("#applyOTTime")
+                .val();
+            var hrOrgUnitId = $(window.frames["orgFillDiv"].document)
+                .find("#bill_hrOrgUnit_el")
+                .val();
+            var attencegroupId = $(window.frames["orgFillDiv"].document)
+                .find("#prop_attencegroup_el")
+                .val();
+            var prop_attencegroup = $(window.frames["orgFillDiv"].document)
+                .find("#prop_attencegroup")
+                .val();
+            var description = $(window.frames["orgFillDiv"].document)
+                .find("#remark")
+                .val();
+            var setType = $(window.frames["orgFillDiv"].document)
+                .find("#setType1")
+                .is(":visible")
+                ? 1
+                : 2;
+
+            var attAdminOrgUnit_el = $(window.frames["orgFillDiv"].document).find("#attAdminOrgUnit_el").val();
+            var attAdminOrgUnit = $(window.frames["orgFillDiv"].document).find("#attAdminOrgUnit").val();
+
+            var currentPagePermItemId = that.currentPagePermItemId;
+            var hasNum = $("#entries").getGridParam("reccount"); // 已经存在的条数
+            /* that.remoteCall({
+                            type: "post",
+                            async: false,
+                            method: "getOtTypeByPersons",
+                            param: {
+                                otDate: otDate,
+                                attencegroupId: attencegroupId,
+                                hrOrgUnitId: hrOrgUnitId,
+                                orgUnitId: adminOrgUnit_el,
+                                setType: setType,
+                                personIds: person_el
+                            },success: function (res) {
+                                otType_person=res.otTypeByPersons
+                            }
+                        });*/
+            if (
+                (adminOrgUnit_el && adminOrgUnit) ||
+                (attencegroupId && prop_attencegroup)
+            ) {
+                that.remoteCall({
+                    type: "post",
+                    async: false,
+                    method: "getPersonsByOrgUnit",
+                    param: {
+                        attencegroupId: attencegroupId,
+                        hrOrgUnitId: hrOrgUnitId,
+                        orgUnitId: adminOrgUnit_el,
+                        otDate: otDate,
+                        otType: otType_el,
+                        personIds: person_el,
+                        setType: setType,
+                        currentPagePermItemId: currentPagePermItemId
+                    },
+                    success: function (res) {
+                        info = res;
+                        var personColl = jQuery.parseJSON(info.personColl);
+                        var rowTipId = [];
+                        $.each(personColl, function (n, value) {
+                            // 拼json string
+                            var otDateString = ' "otDate" : "' + otDate + '"';
+                            var adminOrgUnitString =
+                                ' "adminOrgUnit" : { "id": "' +
+                                adminOrgUnit_el +
+                                '", "name": "' +
+                                adminOrgUnit +
+                                '"}';
+                            var personString =
+                                ' "person" : { "id": "' +
+                                value.id +
+                                '", "name": "' +
+                                value.name +
+                                '"}';
+
+                            var startTimeString =
+                                ' "startTime" : "' + startTime + '"';
+
+
+
+                                var otTypeString =
+                                    ' "otType" : { "id": "' +
+                                    value.simpleName +
+                                    '", "name": "' +
+                                     value.simpleNamePingYin +
+                                    '"}';
+
+
+                            var endTimeString =
+                                ' "endTime" : "' + endTime + '"';
+
+                            var otCompensString = "";
+                            if (otCompens_el) {
+                                var otCompensString =
+                                    ' "otCompens" : { "id": "' +
+                                    otCompens_el +
+                                    '", "name": "' +
+                                    otCompens +
+                                    '"}';
+                            }
+
+                            var attAdminOrgUnitString = ' "attAdminOrgUnit" : { "id": "'
+                                + attAdminOrgUnit_el
+                                + '", "name": "'
+                                + attAdminOrgUnit
+                                + '"}';
+
+                            var restTimeString =
+                                ' "restTime" : "' + restTime + '"';
+                            var restStartTimeString =
+                                ' "restStartTime" : "' + restStartTime + '"';
+                            var restStartTime2String =
+                                ' "restStartTime2" : "' + restStartTime2 + '"';
+                            var restEndTimeString =
+                                ' "restEndTime" : "' + restEndTime + '"';
+                            var restEndTime2String =
+                                ' "restEndTime2" : "' + restEndTime2 + '"';
+
+                            var otReasonString =
+                                ' "otReason" : { "id": "' +
+                                otReason_el +
+                                '", "name": "' +
+                                otReason +
+                                '"}';
+
+                            var applyOTTimeString =
+                                ' "applyOTTime" : "' + applyOTTime + '"';
+
+                            var descriptionString =
+                                ' "description" : "' + description + '"';
+
+                            var dataString =
+                                ' { "data" : {' +
+                                otDateString +
+                                ", " +
+                                adminOrgUnitString +
+                                ", " +
+                                personString +
+                                ", " +
+                                startTimeString +
+                                ", " +
+                                otTypeString +
+                                ", " +
+                                endTimeString +
+                                ", " +
+                                otCompensString +
+                                ", " +
+                                 attAdminOrgUnitString +
+                                ', ' +
+                                restTimeString +
+                                ", " +
+                                restStartTimeString +
+                                ", " +
+                                restEndTimeString +
+                                ", " +
+                                restStartTime2String +
+                                ", " +
+                                restEndTime2String +
+                                ", " +
+                                otReasonString +
+                                ", " +
+                                applyOTTimeString +
+                                ", " +
+                                descriptionString +
+                                "}} ";
+
+                            var dataJson = jQuery.parseJSON(dataString);
+
+                            $("#entries").jqGrid("addRow", dataJson);
+
+                            //点击序号列 让人员失去焦点
+                            $("#entries tr:eq(1) td:eq(0)").click();
+                            // hasNum
+                            if (value.addressTX == "2") {
+                                rowTipId.push(n + 1 + hasNum);
+                            }
+                        });
+                        if (rowTipId.length != 0) {
+                            for (var ii = 0; rowTipId.length > ii; ii++) {
+                                that.preShowWarn(
+                                    rowTipId[ii],
+                                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_31
+                                );
+                            }
+                        }
+                    }
+                });
+            } else {
+                 that.remoteCall({
+                                           type: "post",
+                                           async: false,
+                                           method: "getOtTypeByPersons",
+                                           param: {
+                                               otDate: otDate,
+                                               personIds: person_el
+                                           },success: function (res) {
+                                               otType_person=res.otTypeByPersons
+                                           }
+                                       });
+
+
+                var person_el_split = person_el.split(",");
+                var person_split = person.split(",");
+                var person_number_split = person_number.split(",");
+                for (var i = 0; i < person_el_split.length; i++) {
+                    // 拼json string
+                    var otDateString = ' "otDate" : "' + otDate + '"';
+
+                    var personString =
+                        ' "person" : { "id": "' +
+                        person_el_split[i] +
+                        '", "name": "' +
+                        person_split[i] +
+                        '", "number": "' +
+                        person_number_split[i] +
+                        '"}';
+
+                    var startTimeString = ' "startTime" : "' + startTime + '"';
+
+  if (otType_person[person_el_split[i]]){
+                        var otTypeString =
+                            ' "otType" : { "id": "' +
+                            otType_person[person_el_split[i]].otTypeValue  +
+                            '", "name": "' +
+                            otType_person[person_el_split[i]].otTypeText  +
+                            '"}';
+                    }else {
+                        var otTypeString =
+                            ' "otType" : { "id": "' +
+                            otType_el +
+                            '", "name": "' +
+                            otType +
+                            '"}';
+                    }
+
+
+                    var endTimeString = ' "endTime" : "' + endTime + '"';
+
+                    var otCompensString =
+                        ' "otCompens" : { "id": "' +
+                        otCompens_el +
+                        '", "name": "' +
+                        otCompens +
+                        '"}';
+
+                    var attAdminOrgUnitString = ' "attAdminOrgUnit" : { "id": "'
+                        + attAdminOrgUnit_el
+                        + '", "name": "'
+                        + attAdminOrgUnit
+                        + '"}';
+
+                    var restTimeString = ' "restTime" : "' + restTime + '"';
+                    var restStartTimeString =
+                        ' "restStartTime" : "' + restStartTime + '"';
+                    var restStartTime2String =
+                        ' "restStartTime2" : "' + restStartTime2 + '"';
+                    var restEndTimeString =
+                        ' "restEndTime" : "' + restEndTime + '"';
+                    var restEndTime2String =
+                        ' "restEndTime2" : "' + restEndTime2 + '"';
+                    var otReasonString =
+                        ' "otReason" : { "id": "' +
+                        otReason_el +
+                        '", "name": "' +
+                        otReason +
+                        '"}';
+
+                    var applyOTTimeString =
+                        ' "applyOTTime" : "' + applyOTTime + '"';
+
+                    var descriptionString =
+                        ' "description" : "' + description + '"';
+
+                    var dataString =
+                        ' { "data" : {' +
+                        otDateString +
+                        ", " +
+                        personString +
+                        ", " +
+                        startTimeString +
+                        ", " +
+                        otTypeString +
+                        ", " +
+                        endTimeString +
+                        ", " +
+                        otCompensString +
+                        ", " +
+                        attAdminOrgUnitString +
+                        ', ' +
+                        restTimeString +
+                        ", " +
+                        restStartTimeString +
+                        ", " +
+                        restEndTimeString +
+                        ", " +
+                        restStartTime2String +
+                        ", " +
+                        restEndTime2String +
+                        ", " +
+                        otReasonString +
+                        ", " +
+                        applyOTTimeString +
+                        ", " +
+                        descriptionString +
+                        "}} ";
+                    // var dataJson = jQuery.parseJSON(dataString);
+                    var dataJson = shr.explainJson(dataString);
+                    $("#entries").jqGrid("addRow", dataJson);
+                    //点击序号列 让人员失去焦点
+                    $("#entries tr:eq(1) td:eq(0)").click();
+                }
+            }
+        },
+        checkRowIsOver: function () {
+            if ($("#entries").jqGrid("getRowData").length > 100) {
+                shr.showWarning({
+                    message:
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_6
+                });
+                return false;
+            } else {
+                return true;
+            }
+        },
+        // 如 加班小时数发生变化 则给予提示
+        changOtTimeTipInfo: function (rowid) {
+            //
+            var that = this;
+            var startTime = $("#entries").jqGrid("getCell", rowid, "startTime");
+            var endTime = $("#entries").jqGrid("getCell", rowid, "endTime");
+            var restTime = $("#entries").jqGrid("getCell", rowid, "restTime");
+            var applyOTTime = $("#entries").jqGrid(
+                "getCell",
+                rowid,
+                "applyOTTime"
+            );
+
+            if (startTime != "" && endTime != "") {
+                var restVal = 0;
+                if (restTime != "" && /^[0-9]*$/.test(restTime)) {
+                    restVal = restTime; // 分钟数
+                }
+                var startTime = new Date(startTime + ":00");
+                var endTime = new Date(endTime + ":00");
+                var se =
+                    endTime.getTime() -
+                    startTime.getTime() -
+                    restVal * 1000 * 60; // 毫秒
+                var tfl = se / (3600 * 1000);
+                if (tfl != applyOTTime) {
+                    if(tfl.toFixed(2)!=applyOTTime.toFixed(2)){
+                        // 不相等就给予提示
+                        that.preShowWarn(
+                            rowid,
+                            jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_24
+                        );
+                    }
+                }
+                //$("#entries").jqGrid('setCell',rowid,"applyOTTime",tfl); 计算的值
+            }
+        },
+        // if(cellname=="startTime" || cellname=="endTime" || cellname=="restTime"){
+        calRestTimeLen: function (rowid) {
+            var startTime = $("#entries").jqGrid("getCell", rowid, "startTime");
+            var endTime = $("#entries").jqGrid("getCell", rowid, "endTime");
+            if (startTime == "[object Object]") {
+                $("#" + rowid)
+                    .find("td")
+                    .eq("5")
+                    .text("");
+                $("#" + rowid)
+                    .find("td")
+                    .eq("5")
+                    .attr("title", "");
+                return;
+            }
+            if (endTime == "[object Object]") {
+                $("#" + rowid)
+                    .find("td")
+                    .eq("6")
+                    .text("");
+                $("#" + rowid)
+                    .find("td")
+                    .eq("6")
+                    .attr("title", "");
+                return;
+            }
+            if (!$("#entries").jqGrid("getCell", rowid, "otDate")) {
+                return;
+            } else {
+                otDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+            }
+            if (!$("#entries").jqGrid("getCell", rowid, "person")) {
+                return;
+            } else {
+                personId = $("#entries").jqGrid("getCell", rowid, "person").id;
+            }
+            this.remoteCall({
+                type: "post",
+                method: "getMyRestTime",
+                async: false,
+                param: {
+                    personId: personId,
+                    tDay: otDate,
+                    realStartTime: startTime,
+                    realEndTime: endTime
+                },
+                success: function (res) {
+                    var resLen = res.restTime < 0 ? 0 : res.restTime;
+                    var restStartTime = res.restStartTime;
+                    var restStartTime2 = res.restStartTime2;
+                    var restEndTime = res.restEndTime;
+                    var restEndTime2 = res.restEndTime2;
+                    $("#entries").jqGrid("setCell", rowid, "restTime", resLen);
+                    $("#entries").jqGrid(
+                        "setCell",
+                        rowid,
+                        "restStartTime",
+                        restStartTime
+                    );
+                    $("#entries").jqGrid(
+                        "setCell",
+                        rowid,
+                        "restStartTime2",
+                        restStartTime2
+                    );
+                    $("#entries").jqGrid(
+                        "setCell",
+                        rowid,
+                        "restEndTime",
+                        restEndTime
+                    );
+                    $("#entries").jqGrid(
+                        "setCell",
+                        rowid,
+                        "restEndTime2",
+                        restEndTime2
+                    );
+                }
+            });
+        },
+        calculateOTtimes: function (rowid) {
+            var startTime = $("#entries").jqGrid("getCell", rowid, "startTime");
+            var endTime = $("#entries").jqGrid("getCell", rowid, "endTime");
+            var restTime = $("#entries").jqGrid("getCell", rowid, "restTime");
+
+            if (startTime == "[object Object]") {
+                $("#" + rowid)
+                    .find("td")
+                    .eq("5")
+                    .text("");
+                $("#" + rowid)
+                    .find("td")
+                    .eq("5")
+                    .attr("title", "");
+            }
+            if (endTime == "[object Object]") {
+                $("#" + rowid)
+                    .find("td")
+                    .eq("6")
+                    .text("");
+                $("#" + rowid)
+                    .find("td")
+                    .eq("6")
+                    .attr("title", "");
+            }
+
+            if (startTime != "" && endTime != "") {
+                var restVal = 0;
+                if (restTime != "" && /^[0-9]*$/.test(restTime)) {
+                    restVal = restTime; // 分钟数
+                }
+                var startTime = NewDate(startTime + ":00");
+                var endTime = NewDate(endTime + ":00");
+                var se =
+                    endTime.getTime() -
+                    startTime.getTime() -
+                    restVal * 1000 * 60; // 毫秒
+                var tfl = se / (3600 * 1000);
+                $("#entries").jqGrid(
+                    "setCell",
+                    rowid,
+                    "applyOTTime",
+                    tfl.toFixed(fixedNum)
+                );
+            }
+        },
+        //获取档案历史加班类型的加班补偿方式
+        getOTCompensByOTType: function (personId, otTypeId, tDate) {
+            var _self = this;
+
+            var url =
+                shr.getContextPath() +
+                "/dynamic.do";
+            var otCompens = "";
+            _self.remoteCall({
+                type: "post",
+                method: "getOTCompensByOTType",
+                url: url,
+                param: {
+                    personId: personId,
+                    otTypeId: otTypeId,
+                    otDate: tDate
+                },
+                async: false,
+                success: function (res) {
+                    otCompens = res.otCompens;
+                }
+            });
+            return otCompens;
+        },
+        //获取当前加班类型的加班补偿方式
+        getOTCompensByOTTypes: function (personId, otTypeId) {
+            var _self = this;
+
+            var url =
+                shr.getContextPath() +
+                "/dynamic.do";
+            var otCompens = "";
+            _self.remoteCall({
+                type: "post",
+                method: "getOTCompensByOTTypes",
+                url: url,
+                param: { personId: personId, otTypeId: otTypeId },
+                async: false,
+                success: function (res) {
+                    otCompens = res.otCompens;
+                }
+            });
+            return otCompens;
+        },
+        changeOTCompens: function (rowid) {
+            var that = this;
+            var otCompensId;
+            if (!$("#entries").jqGrid("getCell", rowid, "otType")) {
+                return;
+            } else {
+                otTypeId = $("#entries").jqGrid("getCell", rowid, "otType").id;
+            }
+
+            if (!$("#entries").jqGrid("getCell", rowid, "person")) {
+                return;
+            } else {
+                var personId = $("#entries").jqGrid("getCell", rowid, "person")
+                    .id;
+            }
+
+            if (!$("#entries").jqGrid("getCell", rowid, "otDate")) {
+                return;
+            } else {
+                var otDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+            }
+
+            /*// zkbt5bMLQ3ehUivmKbtBOqlrTmA=  加班费 
+		var otCompensObejct = {id:"zkbt5bMLQ3ehUivmKbtBOqlrTmA=",name:"加班费"};
+		//等于法定节假日 id   sRWUOt7sRpOY0TCo6NMqGY6C/nU=
+*/
+            var otCompensIds = that.getOTCompensByOTTypes(personId, otTypeId);
+
+            var url =
+                shr.getContextPath() +
+                "/dynamic.do";
+            that.remoteCall({
+                type: "post",
+                method: "getDefaultOTCompens",
+                url: url,
+                param: {
+                    personId: personId,
+                    otTypeId: otTypeId,
+                    otDate: otDate
+                },
+                async: false,
+                success: function (res) {
+                    var info = res;
+                    if (info.defaultId == "" || info.defaultId == undefined) {
+                        shr.showWarning({
+                            message:
+                                jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_28
+                        });
+                    } else {
+                        var defaultOTCompens = {
+                            id: info.defaultId,
+                            name: info.defaultName
+                        };
+                        $("#entries").jqGrid(
+                            "setCell",
+                            rowid,
+                            "otCompens",
+                            defaultOTCompens
+                        );
+                        if (otCompensIds) {
+                            var otCompensIdsStr = otCompensIds.replace(
+                                /(,)/g,
+                                "','"
+                            );
+                            that.filter[rowid] =
+                                "BaseInfo.id in ('" + otCompensIdsStr + "')";
+                        }
+
+                        //$("#"+rowid+"_otCompens").shrPromptBox("setFilter","BaseInfo.id in ('"+otCompensIds+"')");
+                    }
+                    //
+                }
+            });
+
+            /*
+		that.remoteCall({
+			type:"post",
+			method:"getdefautAndOtOTCompens",
+			async: false,
+			success:function(res){
+					var info =  res;
+					var defaultcompens = info.defaultcompens;
+					var overTimeCompens = info.overTimeCompens;
+					var defaultJson = {id:defaultcompens.id , name:defaultcompens.name} ;
+					var overTimeJson = {id:overTimeCompens.id , name:overTimeCompens.name} ;
+					//  如果不是 工作日加班  则是要默认的补偿方式
+					//  如果是工作日加班  则是看有没有加班费
+					//$("#entries").jqGrid('setCell',rowid,"otCompens",'', 'editable-cell');
+					if(otTypeId == "sRWUOt7sRpOY0TCo6NMqGY6C/nU="){ // 
+						if(overTimeCompens!=null && overTimeCompens!=undefined){
+							$("#entries").jqGrid('setCell',rowid,"otCompens",overTimeJson);
+							//$("#entries").jqGrid('setCell',rowid,"otCompens",'', 'not-editable-cell');
+						}else{ 
+							$("#entries").jqGrid('setCell',rowid,"otCompens",defaultJson);
+						}
+					}else{
+						//$("#entries tr[id='"+rowid+"'] td[aria-describedby='entries_otCompens']").removeClass('not-editable-cell');
+						$("#entries").jqGrid('setCell',rowid,"otCompens",defaultJson);
+							//$("#entries").jqGrid('setCell',rowid,"otCompens",'', 'not-editable-cell');	
+					}
+				}
+			});*/
+
+            /*
+		if(otTypeId == "sRWUOt7sRpOY0TCo6NMqGY6C/nU="){
+			$("#entries").jqGrid('setCell',rowid,"otCompens",otCompensObejct);
+			$("#entries").jqGrid('setCell',rowid,"otCompens",'', 'not-editable-cell');
+		}else{
+			$("#entries tr[id='"+rowid+"'] td[aria-describedby='entries_otCompens']").removeClass('not-editable-cell');
+		}
+		*/
+        },
+        changeOverTimeType: function (rowid) {
+            var that = this;
+            var otDate;
+            var personId;
+            if (!$("#entries").jqGrid("getCell", rowid, "otDate")) {
+                return;
+            } else {
+                otDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+            }
+
+            if (!$("#entries").jqGrid("getCell", rowid, "person")) {
+                return;
+            } else {
+                personId = $("#entries").jqGrid("getCell", rowid, "person").id;
+            }
+            that.getOverTimeType(rowid, otDate, personId);
+        },
+        getOverTimeType: function (rowid, otDate, personId) {
+            var _self = this;
+            var tDate = otDate;
+            var url =
+                shr.getContextPath() +
+                "/dynamic.do?method=getOverTimeTypeAndOtCompens";
+            url +=
+                "&otDate=" +
+                encodeURIComponent(otDate) +
+                "&personId=" +
+                encodeURIComponent(personId)+"&uipk="+shr.getUrlRequestParam('uipk');
+            $.ajax({
+                url: url,
+                async: false,
+                success: function (response) {
+                    if (
+                        response.otTypeValue != null &&
+                        response.otTypeValue != undefined &&
+                        response.otTypeValue != ""
+                    ) {
+                        var responseObejct = {
+                            id: response.otTypeValue,
+                            name: response.otTypeText
+                        };
+                        if (_self.isOtTypeEffective(response.otTypeValue)) {
+                            // $('#entries').restoreCell(rowid,4); // 先恢复单元格状态再重新赋值,可以避免
+                            $("#entries").jqGrid(
+                                "setCell",
+                                rowid,
+                                "otType",
+                                responseObejct
+                            );
+                            //设置该加班类型的补偿方式过滤
+                            var otCompensIds = _self.getOTCompensByOTType(
+                                personId,
+                                response.otTypeValue,
+                                tDate
+                            );
+                            if (otCompensIds) {
+                                var otCompensIdsStr = _self
+                                    .getOTCompensByOTType(
+                                        personId,
+                                        response.otTypeValue,
+                                        tDate
+                                    )
+                                    .replace(/(,)/g, "','");
+                                _self.filter[rowid] =
+                                    "BaseInfo.id in ('" +
+                                    otCompensIdsStr +
+                                    "')";
+                            }
+
+                            var compens = response.compensInfo;
+                            if (compens != null) {
+                                var defaultJson = {
+                                    id: compens.id,
+                                    name: compens.name
+                                };
+                                $("#entries").jqGrid(
+                                    "setCell",
+                                    rowid,
+                                    "otCompens",
+                                    defaultJson
+                                );
+                            }
+                        } else {
+                            $("#entries").jqGrid(
+                                "setCell",
+                                rowid,
+                                "otType",
+                                null
+                            );
+                        }
+                    }
+                },
+                error: function (response) {}
+            });
+        },
+
+        //	判断加班补偿方式是否有效(存在且生效)
+        isOtTypeEffective: function (OtType) {
+            var _self = this;
+            var flag = true;
+            _self.remoteCall({
+                type: "post",
+                method: "isOtTypeEffective",
+                param: {
+                    OtType: OtType
+                },
+                async: false,
+                success: function (res) {
+                    var info = res;
+                    if (info.resFlag == false) {
+                        flag = false;
+                    } else {
+                        flag = true;
+                    }
+                }
+            });
+            return flag;
+        },
+        /**
+         * 设置分录行的默认值。重写框架此方法
+         */
+        createNewEntryModel: function () {
+            var that = this;
+            /*
+		var otCompens = that.getDefaultOTCompens();
+		return {otCompens:otCompens};*/
+        },
+        //设置默认的加班补偿方式
+        getDefaultOTCompens: function () {
+            var _self = this;
+            var defaultOTCompens = {};
+            //设置同步
+            _self.remoteCall({
+                type: "post",
+                method: "getDefaultOTCompens",
+                async: false,
+                success: function (res) {
+                    var info = res;
+                    if (info.defaultId) {
+                        defaultOTCompens = {
+                            id: info.defaultId,
+                            name: info.defaultName
+                        };
+                    }
+                }
+            });
+            return defaultOTCompens;
+        },
+        setButtonVisible: function () {
+            var billState = $("#billState").val();
+            //alert(billState);
+            if (billState) {
+                if (
+                    billState == 3 ||
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_22 ==
+                        billState ||
+                    billState == 4 ||
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_21 ==
+                        billState ||
+                    billState == 2 ||
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_23 ==
+                        billState
+                ) {
+                    $("#edit").hide();
+                    $("#submit").hide();
+                    $("#submitEffect").hide();
+                } else if (
+                    1 == billState ||
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_26 ==
+                        billState ||
+                    2 == billState ||
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_23 ==
+                        billState
+                ) {
+                    //未审批或审批中
+                    if (!this.isFromWF()) {
+                        $("#edit").hide();
+                        $("#submit").hide();
+                        $("#submitEffect").hide();
+                    }
+                }
+            }
+            if (this.getOperateState().toUpperCase() == "VIEW") {
+                //查看状态下不允许提交
+                //不允许提交生效
+                $("#submitEffect").hide();
+            }
+            //如果是工作流打回,界面上的"取消"不显示
+            if (this.isFromWF()) {
+                $("#cancelAll").hide();
+            }
+        },
+        setImportSelfParam: function () {
+            var billId = $("#id").val();
+            return (
+                $("#entries").getGridParam("reccount") + "&" + $("#id").val()
+            );
+        },
+        getOTContrlParams: function (rowid) {
+            var personId;
+            if (!$("#entries").jqGrid("getCell", rowid, "person")) {
+                return;
+            } else {
+                personId = $("#entries").jqGrid("getCell", rowid, "person").id;
+            }
+            var otDate;
+            if (!$("#entries").jqGrid("getCell", rowid, "otDate")) {
+                return;
+            } else {
+                otDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+            }
+            var that = this;
+
+            var url =
+                shr.getContextPath() +
+                "/dynamic.do?handler=com.kingdee.shr.ats.bill.util.BillBizUtil&method=getOTContrlParam";
+            shr.ajax({
+                type: "post",
+                async: false,
+                url: url,
+                data: { personId: personId, otDate: otDate },
+                success: function (res) {
+                    if (res) {
+                        that.OTContrlParams[rowid] = res;
+                        //					isOTControl=res.isOTControl;
+                        //					isOtrolByDateType=res.isOtrolByDateType;
+                    }
+                }
+            });
+        },
+        beforeSubmit: function () {
+            var _self = this,
+                workArea = _self.getWorkarea(),
+                $form = $("form", workArea);
+            _self.beforeWFValidStoreCellValue();
+            if ($form.valid() && _self.verify()) {
+                return true;
+            }
+            // return false 也能保存,固让js报错,后续让eas修改 return false 逻辑
+            var len = workArea.length();
+            return false;
+        },
+        validateIsFillOtVerify: function () {
+            var that = this;
+            var boo = true;
+            if (that.isFromWF()) {
+                var model = that.getCurrentModel();
+                that.remoteCall({
+                    method: "validateIsFillOt",
+                    param: { model: model },
+                    async: false,
+                    success: function (res) {
+                        info = res;
+                        if (res.errorString) {
+                            shr.showError({ message: res.errorString });
+                            boo = false;
+                        }
+                    }
+                });
+            }
+            return boo;
+        },
+        /**
+         * 工作流和其他页面统一校验入口,最好后续把校验都放在一起,方便维护.
+         * @return {}
+         */
+        verifyCheck: function () {
+            var that = this;
+            var boo = true;
+            if (that.isFromWF()) {
+                //暂时只处理流程提交,后续可放开把所有检验统一入口
+                var model = that.getCurrentModel();
+                that.remoteCall({
+                    method: "verifyCheck",
+                    param: { model: model },
+                    async: false,
+                    success: function (res) {
+                        info = res;
+                        if (res.errorString) {
+                            shr.showError({ message: res.errorString });
+                            boo = false;
+                        }
+                    }
+                });
+            }
+            return boo;
+        },
+        beforeWFValidStoreCellValue: function () {
+            var _self = this;
+
+            if (this.rowid && this.cellname && this.iRow && this.iCol) {
+                $("#entries").jqGrid("saveCell", this.rowid, this.iCol);
+                //_self.afterSaveCellTrigger(this.rowid, this.cellname, this.value, this.iRow , this.iCol) ;
+            }
+        },
+        checkattencePolicyParm: function (rownum) {
+            var that = this;
+            var errorString = "";
+
+            var model = that.getCurrentModel();
+            if (model.entries[0] && model.entries[0].person) {
+                delete model.entries[0].person["person.gender"];
+                delete model.entries[0].person["personOtherInfo.age"];
+            }
+            that.remoteCall({
+                method: "checkattencePolicyParm",
+                param: { model: model },
+                async: false,
+                success: function (res) {
+                    errorString = res.errorString;
+                }
+            });
+
+            return errorString;
+        },
+        validateOTEntry: function (rownum) {
+            var that = this;
+            var errorString = "";
+
+            var model = that.getCurrentModel();
+            if (model.entries[0] && model.entries[0].person) {
+                delete model.entries[0].person["person.gender"];
+                delete model.entries[0].person["personOtherInfo.age"];
+            }
+
+            //		openLoader();
+            that.remoteCall({
+                method: "validateOTEntry",
+                param: { model: model },
+                async: false,
+                success: function (res) {
+                    errorString = res.errorMSg;
+                }
+            });
+
+            return errorString;
+        },
+        openLoader: function (type, tip) {
+            if (!type) type = 1;
+            $("#loaderTip").text(
+                tip
+                    ? tip
+                    : jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_12
+            );
+            $("#loader").css("display", "block");
+        },
+        getCurrentModel: function () {
+            var model =shr.ats.AtsOverTimeBillBatchEdit.superClass.assembleModel.call(this);
+            model.ccPersonIds =
+                (model.ccPersonIds && model.ccPersonIds.id) || "";
+            model.ccPerson = model.ccPersonIds;
+
+
+
+
+
+            return model;
+        }
+    }
+);
+
+function NewDate(str) {
+    str = str.split(" ");
+    var day = str[0].split("-");
+    var hours = str[1].split(":");
+    var date = new Date();
+    date.setUTCFullYear(day[0], day[1] - 1, day[2]);
+    //, hours[3]
+    date.setUTCHours(hours[0], hours[1], hours[2]);
+    return date;
+}
+
+/**
+ * 创建日期时间
+ */
+function NewLongDate(str) {
+    str = str.split(" ");
+    var day = str[0].split("-");
+    var hours = str[1].split(":");
+    var date = new Date(
+        day[0],
+        day[1] - 1,
+        day[2],
+        hours[0],
+        hours[1],
+        hours[2] || ""
+    );
+    return date;
+}
+/**
+ * 创建日期
+ * 支持IE的创建方式
+ */
+function NewShortDate(str) {
+    str = str.split(" ");
+    var day = str[0].split("-");
+    var date = new Date(day[0], day[1] - 1, day[2]);
+    return date;
+}

+ 1539 - 0
js/备份/atsOverTimeBillBatchEditForPer.js

@@ -0,0 +1,1539 @@
+var _rowMap ;
+var isOTControl=false;
+var isOtrolByDateType=false;
+var fixedNum;
+shr.defineClass("shr.ats.atsOverTimeBillBatchEditForPer", shr.framework.Edit, {
+	OTContrlParams:{},
+	filter:{},
+	rowid : "" ,
+    cellname : "" ,
+    value : "" ,
+    iRow : "" ,
+	iCol : "" ,
+
+	initalizeDOM:function(){
+		shr.ats.atsOverTimeBillBatchEditForPer.superClass.initalizeDOM.call(this);
+		var that = this ;
+
+		that.remoteCall({
+        	type:"post",
+        	method:"getDecimalPlace",
+        	//handler:"com.kingdee.shr.ats.web.handler.AtsBillBaseEditHandler",
+        	success:function(res){
+        	    fixedNum =  res;
+        	}
+        });
+
+	    that.setNavigateLine();
+//		that.getOTContrlParams();
+		var classfullNameService = "com.kingdee.shr.ats.web.formEditImport.AtsOverTimeBillFileEditFormService";
+		
+		var entries_cont=waf("#entries");
+		entries_cont.jqGrid("option", {
+			  beforeSaveCell:function (rowid, cellname, value, iRow, iCol) {
+			  }
+			  ,afterSaveCell:function (rowid, cellname, value, iRow, iCol) {
+
+				  if(value["adminOrgUnit.id"]){
+						$("#entries").jqGrid('setCell',rowid,"adminOrgUnit.id",value["adminOrgUnit.id"]);
+					 }
+				_self.afterSaveCellTrigger(rowid, cellname, value, iRow, iCol);				 
+			  		
+			  }
+			  ,afterEditCell:function (rowid, cellname, value, iRow, iCol) 
+			  {
+			  	that.getOTContrlParams(rowid);
+			    if(cellname=="otType" && that.OTContrlParams[rowid].isOtrolByDateType){
+					$("#"+iRow+"_otType").shrPromptBox("disable");
+				}
+				//因为需求只是提了第一个时间时改变业务组织
+				$("#1_otDate").change(function(){
+				 that.changeOverHrOrgUnit();
+				});
+				if(cellname=="otCompens"){
+					
+					if(that.filter[rowid]==undefined){
+						// // R20221006-0542 修复选择加班费后 再点击“补偿方式”F7就变成了调休的问题
+			    		// that.changeOTCompens(rowid);
+			    	}
+			    	if(that.filter[rowid]){
+//						$("#"+rowid+"_otCompens").shrPromptBox("setFilter",that.filter[rowid]);
+			    		$("#"+$("#entries").jqGrid('getCell',rowid,"rn")+"_otCompens").shrPromptBox("setFilter",that.filter[rowid]);
+			    	}
+				}
+                  if(cellname == "attAdminOrgUnit"){
+                      var personId = $("#entries").jqGrid("getCell", rowid, "person").id;
+                      var attendanceDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+
+                      if(!(personId && attendanceDate)){
+                          shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_999});
+                          return false;
+                      }else{
+                          //$("#"+rowid+"_attPosition").shrPromptBox().attr("data-params", adminOrg);
+                          $("#"+iRow+"_attAdminOrgUnit").shrPromptBox("setOtherParams", {
+                              personId: personId,
+                              attendanceDate: attendanceDate
+                          });
+                      }
+
+
+                  }
+
+				_self.saveEditCellValue(rowid,cellname, value,iRow,iCol) ;
+			  }
+		});
+		
+		that.setButtonVisible(); //初始化页面安装状态,如果是已经提交的或者审批通过的单据编辑按钮不显示
+		//隐藏提交生效按钮
+		if (that.getOperateState() == 'EDIT') {			
+			if(that.isFromWF()){ // 来自流程中心
+				$("#submit").text(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_20);
+			}
+		}
+				
+		//审核编辑界面
+		if(that.isFromWF() && that.getOperateState() == 'EDIT'  && $("#billState").val() != 0)
+		{
+			$('#deleteRow_entries').unbind("click").attr("onclick","").css("cursor","default");
+			$('#addRow_entries').unbind("click").attr("onclick","").css("cursor","default");
+			$(".editGrid-toolbar").hide();
+			$("#submit").show();
+			var lastRowNum = $('#entries').getGridParam("reccount");
+			for (var i = 1;i<= lastRowNum;i++) {
+				var temp_id = $("#entries tr:eq("+ i +")").attr("id");
+				$("#entries").jqGrid('setCell',temp_id,'person','','not-editable-cell');
+			}	
+		}
+
+		that.initCcPersonPrompt();
+		that.isEdit();
+	},
+    clearCCPersonIdsPrompt :function() {
+        if ($('#ccPersonIds').length == 0) {
+            return;
+        }
+        atsCcPersonUtils.clearCCPersonIdsPrompt(this);
+    },
+	isEdit:function(){
+		var that = this;
+		if (that.getOperateState() == 'VIEW') {
+			if(that.initData.needHideEdit){
+				$("#edit").hide();
+				$("#submit").hide();
+			}
+		}
+	},
+    initCcPersonPrompt :function() {
+        if ($('#ccPersonIds').length == 0) {
+            return;
+        }
+        atsCcPersonUtils.initCCPersonIdsPrompt(this);
+        if (this.getOperateState() != 'VIEW') {
+            var person = $('#proposer').shrPromptBox("getValue");
+            if (!person) {
+                // shr.showWarning({message:"Please select people."});
+            } else {
+                $('#ccPersonIds').shrPromptBox("setOtherParams", {
+                    // handler: "com.kingdee.shr.ats.web.handler.team.F7.TeamPersonForEmpOrgF7ListHandler",
+                    personId: person.id
+                });
+            }
+        }
+    }
+	,afterSaveCellTrigger: function(rowid, cellname, value, iRow, iCol)
+	{	
+		var that = this ;
+		var entries_cont=waf("#entries");
+		that.removePreShowError(rowid);
+		if(cellname=="otDate"){
+
+            var val = value;
+            if (val.length <= 10) {
+                val = val + " 00:00:00";
+            }
+
+            val && $("#entries").jqGrid('setCell',rowid,"startTime",val);
+            val && $("#entries").jqGrid('setCell',rowid,"endTime",val);
+			that.changeOverTimeType(rowid);
+			that.calRestTimeLen(rowid);
+		}
+		
+		if(cellname=="otType"){
+			that.changeOTCompens(rowid);
+		}
+		// 添加 开始时间  结束时间   休息时长(分钟) 响应时间 
+		if(cellname=="startTime" || cellname=="endTime" || cellname=="restTime"){
+			if(cellname!="restTime"){
+				that.calRestTimeLen(rowid);
+			}
+			that.calculateOTtimes(rowid);
+		}
+		if(cellname=="person"){
+			
+			that.calRestTimeLen(rowid);
+		}
+		if(cellname=="applyOTTime"){ // 加班小时数  发生改变就给予提示
+			that.changOtTimeTipInfo(rowid);
+		}
+        if (cellname=="restStartTime" || cellname=="restStartTime2" || cellname=="restEndTime" ||cellname=="restEndTime2"){
+            //计算休息时间,加班时间
+            var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
+            var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
+            var restStartTime = $("#entries").jqGrid('getCell',rowid,"restStartTime") ;
+            var restEndTime = $("#entries").jqGrid('getCell',rowid,"restEndTime") ;
+            var restStartTime2 = $("#entries").jqGrid('getCell',rowid,"restStartTime2") ;
+            var restEndTime2 = $("#entries").jqGrid('getCell',rowid,"restEndTime2") ;
+            if (startTime=="" || endTime==""){
+                return
+            }
+            var totalRestTime=0;
+            var restStartTimeOfDate;
+            var restEndTimeOfDate;
+            if (restStartTime!="" && restEndTime!=""){
+                restStartTimeOfDate = new Date(restStartTime);
+                restEndTimeOfDate = new Date(restEndTime);
+                var times =restEndTimeOfDate.getTime()-restStartTimeOfDate.getTime();
+                if (times<0){
+                    times=0;
+                }
+                times=times/1000/60;
+                totalRestTime+=times;
+            }
+            if (restStartTime2!="" && restEndTime2!=""){
+                var restStartTime2OfDate = new Date(restStartTime2);
+                var restEndTime2OfDate = new Date(restEndTime2);
+                if ((restStartTime!="" && restEndTime2OfDate.getTime()>restStartTimeOfDate.getTime() && restStartTimeOfDate.getTime()>=restStartTime2OfDate.getTime())
+                    ||(restEndTime!="" && restEndTimeOfDate.getTime()<=restEndTime2OfDate.getTime() && restStartTime2OfDate.getTime()<restEndTimeOfDate.getTime())
+                    ||(restStartTime!="" && restEndTime!="" && restEndTimeOfDate.getTime()>=restEndTime2OfDate.getTime() && restStartTime2OfDate.getTime()>=restStartTimeOfDate.getTime())
+                ){
+                    //时间有交叉
+                    $("#entries").jqGrid('setCell',rowid,"restEndTime2",restStartTime2) ;
+                } else {
+                    var times =restEndTime2OfDate.getTime()-restStartTime2OfDate.getTime();
+                    if (times<0){
+                        times=0;
+                    }
+                    times=times/1000/60;
+                    totalRestTime+=times;
+                }
+            }
+            var  t1 = totalRestTime.toFixed(atsMlUtile.getSysDecimalPlace());
+            $("#entries").jqGrid('setCell',rowid,"restTime",t1) ;
+            var startTime =new Date(startTime+":00");
+            var endTime =new Date(endTime+":00");
+            var se = endTime.getTime()-startTime.getTime() -totalRestTime; // 毫秒
+            var tfl = se/(3600*1000) ;
+            $("#entries").jqGrid('setCell',rowid,"applyOTTime",tfl) ;
+            that.calculateOTtimes(rowid);
+            that.getOTContrlParams(rowid);
+        }
+	}
+	
+	//新增 jqgrid 行 方法, 复写
+	,addRowAction: function(event) {
+		//增加自己的逻辑
+	    var that = this ; 
+	    
+	    var num = $("#entries").jqGrid("getRowData").length ;
+	  	if(num>=100){
+	  	    shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_6});
+	  		return;
+	  	}
+	  	
+		var source = event.currentTarget,
+			$editGrid = this.getEditGrid(source);
+		
+		var data = this.createNewEntryModel(); // 默认的补偿方式
+		if (typeof data === 'undefined') {
+			data = {};
+		}
+		
+		var editGridCont = this._getEditGridCont(source);
+		if (editGridCont.data('editType') == 'inline') {
+			// 表格内编辑
+			$editGrid.jqGrid('addRow', { data: data	});
+		} else {
+			$editGrid.wafGrid('addForm');
+		}
+		
+		var event = document.createEvent('HTMLEvents');
+	   	    event.initEvent("editComplete_"+$editGrid.attr("id"), true, true);
+		    event.eventType = 'message';
+		    document.dispatchEvent(event);
+		
+		//设置不可 编辑 姓名
+		var lastRowNum = $('#entries').getGridParam("reccount");
+		var temp_id = $("#entries tr:eq("+ lastRowNum +")").attr("id");
+		$("#entries").editCell(lastRowNum, 11, true);
+		$("#entries").jqGrid('setCell',temp_id,'person','','not-editable-cell');
+		
+	},
+	changeOverHrOrgUnit : function(){
+		var that = this;
+		var overStartTime = atsMlUtile.getFieldOriginalValue("1_otDate");
+		if ( overStartTime!=""&&overStartTime!=null ) {
+		overStartTime = overStartTime.replace("\\-","/");
+		var personId = $("#proposer_el").val();
+		that.remoteCall({
+			type:"post",
+			async: false,
+			method:"getHrOrgUnit",
+			param:{personId:personId,beginTime:overStartTime},
+			success:function(res){
+				info =  res;
+				if(res.hrOrgUnitname && res.hrOrgUnitId){
+				$("#hrOrgUnit").val(res.hrOrgUnitname);
+				$("#hrOrgUnit_el").val(res.hrOrgUnitId);
+				}
+				
+			}
+		});
+		}
+	}
+	// 获取填充的 rowId,导入的rowId 
+	,getFillRowId:function(oldRowIds,newRowIds){
+		var size = newRowIds.length;
+		var sizeOld = oldRowIds.length;
+		if(sizeOld == 0){
+			return newRowIds;
+		}
+		var  rowIds = [];
+		for(var i=0;i<size;i++){
+		  if(i>=sizeOld){
+		       rowIds.push(newRowIds[i]);   
+		   }
+		}
+		return rowIds ;
+	}
+
+	,submitAction: function(event) {
+		var _self = this,
+			workArea = _self.getWorkarea(),
+			$form = $('form', workArea);
+		if(!_self.validate()){
+			return ;
+		}
+			
+		if ($form.valid() && _self.verify()) {
+			shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_14, function() {
+				_self.doSubmit(event, 'submit');
+			});
+		}		
+	}
+	,goNextPage: function(source) {
+		// 普通提交,返回上一页面
+		_self.reloadPage({
+				uipk: "com.kingdee.eas.hr.ats.app.AtsOverTimeBillList"
+		});
+	}
+	,prepareSubmitEffect : function (event, action){
+		var _self = this;
+		var data = _self.assembleSaveData(action);
+		
+		var target;
+		if (event && event.currentTarget) {
+			target = event.currentTarget;
+		}
+		shr.doAction({
+			target: target,
+			url: _self.dynamicPage_url,
+			type: 'post', 
+			data: data,
+			success : function(response) {
+				_self.back();
+			}
+		});	
+	}
+	
+	,importAction: function(gridID,classfullName) {
+		
+		var _self = this;
+		if(gridID != undefined)
+		{
+			grid = gridID	;
+		}
+		if(classfullName != undefined)
+		{
+			className = classfullName ;
+		}
+		
+		var importDiv = $('#importDiv');
+		if (importDiv.length > 0) {
+		//	importDiv.data('uipk', lastUipk);
+		//	importDiv.data('viewModel', viewModel);
+		//	importDiv.data('classify', classify);
+		//	importDiv.dialog('open');
+		//	return;
+		}
+		 $('#importDiv').remove();
+		 
+		 selfParam = _self.setImportSelfParam();
+		// 未生成dialog
+		importDiv = $('<div id="importDiv"></div>').appendTo($('body'));
+		importDiv.data('uipk', lastUipk);
+		importDiv.data('viewModel', viewModel);
+		importDiv.data('grid', grid);
+		importDiv.data('className', className);
+		importDiv.data('selfParam',selfParam);
+	//	importDiv.data('classify', classify);
+		var oldRowIds = $("#entries").getDataIDs();
+		if(_self.checkUpload()){ 
+			importDiv.dialog({
+				autoOpen: true,		
+				width: 708,
+				height: 700,
+				title: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_4,
+				resizable: true,
+				position: ['top','top'],
+				modal: true,
+				open: function(event, ui) {
+					if ($.browser.msie) {
+						var url = shr.assembleURL('hr.ats.com.atttendanceCommonImport', 'view', {
+							lastUipk: lastUipk,
+							viewModel: viewModel ,
+							className : className
+							//classify:classify
+						});
+						var content = '<iframe id="importFrame" name="importFrame" width="700" height="600" frameborder="0" scrolling="no" allowtransparency="true" src="' + url + '"></iframe>';
+						importDiv.append(content);
+					} else {
+						
+						var url = shr.assembleURL('hr.ats.com.atttendanceCommonImport$page', 'view');
+						shr.loadHTML({
+							url: url,
+							success: function(response) {
+								importDiv.append(response);
+							}
+						});
+					}
+					document.documentElement.style.overflow='hidden';
+				},
+				close: function(event, ui) {
+					document.documentElement.style.overflow='scroll';
+					importDiv.empty();
+					
+					// 触发计算 请假次数 剩余额度 时长
+					
+					//点击序号列 让人员失去焦点
+					$("#entries tr:eq(1) td:eq(0)").click();
+					
+					var newRowIds = $("#entries").getDataIDs();
+					var rowIds = _self.getFillRowId(oldRowIds,newRowIds);
+					$.each(rowIds,function(n,value) { 
+						_self.calRestTimeLen(value);
+						_self.changOtTimeTipInfo(value);
+					});
+					//检查不超过100条记录
+					//_self.checkRowIsOver();
+					
+				} 
+			});
+		}
+		
+		$(".ui-dialog-titlebar-close").bind("click" , function(){
+			importDiv.dialog("close");
+		});		
+	}
+	
+	,verify:function(){
+		var _self = this ;
+		var obj = $("#entries").jqGrid("getRowData");
+		var errorString = "";
+		var errorFlag = 0 ;
+		if(obj.length == 0){
+			shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_7});
+			return false;
+		}
+		
+		if(!_self.checkRowIsOver()){
+			return false;
+		}
+		
+		_rowMap = {} ;
+		
+		jQuery(obj).each(function(n){
+		    	errorString = _self.checkEveryRow(n + 1 , this);
+		   		if(errorString){
+		   			_self.preShowError( n + 1 ,this.person.name + " " + errorString);
+		   			errorFlag = 1 ;
+		   		}
+			
+		 });	
+		 if(!_self.verifyCheck()){
+		 	return false;
+		 }
+
+		errorString = _self.validateOTEntry();
+		if(errorString && errorString != ""){
+			shr.showWarning({message: errorString});
+			closeLoader();
+			return false;
+		}
+
+
+		 
+		 if(errorFlag == 0){
+			 //工作流审批界面,加班补提控制。
+		    var boo = true;
+		    boo = _self.validateIsFillOtVerify();
+   			return boo;
+		 }else{
+			return false;
+		 }
+	},
+
+		validateOTEntry: function(rownum){
+			var that = this;
+			var errorString = "";
+
+			var model = that.assembleModel();
+			if(model.entries[0] && model.entries[0].person){
+				delete model.entries[0].person["person.gender"];
+				delete model.entries[0].person["personOtherInfo.age"];
+			}
+
+//		openLoader();
+			that.remoteCall({
+				method:"validateOTEntry",
+				param:{model:model},
+				async: false,
+				success:function(res){
+					errorString = res.errorMSg;
+				}
+			});
+
+			return errorString;
+		}
+
+	,openLoader: function (type, tip) {
+		if(!type)  type = 1;
+		$("#loaderTip").text(tip ? tip : jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_12);
+		$("#loader").css("display", "block");
+	},
+	getCurrentModel : function(){
+		var model = shr.ats.AtsOverTimeBillBatchEdit.superClass.getCurrentModel.call(this);
+		model.ccPersonIds = model.ccPersonIds && model.ccPersonIds.id || "";
+		model.ccPerson = model.ccPersonIds;
+		return model ;
+	}
+
+
+	,checkEveryRow : function(rownum,value){
+			var that = this ;
+			var regEx = new RegExp("\\-","gi"); //i不区分大小写 g匹配所有
+			
+		 	var startTime = value.startTime ;
+			var endTime = value.endTime ;
+			//这样写IE才支持。
+			var startTimeOfDate =  NewLongDate(startTime + ":00"); 
+		 	var endTimeOfDate = NewLongDate(endTime + ":00"); 
+		 	
+		 	var longTime = endTimeOfDate.getTime() - startTimeOfDate.getTime();
+		 	var otType = value.otType.id;
+		 	
+		 	//处理加班日期 与 加班开始时间 和结束时间的日期保持一致
+		 	var overDate = value.otDate ; //加班日期
+		 	overDate = overDate.substring(0,10);
+		 	var overTimeBegin = value.startTime ;
+		 	overTimeBegin = overTimeBegin.substring(0,10); //2014-01-02 00:00
+		 	var overTimeEnd = value.endTime ;
+		 	overTimeEnd = overTimeEnd.substring(0,10);
+		 	
+	 		var overTimeDate = NewShortDate(overDate);
+	 		var overTimeStartDate = NewShortDate(overTimeBegin); 
+	 		var overTimeEndDate = NewShortDate(overTimeEnd);
+	 	
+		 	
+			if ( overTimeStartDate.getTime() <overTimeDate.getTime()-24*60*60*1000  ) {
+				return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_2;
+		 	}
+		 	if ( overTimeEndDate.getTime()-24*60*60*1000  > overTimeDate.getTime() ) {
+		 		return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_2;
+		 	}
+		 	if (longTime <= 0) {
+		 		return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_9;
+		 	}
+
+		    var applyOTTime = value.applyOTTime;
+			if(applyOTTime <= 0){
+				return jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_0001;
+			}
+		 	
+		 	
+		 	// 检查jqgrid 表格里的是否有重复数据
+		 	var rowValue = new Array();
+				rowValue[0] = value.person.id;
+				rowValue[1] = value.startTime;
+				rowValue[2] = value.endTime;
+		 		_rowMap[rownum] = rowValue;
+		 	for(var prop in _rowMap){
+ 			   if(_rowMap.hasOwnProperty(prop)){
+ 			   	    var beginTimeTempStr = _rowMap[prop][1];
+ 			   	    var endTimeTempStr = _rowMap[prop][2];
+ 			   		var beginTimeTemp = NewLongDate(beginTimeTempStr);
+ 			   		var endTimeTemp = NewLongDate(endTimeTempStr);
+ 			   		if(prop!=rownum&&_rowMap[prop][0]==value.person.id&&!(beginTimeTemp.getTime()>=endTimeOfDate.getTime()||endTimeTemp.getTime()<=startTimeOfDate.getTime())){
+ 			   			return shr.formatMsg(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_3, [prop]);
+ 			   		
+ 			   		}
+    			}
+			}
+        var msg =this.verifyRestTime(true,value);
+        if (msg!=""){
+            return msg;
+        }
+		 	var isExistFile = that.isExistAttendanceFile(value.person.id);
+		 	if(isExistFile == false){
+		 	   return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_5;
+		 	}
+		 	//设置同步
+		 	var info ;
+		 	that.remoteCall({
+				type:"post",
+				method:"isWorkTime",
+				async: false,
+				param:{personId: value.person.id,overDate:value.otDate,overTimeBegin:value.startTime+":00",overTimeEnd:value.endTime+":00"},
+				success:function(res){
+					   info = res;
+				}
+			});
+		 	
+			if (info.isWorkTime){
+//				shr.showWarning({message:"加班开始结束时间和上班时间有交叉。"});
+				return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_8;
+			}	
+			var applyOTTime = value.applyOTTime;
+		 	//判断申请加班小时数是否达到加班起始值
+			var validOtStartString;
+		 	that.remoteCall({
+				type:"post",
+				method:"validOtStart",
+				async: false,
+				param:{personId: value.person.id,applyOTTime:applyOTTime},
+				success:function(res){
+					   var validInfo = res.info;
+					   if(validInfo!=null && validInfo!=""){
+						   validOtStartString=validInfo;
+					   }
+				}
+			});
+	 	    if(validOtStartString!=null && validOtStartString!=""){
+	 	    	return validOtStartString;
+	 	    }
+			//是否在“固定加班”时间段或者“固定加班不计异常”时间段内
+			var obj;
+		 	that.remoteCall({
+				type:"post",
+				method:"isAtFixedOverTimeOrExcep",
+				async: false,
+				param:{personId: value.person.id,overDate:value.otDate,overTimeBegin:value.startTime+":00",overTimeEnd:value.endTime+":00"},
+				success:function(res){
+					obj = res;
+				}
+			});
+		 	
+			if (obj.isAtFixedOverTimeOrExcep){
+				return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_1;
+			}	
+			
+		 	var errorString = that.validateIsExistBill(value.person.id,startTime,endTime,$('#id').val());
+	   		if(errorString){
+	   			/*shr.showInfo({message: "加班开始时间必须小于加班结束时间。"});
+				return false;*/
+	   			return errorString;
+	   		}
+   			if(value.otCompens.id =="AERg0TIcSnaM40EKvJCdRKlrTmA="){ // 只有等于调休的时候才校验
+   				var errorString = that.validateIsValidateLimit(value.person.id,value.otDate,value.applyOTTime,otType);
+   				if(errorString){
+   					return errorString;
+   				}
+   			}
+			
+		 	return "" ;
+	
+	}// 调休额度是否正确 ;
+	,validateIsValidateLimit : function(personId,otDate,currentValue,otType){
+		var that = this;
+			var info;
+			var infoLeaveBillNumber;
+			otDate =otDate.substring(0,10);
+			var errorString = "";
+		 		that.remoteCall({
+				type:"post",
+				async: false,
+				method:"isOverMaxQuota",
+				param:{personId:personId,otDate:otDate,currentValue:currentValue,otType:otType},
+				success:function(res){
+					if(!res.resFlag){
+						errorString = res.resMsg ;						
+					}
+				}
+			});
+		return errorString;
+	}
+	,validateIsExistBill : function(personId , beginTime , endTime , billId ){
+			var that = this;
+			var info;
+			var infoLeaveBillNumber;
+			var errorString = "";
+		 		that.remoteCall({
+				type:"post",
+				async: false,
+				method:"validateIsExistBill",
+				param:{personId:personId,beginTime:beginTime,endTime:endTime,billId:billId},
+				success:function(res){
+					info =  res;
+				}
+			});
+		    
+		    if (errorString) {
+		      errorString = shr.formatMsg(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_23,
+				  [info.overTimeNum, info.personName, info.beginTime, info.endTime]);
+			  return errorString;
+		    }  
+	},
+	// 获取表格序号列,修复平台表格序号列位置移动导致的提示列位置错误导致的显示异常bug
+	getColNumIndex: function(){
+		var _self = this;
+		if(_self.colNumIndex){
+			return _self.colNumIndex
+		}
+		$.each($("#entries").jqGrid("getAllColumn"),function(index,item){
+			if(item.name=="rn"){
+				_self.colNumIndex=index	
+			}
+		})
+		return _self.colNumIndex
+	}
+	//对校验结果进行页面个性化提示
+	,preShowError:function(iRow,errorString){
+		var rnColNum=this.getColNumIndex();
+			var that = this;
+			if (errorString){
+				$("#entries tr:eq("+iRow+") td:eq("+rnColNum+")").html("!").css("color","red").attr({"data-toggle":"tooltip","data-placement":"left","title":errorString});
+				$("#entries tr[id='"+iRow+"']").css("color","red");
+			/*
+				$("#entries tr:eq("+iRow+") td:eq(2)").css("color","red");
+				$("#entries tr:eq("+iRow+") td:eq(3)").css("color","red");
+				$("#entries tr:eq("+iRow+") td:eq(4)").css("color","red");
+			*/			
+			}
+	}
+	//对校验结果进行页面个性化提示
+	,preShowWarn:function(iRow,errorString){
+		var rnColNum=this.getColNumIndex();
+			var that = this;
+			$("#entries").find('tr').eq(iRow).find('td').eq("+rnColNum+").text("?").css("color","red").attr({"data-toggle":"tooltip","data-placement":"left","title":errorString});
+			
+	}
+	//去除个性化展示,每次校验前去除
+	,removePreShowError:function(rowid){
+		var rnColNum=this.getColNumIndex()
+		var rows = $('#entries').getGridParam("reccount");
+			$("#entries tr[id='"+rowid+"'] td:eq("+rnColNum+")").attr('title','');
+			$("#entries tr[id='"+rowid+"'] td:eq("+rnColNum+")").html($("#entries tr[id='"+rowid+"']")[0].rowIndex);
+			$("#entries tr[id='"+rowid+"'] td:eq("+rnColNum+")").css("color","rgb(153, 153, 153)")
+			$("#entries tr[id='"+rowid+"']").css("color","rgb(153, 153, 153)");//如果设置成css("color","initial")会变成黑色,而原界面为灰色
+	}
+	,checkF7Data : function(){
+			var that = this;
+			
+			var otDate = window.frames["orgFillDiv"].atsMlUtile.getFieldOriginalValue("otDate");
+			var  adminOrgUnit_el = $(window.frames["orgFillDiv"].document).find("#adminOrgUnit_el").val() ;
+			var  adminOrgUnit = $(window.frames["orgFillDiv"].document).find("#adminOrgUnit").val() ;
+			var  person_el = $(window.frames["orgFillDiv"].document).find("#person_el").val() ;
+			var  person = $(window.frames["orgFillDiv"].document).find("#person").val() ;
+			
+			var startTime = window.frames["orgFillDiv"].atsMlUtile.getFieldOriginalValue("startTime");
+			var otType_el =$(window.frames["orgFillDiv"].document).find("#otType_el").val() ;
+			var otType = $(window.frames["orgFillDiv"].document).find("#otType").val() ;
+			var endTime = window.frames["orgFillDiv"].atsMlUtile.getFieldOriginalValue("endTime");
+			
+			var otCompens_el = $(window.frames["orgFillDiv"].document).find("#otCompens_el").val();
+			var otCompens = $(window.frames["orgFillDiv"].document).find("#otCompens").val();
+			
+			
+			var restTime = $(window.frames["orgFillDiv"].document).find("#restTime").val() ;
+			var otReason_el =$(window.frames["orgFillDiv"].document).find("#otReason_el").val() ;
+			var otReason = $(window.frames["orgFillDiv"].document).find("#otReason").val() ;
+			var applyOTTime = window.frames["orgFillDiv"].atsMlUtile.getFieldOriginalValue("applyOTTime") ;
+			
+			var remark = $(window.frames["orgFillDiv"].document).find("#remark").val();
+			var remain = $(window.frames["orgFillDiv"].document).find("#remain").text();
+			var checkAmount = $(window.frames["orgFillDiv"].document).find("#checkAmount").text();
+	
+			/*
+			var otDate = $('iframe')[0].contentWindow.$('#otDate').val();
+					        	
+        	var adminOrgUnit_el = $('iframe')[0].contentWindow.$('#adminOrgUnit_el').val();
+        	var adminOrgUnit = $('iframe')[0].contentWindow.$('#adminOrgUnit').val();
+        	
+        	var person_el = $('iframe')[0].contentWindow.$('#person_el').val();
+        	var person = $('iframe')[0].contentWindow.$('#person').val();
+        	
+        	var startTime = $('iframe')[0].contentWindow.$('#startTime').val();
+        	
+        	var otType_el = $('iframe')[0].contentWindow.$('#otType_el').val();
+        	var otType = $('iframe')[0].contentWindow.$('#otType').val();
+        	
+        	var endTime = $('iframe')[0].contentWindow.$('#endTime').val();
+        	
+        	var otCompens_el = $('iframe')[0].contentWindow.$('#otCompens_el').val();
+        	var otCompens = $('iframe')[0].contentWindow.$('#otCompens').val();
+        
+        	var restTime = $('iframe')[0].contentWindow.$('#restTime').val();
+        	
+        	var otReason_el = $('iframe')[0].contentWindow.$('#otReason_el').val();
+        	var otReason = $('iframe')[0].contentWindow.$('#otReason').val();
+        	
+        	var applyOTTime = $('iframe')[0].contentWindow.$('#applyOTTime').val();
+        	var remark = $('iframe')[0].contentWindow.$('#remark').val();
+        	var remain = $('iframe')[0].contentWindow.$('#remain').text();
+        	var checkAmount = $('iframe')[0].contentWindow.$('#checkAmount').text();
+        	*/
+        	//校验
+        	if(parseInt(checkAmount) > parseInt(remain)){ 
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_26});
+	        		return false;
+    		}
+        	
+        	//校验
+        	if(!otDate){
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_11});
+	        		return false;
+    		}
+        	
+    		if((!adminOrgUnit_el||!adminOrgUnit)&&(!person_el||!person)){
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_25});
+	        		return false;
+    		}
+    		
+        	if(!startTime){
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_13});
+	        		return false;
+    		}
+    		
+    		if(!otType_el||!otType){
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_10});
+	        		return false;
+    		}
+    		
+    		if(!endTime){
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_12});
+	        		return false;
+    		}
+    		
+    		if(!otCompens_el||!otCompens){
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_0});
+	        		return false;
+    		}
+    		
+    		/*if(!restTime){
+	        		shr.showWarning({message: "休息时长(分钟)不能为空!"});
+	        		return false;
+    		}*/
+    		
+    		/*if(!otReason_el||!otReason){
+	        		shr.showWarning({message: "加班原因不能为空!"});
+	        		return false;
+    		}*/
+    		
+    		if(!applyOTTime){
+	        		shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_15});
+	        		return false;
+    		}
+	
+    		return true;
+	}
+	
+	,checkRowIsOver : function(){
+		if( $("#entries").jqGrid("getRowData").length > 100){
+			shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_6});
+			return false;
+		}else{
+			return true;
+		}
+	}
+	// 如 加班小时数发生变化 则给予提示
+	,changOtTimeTipInfo :function(rowid){ //
+		var that = this ;
+		var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
+		var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
+		var restTime = $("#entries").jqGrid('getCell',rowid,"restTime") ;
+		var applyOTTime = $("#entries").jqGrid('getCell',rowid,"applyOTTime") ;
+		
+		if(startTime!="" && endTime!=""){
+			var restVal = 0;
+			if(restTime!="" && (/^[0-9]*$/.test(restTime))){
+				restVal = restTime; // 分钟数 
+			}
+			var startTime =new Date(startTime+":00");
+			var endTime =new Date(endTime+":00");
+			var se = endTime.getTime()-startTime.getTime() - (restVal * 1000 * 60); // 毫秒
+			var tfl = se/(3600*1000) ;  
+			if(tfl!=applyOTTime){ // 不相等就给予提示
+				that.preShowWarn( rowid , jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_19);
+			}
+			//$("#entries").jqGrid('setCell',rowid,"applyOTTime",tfl); 计算的值
+		}
+	
+	}
+	// if(cellname=="startTime" || cellname=="endTime" || cellname=="restTime"){
+	,calRestTimeLen : function(rowid){
+		var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
+		var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
+		if(startTime =="[object Object]"){
+			$("#"+rowid).find('td').eq('5').text("");
+			$("#"+rowid).find('td').eq('5').attr("title","");
+			return ;
+		}
+		if(endTime =="[object Object]"){
+			$("#"+rowid).find('td').eq('6').text("");
+			$("#"+rowid).find('td').eq('6').attr("title","");
+			return ;
+		}
+		if(!$("#entries").jqGrid('getCell',rowid,"otDate")){
+			return;
+		}else{
+			otDate = $("#entries").jqGrid('getCell',rowid,"otDate");
+		}
+		if(!$("#entries").jqGrid('getCell',rowid,"person")){
+			return;
+		}else{
+			personId = $("#entries").jqGrid('getCell',rowid,"person").id;
+		}
+		this.remoteCall({
+			type:"post",
+			method:"getMyRestTime",
+			async: false,
+			param:{personId:personId,tDay:otDate,realStartTime:startTime,realEndTime:endTime},
+			success:function(res){
+					var resLen = res.restTime<0?0:res.restTime;
+                $("#entries").jqGrid('setCell',rowid,"restTime",resLen);
+                $("#entries").jqGrid('setCell',rowid,"restStartTime",res.restStartTime);
+                $("#entries").jqGrid('setCell',rowid,"restEndTime",res.restEndTime);
+                $("#entries").jqGrid('setCell',rowid,"restStartTime2",res.restStartTime2);
+                $("#entries").jqGrid('setCell',rowid,"restEndTime2",res.restEndTime2);
+				}
+		});
+	}
+	,addTimeToDate: function(date){
+	    if(date != null && date != '' && date.length == 10){
+	        date += " 00:00:00";
+        }
+	    return date;
+    }
+
+	,calculateOTtimes : function(rowid){
+        var that = this ;
+		var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
+		var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
+		var restTime = $("#entries").jqGrid('getCell',rowid,"restTime") ;
+		 
+		if(startTime =="[object Object]"){
+			$("#"+rowid).find('td').eq('5').text("");
+			$("#"+rowid).find('td').eq('5').attr("title","");
+		}
+		if(endTime =="[object Object]"){
+			$("#"+rowid).find('td').eq('6').text("");
+			$("#"+rowid).find('td').eq('6').attr("title","");
+		}
+
+        startTime = that.addTimeToDate(startTime);
+        endTime = that.addTimeToDate(endTime);
+		
+		if(startTime!="" && endTime!=""){
+			var restVal = 0;
+			if(restTime!="" && (/^[0-9]*$/.test(restTime))){
+				restVal = restTime; // 分钟数 
+			}
+			var startTime = NewDate(startTime+":00");
+			var endTime = NewDate(endTime+":00");
+			var se = endTime.getTime()-startTime.getTime() - (restVal * 1000 * 60); // 毫秒
+			var tfl = (se/(3600*1000)).toFixed(fixedNum) ;
+			$("#entries").jqGrid('setCell',rowid,"applyOTTime",tfl);
+		}
+	}				
+	,changeOTCompens:function(rowid){
+		var that=this;
+    	var otCompensId ;
+    	if(!$("#entries").jqGrid('getCell',rowid,"otType")){
+			return;
+		}else{
+			otTypeId = $("#entries").jqGrid('getCell',rowid,"otType").id;
+		}
+    	
+    	if(!$("#entries").jqGrid('getCell',rowid,"person")){
+			return;
+		}else{
+			var personId = $("#entries").jqGrid('getCell',rowid,"person").id;
+		}
+    	
+    	
+		/*// zkbt5bMLQ3ehUivmKbtBOqlrTmA=  加班费 
+		var otCompensObejct = {id:"zkbt5bMLQ3ehUivmKbtBOqlrTmA=",name:"加班费"};
+		//等于法定节假日 id   sRWUOt7sRpOY0TCo6NMqGY6C/nU=
+*/		
+		var otCompensIds = that.getOTCompensByOTType(personId,otTypeId);
+
+		var url = shr.getContextPath()+'/dynamic.do';
+		that.remoteCall({
+			type:"post",
+			method:"getDefaultOTCompens",
+			url:url,
+			param:{personId:personId,otTypeId:otTypeId},
+			async: false,
+			success:function(res){
+				var info =  res;
+				if (info.defaultId == "" || info.defaultId ==undefined ){
+					shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_24});
+				}else {
+					var defaultOTCompens = {id:info.defaultId,name:info.defaultName};	
+					$("#entries").jqGrid('setCell',rowid,"otCompens",defaultOTCompens);
+					if(otCompensIds){
+						var otCompensIdsStr = otCompensIds.replace(/(,)/g, "','")
+						that.filter[rowid]="BaseInfo.id in ('"+otCompensIdsStr+"')";
+					}
+					
+					//$("#"+rowid+"_otCompens").shrPromptBox("setFilter","BaseInfo.id in ('"+otCompensIds+"')");
+				}			
+//				
+			}
+			});
+	}
+	,changeOverTimeType:function(rowid){
+		var that=this;
+    	var otDate ;
+    	var personId ;
+    	if(!$("#entries").jqGrid('getCell',rowid,"otDate")){
+			return;
+		}else{
+			otDate = $("#entries").jqGrid('getCell',rowid,"otDate");
+		}
+		
+		if(!$("#entries").jqGrid('getCell',rowid,"person")){
+			return;
+		}else{
+			personId = $("#entries").jqGrid('getCell',rowid,"person").id;
+		}
+    	that.getOverTimeType(rowid,otDate,personId);
+			
+	}
+	,getOverTimeType:function(rowid,otDate,personId){
+		var _self = this;
+		var url = shr.getContextPath() + "/dynamic.do?method=getOverTimeTypeAndOtCompens";
+		url += '&otDate=' + encodeURIComponent(otDate) + '&personId=' + encodeURIComponent(personId)+"&uipk="+shr.getUrlRequestParam('uipk');
+		$.ajax({
+			url: url, 
+			async:false, 
+			success: function(response){
+				if(response.otTypeValue!=null && response.otTypeValue !=undefined && response.otTypeValue!=''){
+					var responseObejct = {id:response.otTypeValue,name:response.otTypeText }
+					if (_self.isOtTypeEffective(response.otTypeValue)){
+						// $('#entries').restoreCell(rowid,4); // 先恢复单元格状态再重新赋值,可以避免
+						$("#entries").jqGrid('setCell',rowid,"otType",responseObejct);
+						
+						//设置该加班类型的补偿方式过滤
+						var otCompensIds =  _self.getOTCompensByOTType(personId,response.otTypeValue);
+						if(otCompensIds){
+							var otCompensIdsStr = _self.getOTCompensByOTType(personId,response.otTypeValue).replace(/(,)/g, "','");
+					    	_self.filter[rowid]="BaseInfo.id in ('"+otCompensIdsStr+"')";
+						}
+						
+						var compens = response.compensInfo ;
+						var defaultJson = {id:compens.id , name:compens.name} ;
+						$("#entries").jqGrid('setCell',rowid,"otCompens",defaultJson);
+					}
+					else {
+						$("#entries").jqGrid('setCell',rowid,"otType",null);
+					}
+				}
+			}  
+			,error: function(response) {
+			}
+		});
+	}
+	
+	//	判断加班补偿方式是否有效(存在且生效)
+	,isOtTypeEffective : function (OtType) {
+		var _self = this;
+		var flag = true;
+		_self.remoteCall({
+			type:"post",
+			method:"isOtTypeEffective",
+			param:{
+				OtType:OtType
+			},
+			async: false,
+			success:function(res){
+				var info =  res;
+				if (info.resFlag == false){
+					flag = false;
+				}else {
+					flag = true;
+				}
+			}
+		});
+		return flag;
+	}
+	/**
+	 * 将mode生成加班原因state属性去掉,控件生成的不对,生成了一串html。保存时json会解析不通过。
+	 */
+	,assembleModel : function(){
+	
+		var assModel = shr.ats.atsOverTimeBillBatchEditForPer.superClass.assembleModel.call(this);
+		var personDateStr = '';
+		var length = assModel.entries.length ;
+		for( var i = 0 ; i < length ; i++)
+		{
+			if(assModel.entries[i].otReason && assModel.entries[i].otReason.state){
+				 delete assModel.entries[i].otReason.state;
+			}
+			if(assModel.entries[i].otType && assModel.entries[i].otType.state){
+				 delete assModel.entries[i].otType.state;
+			}
+			if(assModel.entries[i].otCompens && assModel.entries[i].otCompens.state){
+				 delete assModel.entries[i].otCompens.state;
+			}
+			//组装参数
+			var personId = assModel.entries[i].person.id;
+			var date = assModel.entries[i].otDate;
+			if(date && personId){
+				if(i > 0){
+					personDateStr +=",";
+				}
+				personDateStr += personId +"_"+date.substring(0,10);
+			}
+		}
+		
+		//审核编辑界面重新点击出差类型 josn 转换出错
+		if(this.isFromWF())
+		{
+		  var lastRowNum = $('#entries').getGridParam("reccount");
+		     
+		    for(var i = 0; i < lastRowNum; i++ )
+		    {
+		       delete  assModel.entries[i].otType.state 
+			   delete  assModel.entries[i].otCompens.state 
+			   delete  assModel.entries[i].otReason.state 
+		    }
+		}
+		
+		if(personDateStr){
+			_self.remoteCall({
+				type:"post",
+				method:"getPersonAdminOrgUnit",
+				//handler:"com.kingdee.shr.ats.web.handler.AtsBillBaseEditHandler",
+				param:{ personDateStr:personDateStr},
+				async: false,
+				success:function(res){
+					var info =  res;
+					var personAtsInfo = {};
+					for (var i = 0; i < length; i++) {
+						var personId = assModel.entries[i].person.id;
+						var date = assModel.entries[i].otDate;
+						if(date && personId){
+							var person_date = personId +"_"+date.substring(0,10);
+							personAtsInfo = res[person_date];
+							if(personAtsInfo && personAtsInfo.adminOrgUnit){
+								assModel.entries[i]["adminOrgUnit"]= personAtsInfo.adminOrgUnit;
+								assModel.entries[i]["position"]= personAtsInfo.position;
+							}
+						}
+					}
+				}
+			});
+		}
+
+        assModel.ccPerson = assModel.ccPersonIds;
+		return assModel;
+		
+	}
+	/**
+	 * 设置分录行的默认值。重写框架此方法
+	 */
+	,createNewEntryModel: function() {
+		var that = this ; 
+		var otCompens = that.getDefaultOTCompens();
+		var defalutPerson = {id:$('#proposer_el').attr('value'),name:$('#proposer').attr('title')};
+		return {person:defalutPerson,otCompens:otCompens};
+		
+		//
+		
+	}
+	//设置默认的加班补偿方式
+	,getDefaultOTCompens : function () {
+		var _self = this;
+		var defaultOTCompens = {};
+		//设置同步
+		_self.remoteCall({
+			type:"post",
+			method:"getDefaultOTCompens",
+			param:{
+				personId : $('#proposer_el').attr('value')
+			},
+			async: false,
+			success:function(res){
+				var info =  res;
+				if (info.defaultId){
+					defaultOTCompens = {id:info.defaultId,name:info.defaultName};
+				}			
+			}
+			});
+			return defaultOTCompens;
+			
+	}
+	,setButtonVisible:function(){
+		var billState = $("#billState").val();
+		//alert(billState);
+		if (billState) {
+			if (billState==3 || 
+					jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_17==billState ||
+					billState ==4||
+					jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_16==billState ||
+					billState ==2||
+					jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_18==billState ) {
+				$("#edit").hide();
+				$("#submit").hide();
+			} else if (1==billState ||
+					jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_21== billState ||
+					2 == billState ||
+					jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_18==billState ) { //未审批或审批中
+				if(!this.isFromWF()){
+					$("#edit").hide();
+					$("#submit").hide();
+				}
+			}
+		}
+
+		//新增和编辑状态隐藏返回XX列表
+		if (this.getOperateState().toUpperCase() == 'ADDNEW' || this.getOperateState().toUpperCase() == 'EDIT' ) {
+			$("#returnToOverTimeBillList").hide();
+		}
+		//如果是工作流打回,界面上的"返回XX列表"不显示
+		if (this.isFromWF()) {
+			$("#returnToOverTimeBillList").hide(); 
+			$("#cancel").hide();  
+		}
+		
+		if (this.getOperateState().toUpperCase() == 'EDIT'){
+			var lastRowNum = $('#entries').getGridParam("reccount");
+			for (var i = 1;i<= lastRowNum;i++) {
+				var temp_id = $("#entries tr:eq("+ i +")").attr("id");
+				$("#entries").jqGrid('setCell',temp_id,'person','','not-editable-cell');
+			
+			}	
+		}
+		
+	}
+	,setImportSelfParam : function(){
+		var billId = $('#id').val();
+		return $("#entries").getGridParam("reccount")+"&"+$('#id').val();
+	},getOTContrlParams:function(rowid)
+	{   
+		var personId;
+		if(!$("#entries").jqGrid('getCell',rowid,"person")){
+			return;
+		}else{
+			personId = $("#entries").jqGrid('getCell',rowid,"person").id;
+		}
+	    var otDate;
+		if(!$("#entries").jqGrid('getCell',rowid,"otDate")){
+			return;
+		}else{
+			otDate =  $("#entries").jqGrid('getCell',rowid,"otDate");
+		}
+	    var that=this;
+
+		var url = shr.getContextPath()+'/dynamic.do?handler=com.kingdee.shr.ats.bill.util.BillBizUtil&method=getOTContrlParam';
+		shr.ajax({
+			type:"post",
+			async:false,
+			url:url,
+			data:{personId:personId,otDate:otDate},
+			success:function(res){
+				if(res)
+				{    
+					that.OTContrlParams[rowid] = res;
+//					isOTControl=res.isOTControl;
+//					isOtrolByDateType=res.isOtrolByDateType;
+					
+				}
+			}
+			});
+	}
+	,returnToOverTimeBillListAction:function(){
+	   this.reloadPage({
+			uipk: 'com.kingdee.eas.hr.ats.app.AtsOverTimeBillList'
+		});
+	}
+	
+	,cancelAction:function(){
+		this.reloadPage({
+			uipk: 'com.kingdee.eas.hr.ats.app.AtsOverTimeBillList'
+		});
+	},
+    verifyRestTime: function( beforeSubmit,value){
+        var startTime0 = value.startTime;
+        var endTime0 = value.endTime;
+        if(startTime0 == "" || startTime0 == undefined){
+            return  jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_2;
+        }
+        if(endTime0 == "" || endTime0 == undefined){
+            return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_1;
+        }
+        var startTimeOfDate = new Date(startTime0);
+        var endTimeOfDate = new Date(endTime0);
+        var restStartTime = value.restStartTime;
+        var restEndTime = value.restEndTime;
+        var restStartTime2 = value.restStartTime2;
+        var restEndTime2 = value.restEndTime2;
+        var restStartTimeOfDate = new Date(restStartTime);
+        var restEndTimeOfDateOfDate = new Date(restEndTime);
+        if (restStartTime!=undefined && restStartTime!=""){
+            if (restStartTimeOfDate.getTime()<startTimeOfDate.getTime() ||restStartTimeOfDate.getTime()>endTimeOfDate.getTime()){
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_6;
+
+            }
+        }
+        if (restEndTime!=undefined && restEndTime!="") {
+            if (restEndTimeOfDateOfDate.getTime() < startTimeOfDate.getTime() || restEndTimeOfDateOfDate.getTime() > endTimeOfDate.getTime()
+                ||restEndTimeOfDateOfDate.getTime() < restStartTimeOfDate.getTime()) {
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_3;
+            }
+        }
+        var restStartTimeOfDate2 = new Date(restStartTime2);
+        var restEndTimeOfDateOfDate2 = new Date(restEndTime2);
+        if (restStartTime2!=undefined && restStartTime2!=""){
+            if (restStartTimeOfDate2.getTime()<startTimeOfDate.getTime() ||restStartTimeOfDate2.getTime()>endTimeOfDate.getTime()){
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_8;
+            }
+        }
+        if (restEndTime2!=undefined && restEndTime2!="") {
+            if (restEndTimeOfDateOfDate2.getTime() < startTimeOfDate.getTime() || restEndTimeOfDateOfDate2.getTime() > endTimeOfDate.getTime()
+                ||restEndTimeOfDateOfDate2.getTime() < restStartTimeOfDate2.getTime()){
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_4;
+            }
+        }
+        if( (restStartTime!="" && restStartTime!=undefined && (restEndTime==""||restEndTime==undefined))
+            || (restEndTime!="" && restEndTime!=undefined && (restStartTime==""||restStartTime==undefined))
+        )
+        {
+            if (beforeSubmit){
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_5;
+            }
+            return "";
+        }
+        if( (restStartTime2!="" && restStartTime2!=undefined && (restEndTime2==""||restEndTime2==undefined))
+            || (restEndTime2!="" && restEndTime2!=undefined && (restStartTime2==""||restStartTime2==undefined))
+        )
+        {
+            if (beforeSubmit) {
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_7;
+            }
+            return "";
+        }
+        if (restStartTime != "" && restStartTime != undefined && restStartTime2 != "" && restStartTime2 != undefined) {
+            //两个加班休息时间都填了,那么判断不能交叉
+            if((restStartTimeOfDate.getTime()<restEndTimeOfDateOfDate2.getTime() && restStartTimeOfDate.getTime()>=restStartTimeOfDate2.getTime())
+                ||(restStartTimeOfDate2.getTime()<restEndTimeOfDateOfDate.getTime() && restStartTimeOfDate2.getTime()>=restStartTimeOfDate.getTime())
+            ){
+                return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_0;
+            }
+        }
+
+    },
+	setNavigateLine: function(){
+	  	var fromFlag = localStorage.getItem("fromFlag");
+	   	var empolyeeBoardFlag =	sessionStorage.getItem("empolyeeBoardFlag");
+	   	var parentUipk = "";
+		if(parent.window.shr==null){
+     		parentUipk = shr.getCurrentViewPage().uipk;
+     	}else{
+     		parentUipk = parent.window.shr.getCurrentViewPage().uipk;
+     	}
+		if(fromFlag == "employeeBoard"){//来自我的考勤的时候。将导航条删除掉。
+	      $("#breadcrumb").parent().parent().remove();
+	      localStorage.removeItem("fromFlag");
+	    }
+	    if(("empolyeeBoardFlag" == empolyeeBoardFlag && "com.kingdee.eas.hr.ats.app.WorkCalendar.empATSDeskTop" == parentUipk)){
+	        $("#breadcrumb").remove();
+	        window.parent.changeDialogTitle(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_22);
+	    }
+	},
+	/**
+	 * 是否存在考勤档案
+	 */
+	isExistAttendanceFile: function(personId){
+		var isExistsFile = true;
+	   	_self.remoteCall({
+			type:"post",
+			method:"isExistsAttanceFile",
+			async: false,
+			param:{personId: personId},
+			success:function(res){
+				var info =  res;
+				if (!info.isExistsFile){
+					isExistsFile = false;
+				}	
+			}
+		});
+		if(!isExistsFile){
+		   return false;
+		}
+	}
+	,beforeSubmit :function(){
+		
+		var _self = this,
+		workArea = _self.getWorkarea(),
+		$form = $('form', workArea);
+		_self.beforeWFValidStoreCellValue();
+		
+		if (($form.valid() && _self.verify())) {
+			return true ;
+		}
+		// return false 也能保存,固让js报错,后续让eas修改 return false 逻辑
+		var len = workArea.length() ;
+		return false ;
+	}
+	,getCurrentModel : function(){
+		
+		var that = this ;
+		var model = shr.ats.atsOverTimeBillBatchEditForPer.superClass.getCurrentModel.call(this);
+		var len = model.entries.length ;
+		for(var i = 0; i < len; i++)
+		{
+		  model.entries[i].realStartTime =  model.entries[i].startTime ;
+		  model.entries[i].realEndTime =  model.entries[i].endTime ;
+		  model.entries[i].realOttime =  model.entries[i].applyOTtime ;
+		  
+		  delete  model.entries[i].otType.state ;
+		  delete  model.entries[i].otCompens.state ;
+		  delete  model.entries[i].otReason.state ;
+		}
+
+        model.ccPersonIds = model.ccPersonIds && model.ccPersonIds.id || "";
+        model.ccPerson = model.ccPersonIds;
+		return model ;
+	}
+	,saveEditCellValue :function(rowid,cellname, value,iRow,iCol) {
+		var _self = this;
+		// 工作流界面且是编辑状态且不是未提交界面
+		if(_self.isFromWF() && _self.getOperateState() == 'EDIT' && $("#billState").val() != 0)
+		{
+			this.rowid = rowid ;
+			this.cellname = cellname ;
+			this.value = value ;
+			this.iRow = iRow ;
+			this.iCol = iCol ;
+		}
+	}
+	/**
+	 * 工作流和其他页面统一校验入口,最好后续把校验都放在一起,方便维护.
+	 * @return {}
+	 */
+	,verifyCheck:function(){
+		var that = this;
+		var boo = true;
+		if(that.isFromWF()) //暂时只处理流程提交,后续可放开把所有检验统一入口
+		{
+			var model = that.getCurrentModel(); 
+			that.remoteCall({
+			    method:"verifyCheck",
+			    param:{model:model},
+				async: false,
+			    success:function(res){
+					info =  res;
+					if(res.errorString){
+						  shr.showError({message:res.errorString});
+						  boo = false;
+					}
+			    }
+			}); 
+			
+		}
+		return boo;
+	}
+	,beforeWFValidStoreCellValue :function() {
+		var _self = this;
+		
+		if(this.rowid && this.cellname && this.iRow && this.iCol)
+		{
+			$("#entries").jqGrid("saveCell",this.rowid,this.iCol);
+			//_self.afterSaveCellTrigger(this.rowid, this.cellname, this.value, this.iRow , this.iCol) ;
+		}
+	}
+	,validateIsFillOtVerify:function(){
+		var that = this;
+		var boo = true;
+		if(that.isFromWF()) 
+		{
+			var model = that.getCurrentModel(); 
+			that.remoteCall({
+			    method:"validateIsFillOt",
+			    param:{model:model},
+				async: false,
+			    success:function(res){
+					info =  res;
+					if(res.errorString){
+						  shr.showError({message:res.errorString});
+						   boo = false;
+					}
+			    }
+			}); 
+			
+		}
+		return boo;
+	}
+	//获取当前加班类型的加班补偿方式
+	,getOTCompensByOTType : function ( personId, otTypeId) {
+		var _self = this;
+		
+		var url = shr.getContextPath()+'/dynamic.do?handler=com.kingdee.shr.ats.web.handler.AtsOverTimeBillEditHandler';
+		var otCompens="";
+		_self.remoteCall({
+			type:"post",
+			method:"getOTCompensByOTTypes",
+			url:url,
+			param:{personId:personId,otTypeId:otTypeId},
+			async: false,
+			success:function(res){
+				otCompens =  res.otCompens;
+				
+			}
+		});
+		return otCompens;
+	}
+});
+
+//初始化时间,解决date在IE9+环境下的兼容性问题,年月日分隔符为-,时分秒分隔符是:,
+
+function NewDate(str) { 
+	str = str.split(" ");
+	var day = str[0].split("-");
+	var hours = str[1].split(":");
+	var date = new Date(); 
+	date.setUTCFullYear(day[0], day[1] - 1, day[2]); 
+	date.setUTCHours(hours[0], hours[1], hours[2], hours[3]); 
+	return date; 
+} 
+/**
+ * 创建日期时间
+ */
+function NewLongDate(str) { 
+	str = str.split(" ");
+	var day = str[0].split("-");
+	var hours = str[1].split(":");
+	var date = new Date(day[0],day[1] - 1,day[2],hours[0],hours[1],hours[2]); 
+	return date; 
+} 
+/**
+ * 创建日期
+ * 支持IE的创建方式
+ */
+function NewShortDate(str) { 
+	str = str.split(" ");
+	var day = str[0].split("-");
+	var date = new Date(day[0], day[1] - 1, day[2]); 
+	return date; 
+} 

+ 1740 - 0
js/备份/atsOverTimeBillEdit.js

@@ -0,0 +1,1740 @@
+shr.defineClass("shr.ats.AtsOverTimeBillEdit", shr.framework.Edit, {
+    _uiClass:"",
+    effectiveFlag:true,
+    isOTControl:false,
+    isOtrolByDateType:false,
+    defaultOTCompens:null,
+    personId : "",
+    _ATS_OVERTIME_LEGALHOLIDAYDAY_OVERTIME_ID: "sRWUOt7sRpOY0TCo6NMqGY6C/nU=", //法定节假日id   来源于AtsServerUtils.java
+    _ATS_OVERTIMECOMPENS_OVERTIME_ID: "zkbt5bMLQ3ehUivmKbtBOqlrTmA=", //加班费id
+    _invariantVale: {id:"zkbt5bMLQ3ehUivmKbtBOqlrTmA=",
+        name:jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_8},
+    initalizeDOM:function(){
+        shr.ats.AtsOverTimeBillEdit.superClass.initalizeDOM.call(this);
+        var that = this ;
+        that.setNavigateLine();
+        var paramMethod = shr.getUrlRequestParam("method");
+        //从我要加班菜单中点击进来的URL上没有method参数
+        if(paramMethod == null){
+            $("#breadcrumb").find(".active").text(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_24);
+            if(shrDataManager.pageNavigationStore.getDatas().length==0){
+                //  var url = window.location.protocol +"//" + window.location.host + ":" + window.location.port
+                //  		+ "/shr/dynamic.do?uipk=com.kingdee.eas.hr.ats.app.CancelLeaveBillForm&inFrame=true&fromHeader=true";
+                var object_bread_1 = {
+                    name: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_24,
+                    url: window.location.href,
+                    workPlatformId: "Qz9UfhLqB0+vmMJ4+80EykRLkh4="
+                }
+                shrDataManager.pageNavigationStore.pop();
+                shrDataManager.pageNavigationStore.addItem(object_bread_1);
+            }
+        }
+        that.getOTContrlParams();
+        that.setButtonVisible(); //初始化页面安装状态,如果是已经提交的或者审批通过的单据编辑按钮不显示
+        //隐藏加班列表按钮
+        if (that.getOperateState() == 'EDIT' || that.getOperateState() == 'VIEW') {
+            if(that.isFromWF()){ // 来自流程中心
+                $('#cancel').hide();
+                $('#cancelAll').hide();
+                if (that.getOperateState() == 'EDIT'){
+                    $("#hrOrgUnit").shrPromptBox("disable");
+                }
+            }
+        }
+        that.processF7ChangeEvent();
+
+        //增加业务组织处理
+        that.processF7ChangeEventHrOrgUnit();
+
+        that.processApplyOTTime();
+
+        if(that.getOperateState() == "VIEW"){//不显示秒
+            if(atsMlUtile.getFieldOriginalValue("entries_startTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_startTime",atsMlUtile.getFieldOriginalValue("entries_startTime").substring(0,16));
+            }
+            if(atsMlUtile.getFieldOriginalValue("entries_endTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_endTime",atsMlUtile.getFieldOriginalValue("entries_endTime").substring(0,16));
+            }
+            if(atsMlUtile.getFieldOriginalValue("entries_realStartTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_realStartTime",atsMlUtile.getFieldOriginalValue("entries_realStartTime").substring(0,16));
+            }
+            if(atsMlUtile.getFieldOriginalValue("entries_realEndTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_realEndTime",atsMlUtile.getFieldOriginalValue("entries_realEndTime").substring(0,16));
+            }
+        }else{
+            if(atsMlUtile.getFieldOriginalValue("entries_startTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_startTime",atsMlUtile.getFieldOriginalValue("entries_startTime").substring(0,16));
+            }
+            if(atsMlUtile.getFieldOriginalValue("entries_endTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_endTime",atsMlUtile.getFieldOriginalValue("entries_endTime").substring(0,16));
+            }
+            if(atsMlUtile.getFieldOriginalValue("entries_realStartTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_realStartTime",atsMlUtile.getFieldOriginalValue("entries_realStartTime").substring(0,16));
+            }
+            if(atsMlUtile.getFieldOriginalValue("entries_realEndTime")!=""){
+                atsMlUtile.setTransDateTimeValue("entries_realEndTime",atsMlUtile.getFieldOriginalValue("entries_realEndTime").substring(0,16));
+            }
+        }
+        //新增页面的时候默认算出,编辑页面不计算
+        if ( that.getOperateState() == "ADDNEW" ) {
+            //默认值为当前申请天
+            //var otDate=$('#applyDate').val()||'';
+            //默认值为工作日
+            var otDate=atsMlUtile.getFieldOriginalValue('entries_otDate')||'';
+            var personId=$('#entries_person_el').val()||'';
+            that.getOverTimeType(otDate,personId);
+            that.calculataApplyOTTime();
+        }
+        /*$("#entries_restTime").blur(function(){
+            that.calculataApplyOTTime();
+        });*/
+
+        //处理时间加班开始时间与加班开始时间一致
+        that.realOverTimeSynOverTime();
+        that.changeOverTimeType();
+        that.setNumberFieldEnable();
+
+        var personId = $('#entries_person_el').val();
+        var otTypeId = $("#entries_otType_el").val();
+        if ( that.getOperateState()=="VIEW"){
+            personId = $('#entries_person').val();
+            otTypeId = $("#entries_otType").val();
+        }
+        // that.getDefaultOTCompens(personId,otTypeId);
+        //设置默认的补偿方式
+        if(!that.billId){
+            that.setDefaultOTCompens();
+        }
+//		判断【加班费】是否有效(存在且生效)
+        that.effectiveFlag = that.isOTCompensEffective(that._ATS_OVERTIMECOMPENS_OVERTIME_ID);
+        //当加班类型为法定节假日加班时
+        if(that.getOperateState() != "VIEW"){
+            that.handleLegalHoliday();
+            that.otCompensChange();
+        }
+
+        that.isOverWarnValue(this.getFieldValue('entries_otType'),this.getFieldValue('entries_otCompens'));
+        //启用加班管控 且加班类型受日期控制,加班类型不能编辑
+        if( that.isOtrolByDateType){
+            $("#entries_otType").shrPromptBox("disable");
+        }
+        /*面包屑问题*/
+        if (shr.getCurrentViewPage().uipk == "com.kingdee.eas.hr.ats.app.AtsOverTimeBillForm") {
+
+
+            if (shrDataManager.pageNavigationStore.getDatas() && shrDataManager.pageNavigationStore.getDatas().length == 2) {
+                $("#breadcrumb").find("li.active")
+                    .html(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_24);
+                var a = shrDataManager.pageNavigationStore.getDatas()[1];
+                a.name = jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_24;
+                shrDataManager.pageNavigationStore.pop();
+                shrDataManager.pageNavigationStore.addItem(a);
+            }else if (shrDataManager.pageNavigationStore.getDatas() && shrDataManager.pageNavigationStore.getDatas().length == 3) {
+                $("#breadcrumb li").eq(2).remove();
+                $("#breadcrumb").find("li.active")
+                    .html(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_24);
+                shrDataManager.pageNavigationStore.pop();
+            }else if (shrDataManager.pageNavigationStore.getDatas() && shrDataManager.pageNavigationStore.getDatas().length == 4) {
+                $("#breadcrumb li").eq(3).html(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_3);
+            }
+
+        }
+
+
+        if(that.isFromWF()){
+            $("#addInstanceToDeskItem").css('display','none');
+        }
+        //审核编辑界面
+        if(that.isFromWF() && that.getOperateState() == 'EDIT')
+        {
+            $("#entries_person").shrPromptBox("disable");
+        }
+        if (shr.getCurrentViewPage().uipk == "com.kingdee.eas.hr.ats.app.AtsOverTimeBillForm"){
+            that.isHaveEffectiveFile();
+        }
+        if(that.getOperateState() == 'EDIT')
+        {
+            var otCompensIds = that.getOTCompensByOTType($('#entries_person_el').val(),$('#entries_otType').shrPromptBox("getValue").id).replace(/(,)/g, "','") ;
+            if(otCompensIds && otCompensIds != ''){
+                $('#entries_otCompens').shrPromptBox("setFilter","BaseInfo.id in ('"+otCompensIds+"')");
+            }
+        }
+        that.processTripDays();
+        if(that.getOperateState() != 'VIEW'){
+            $('#entries_person').bind('change',function(){
+                that.initPersonMess();
+
+            });
+        }
+        if(that.getOperateState() != 'VIEW'){
+            $('#entries_otDate').bind('change',function(){
+                var otDate=atsMlUtile.getFieldOriginalValue('entries_otDate');
+                $('#entries_startTime').shrDateTimePicker('setValue', otDate);
+                $('#entries_endTime').shrDateTimePicker('setValue', otDate);
+                that.setOverTimeRemark();
+            });
+        }
+
+        that.initCcPersonPrompt();
+        that.setOverTimeRemark();
+    },
+
+    setOverTimeRemark:function(){
+        var that = this;
+        if(shr.getCurrentViewPage().uipk != "com.kingdee.eas.hr.ats.app.AtsOverTimeBillForm" && shr.getCurrentViewPage().uipk != "com.kingdee.eas.hr.ats.app.AtsOverTimeBillAllForm"){
+            return;
+        }
+        /*
+        if (that.getOperateState() == 'VIEW') {
+            return;
+        }*/
+        var otDate = atsMlUtile.getFieldOriginalValue("entries_otDate");
+        var personId = atsMlUtile.getFieldOriginalValue("entries_person");
+        if ( personId && personId != "") {
+            that.remoteCall({
+                type:"post",
+                async: false,
+                method:"getAttencePolicyStrMsg",
+                param:{personId:personId,otDate:otDate,fieldName:"otExplain"},
+                success:function(res){
+                    var info =  res;
+                    var msg = info.otExplain;
+                    $("#overTimeRemark").html(msg);
+                }
+            });
+        }
+    },
+
+    clearCCPersonIdsPrompt :function() {
+        if ($('#ccPersonIds').length == 0) {
+            return;
+        }
+        atsCcPersonUtils.clearCCPersonIdsPrompt(this);
+    },
+    initCcPersonPrompt :function() {
+        if ($('#ccPersonIds').length == 0) {
+            return;
+        }
+        atsCcPersonUtils.initCCPersonIdsPrompt(this);
+        if (this.getOperateState() != 'VIEW') {
+            var person = $('#entries_person').shrPromptBox("getValue");
+            if (!person) {
+                // shr.showWarning({message:"Please select people."});
+            } else {
+                $('#ccPersonIds').shrPromptBox("setOtherParams", {
+                    // handler: "com.kingdee.shr.ats.web.handler.team.F7.TeamPersonForEmpOrgF7ListHandler",
+                    personId: person.id
+                });
+            }
+        }
+    }
+    ,initPersonMess : function(){
+        var that = this ;
+
+        $('#entries_person_el').val(that.personId);
+
+    },processTripDays : function(){
+        var that = this ;
+
+        $("#entries_otDate").change(function(){
+            that.changeOverHrOrgUnit();
+
+            //判断是否存在有效的考勤档案
+            that.isExistsEffectiveAtsFile();
+
+        });
+
+    },
+    //判断是否存在有效的考勤档案
+    isExistsEffectiveAtsFile: function(){
+        var that = this;
+        var otDate = atsMlUtile.getFieldOriginalValue("entries_otDate");
+        var personId = $("#entries_person_el").val();
+        if (otDate && otDate!=""&&otDate!=null && personId && personId != "") {
+            that.remoteCall({
+                type:"post",
+                async: false,
+                method:"isExistsEffectiveAtsFile",
+                param:{personId:personId,otDate:otDate},
+                success:function(res){
+                    //如果没有有效的考勤档案,后台会抛出异常
+                }
+            });
+        }
+    },
+    changeOverHrOrgUnit : function(){
+        var that = this;
+        var overStartTime = atsMlUtile.getFieldOriginalValue("entries_otDate");
+        if ( overStartTime!=""&&overStartTime!=null ) {
+            overStartTime = overStartTime.replace("\\-","/");
+            var personId = $("#entries_person_el").val();
+            that.remoteCall({
+                type:"post",
+                async: false,
+                method:"getHrOrgUnit",
+                param:{personId:personId,beginTime:overStartTime},
+                success:function(res){
+                    info =  res;
+                    if(res.hrOrgUnitname && res.hrOrgUnitId){
+                        $("#hrOrgUnit").val(res.hrOrgUnitname);
+                        $("#hrOrgUnit_el").val(res.hrOrgUnitId);
+                    }
+
+                }
+            });
+        }
+    }
+
+    ,processF7ChangeEventHrOrgUnit : function(){
+        var that = this;
+        if (that.getOperateState() != 'VIEW') {
+            $("#hrOrgUnit").shrPromptBox("option", {
+                onchange : function(e, value) {
+                    var info = value.current;
+                    that.initCurrentHrOrgUnit(info.id);
+                    $("#entries_person_el").val("");
+                    $("#entries_person").val("");
+                    $("#entries_person_number").val("");//@
+                    $("#entries_adminOrgUnit").val("");
+                    $("#entries_position").val("");
+
+                }
+            });
+        }
+    }
+    ,initCurrentHrOrgUnit: function(hrOrgUnitId) {
+        var that = this;
+
+        //---??
+//		$("#entries_tripType").shrPromptBox().attr("data-params",hrOrgUnitId);
+        $("#entries_person").shrPromptBox().attr("data-params",hrOrgUnitId);
+        that.initQuerySolutionHrOrgUnit(hrOrgUnitId);
+
+    }
+    ,initQuerySolutionHrOrgUnit: function(hrOrgUnitId) {
+        var that = this;
+        that.remoteCall({
+            type:"post",
+            method:"initQuerySolution",
+            param:{
+                hrOrgUnitId : hrOrgUnitId
+            },
+            async: true, //false
+            success:function(res){
+
+            }
+        });
+    }
+
+    ,isHaveEffectiveFile : function() {
+        var _self = this;
+        _self.remoteCall({
+            type:"post",
+            method:"isHaveEffectiveFile",
+            param:{
+                personid:""
+            },
+            async: false,
+            success:function(res){
+                var info =  res;
+                if (!info.isHaveFile){
+                    shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_5});
+                }
+            }
+        });
+    }
+    ,handleLegalHoliday: function(){
+        var that = this;
+        //BT883973:编辑模式下 补偿方式可以开放选择
+//		if(that.getOperateState() == "EDIT"){
+//			if($("#entries_otType_el").val() == that._ATS_OVERTIME_LEGALHOLIDAYDAY_OVERTIME_ID){
+//				$('#entries_otCompens').attr("readonly",true);
+//				$('#entries_otCompens').parent().next().css("display","none");
+//			}
+//		}
+
+        $("#entries_otType").shrPromptBox("option", {
+            onchange : function(e, value) {
+                var info = value.current;
+                var typeId = info.id != undefined && info.id != "" ? info.id : info.submitFormat;
+                var otCompensIds = that.getOTCompensByOTType($('#entries_person_el').val(),typeId);
+                if(otCompensIds == null || otCompensIds == undefined){
+                    otCompensIds = "";
+                }else{
+                    otCompensIds = otCompensIds.replace(/(,)/g, "','") ;
+                }
+                that.getDefaultOTCompens($('#entries_person_el').val(),typeId);
+                that.setDefaultOTCompens();
+                if(otCompensIds && otCompensIds != ""){
+                    $('#entries_otCompens').shrPromptBox("setFilter","BaseInfo.id in ('"+otCompensIds+"')");
+                }
+
+            }
+        });
+
+        $("#entries_attAdminOrgUnit").shrPromptBox("option", {
+            verifyBeforeOpenCallback : function(e, value) {
+                var personId = $("#entries_person_el").val();
+                var attendanceDate = $("#entries_otDate").val()
+
+                if(!(personId && attendanceDate)){
+                    shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_999});
+                    return false;
+                }else{
+                    $('#entries_attAdminOrgUnit').shrPromptBox("setOtherParams", {
+                        personId: personId,
+                        attendanceDate: attendanceDate
+                    });
+                }
+            }
+        });
+
+    }
+
+
+
+    //获取默认的加班补偿方式
+    ,getDefaultOTCompens : function ( personId, otTypeId) {
+        var _self = this;
+        //var personId = $('#entries_person_el').val();
+        //var otTypeId = $("#entries_otType_el").val();
+        var otDate = atsMlUtile.getFieldOriginalValue('entries_otDate');
+        if(otDate && otDate != '' && personId != '' && otTypeId){
+            _self.remoteCall({
+                type:"post",
+                method:"getDefaultOTCompens",
+                param:{personId:personId,otTypeId:otTypeId,otDate:otDate},
+                async: false,
+                success:function(res){
+                    var info =  res;
+                    if (info.defaultId == "" || info.defaultId ==undefined ){
+                        _self.defaultOTCompens = {id:info.defaultId,name:info.defaultName};
+                        shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_29});
+                    }else {
+                        _self.defaultOTCompens = {id:info.defaultId,name:info.defaultName};
+                        if(!info.otrolByDateType){
+                            $("#entries_otType").shrPromptBox("enable");
+                        }else{
+                            $("#entries_otType").shrPromptBox("disable");
+                        }
+                    }
+                }
+            });
+        }
+    }
+
+    //获取当前加班类型的加班补偿方式
+    ,getOTCompensByOTType : function ( personId, otTypeId) {
+        var _self = this;
+        var otCompens="";
+        var otDate = atsMlUtile.getFieldOriginalValue('entries_otDate');
+        if(otDate && otDate != '' && personId != '' && otTypeId != ''){
+            _self.remoteCall({
+                type:"post",
+                method:"getOTCompensByOTType",
+                param:{personId:personId,otTypeId:otTypeId,hrOrgUnit:$("#hrOrgUnit").shrPromptBox("getValue").id,otDate:atsMlUtile.getFieldOriginalValue('entries_otDate')},
+                async: false,
+                success:function(res){
+                    otCompens =  res.otCompens;
+
+                }
+            });
+        }
+        return otCompens;
+    }
+
+    //设置默认的加班补偿方式
+    ,setDefaultOTCompens : function () {
+        var _self = this;
+        if (_self.defaultOTCompens!=null && _self.defaultOTCompens != ""){
+            $('#entries_otCompens').shrPromptBox("setValue",_self.defaultOTCompens);
+        }
+    }
+
+
+//	判断加班补偿方式是否有效(存在且生效)
+    ,isOTCompensEffective : function (OTCompens) {
+        var _self = this;
+        var flag = true;
+        _self.remoteCall({
+            type:"post",
+            method:"isOTCompensEffective",
+            param:{
+                OTCompens:OTCompens
+            },
+            async: false,
+            success:function(res){
+                var info =  res;
+                if (info.resFlag == false){
+                    flag = false;
+                }else {
+                    flag = true;
+                }
+            }
+        });
+        return flag;
+
+    }
+
+    //	判断加班补偿方式是否有效(存在且生效)
+    ,isOtTypeEffective : function (OtType) {
+        var _self = this;
+        var flag = true;
+        _self.remoteCall({
+            type:"post",
+            method:"isOtTypeEffective",
+            param:{
+                OtType:OtType
+            },
+            async: false,
+            success:function(res){
+                var info =  res;
+                if (info.resFlag == false){
+                    flag = false;
+                }else {
+                    flag = true;
+                }
+            }
+        });
+        return flag;
+    }
+
+    /**
+     * 设置编码字段是否可编辑
+     */
+    ,setNumberFieldEnable : function() {
+        var that = this ;
+        if (that.getOperateState().toUpperCase() == 'EDIT' || that.getOperateState().toUpperCase() == 'ADDNEW') {
+            var overtimeBillNumberFieldCanEdit = that.initData.overtimeBillNumberFieldCanEdit;
+            if (typeof overtimeBillNumberFieldCanEdit != 'undefined' && !overtimeBillNumberFieldCanEdit) {
+                that.getField('number').shrTextField('option', 'readonly', true);
+            }
+            //初始化HR组织ID
+            var hrOrgUnitID = that.initData.initCurrentHrOrgUnit;
+            if (typeof hrOrgUnitID != 'undefined' && hrOrgUnitID) {
+                that.initCurrentHrOrgUnit(hrOrgUnitID);
+            }
+        }
+    }
+
+    //提交即生效
+    ,submitEffectAction : function (event) {
+        var _self = this,
+            workArea = _self.getWorkarea(),
+            $form = $('form', workArea);
+
+        if ( _self.validate() && $form.valid() && _self.verify()) {
+            var beginDate = atsMlUtile.getFieldOriginalValue("entries_startTime").split(" ")[0];
+            var endDate = atsMlUtile.getFieldOriginalValue("entries_endTime").split(" ")[0];
+            var billType = "overTime";
+            var personId = $('#entries_person_el').val()
+            _self.remoteCall({
+                type:"post",
+                method:"billCheck",
+                param:{beginDate:beginDate,endDate:endDate,personId:personId,billType:billType},
+                async: true,
+                success:function(res){
+                    var result = res.result;
+                    if(result==""){
+                        if(shr.atsBillUtil.isInWorkFlow(_self.billId)){
+                            shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_6, function() {
+                                _self.prepareSubmitEffect(event, 'submitEffect');
+                            });
+                        }else{
+                            shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_14, function() {
+                                _self.prepareSubmitEffect(event, 'submitEffect');
+                            });
+                        }
+                    }else{
+                        shr.showConfirm(result+jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_20,function(){
+                            if(shr.atsBillUtil.isInWorkFlow(_self.billId)){
+                                shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_6, function() {
+                                    _self.prepareSubmitEffect(event, 'submitEffect');
+                                });
+                            }else{
+                                shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_14, function() {
+                                    _self.prepareSubmitEffect(event, 'submitEffect');
+                                });
+                            }
+                        });
+                    }
+                }
+            });
+
+        }
+    }
+
+    ,prepareSubmitEffect : function (event, action){
+        var _self = this;
+        var data = _self.assembleSaveData(action);
+
+        var target;
+        if (event && event.currentTarget) {
+            target = event.currentTarget;
+        }
+        shr.doAction({
+            target: target,
+            url: _self.dynamicPage_url,
+            type: 'post',
+            data: data,
+            success : function(response) {
+                _self.back();
+            }
+        });
+    }
+
+    /**
+     * 点击取消按钮 返回到个人请假列表list(个人) || com.kingdee.eas.hr.ats.app.AtsOverTimeBillList
+     */
+    ,cancelAction:function(){
+        /*var that = this ;
+         window.location.href = shr.getContextPath()+"/dynamic.do?uipk=com.kingdee.eas.hr.ats.app.AtsOverTimeBillList";*/
+
+        var serviceId = shr.getUrlParam("serviceId");
+        if(!serviceId){
+            serviceId = 'vA0Y5XHfR8eJESywHpQQSPI9KRA=';
+        }
+
+        this.reloadPage({
+            uipk: 'com.kingdee.eas.hr.ats.app.AtsOverTimeBillList',
+            serviceId:serviceId
+        });
+    }
+    /**
+     * 专员列表点击取消的方法
+     * 这里有点特殊,采用屏蔽按钮,增加专员取消按钮的方法 替代 维护2次 atsOverTimeBillEdit.js 的方式
+     */
+    ,cancelAllAction:function(){
+        /*var that = this ;
+         window.location.href = shr.getContextPath()+"/dynamic.do?uipk=com.kingdee.eas.hr.ats.app.AtsOverTimeBillAllList";*/
+        this.reloadPage({
+            uipk: 'com.kingdee.eas.hr.ats.app.AtsOverTimeBillAllList'
+        });
+    }
+    ,getOverTimeType:function(otDate,personId){
+        var _self = this;
+        var url = shr.getContextPath() + "/dynamic.do?method=getOverTimeType";
+        url += '&otDate=' + encodeURIComponent(otDate) + '&personId=' + encodeURIComponent(personId)+"&uipk="+shr.getUrlRequestParam('uipk');
+        if(otDate != "" && personId != ""){
+            $.ajax({
+                url: url,
+                async:false,
+                //data:{otDate:,personId:encodeURIComponent(personId)},
+                //data:{otDate:encodeURIComponent(otDate),personId:encodeURIComponent(personId)},
+                success: function(response){
+                    if(response.otTypeValue!=null && response.otTypeValue !=undefined && response.otTypeValue!=''){
+                        if (_self.isOtTypeEffective(response.otTypeValue)){
+                            var responseObejct = {id:response.otTypeValue,name:response.otTypeText }
+                            $('#entries_otType').shrPromptBox("setValue",responseObejct);
+                        }else {
+                            $('#entries_otType').shrPromptBox("setValue","");
+                        }
+
+                    }else {
+                        $('#entries_otType').shrPromptBox("setValue","");
+                    }
+                }
+                ,error: function(response) {
+                }
+            })
+        };
+
+    }
+    ,changeOverTimeType:function(){
+        var that=this;
+        $('#entries_otDate').change(function(){ //加班日期
+//	    	var otDate=$(this).val()||'';
+            var otDate = atsMlUtile.getFieldOriginalValue("entries_otDate")||'';
+            var personId=$('#entries_person_el').val()||'';
+            that.getOverTimeType(otDate,personId);
+            that.isOverWarnValue($("#entries_otType_el").val(),$("#entries_otCompens_el").val());
+
+            //获取休息时长
+            var startTime = atsMlUtile.getFieldOriginalValue("entries_startTime");
+            var endTime = atsMlUtile.getFieldOriginalValue("entries_endTime");
+            if(startTime == "" || startTime == undefined){
+                return ;
+            }
+            if(endTime == "" || endTime == undefined){
+                return ;
+            }
+            var startTimeOfDate = new Date(startTime);
+            var endTimeOfDate = new Date(endTime);
+            var longTime = endTimeOfDate.getTime() - startTimeOfDate.getTime();
+            if(longTime <= 0)
+            {
+                atsMlUtile.setTransNumValue("entries_applyOTTime",0);
+                atsMlUtile.setTransNumValue("entries_restTime",0,{'decimalPrecision':0});
+                return ;
+            }else{
+                that.calculataApplyRestTime();
+            }
+        });
+
+
+    },
+
+    //获取系统小数位长度
+    getDecimalPlace : function (floatTime, otTimeType ) {
+        var fixeNum =  atsMlUtile.getSysDecimalPlace();
+        floatTime = floatTime.toFixed(fixeNum);
+        if(floatTime < 0){
+            atsMlUtile.setTransNumValue(otTimeType,0);
+        }else{
+            atsMlUtile.setTransNumValue(otTimeType,floatTime);
+        }
+    }
+    ,getJsonLength:function(jsonData){
+        var jsonLength = 0;
+        for(var item in jsonData){
+            jsonLength++;
+        }
+        return jsonLength;
+    },
+
+    processF7ChangeEvent:function(){
+        var that = this;
+        //that.initActionF7();
+        if (that.getOperateState() != 'VIEW') {
+            $("#entries_person").shrPromptBox("option", {
+                onchange : function(e, value) {
+                    //alert( JSON.stringify( value ) );
+                    var info = value.current;
+                    if(info != null){
+                        if(info.hasOwnProperty("id")){
+                            $("#entries_person_number").val(info["person.number"]);//@
+                            $("#entries_adminOrgUnit").val(info["adminUnit.name"]);//行政组织
+                            $("#entries_position").val(info["position.name"]);//职位
+                            $('#entries_person_el').val(info["person.id"]);
+                            that.personId=info["person.id"];
+                            var otDate=atsMlUtile.getFieldOriginalValue('entries_otDate')||'';
+                            that.getOverTimeType(otDate,info["id"]);
+                            that.getOTContrlParams();
+                            if( that.isOtrolByDateType){
+                                $("#entries_otType").shrPromptBox("disable");
+                            }
+                        }
+                    }
+                }, afterOnSelectRowHandler: function (e, value) {
+                    that.clearCCPersonIdsPrompt();
+                    that.initCcPersonPrompt();
+                }
+            });
+        }
+    },
+    /**
+     * 初始化ActionFilter,过滤用工状态,把离职的去掉
+     */
+    /*initActionF7 : function () {
+        var that = this;
+        var fliter = " employeeType.number != 'S09' "; //001正式 002试用 003停薪留职  004离退休   s09 离职
+        $("#entries_person").shrPromptBox("setFilter",fliter);
+    },*/
+    //处理申请加班小时数,申请加班小时数默认等于实际加班小时数
+    processApplyOTTime : function(){
+        var that = this ;
+        /*$("#entries_applyOTTime").keyup(function(){
+             $("#entries_realOTTime").val($("#entries_applyOTTime").val());
+        });*/
+        $("#entries_restTime").change(function(){
+            that.calculataApplyOTTime();
+            that.calculataRealOTTime();
+        }) ;
+        //加班结束时间选择完后 计算申请加班小时数
+        $("#entries_endTime,#entries_startTime").change(function(){
+
+            var startTime = atsMlUtile.getFieldOriginalValue("entries_startTime");
+            var endTime = atsMlUtile.getFieldOriginalValue("entries_endTime");
+            if(startTime == "" || startTime == undefined){
+                return ;
+            }
+            if(endTime == "" || endTime == undefined){
+                return ;
+            }
+            var startTimeOfDate = new Date(startTime);
+            var endTimeOfDate = new Date(endTime);
+            var longTime = endTimeOfDate.getTime() - startTimeOfDate.getTime();
+            if(longTime <= 0)
+            {
+                atsMlUtile.setTransNumValue("entries_applyOTTime",0);
+                atsMlUtile.setTransNumValue("entries_restTime",0,{'decimalPrecision':0});
+                return ;
+            }else{
+                that.calculataApplyRestTime();
+            }
+            that.calculataApplyOTTime();
+            that.calculataRealOTTime();
+            //that.calculataApplyRestTime();
+        });
+        function calculataRestTime() {
+            var regEx = new RegExp("\\-", "gi"); //i不区分大小写 g匹配所有
+            var restTime =0;
+            var restStartTime = atsMlUtile.getFieldOriginalValue("entries_restStartTime");
+            var restEndTime = atsMlUtile.getFieldOriginalValue("entries_restEndTime");
+
+            if (restStartTime!=undefined && restStartTime!="" && restEndTime!=undefined && restEndTime!="") {
+                restStartTime = restStartTime.replace(regEx, "/");
+                restEndTime = restEndTime.replace(regEx, "/");
+                var startTimeOfDate = new Date(restStartTime);
+                var endTimeOfDate = new Date(restEndTime);
+                var longTime = endTimeOfDate.getTime() - startTimeOfDate.getTime();
+                restTime += longTime / 1000.0 / 60;//分钟
+            }
+
+            var restStartTime2 = atsMlUtile.getFieldOriginalValue("entries_restStartTime2");
+            var restEndTime2 = atsMlUtile.getFieldOriginalValue("entries_restEndTime2");
+
+            if (restStartTime2!=undefined && restStartTime2!="" && restEndTime2!=undefined && restEndTime2!="") {
+                restStartTime2 = restStartTime2.replace(regEx, "/");
+                restEndTime2 = restEndTime2.replace(regEx, "/");
+                var startTimeOfDate2 = new Date(restStartTime2);
+                var endTimeOfDate2 = new Date(restEndTime2);
+                var longTime2 = endTimeOfDate2.getTime() - startTimeOfDate2.getTime();
+                restTime += longTime2 / 1000.0 / 60;//分钟
+            }
+            atsMlUtile.setTransNumValue("entries_restTime",restTime,{'decimalPrecision':0});
+            that.calculataRealOTTime();
+            that.calculataApplyOTTime();
+            // that.calculataApplyRestTime();
+        }
+
+        $("#entries_restStartTime,#entries_restEndTime,#entries_restStartTime2,#entries_restEndTime2").change(function(){//开始休息时间1
+            that.disableRestTime();
+            if (! that.verifyRestTime(false)){
+                return
+            }
+            calculataRestTime();
+        });
+        //实际加班结束时间选择完后 计算实际小时数
+        $("#entries_realEndTime,#entries_realStartTime").change(function(){
+            that.calculataRealOTTime();
+        });
+    },
+    disableRestTime:function (){
+        var restStartTime = atsMlUtile.getFieldOriginalValue("entries_restStartTime");
+        var restEndTime = atsMlUtile.getFieldOriginalValue("entries_restEndTime");
+        var restStartTime2 = atsMlUtile.getFieldOriginalValue("entries_restStartTime2");
+        var restEndTime2 = atsMlUtile.getFieldOriginalValue("entries_restEndTime2");
+        if (
+            (restStartTime ==undefined || restStartTime=="")
+            &&(restStartTime2 ==undefined || restStartTime2=="")
+            &&(restEndTime ==undefined || restEndTime=="")
+            &&(restEndTime2 ==undefined || restEndTime2=="")
+        ){
+            $("#entries_restTime").shrTextField("enable");
+            atsMlUtile.setTransNumValue("entries_restTime",0,{'decimalPrecision':0});
+            this.calculataApplyOTTime();
+            this.calculataRealOTTime();
+        } else {
+            $("#entries_restTime").shrTextField("disable");
+        }
+    },
+    calculataApplyOTTime : function(){
+        var startTime = atsMlUtile.getFieldOriginalValue("entries_startTime");
+        var endTime = atsMlUtile.getFieldOriginalValue("entries_endTime");
+        var restTime = atsMlUtile.getFieldOriginalValue("entries_restTime");
+        if( (new String(restTime)).trim()=='' ){
+            restTime=0;
+            atsMlUtile.setTransNumValue("entries_restTime",0,{'decimalPrecision':0});
+        }else{
+            restTime=parseFloat(restTime);
+            if(restTime<0.0){
+                atsMlUtile.setTransNumValue("entries_restTime",0,{'decimalPrecision':0});
+                restTime=0.0;
+            }
+        }
+
+        if ( startTime!=""&&startTime!=null && endTime!=""&&endTime!=null ) {
+
+            var regEx = new RegExp("\\-","gi");
+            startTime = startTime.replace(regEx,"/");
+            endTime = endTime.replace(regEx,"/");
+
+            var startTimeOfDate = new Date(startTime);
+            var endTimeOfDate = new Date(endTime);
+            var longTime = endTimeOfDate.getTime() - startTimeOfDate.getTime();
+            if (longTime <= 0) {
+                atsMlUtile.setTransNumValue("entries_applyOTTime",0);
+                //$("#entries_realOTTime").val(0);//时刻根据  实际的止-实际的起-休息通过在调用that.calculataApplyOTTime()后调用that.calculataRealOTTime()来达到的
+            }else{
+                t1 = parseFloat(longTime)/1000.0/60/60;
+                t1 = t1 - parseFloat(restTime)/60;
+                var that = this;
+                that.getDecimalPlace(t1,"entries_applyOTTime");
+            }
+        }
+    },
+    calculataRealOTTime : function(){
+        var realStartTime = atsMlUtile.getFieldOriginalValue("entries_realStartTime");
+        var realEndTime = atsMlUtile.getFieldOriginalValue("entries_realEndTime");
+        var restTime = atsMlUtile.getFieldOriginalValue("entries_restTime")||'';
+        if( (new String(restTime)).trim()=='' ){
+            restTime=0;
+            atsMlUtile.setTransNumValue("entries_restTime",0,{'decimalPrecision':0});
+        }else{
+            restTime=parseFloat(restTime);
+            if(restTime<0.0){
+                atsMlUtile.setTransNumValue("entries_restTime",0,{'decimalPrecision':0});
+                restTime=0.0;
+            }
+        }
+        if ( realStartTime!=""&&realStartTime!=null && realEndTime!=""&&realEndTime!=null ) {
+            var regEx = new RegExp("\\-","gi");
+            realStartTime = realStartTime.replace(regEx,"/");
+            realEndTime = realEndTime.replace(regEx,"/");
+            var realStartTimeOfDate = new Date(realStartTime);
+            var realEndTimeOfDate = new Date(realEndTime);
+            //lzq 加上减去休息时间
+            var floatTime = parseFloat( realEndTimeOfDate.getTime() - realStartTimeOfDate.getTime() )/1000.0/60/60 - parseFloat(restTime)/60;;
+            if (floatTime <= 0.0) {
+                atsMlUtile.setTransNumValue("entries_realOTTime",0);
+            }else{
+                //t1 = parseFloat(longTime)/1000.0/60/60;\
+                var that = this;
+                that.getDecimalPlace(floatTime,"entries_realOTTime");
+            }
+        }
+    },
+    realOverTimeSynOverTime : function(){
+        var that = this ;
+        $("#entries_startTime").change(function(){
+            var startTime = atsMlUtile.getFieldOriginalValue("entries_startTime");
+            atsMlUtile.setTransDateTimeValue("entries_realStartTime",startTime);
+            that.calculataRealOTTime();
+        });
+        $("#entries_endTime").change(function(){
+            var endTime = atsMlUtile.getFieldOriginalValue("entries_endTime");
+            atsMlUtile.setTransDateTimeValue("entries_realEndTime",endTime);
+
+            var startTime = atsMlUtile.getFieldOriginalValue("entries_startTime");
+            if (startTime!="" && startTime!=undefined){
+                atsMlUtile.setTransDateTimeValue("entries_realStartTime",startTime);
+            }
+            that.calculataRealOTTime();
+        });
+
+        $("#entries_applyOTTime").change(function(){
+            atsMlUtile.setTransNumValue("entries_realOTTime",atsMlUtile.getFieldOriginalValue('entries_applyOTTime'));
+        })
+    },
+    calculataApplyRestTime : function(){
+        var that = this ;
+        var otDate = atsMlUtile.getFieldOriginalValue("entries_otDate");
+        var personId=$('#entries_person_el').val() ;
+        var realStartTime = atsMlUtile.getFieldOriginalValue("entries_startTime");
+        var realEndTime = atsMlUtile.getFieldOriginalValue("entries_endTime");
+        var url = shr.getContextPath() + "/dynamic.do?method=getMyRestTime";
+        url += '&tDay=' + encodeURIComponent(otDate) + '&personId=' + encodeURIComponent(personId);
+        url +='&realStartTime=' + encodeURIComponent(realStartTime) + '&realEndTime=' + encodeURIComponent(realEndTime)+"&uipk="+shr.getUrlRequestParam('uipk');
+        $.ajax({
+            url: url,
+            async:false,
+            success: function(response){
+                var restTime = response.restTime ;
+                var restStartTime = response.restStartTime ;
+                var restStartTime2 = response.restStartTime2 ;
+                var restEndTime = response.restEndTime ;
+                var restEndTime2 = response.restEndTime2 ;
+                atsMlUtile.setTransNumValue("entries_restTime",restTime,{'decimalPrecision':0});
+                atsMlUtile.setTransDateTimeValue("entries_restStartTime",restStartTime);
+                atsMlUtile.setTransDateTimeValue("entries_restEndTime",restEndTime);
+                atsMlUtile.setTransDateTimeValue("entries_restStartTime2", restStartTime2);
+                atsMlUtile.setTransDateTimeValue("entries_restEndTime2", restEndTime2);
+
+                that.disableRestTime()
+            }
+            ,error: function(response) {
+            }
+        });
+
+    },
+
+
+    verify:function(){
+        var _self = this ;
+
+        var workArea = _self.getWorkarea();
+        $form = $('form', workArea);
+        if (!$form.valid()) {
+            return false;
+        }
+        if ( !_self.verifyRestTime(true)) {
+            return
+        }
+
+        var startTime = atsMlUtile.getFieldOriginalValue("entries_startTime");
+        var endTime = atsMlUtile.getFieldOriginalValue("entries_endTime");
+        var regEx = new RegExp("\\-","gi"); //i不区分大小写 g匹配所有
+        startTime = startTime.replace(regEx,"/");
+        endTime = endTime.replace(regEx,"/");
+        var startTimeOfDate = new Date(startTime);
+        var endTimeOfDate = new Date(endTime);
+        var longTime = endTimeOfDate.getTime() - startTimeOfDate.getTime();
+
+        var realstartTime = atsMlUtile.getFieldOriginalValue("entries_realStartTime");
+        var realendTime = atsMlUtile.getFieldOriginalValue("entries_realEndTime");
+        var realstartTimeOfDate = new Date( realstartTime.replace(regEx,"/") );
+        var realendTimeOfDate = new Date( realendTime.replace(regEx,"/") );
+        var longTime_real = realendTimeOfDate.getTime() - realstartTimeOfDate.getTime();
+
+        //处理加班日期 与 加班开始时间 和结束时间的日期保持一致
+        var overDate = atsMlUtile.getFieldOriginalValue("entries_otDate");
+        var overTimeBegin = atsMlUtile.getFieldOriginalValue("entries_startTime");
+        overTimeBegin = overTimeBegin.substring(0,10); //2014-01-02 00:00
+        var overTimeEnd = atsMlUtile.getFieldOriginalValue("entries_endTime");
+        overTimeEnd = overTimeEnd.substring(0,10);
+
+        var overTimeDate = new Date(overDate.replace(regEx,"/"));
+        var overTimeStartDate = new Date(overTimeBegin.replace(regEx,"/"));
+        var overTimeEndDate = new Date(overTimeEnd.replace(regEx,"/"));
+
+        //var longTime_start = overTimeStartDate.getTime() - overTimeDate.getTime()-24*60*60*1000 ;
+        //var longTime_end  = overTimeEndDate.getTime() - overTimeDate.getTime()-24*60*60*1000;
+
+
+        var otTypeId = "";
+        if (_self.getOperateState().toUpperCase() == 'VIEW') {
+            otTypeId = $("#entries_otType").val();
+        }else {
+            otTypeId = $("#entries_otType_el").val();
+        }
+        if(otTypeId == null || otTypeId == undefined || otTypeId.length == 0){
+            shr.showInfo({message: overDate + jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_12});
+            return false;
+        }
+
+        //检查人员是否有考勤档案
+        var isExistsFile = true;
+        var personNum = "";
+        if("ADDNEW" == this.getOperateState() || "EDIT" == this.getOperateState()){
+            personNum = $("#entries_person_number").val()//@
+        }else if("VIEW" == this.getOperateState()){
+            personNum = $("#entries_person_number").text()//@
+        }
+        /*	 	_self.remoteCall({
+                    type:"post",
+                    method:"isExistsAttanceFile",
+                    async: false,
+                    param:{personNum: personNum},
+                    success:function(res){
+                        var info =  res;
+                        if (!info.isExistsFile){
+                            shr.showWarning({message:"该员工还没有生效的假期档案/考勤档案!"});
+                            isExistsFile = false;
+                        }
+                    }
+                });
+                if(!isExistsFile){
+                   return false;
+                }*/
+
+        if ( overTimeStartDate.getTime() <overTimeDate.getTime()-24*60*60*1000  ) {//longTime_start != 0 &&  longTime_end != 0
+            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_2});
+            return false;
+        }
+        if ( overTimeEndDate.getTime()-24*60*60*1000  > overTimeDate.getTime() ) {
+            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_2});
+            return false;
+        }
+        if ( overTimeEndDate.getTime()- overTimeStartDate.getTime() >=2*24*60*60*1000) {
+            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_2});
+            return false;
+        }
+
+        if (longTime <= 0) {
+            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_10});
+            return false;
+        }else if (longTime_real <= 0) {
+            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_19});
+            return false;
+        }else if ($("#entries_otCompens").attr("title")
+            ==jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_4 && !_self.isOverMaxQuota()){
+            return false;
+        }
+        var otTime = atsMlUtile.getFieldOriginalValue("entries_applyOTTime");
+        if(parseFloat(otTime) < 0){
+            shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_11});
+            return false;
+        }
+
+        if(parseFloat(otTime) == 0){
+            shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_0001});
+            return false;
+        }
+
+        var personId = $('#entries_person_el').val();
+        if (_self.getOperateState().toUpperCase() == 'VIEW') {
+            personId = $('#entries_person').val();
+        }
+        var flag = true ;
+        _self.remoteCall({
+            type:"post",
+            method:"isCrossShift",
+            async: false,
+            param:{personId: personId,overDate:overDate,overTimeBegin:atsMlUtile.getFieldOriginalValue("entries_startTime")+":00",overTimeEnd:atsMlUtile.getFieldOriginalValue("entries_endTime")+":00"},
+            success:function(res){
+                var info =  res;
+                if (info.isCrossShift){
+                    shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_42});
+                    flag = false ;
+                }
+            }
+        });
+
+        var model = _self.getCurrentModel();
+
+        _self.remoteCall({
+            method:"validateIsFillOt",
+            param:{model:model},
+            async: false,
+            success:function(res){
+                info =  res;
+                if(res.errorString){
+                    shr.showError({message:res.errorString});
+                    flag = false;
+                    // return false;
+                }
+            }
+        });
+
+        _self.remoteCall({
+            type:"post",
+            method:"isWorkTime",
+            async: false,
+            param:{personId: personId,overDate:overDate,overTimeBegin:atsMlUtile.getFieldOriginalValue("entries_startTime")+":00",overTimeEnd:atsMlUtile.getFieldOriginalValue("entries_endTime")+":00"},
+            success:function(res){
+                var info =  res;
+                if (info.isWorkTime){
+                    shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_9});
+                    flag = false ;
+                }
+            }
+        });
+        _self.remoteCall({
+            type:"post",
+            method:"isAtFixedOverTimeOrExcep",
+            async: false,
+            param:{personId: personId,overDate:overDate,overTimeBegin:atsMlUtile.getFieldOriginalValue("entries_startTime")+":00",overTimeEnd:atsMlUtile.getFieldOriginalValue("entries_endTime")+":00"},
+            success:function(res){
+                var info =  res;
+                if (info.isAtFixedOverTimeOrExcep){
+                    shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_1});
+                    flag = false ;
+                }
+            }
+        });
+        //工作流审批中编辑校验补提加班单
+        if(_self.isFromWF())
+        {
+            var model = _self.getCurrentModel();
+            _self.remoteCall({
+                method:"validateIsFillOt",
+                param:{model:model},
+                async: false,
+                success:function(res){
+                    info =  res;
+                    if(res.errorString){
+                        shr.showError({message:res.errorString});
+                        flag = false;
+                        // return false;
+                    }
+                }
+            });
+
+            _self.remoteCall({
+                method:"validOtStart",
+                param:{personId:personId,applyOTTime:otTime},
+                async: false,
+                success:function(res){
+                    info =  res;
+                    if(res.info){
+                        shr.showError({message:res.info});
+                        flag = false ;
+                    }
+                }
+            });
+        }
+
+        return flag;
+
+    },
+    verifyRestTime: function( beforeSubmit){
+        var startTime0 = atsMlUtile.getFieldOriginalValue("entries_startTime");
+        var endTime0 = atsMlUtile.getFieldOriginalValue("entries_endTime");
+        if(startTime0 == "" || startTime0 == undefined){
+            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_2});
+            return false;
+        }
+        if(endTime0 == "" || endTime0 == undefined){
+            shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_1});
+            return false;
+        }
+        var startTimeOfDate = new Date(startTime0);
+        var endTimeOfDate = new Date(endTime0);
+        var restStartTime = atsMlUtile.getFieldOriginalValue("entries_restStartTime");
+        var restEndTime = atsMlUtile.getFieldOriginalValue("entries_restEndTime");
+        var restStartTime2 = atsMlUtile.getFieldOriginalValue("entries_restStartTime2");
+        var restEndTime2 = atsMlUtile.getFieldOriginalValue("entries_restEndTime2");
+        var restStartTimeOfDate = new Date(restStartTime);
+        var restEndTimeOfDateOfDate = new Date(restEndTime);
+        if (restStartTime!=undefined && restStartTime!=""){
+            if (restStartTimeOfDate.getTime()<startTimeOfDate.getTime() ||restStartTimeOfDate.getTime()>endTimeOfDate.getTime()){
+                shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_6});
+                return false;
+            }
+        }
+        if (restEndTime!=undefined && restEndTime!="") {
+            if (restEndTimeOfDateOfDate.getTime() < startTimeOfDate.getTime() || restEndTimeOfDateOfDate.getTime() > endTimeOfDate.getTime()
+                ||restEndTimeOfDateOfDate.getTime() < restStartTimeOfDate.getTime()) {
+                shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_3});
+                return false;
+            }
+        }
+        var restStartTimeOfDate2 = new Date(restStartTime2);
+        var restEndTimeOfDateOfDate2 = new Date(restEndTime2);
+        if (restStartTime2!=undefined && restStartTime2!=""){
+            if (restStartTimeOfDate2.getTime()<startTimeOfDate.getTime() ||restStartTimeOfDate2.getTime()>endTimeOfDate.getTime()){
+                shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_8});
+                return false
+            }
+        }
+        if (restEndTime2!=undefined && restEndTime2!="") {
+            if (restEndTimeOfDateOfDate2.getTime() < startTimeOfDate.getTime() || restEndTimeOfDateOfDate2.getTime() > endTimeOfDate.getTime()
+                ||restEndTimeOfDateOfDate2.getTime() < restStartTimeOfDate2.getTime()){
+                shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_4});
+                return false;
+            }
+        }
+        if( (restStartTime!="" && restStartTime!=undefined && (restEndTime==""||restEndTime==undefined))
+            || (restEndTime!="" && restEndTime!=undefined && (restStartTime==""||restStartTime==undefined))
+        )
+        {
+            if (beforeSubmit){
+                shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_5});
+            }
+            return false;
+        }
+        if( (restStartTime2!="" && restStartTime2!=undefined && (restEndTime2==""||restEndTime2==undefined))
+            || (restEndTime2!="" && restEndTime2!=undefined && (restStartTime2==""||restStartTime2==undefined))
+        )
+        {
+            if (beforeSubmit) {
+                shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_7});
+            }
+            return false;
+        }
+        if (restStartTime != "" && restStartTime != undefined && restStartTime2 != "" && restStartTime2 != undefined) {
+            //两个加班休息时间都填了,那么判断不能交叉
+            if((restStartTimeOfDate.getTime()<restEndTimeOfDateOfDate2.getTime() && restStartTimeOfDate.getTime()>=restStartTimeOfDate2.getTime())
+                ||(restStartTimeOfDate2.getTime()<restEndTimeOfDateOfDate.getTime() && restStartTimeOfDate2.getTime()>=restStartTimeOfDate.getTime())
+            ){
+                shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_0});
+                return false;
+            }
+        }
+        return true;
+    },
+//	verify:function(){
+//		var regEx = new RegExp("\\-","gi");//i不区分大小写 g匹配所有
+//	 	var msgValue = this.getFieldValue("entries_msgValue");
+//	 	
+//	 	var beginTime = this.getFieldValue("entries_beginTime");
+//	 	var endTime = this.getFieldValue("entries.endTime");
+//	 	beginTime = beginTime.replace(regEx,"/");//2013/6/12 19:38:02
+//	 	endTime = endTime.replace(regEx,"/");
+//	 	var beginTimeOfDate = new Date(beginTime); 
+//	 	var endTimeOfDate = new Date(endTime);
+//	 	if(beginTimeOfDate.getTime()>endTimeOfDate.getTime()){
+//			shr.showInfo({message: "请假开始日期不能大于请假结束日期"});
+//			return false;
+//		}else if(parseFloat(msgValue) == 0  ){
+//			shr.showInfo({message: "当前人的可用年假为"+msgValue+"天,不能提交或保存"});
+//			return false;
+//		}
+//		else{
+//			return true;
+//		}
+//	},
+
+    /**
+     * HRBillStateEnum(与转正,调动,离职单据的一致) || BizStateEnum 这个是 EAS7.5版的请假单使用的审批状态值,后续不用这个了<br/>
+     * 后续的加班,出差,请假,补签卡都用HRBillStateEnum这个单据状态,以便可以统一修改<br/>
+     * view: <field name="billState"  label="单据状态" type="text"></field>	   <br/>
+     * 查看页面取值 var billState = $("#billState").html();
+     * view: <field name="billState"  label="单据状态" type="text"></field>	   <br/>
+     * 查看页面取值 var billState = $("#billState").val();
+     *
+     * 设置编辑按钮是否隐藏		|| 对应EAS7.5 Version 审批状态字段值<br/>
+     * 0-save  未提交			||  -1  未提交					   <br/>
+     * 1-submited 未审批			||   0  未审核					   <br/>
+     * 2-auditing 审批中			||   1  审核中					   <br/>
+     * 3-audited  审批通过		||   3  审核完成					   <br/>
+     * 4-auditend 审批不通过		||   4  审核终止					   <br/>
+     */
+    setButtonVisible:function(){
+        var that = this;
+        var billState = $("#billState").val();
+        //alert(billState);
+        if (billState) {
+            if (billState==3 ||
+                jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_17==billState ||
+                billState ==4||
+                jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_16==billState ||
+                billState ==2||
+                jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_18==billState ) {
+                $("#edit").hide();
+                $("#submit").hide();
+                $("#submitEffect").hide();
+            } else if (1==billState ||
+                jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_22== billState ||
+                2 == billState ||
+                jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_18==billState ) { //未审批或审批中
+                if(!this.isFromWF()){
+                    $("#edit").hide();
+                    $("#submit").hide();
+                    $("#submitEffect").hide();
+                }
+            }
+        }
+        if (this.getOperateState().toUpperCase() == 'VIEW') { //查看状态下不允许提交
+            //不允许提交生效
+            $("#submitEffect").hide();
+            if(billState == 0)
+            {
+                $("#submit").show();
+            }else {
+                $("#submit").hide();
+            }
+            if(this.isFromWF()){ // 来自任务中心
+                $('#cancelAll').hide();
+                $('#submit')
+                    .text(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_21);
+                $('#edit').hide();
+            }
+        }
+
+        //新增和编辑状态隐藏返回XX列表
+        if (this.getOperateState().toUpperCase() == 'ADDNEW' || this.getOperateState().toUpperCase() == 'EDIT' ) {
+            $("#returnToOverTimeBillList").hide();
+        }
+
+        //如果是工作流打回,界面上的"返回XX列表"不显示
+        if (this.isFromWF()) {
+            $("#returnToOverTimeBillList").hide();
+            $("#cancel").hide();
+        }
+        /*
+        if(billState){
+            if(!this.isFromWF()){
+                if("审批通过" == billState || "审批中" == billState || "未审批" == billState){
+                    $("#edit").hide();
+                    $("#submit").hide();
+                    $("#submitEffect").hide();
+                }
+            }
+        }
+        */
+    }
+    //没有找到调休规则
+    ,isOverMaxQuota : function(){
+        var resFlag = true;
+        var _self = this;
+        if($('#hrOrgUnit_el')==null || $('#hrOrgUnit_el') ==""){
+            shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_15});
+            return;
+        }
+        _self.remoteCall({
+            type:"post",
+            method:"isOverMaxQuota",
+            async: false,
+            param:{
+                personId:$('#entries_person_el').val() || $('#entries_person').val() ||'',
+                otDate:atsMlUtile.getFieldOriginalValue('entries_otDate')||'',
+                currentValue:atsMlUtile.getFieldOriginalValue('entries_applyOTTime'),
+                otType:$('#entries_otType_el').val() || $('#entries_otType').val() || '',
+                hrOrgUnitId:$('#hrOrgUnit_el').val()
+
+            },
+            success:function(res){
+                var info =  res;
+                if (!info.resFlag) {
+                    shr.showWarning({message:info.resMsg});
+                    resFlag = false;
+                }
+            }
+        });
+        return resFlag;
+    },
+    isOverWarnValue:function(otType,otCompens)
+    {
+        //add by aniskin_guosj,otType、otCompens非空限制
+        if (otType!=null && otType!=undefined && otType!="" &&
+            otCompens!=null && otCompens!=undefined && otCompens!="")
+        {
+            if(!this.isOTControl)
+            {
+                return;
+            }
+            var data={
+                personId: this.getFieldValue('entries_person'),
+                otDate:  this.getFieldValue('entries_otDate'),
+                otType:otType,
+                otCompens:otCompens
+            }
+            this.remoteCall({
+                type:"post",
+                method:"getPersonOTLimitInfo",
+                param:data,
+                success:function(res){
+                    var info = res;
+                    if(info.isOverWarnValue)
+                    {
+                        var html="";
+                        if(info.cycleDateType!=3)
+                        {
+                            html=jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_23
+                                + shr.formatMsg(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_0, [info.personName, info.dateValue, info.used])
+                                +jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_26
+                                +"<span style='color:red'>"+info.substract
+                                +jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_25
+                                + "</span>"
+                                +"【"
+                                + jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_27
+                                + info.warnValue+","
+                                + jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_7
+                                + info.limitValue+"】";
+                        }
+                        else
+                        {
+                            html=jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_23
+                                + shr.formatMsg(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_28, [info.dateValue, info.startDate, info.endDate, info.used])
+                                + info.personName+""
+                                + jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_26
+                                +"<span style='color:red'>"+info.substract
+                                +jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_25
+                                + "</span>"
+                                +"【"
+                                + jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_27
+                                +info.warnValue+","
+                                + jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_7
+                                +info.limitValue+"】";
+                        }
+                        $("#show_info").html(html);
+                        $("#message_head").show();
+                    }
+                    else
+                    {
+                        $("#message_head").hide();
+                    }
+
+                }
+            });
+        }
+
+    },otCompensChange:function()
+    {
+        var that=this;
+        $("#entries_otCompens").shrPromptBox("option", {
+            onchange : function(e, value) {
+                var info = value.current;
+                var comId = info.id != undefined && info.id != "" ? info.id : info.submitFormat;
+                if (info!=null){
+                    that.isOverWarnValue($("#entries_otType_el").val(),comId);
+                }
+
+            }
+        });
+    },getOTContrlParams:function()
+    {
+        var that=this;
+       if( that.getOperateState() == 'VIEW' ){
+           return;
+       }
+
+        var personId = $('#entries_person_el').val();
+        if(personId == null || personId == ''){
+            personId = $('#entries_person').val();
+        }
+
+
+        var url = shr.getContextPath()+'/dynamic.do?handler=com.kingdee.shr.ats.bill.util.BillBizUtil&method=getOTContrlParams';
+        shr.ajax({
+            type:"post",
+            async:false,
+            url:url,
+            data:{personId:personId},
+            success:function(res){
+                if(res)
+                {
+                    that.isOTControl=res.isOTControl;
+                    that.isOtrolByDateType=res.isOtrolByDateType;
+
+                }
+            }
+        });
+    }
+
+    //返回个人加班单链接跳转
+    ,returnToOverTimeBillListAction:function(){
+        // window.location.href = shr.getContextPath()+"/dynamic.do?uipk=com.kingdee.eas.hr.ats.app.AtsLeaveBillList";
+        this.reloadPage({
+            uipk: 'com.kingdee.eas.hr.ats.app.AtsOverTimeBillList'
+        });
+    },
+
+    goNextPage: function(source) {
+        // 普通提交,返回上一页面
+        if ($("#bill_flag").val() == "employeeself"){
+            _self.reloadPage({
+                uipk: "com.kingdee.eas.hr.ats.app.AtsOverTimeBillList"
+            });
+        }else{
+            _self.reloadPage({
+                uipk: "com.kingdee.eas.hr.ats.app.AtsOverTimeBillAllList"
+            });
+        }
+    },
+
+    setNavigateLine : function(){
+        var fromFlag = localStorage.getItem("fromFlag");
+        var empolyeeBoardFlag =	sessionStorage.getItem("empolyeeBoardFlag");
+
+        var parentUipk = "";
+        if(parent.window.shr==null){
+            parentUipk = shr.getCurrentViewPage().uipk;
+        }else{
+            parentUipk = parent.window.shr.getCurrentViewPage().uipk;
+        }
+        if(fromFlag == "employeeBoard"){//来自我的考勤的时候。将导航条删除掉。
+            $("#breadcrumb").parent().parent().remove();
+            localStorage.removeItem("fromFlag");
+        }
+        if(("empolyeeBoardFlag" == empolyeeBoardFlag && "com.kingdee.eas.hr.ats.app.WorkCalendar.empATSDeskTop" == parentUipk)){
+            $("#breadcrumb").remove();
+            window.parent.changeDialogTitle(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_24);
+        }
+    }
+    ,getCurrentModel : function(){
+
+        var that = this ;
+        var model = shr.ats.AtsOverTimeBillEdit.superClass.getCurrentModel.call(this);
+        var startTime = model.entries[0].startTime ;
+        var endTime = model.entries[0].endTime;
+
+        var realStartTime = model.entries[0].realStartTime ;
+        var realEndTime = model.entries[0].realEndTime;
+
+        if(!(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/.test(startTime)))
+        {
+            model.entries[0].startTime = startTime+":00";
+        }
+        if(!(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/.test(endTime)))
+        {
+            model.entries[0].endTime = endTime+":00";
+        }
+
+        if(!(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/.test(realStartTime)))
+        {
+            if(!(realStartTime.trim() == "")){
+                model.entries[0].realStartTime = realStartTime+":00";
+            }
+        }
+        if(!(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/.test(realEndTime)))
+        {
+            if(!(realEndTime.trim() == "")){
+                model.entries[0].realEndTime = realEndTime+":00";
+            }
+        }
+
+
+        var personId = model.entries[0].person;
+        var date = model.entries[0].otDate;
+        var personDateStr = personId +"_"+date.substring(0,10);
+
+        if(personDateStr){
+            _self.remoteCall({
+                type:"post",
+                method:"getPersonAdminOrgUnit",
+                param:{ personDateStr:personDateStr},
+                async: false,
+                success:function(res){
+                    var info =  res;
+                    var personAtsInfo = res[personDateStr];
+                    if(personAtsInfo && personAtsInfo.adminOrgUnit){
+                        model.entries[0]["adminOrgUnit"]= personAtsInfo.adminOrgUnit;
+                        model.entries[0]["position"]= personAtsInfo.position;
+                    }
+                }
+            });
+        }
+
+        model.ccPersonIds = model.ccPersonIds && model.ccPersonIds.id || "";
+        model.ccPerson = model.ccPersonIds;
+        return model ;
+    }
+    ,saveAction: function(event) {
+        var _self = this,
+            workArea = _self.getWorkarea(),
+            $form = $('form', workArea);
+        if (_self.validate()&&_self.verify()&&($form.valid())) {
+            var beginDate = atsMlUtile.getFieldOriginalValue("entries_startTime").split(" ")[0];
+            var endDate = atsMlUtile.getFieldOriginalValue("entries_endTime").split(" ")[0];
+            var billType = "overTime";
+            var personId = $('#entries_person_el').val()
+            _self.remoteCall({
+                type:"post",
+                method:"billCheck",
+                param:{beginDate:beginDate,endDate:endDate,personId:personId,billType:billType},
+                async: true,
+                success:function(res){
+                    var result = res.result;
+                    if(result==""){
+                        _self.doSave(event, 'save');
+                    }else{
+                        shr.showConfirm(result+jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_20,function(){
+                            _self.doSave(event, 'save');
+                        });
+                    }
+                }
+            });
+        }
+    },
+    assembleSaveData: function(action) {
+        var data = shr.ats.AtsOverTimeBillEdit.superClass.assembleSaveData.call(this,action);
+        var model = JSON.parse(data.model);
+        var personDateStr = '';
+        var personId = model.entries.person;
+        var date = model.entries.otDate;
+        if(date && personId){
+            personDateStr += personId +"_"+date.substring(0,10);
+        }
+        _self.remoteCall({
+            type:"post",
+            method:"getPersonAdminOrgUnit",
+            param:{
+                personDateStr:personDateStr
+            },
+            async: false,
+            success:function(res){
+                var info =  res;
+                var person_date = personId +"_"+date.substring(0,10);
+                if(res[person_date] != null){
+                    model.entries["adminOrgUnit"] = res[person_date].adminOrgUnit;
+                    model.entries["position"] = res[person_date].position;
+                }
+            }
+        });
+
+        model.ccPerson = model.ccPersonIds;
+        var assModeljson = $.toJSON(model) ;
+        data.model = assModeljson ;
+        return data;
+    }
+    ,submitAction: function(event) {
+
+        var _self = this,
+            workArea = _self.getWorkarea(),
+            $form = $('form', workArea);
+        var flag = false ;
+
+        if (shr.getCurrentViewPage().uipk == "com.kingdee.eas.hr.ats.app.AtsOverTimeBillForm") {
+            var personId = $('#entries_person_id').val();
+            var proposerId = $('#proposer_id').val();
+            if(undefined != personId && undefined != proposerId && personId != "" && proposerId != "" && personId != proposerId){
+                shr.showError({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_30, hiddenAfter: 5});
+                return;
+            }
+        }
+
+        if (_self.validate()&&_self.verify()&&($form.valid())) {
+            var beginDate = atsMlUtile.getFieldOriginalValue("entries_startTime").split(" ")[0];
+            var endDate = atsMlUtile.getFieldOriginalValue("entries_endTime").split(" ")[0];
+            var billType = "overTime";
+            var personId = $('#entries_person_el').val()
+            _self.remoteCall({
+                type:"post",
+                method:"billCheck",
+                param:{beginDate:beginDate,endDate:endDate,personId:personId,billType:billType},
+                async: false,
+                success:function(res){
+                    var result = res.result;
+                    if(result==""){
+                        shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_13, function() {
+                            _self.doSubmit(event, 'submit');
+                        });
+                    }else{
+                        shr.showConfirm(result+jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_20,function(){
+                            shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_13, function() {
+                                _self.doSubmit(event, 'submit');
+                            });
+                        });
+                    }
+                }
+            });
+        }
+
+    }
+    ,before :function(){
+
+        var _self = this,
+            workArea = _self.getWorkarea(),
+            $form = $('form', workArea);
+        var flag = false ;
+        if (_self.validate()&&($form.valid())) {
+            var beginDate = atsMlUtile.getFieldOriginalValue("entries_startTime").split(" ")[0];
+            var endDate = atsMlUtile.getFieldOriginalValue("entries_endTime").split(" ")[0];
+            var billType = "overTime";
+            var personId = $('#entries_person_el').val()
+            _self.remoteCall({
+                type:"post",
+                method:"billCheck",
+                param:{beginDate:beginDate,endDate:endDate,personId:personId,billType:billType},
+                async: false,
+                success:function(res){
+                    var result = res.result;
+                    if(result==""){
+                        flag= true;
+                    }else{
+                        shr.showConfirm(result+jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_20,function(){
+                            flag= true;
+                        });
+                    }
+                }
+            });
+        }
+        // return false 也能保存,固让js报错,后续让eas修改 return false 逻辑
+        //var len = workArea.length() ;
+        return flag ;
+    }
+    ,beforeSave:function(){
+        var _self = this,
+            workArea = _self.getWorkarea(),
+            $form = $('form', workArea);
+        if (($form.valid() && _self.verify())) {
+            var beginDate = atsMlUtile.getFieldOriginalValue("entries_startTime").split(" ")[0];
+            var endDate = atsMlUtile.getFieldOriginalValue("entries_endTime").split(" ")[0];
+            var billType = "overTime";
+            var personId = $('#entries_person_el').val()
+            _self.remoteCall({
+                type:"post",
+                method:"billCheck",
+                param:{beginDate:beginDate,endDate:endDate,personId:personId,billType:billType},
+                async: true,
+                success:function(res){
+                    var result = res.result;
+                    if(result==""){
+                        return true;
+                    }else{
+                        shr.showConfirm(result+jsBizMultLan.atsManager_atsOverTimeBillEdit_i18n_20,function(){
+                            return true;
+                        });
+                    }
+                }
+            });
+        }
+        // return false 也能保存,固让js报错,后续让eas修改 return false 逻辑
+        var len = workArea.length() ;
+        return false ;
+    }
+
+});

+ 268 - 0
mbos/出差变更单.js

@@ -0,0 +1,268 @@
+// 出差变更单
+  _this.pageinit = function () {
+    var that = _this
+    newPageInit(that)
+  }
+  
+  // 	在页面初始化加载之后
+  mbos('page').bind('afterLoad', function () {
+    _this.path = mbos.pageInfo.path// 轻应用的路径编码 例如 trip880
+    _this.detailPageCode = mbos.pageInfo.name.replace('Add', 'View') // 详情页面的编码 (个别页面可特殊处理直接写入) 例如 tripView.editui
+    _this.operateState = mbos.getRequestParams().operateState // 'ADDNEW' 'EDIT' 'VIEW'
+    // 初始化审批流
+    // mbos('nextperson1').checkParticipantPerson({
+    //   "callback": function () { }
+    // });
+    //   单据说明
+    mbos('description').bind('click', function () {
+      handleClickDesc()
+    })
+  })
+  
+  mbos('entries').bind('afterRendered', function (e) {
+    // mbos('oldBill', e.index).value(localeResource.view) // 查看原单 点击查看按钮
+    multiLangField(e.index)// 兼容多语言字段回显的问题
+    viewOldBill(e.index) // 给查看添加点击事件
+    // 初始化审批流
+    _this.getNextPerson();
+     getOldEntry(e)
+  })
+  // 初始化审批流
+  _this.getNextPerson = function(){
+    var entries = setModel('getNextPerson');
+    var data = JSON.parse(JSON.stringify(mbos('entity').value()));
+    data.entries = JSON.parse(JSON.stringify(entries));
+    var date = mbos.getRequestParams().date || new Date()
+    var today = moment(date).format('YYYY-MM-DD')
+    var beginTime = today + ' 00:00';
+    var endTime = today + ' 23:59';
+    mbos.eas.invokeScript({
+      name: "getHROrgUnit",
+      param: [{'beginTime': beginTime, 'endTime':endTime}],
+      success: function (res) {
+        console.log(res)
+        if(res.hrOrgUnitId){
+          data.hrOrgUnit = res.hrOrgUnitId
+        }
+        mbos('nextperson1').checkParticipantPerson({
+          'editdata': data,
+          "callback": function () { }
+        });
+      }
+    })
+  }
+  function viewOldBill(index){
+     $("#oldBill_" + index).bind('click', function () {
+      if (mbos('entries.tripBill', index).value() && mbos('entries.tripBill', index).value().id) {
+        openPage('trip880', 'tripView.editui', { 
+          billID: mbos('entries.tripBill', index).value().id, // 出差单id
+          entryId: mbos('entries_tripEntryBill', index).value().id, // 聚焦在对应的分录明细上
+          billType: 'tripBill' // 出差单的name,取自天天勤。作用是过滤分录,不显示非自己的单据明细
+        })
+      }
+    })
+  }
+  function getOldEntry(e) {
+    var index = e.index
+    if (mbos.getRequestParams().oldEntry) {
+      var oldEntry = JSON.parse(mbos.getRequestParams().oldEntry)
+      
+      if (oldEntry) {
+        console.log('oldEntry', oldEntry)
+        mbos('entries_tripEntryBill', index).value({id:oldEntry.id}) // 分录id
+        mbos('entries_isAllDay', index).value(oldEntry.entries.isAllDay == '是' ? 'true':'false') // TODO 是中文值
+        setTimeout(function(){
+          mbos('entries_realTripDays', index).attr('accuracy', _this.decimal) // 设置小数点后位数
+          mbos('entries_realTripDays', index).value(oldEntry.entries.tripDays)
+          //202501
+          var dayVal = oldEntry.entries.tripDays;
+          tripTimeVal(dayVal,index);
+        }, 500)
+        mbos('entries_realStartTime', index).value(oldEntry.entries.tripStartTime)
+        mbos('entries_realEndTime', index).value(oldEntry.entries.tripEndTime)
+  //       回显弹性算时长
+        mbos.http.ajax({ // 是否弹性算时长
+          'url': `/mbos/data/getObjectValue?id=${mbos('entries_tripEntryBill', index).value().id}&fields=isElasticCalLen`,
+          success: function (data) {
+            mbos('entries_isElasticCalLen', index).value(data.isElasticCalLen) // 原出差单单据id
+            mbos('entries_isElasticCalLen', index).show() // 原出差单单据id
+          }
+        });
+      }
+    }
+    if (oldEntry && oldEntry.bill) {
+      mbos('entries.tripBill', index).value(oldEntry.bill) // 原出差单单据id
+    } else { // 通过分录id获取原出差单据的id
+      mbos.http.ajax({
+        'url': `/mbos/data/getObjectValue?id=${mbos('entries_tripEntryBill', index).value().id}&fields=bill.id`,
+        success: function (data) {
+          mbos('entries_tripBill', index).value(data.bill) // 原出差单单据id
+        }
+      });
+    }
+  }
+  // 保存按钮
+  _this.save = function (event) {
+    setModel()
+    baseInterface('save', toView) // 调用保存接口
+  }
+  // 提交按钮
+  _this.submit = function (event) {
+    // 确认提交 弹框
+    mbos.ui.showConfirm({
+      title: localeResource.confirmSubmit,
+      iconclass: "kdfont kdfont-zhuangtai_jingshi the_info",
+      callback: function (data) {
+        if (data == 0) {
+          setModel()
+          baseInterface('submit', toView) // 调用提交接口        
+        }
+      }
+    });
+  
+  }
+  
+  // 点击“保存、提交” 跳转页面
+  function toView(res) {
+    // 提交接口 返回的res.data为数组,取第一条数据
+    if (res.data.keyValue || (res.data.length > 0 && res.data[0].keyValue)) {
+      // 操作成功 提示弹框
+      mbos.ui.showInfo({
+        title: localeResource.succeed,
+        iconclass: "kdfont kdfont-zhuangtai_wancheng the_success",
+        callback: function () {
+          openPage(_this.path, _this.detailPageCode, { billID: res.data.keyValue || res.data[0].keyValue })
+        }
+      });
+    } else {
+      mbos.msgBox.showMessage('billID获取失败!');
+    }
+  }
+  // 给隐藏的model赋值
+  function setModel(method) {
+    if (typeof _this.operateState != "undefined" && (_this.operateState === "ADDNEW" || _this.operateState === "EDIT")) {
+      var entries = mbos('entity').data.entries
+      entries.map(function (entry) {
+        entry.person = easContext.person
+        entry.position = easContext.position
+        entry.adminOrgUnit = easContext.position.adminOrgUnit
+        getEntries(entry,method) // 各单据处理分录数据
+      })
+      return entries;
+    }
+  }
+  // 各单据处理分录数据的函数
+  function getEntries(entry,method) {
+    // entry.tripBill =  _this.tripBillId // 原出差单id
+    if(method == 'getNextPerson'){
+      // entry.position = easContext.position.id;
+      // entry.adminOrgUnit = easContext.position.adminOrgUnit.id;
+      if(entry.realStartTime){
+        entry.realStartTime = moment(entry.realStartTime).format('YYYY-MM-DD HH:mm:ss');
+      }
+      if(entry.realEndTime){
+        entry.realEndTime = moment(entry.realEndTime).format('YYYY-MM-DD HH:mm:ss');
+      }
+    }else{
+      // delete entry.position;
+      // delete entry.adminOrgUnit;
+    }
+  }
+  
+  // 计算单据时长
+  var getTimeLength = _.debounce(function (index) {
+    var callback = function (res) {
+      mbos('entries_realTripDays', index).attr('accuracy', _this.decimal) // 设置小数点后位数
+      mbos('entries_realTripDays', index).value(Number(res.data))
+      //Number(res.data) 202501
+      var dayVal = Number(res.data);
+      tripTimeVal(dayVal,index);
+    }
+    setModel(index)
+    var entry = mbos('entity').data.entries[index]
+    if (entry.realEndTime && entry.realStartTime) {
+      baseInterface('getBillLength', callback, index)
+    }
+  }, 200)
+  // 根据时间判断 是否展示弹性算时长字段
+  function isElastic(index) {
+    var callback = function (res) {
+      if (res.data) {
+        mbos('entries_isElasticCalLen', index).show()
+      } else {
+        mbos('entries_isElasticCalLen', index).hide()
+      }
+    }
+    setModel(index)
+    if (mbos('entries_realStartTime',0).value() && mbos('entries_realEndTime',0).value()) {
+      baseInterface('showIsElasticCalCtrl', callback, index)
+    }
+  }
+  // 获取整天的开始、结束时间
+  var getStartEndTime = _.debounce(function (event) {
+    if (String(mbos('entries_isAllDay', event.index).value()) == 'true') { // 整天出差
+      var callback = function (res) {
+        mbos('entries_realStartTime', event.index).value(moment(res.data.beginTime).format('YYYY-MM-DD HH:mm'))
+        mbos('entries_realEndTime', event.index).value(moment(res.data.endTime).format('YYYY-MM-DD HH:mm'))
+      }
+      baseInterface('getAllDayBeginAndEndTime', callback, event.index)
+    }
+  }, 0)
+  
+  // 如果是整天出差 则使用date;否则使用datetime,同时清空时长
+  function recalcTime(event) {
+    mbos('entries_realTripDays', event.index).value('')
+    if (event.new_value) {
+      var entry = mbos('entity').data.entries[event.index]
+      if (entry.realStartTime || entry.realEndTime) {
+        getStartEndTime(event)
+      }
+    }
+    getTimeLength(event.index)
+  }
+  
+  // 计算时长
+  _this.calTime1 = function (event) {
+    // getTimeLength(event.index)
+    isElastic(event.index)
+    recalcTime(event)
+  
+  }
+  _this.calTime2 = function (event) {
+    // getTimeLength(event.index)
+    isElastic(event.index)
+    recalcTime(event)
+  }
+  // 弹性时段算时长
+  _this.calTime3 = function (event) {
+    recalcTime(event)
+  }
+  // 切换是否整天
+  _this.isAllDayChange = function (event) {
+    recalcTime(event)
+  }
+  
+  // 时长更改时 做校验
+  _this.lengthChange = function(event){
+    var value = event.new_value
+    //   判断是否小于0
+    if (!isNaN(parseFloat(value)) && value < 0) {
+      mbos.msgBox.showError(localeResource.lengthValid);
+      setTimeout(()=>{
+        mbos('entries_realTripDays',event.index).value(0)
+        mbos('entries_triptime',event.index).value(0)
+      })
+      return
+    }
+  }
+  
+  //202501 二开拓展时长
+  function tripTimeVal(dayVal,idxVal) {
+    var triptime = 0;
+    if(dayVal == 0.29 || dayVal == 0.43 || dayVal == 0.86){
+      triptime = Math.floor( dayVal * 7 );
+    }else{
+      triptime = Math.ceil( dayVal * 7 );
+    }
+    mbos('entries_triptime', idxVal).value(triptime);
+  }

+ 71 - 0
mbos/出差变更单查看.js

@@ -0,0 +1,71 @@
+// 	在页面初始化加载之后  
+mbos('page').bind('afterLoad', function () {
+    _this.operateState = mbos.getRequestParams().operateState // 页面状态
+    _this.path = mbos.pageInfo.path // 轻应用的路径编码
+    _this.editPageCode = mbos.pageInfo.name.replace('View', 'Add') // 详情页面的编码 (个别页面可特殊处理直接写入)
+    _this.title = localeResource.Travel_Confirmation
+    toggleEntry() // 折叠\展开实体分录
+    toggleApprove() // 折叠\展开 审批流程
+  })
+  
+  mbos('page').bind('afterLoad', function () {
+    var that = _this
+    getDecimal(that) // 获取小数位的精确度
+  })
+  mbos('entity').bind('afterLoad', function () {
+    initCommon(_this.title)// 初始化公共部分
+  })
+  
+  mbos('editgrid1').bind('afterRendered', function (e) {
+    activedEntry() // 保证蓝色的下标在对应分录上
+    initPage() // 页面初始化时数据调整
+    timeStyle(e) // 起止时间的样式优化展示
+  })
+  
+  // 编辑
+  _this.edit = function (event) {
+    editHandle(_this.path, _this.editPageCode)
+  }
+  // 删除
+  _this.delete = function (event) {
+    deleteHandle()
+  }
+  
+  // 撤回
+  _this.recall = function (event) {
+    // 未审批
+    recallHandle()
+  }
+  
+  // 提交
+  _this.toSubmit = function (event) {
+    submitHandle()
+  }
+  
+  // 分录中 时间的样式优化展示
+  function timeStyle(e) {
+    //   开始时间
+    var start = mbos('startTime', e.index).value().split(" ");
+    $('#sTime_' + e.index).find('label')[0].innerHTML = start[1];
+    $('#sDate_' + e.index).find('label')[0].innerHTML = start[0];
+    // 结束时间
+    var end = mbos('endTime', e.index).value().split(" ");
+    $('#eTime_' + e.index).find('label')[0].innerHTML = end[1];
+    $('#eDate_' + e.index).find('label')[0].innerHTML = end[0];
+    // 箭头图标
+    $('#timeLength_' + e.index).find('label').addClass("lengthBottom");
+    $("#arrow_" + e.index).find('label').addClass("arrowIcon");
+    // 时长
+    setTimeout(function(){
+        //202501
+        var olddays =(mbos('timeLengthValue', e.index).value()).toFixed(_this.decimal || 2);
+        var resultval = 0;
+     
+          if(olddays == 0.29 || olddays == 0.43 || olddays == 0.86){
+            resultval = Math.floor( olddays * 7 );
+          }else{
+            resultval = Math.ceil( olddays * 7 );
+          }
+      $('#timeLength_' + e.index).find('label')[0].innerHTML =  resultval+ "小时";
+    }, 500)
+  }

+ 251 - 0
mbos/备份/出差变更单_备份.js

@@ -0,0 +1,251 @@
+_this.pageinit = function () {
+  var that = _this
+  newPageInit(that)
+}
+
+// 	在页面初始化加载之后
+mbos('page').bind('afterLoad', function () {
+  _this.path = mbos.pageInfo.path// 轻应用的路径编码 例如 trip880
+  _this.detailPageCode = mbos.pageInfo.name.replace('Add', 'View') // 详情页面的编码 (个别页面可特殊处理直接写入) 例如 tripView.editui
+  _this.operateState = mbos.getRequestParams().operateState // 'ADDNEW' 'EDIT' 'VIEW'
+  // 初始化审批流
+  // mbos('nextperson1').checkParticipantPerson({
+  //   "callback": function () { }
+  // });
+  //   单据说明
+  mbos('description').bind('click', function () {
+    handleClickDesc()
+  })
+})
+
+mbos('entries').bind('afterRendered', function (e) {
+  // mbos('oldBill', e.index).value(localeResource.view) // 查看原单 点击查看按钮
+  multiLangField(e.index)// 兼容多语言字段回显的问题
+  viewOldBill(e.index) // 给查看添加点击事件
+  // 初始化审批流
+  _this.getNextPerson();
+   getOldEntry(e)
+})
+// 初始化审批流
+_this.getNextPerson = function(){
+  var entries = setModel('getNextPerson');
+  var data = JSON.parse(JSON.stringify(mbos('entity').value()));
+  data.entries = JSON.parse(JSON.stringify(entries));
+  var date = mbos.getRequestParams().date || new Date()
+  var today = moment(date).format('YYYY-MM-DD')
+  var beginTime = today + ' 00:00';
+  var endTime = today + ' 23:59';
+  mbos.eas.invokeScript({
+    name: "getHROrgUnit",
+    param: [{'beginTime': beginTime, 'endTime':endTime}],
+    success: function (res) {
+      console.log(res)
+      if(res.hrOrgUnitId){
+        data.hrOrgUnit = res.hrOrgUnitId
+      }
+      mbos('nextperson1').checkParticipantPerson({
+        'editdata': data,
+        "callback": function () { }
+      });
+    }
+  })
+}
+function viewOldBill(index){
+   $("#oldBill_" + index).bind('click', function () {
+    if (mbos('entries.tripBill', index).value() && mbos('entries.tripBill', index).value().id) {
+      openPage('trip880', 'tripView.editui', { 
+        billID: mbos('entries.tripBill', index).value().id, // 出差单id
+        entryId: mbos('entries_tripEntryBill', index).value().id, // 聚焦在对应的分录明细上
+        billType: 'tripBill' // 出差单的name,取自天天勤。作用是过滤分录,不显示非自己的单据明细
+      })
+    }
+  })
+}
+function getOldEntry(e) {
+  var index = e.index
+  if (mbos.getRequestParams().oldEntry) {
+    var oldEntry = JSON.parse(mbos.getRequestParams().oldEntry)
+    
+    if (oldEntry) {
+      console.log('oldEntry', oldEntry)
+      mbos('entries_tripEntryBill', index).value({id:oldEntry.id}) // 分录id
+      mbos('entries_isAllDay', index).value(oldEntry.entries.isAllDay == '是' ? 'true':'false') // TODO 是中文值
+      setTimeout(function(){
+        mbos('entries_realTripDays', index).attr('accuracy', _this.decimal) // 设置小数点后位数
+        mbos('entries_realTripDays', index).value(oldEntry.entries.tripDays)
+      }, 500)
+      mbos('entries_realStartTime', index).value(oldEntry.entries.tripStartTime)
+      mbos('entries_realEndTime', index).value(oldEntry.entries.tripEndTime)
+//       回显弹性算时长
+      mbos.http.ajax({ // 是否弹性算时长
+        'url': `/mbos/data/getObjectValue?id=${mbos('entries_tripEntryBill', index).value().id}&fields=isElasticCalLen`,
+        success: function (data) {
+          mbos('entries_isElasticCalLen', index).value(data.isElasticCalLen) // 原出差单单据id
+          mbos('entries_isElasticCalLen', index).show() // 原出差单单据id
+        }
+      });
+    }
+  }
+  if (oldEntry && oldEntry.bill) {
+    mbos('entries.tripBill', index).value(oldEntry.bill) // 原出差单单据id
+  } else { // 通过分录id获取原出差单据的id
+    mbos.http.ajax({
+      'url': `/mbos/data/getObjectValue?id=${mbos('entries_tripEntryBill', index).value().id}&fields=bill.id`,
+      success: function (data) {
+        mbos('entries_tripBill', index).value(data.bill) // 原出差单单据id
+      }
+    });
+  }
+}
+// 保存按钮
+_this.save = function (event) {
+  setModel()
+  baseInterface('save', toView) // 调用保存接口
+}
+// 提交按钮
+_this.submit = function (event) {
+  // 确认提交 弹框
+  mbos.ui.showConfirm({
+    title: localeResource.confirmSubmit,
+    iconclass: "kdfont kdfont-zhuangtai_jingshi the_info",
+    callback: function (data) {
+      if (data == 0) {
+        setModel()
+        baseInterface('submit', toView) // 调用提交接口        
+      }
+    }
+  });
+
+}
+
+// 点击“保存、提交” 跳转页面
+function toView(res) {
+  // 提交接口 返回的res.data为数组,取第一条数据
+  if (res.data.keyValue || (res.data.length > 0 && res.data[0].keyValue)) {
+    // 操作成功 提示弹框
+    mbos.ui.showInfo({
+      title: localeResource.succeed,
+      iconclass: "kdfont kdfont-zhuangtai_wancheng the_success",
+      callback: function () {
+        openPage(_this.path, _this.detailPageCode, { billID: res.data.keyValue || res.data[0].keyValue })
+      }
+    });
+  } else {
+    mbos.msgBox.showMessage('billID获取失败!');
+  }
+}
+// 给隐藏的model赋值
+function setModel(method) {
+  if (typeof _this.operateState != "undefined" && (_this.operateState === "ADDNEW" || _this.operateState === "EDIT")) {
+    var entries = mbos('entity').data.entries
+    entries.map(function (entry) {
+      entry.person = easContext.person
+      entry.position = easContext.position
+      entry.adminOrgUnit = easContext.position.adminOrgUnit
+      getEntries(entry,method) // 各单据处理分录数据
+    })
+    return entries;
+  }
+}
+// 各单据处理分录数据的函数
+function getEntries(entry,method) {
+  // entry.tripBill =  _this.tripBillId // 原出差单id
+  if(method == 'getNextPerson'){
+    // entry.position = easContext.position.id;
+    // entry.adminOrgUnit = easContext.position.adminOrgUnit.id;
+    if(entry.realStartTime){
+      entry.realStartTime = moment(entry.realStartTime).format('YYYY-MM-DD HH:mm:ss');
+    }
+    if(entry.realEndTime){
+      entry.realEndTime = moment(entry.realEndTime).format('YYYY-MM-DD HH:mm:ss');
+    }
+  }else{
+    // delete entry.position;
+    // delete entry.adminOrgUnit;
+  }
+}
+
+// 计算单据时长
+var getTimeLength = _.debounce(function (index) {
+  var callback = function (res) {
+    mbos('entries_realTripDays', index).attr('accuracy', _this.decimal) // 设置小数点后位数
+    mbos('entries_realTripDays', index).value(Number(res.data))
+  }
+  setModel(index)
+  var entry = mbos('entity').data.entries[index]
+  if (entry.realEndTime && entry.realStartTime) {
+    baseInterface('getBillLength', callback, index)
+  }
+
+}, 200)
+// 根据时间判断 是否展示弹性算时长字段
+function isElastic(index) {
+  var callback = function (res) {
+    if (res.data) {
+      mbos('entries_isElasticCalLen', index).show()
+    } else {
+      mbos('entries_isElasticCalLen', index).hide()
+    }
+  }
+  setModel(index)
+  if (mbos('entries_realStartTime',0).value() && mbos('entries_realEndTime',0).value()) {
+    baseInterface('showIsElasticCalCtrl', callback, index)
+  }
+}
+// 获取整天的开始、结束时间
+var getStartEndTime = _.debounce(function (event) {
+  if (String(mbos('entries_isAllDay', event.index).value()) == 'true') { // 整天出差
+    var callback = function (res) {
+      mbos('entries_realStartTime', event.index).value(moment(res.data.beginTime).format('YYYY-MM-DD HH:mm'))
+      mbos('entries_realEndTime', event.index).value(moment(res.data.endTime).format('YYYY-MM-DD HH:mm'))
+    }
+    baseInterface('getAllDayBeginAndEndTime', callback, event.index)
+  }
+}, 0)
+
+// 如果是整天出差 则使用date;否则使用datetime,同时清空时长
+function recalcTime(event) {
+  mbos('entries_realTripDays', event.index).value('')
+  if (event.new_value) {
+    var entry = mbos('entity').data.entries[event.index]
+    if (entry.realStartTime || entry.realEndTime) {
+      getStartEndTime(event)
+    }
+  }
+  getTimeLength(event.index)
+}
+
+// 计算时长
+_this.calTime1 = function (event) {
+  // getTimeLength(event.index)
+  isElastic(event.index)
+  recalcTime(event)
+
+}
+_this.calTime2 = function (event) {
+  // getTimeLength(event.index)
+  isElastic(event.index)
+  recalcTime(event)
+}
+// 弹性时段算时长
+_this.calTime3 = function (event) {
+  recalcTime(event)
+}
+// 切换是否整天
+_this.isAllDayChange = function (event) {
+  recalcTime(event)
+}
+
+// 时长更改时 做校验
+_this.lengthChange = function(event){
+  var value = event.new_value
+  //   判断是否小于0
+  if (!isNaN(parseFloat(value)) && value < 0) {
+    mbos.msgBox.showError(localeResource.lengthValid);
+    setTimeout(()=>{
+      mbos('entries_realTripDays',event.index).value(0)
+    })
+    return
+  }
+}
+        

+ 64 - 0
mbos/备份/出差变更查看_备份.js

@@ -0,0 +1,64 @@
+// 	在页面初始化加载之后  
+mbos('page').bind('afterLoad', function () {
+    _this.operateState = mbos.getRequestParams().operateState // 页面状态
+    _this.path = mbos.pageInfo.path // 轻应用的路径编码
+    _this.editPageCode = mbos.pageInfo.name.replace('View', 'Add') // 详情页面的编码 (个别页面可特殊处理直接写入)
+    _this.title = localeResource.Travel_Confirmation
+    toggleEntry() // 折叠\展开实体分录
+    toggleApprove() // 折叠\展开 审批流程
+  })
+  
+  mbos('page').bind('afterLoad', function () {
+    var that = _this
+    getDecimal(that) // 获取小数位的精确度
+  })
+  mbos('entity').bind('afterLoad', function () {
+    initCommon(_this.title)// 初始化公共部分
+  })
+  
+  mbos('editgrid1').bind('afterRendered', function (e) {
+    activedEntry() // 保证蓝色的下标在对应分录上
+    initPage() // 页面初始化时数据调整
+    timeStyle(e) // 起止时间的样式优化展示
+  })
+  
+  // 编辑
+  _this.edit = function (event) {
+    editHandle(_this.path, _this.editPageCode)
+  }
+  // 删除
+  _this.delete = function (event) {
+    deleteHandle()
+  }
+  
+  // 撤回
+  _this.recall = function (event) {
+    // 未审批
+    recallHandle()
+  }
+  
+  // 提交
+  _this.toSubmit = function (event) {
+    submitHandle()
+  }
+  
+  // 分录中 时间的样式优化展示
+  function timeStyle(e) {
+    //   开始时间
+    var start = mbos('startTime', e.index).value().split(" ");
+    $('#sTime_' + e.index).find('label')[0].innerHTML = start[1];
+    $('#sDate_' + e.index).find('label')[0].innerHTML = start[0];
+    // 结束时间
+    var end = mbos('endTime', e.index).value().split(" ");
+    $('#eTime_' + e.index).find('label')[0].innerHTML = end[1];
+    $('#eDate_' + e.index).find('label')[0].innerHTML = end[0];
+    // 箭头图标
+    $('#timeLength_' + e.index).find('label').addClass("lengthBottom");
+    $("#arrow_" + e.index).find('label').addClass("arrowIcon");
+    // 时长
+    setTimeout(function(){
+      $('#timeLength_' + e.index).find('label')[0].innerHTML = (mbos('timeLengthValue', e.index).value()).toFixed(_this.decimal || 2) + "天";
+    }, 500)
+  }
+          
+