Ver Fonte

兼职终止单 员工提报单 部署

qingwu há 1 semana atrás
pai
commit
990442e72e

+ 924 - 0
patch/20250531/eas/server/deploy/easweb.ear/shr_web.war/addon/customer/web/js/batchSubmitShemeBillMySubmissionEditEx.js

@@ -0,0 +1,924 @@
+shr.defineClass("shr.customer.gtiit.BatchSubmitShemeBillMySubmissionEditEx", shr.compensation.BatchSubmitShemeBillMySubmissionEdit, {
+
+    initalizeDOM: function () {
+        shr.customer.gtiit.BatchSubmitShemeBillMySubmissionEditEx.superClass.initalizeDOM.call(this);
+
+    },
+    /**
+     * 初始化表格头数据
+     * @return {[type]} [description]
+     */
+    getEditGridColModel: function () {
+        var _self = this;
+        var submitSchemeId = '';
+        var ctrlrole = $('#submitScheme').attr('ctrlrole');
+
+        if (ctrlrole == 'promptBox') {
+            submitSchemeId = $('#submitScheme').shrPromptBox('getValue').id;
+        } else {
+            submitSchemeId = $('#submitScheme').val();
+        }
+        var datasource = _self.getFieldValue('datasource');
+        if (datasource == "") {
+            datasource = 2;
+        }
+        //表格处理
+        _self.remoteCall({
+            method: "getEditGridColModel",
+            param: {
+                submitSchemeId: submitSchemeId,
+                datasource: datasource
+            },
+            success: function (data) {
+                var colModel = data.colModel;
+
+                for (var i = 0; i < data.colNames.length; i++) {
+                    var colName = data.colNames[i];
+                    if (colName == "Contract Start Time(合同开始时间)") {
+                        data.colNames[i] = "Employment Start Time任职开始时间"
+
+                    } else if (colName == "Contract End Time(合同结束时间)") {
+                        data.colNames[i] = "Employment End Time任职结束时间" 
+                    }
+                }
+
+                _self.colNames = data.colNames;
+                _self.colModel = data.colModel;
+                if (colModel) {
+                    var col;
+                    // 初始化数值类型的列,并且获取到精度,用来做保存数据的格式化
+                    var reg = new RegExp('^[sS]\\d+');
+                    var decimalPrecision = 0;
+                    for (var i = 0, size = colModel.length; i < size; i++) {
+                        col = colModel[i];
+                        if (col.label == "Contract Start Time(合同开始时间)") {
+                            col.label = "Employment Start Time任职开始时间"
+
+                        }
+                        if (col.label == "Contract End Time(合同结束时间)") {
+                            col.label = "Employment End Time任职结束时间"
+                        }
+                        if (col && col.name && col.name && reg.test(col.name) && "numberfield" == col.formatter) {
+                            decimalPrecision = col.editoptions.inputJson.decimalPrecision;
+                            _self.numTypeFieldMap[col.name] = decimalPrecision;
+                        }
+                    }
+                }
+                _self.setSubmitSchemeDescription(data.description);
+                _self.renderGridHeader();
+            }
+        });
+    },
+    setGridNameEvent: function () {
+        var _self = this;
+        $entry = $('#entry');
+        $entry.jqGrid("option", {
+            afterSaveCell: function (rowid, cellname, value, iRow, iCol, rowData) {
+                if (cellname == "startTime" || cellname == "endTime" || cellname == "restStartTime" || cellname == "restEndTime") {
+                    //发生日期
+                    var effectTime = $("#entry").jqGrid("getCell", rowid, "effectDate");
+                    var cellTime = $("#entry").jqGrid("getCell", rowid, cellname);
+                    if (effectTime && cellTime) {
+                        var effectDate = _self.convertTimeZone(effectTime);
+                        let year = effectDate.getFullYear();   // 获取年份(4位数)
+                        let month = effectDate.getMonth() + 1; // 获取月份(0-11,需要加1)
+                        let day = effectDate.getDate();        // 获取日期(1-31)
+                        // 格式化为年月日字符串
+                        let formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
+
+                        var cellTimeOfDate = new Date(cellTime);
+                        let hours = cellTimeOfDate.getHours();     // 获取小时(0-23)
+                        let minutes = cellTimeOfDate.getMinutes(); // 获取分钟(0-59)
+                        let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
+                        $("#entry").jqGrid("setCell", rowid, cellname, formattedDate + " " + formattedTime);
+                    }
+                    _self.countHourAndMultiple(rowid);
+                }
+                if (cellname == "effectDate") {
+                    //发生日期
+                    var effectTime = $("#entry").jqGrid("getCell", rowid, "effectDate");
+                    var effectDate = new Date();
+                    if (effectTime) {
+                        effectDate = new Date(effectTime);
+                    }
+                    effectDate = _self.convertTimeZone(effectTime);
+                    let year = effectDate.getFullYear();   // 获取年份(4位数)
+                    let month = effectDate.getMonth() + 1; // 获取月份(0-11,需要加1)
+                    let day = effectDate.getDate();        // 获取日期(1-31)
+                    // 格式化为年月日字符串
+                    let formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
+
+                    //开始时间
+                    var startTime = $("#entry").jqGrid("getCell", rowid, "startTime");
+                    //结束时间
+                    var endTime = $("#entry").jqGrid("getCell", rowid, "endTime");
+                    //休息开始时间
+                    var restStartTime = $("#entry").jqGrid("getCell", rowid, "restStartTime");
+                    //休息结束时间
+                    var restEndTime = $("#entry").jqGrid("getCell", rowid, "restEndTime");
+                    if (startTime) {
+                        var startTimeOfDate = new Date(startTime);
+                        let hours = startTimeOfDate.getHours();     // 获取小时(0-23)
+                        let minutes = startTimeOfDate.getMinutes(); // 获取分钟(0-59)
+                        let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
+                        $("#entry").jqGrid("setCell", rowid, "startTime", formattedDate + " " + formattedTime);
+                    }
+                    if (endTime) {
+                        var endTimeOfDate = new Date(endTime);
+                        let hours = endTimeOfDate.getHours();     // 获取小时(0-23)
+                        let minutes = endTimeOfDate.getMinutes(); // 获取分钟(0-59)
+                        let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
+                        $("#entry").jqGrid("setCell", rowid, "endTime", formattedDate + " " + formattedTime);
+                    }
+                    if (restStartTime) {
+                        var restStartTimeOfDate = new Date(restStartTime);
+                        let hours = restStartTimeOfDate.getHours();     // 获取小时(0-23)
+                        let minutes = restStartTimeOfDate.getMinutes(); // 获取分钟(0-59)
+                        let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
+                        $("#entry").jqGrid("setCell", rowid, "restStartTime", formattedDate + " " + formattedTime);
+                    }
+                    if (restEndTime) {
+                        var restEndTimeOfDate = new Date(restEndTime);
+                        let hours = restEndTimeOfDate.getHours();     // 获取小时(0-23)
+                        let minutes = restEndTimeOfDate.getMinutes(); // 获取分钟(0-59)
+                        let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
+                        $("#entry").jqGrid("setCell", rowid, "restEndTime", formattedDate + " " + formattedTime);
+                    }
+                    _self.countHourAndMultiple(rowid);
+                }
+            },
+            "afterEditCell": function (rowid, colName, value, iRow, iCol, rowData) {
+                if (colName === "person") {
+                    var id = "#" + iRow + "_person";
+                    var option = $(id).shrPromptBox("option");
+                    var subWidgetOptions = option.subWidgetOptions
+                    subWidgetOptions.multiselect = true;
+                    subWidgetOptions.filter = " hrOrgUnit.id = '" + $("#hrOrgUnit").shrPromptBox("getValue").id + "'";
+                    subWidgetOptions.otherParams = { adminOrgId: $("#adminOrg").shrPromptBox("getValue").id, hrOrgUnitId: $("#hrOrgUnit").shrPromptBox("getValue").id };
+                    $(id).shrPromptBox("option", {
+                        "subWidgetOptions": subWidgetOptions,
+                        "onchange": function (e, val) {
+                            var personData = val.current;
+                            var prevPersonData = val.previous;
+                            var length = personData.length;
+                            var newRowData = [];
+                            for (var i = 0; i < length; i++) {
+                                var item = personData[i];
+                                var updateItem = {};
+                                var oldData = $entry.wafGrid("getRowData", rowid);
+                                var startDate;
+                                var endDate;
+                                var isqw;
+                                if (item["empOrgRelation.assignType"].value == 1) {//1=主要任职
+                                    isqw = true;
+                                    _self.remoteCall({
+                                        method: "getDateTime",
+                                        param: { personId: item["person.id"], type: "Full" },
+                                        async: false,
+                                        success: function (data) {
+                                            startDate = data.startDate
+                                            endDate = data.endDate
+                                        },
+                                        error: function (error) {
+                                            console.log(error);
+                                        }
+                                    });
+                                } else if (item["empOrgRelation.assignType"].value ==0)  {
+                                    isqw = false;
+                                    _self.remoteCall({
+                                        method: "getDateTime",
+                                        param: {
+                                            personId: item["person.id"],
+                                            adminOrgId: item["adminOrg.id"],
+                                            positionId: item["position.id"],
+                                            hourlywage: item["empOrgRelation.hourlywage"],
+                                            type: "Part"
+                                        },
+                                        async: false,
+                                        success: function (data) {
+                                            startDate = data.startDate
+                                            endDate = data.endDate
+                                        },
+                                        error: function (error) {
+                                            console.log(error);
+                                        }
+                                    });
+                                }
+
+
+                                if (i == 0) {
+                                    // if(!prevPersonData || prevPersonData.id !== item["person.id"]){
+                                    if (item.id !== oldData.cmpEmpORelation.id) {
+                                        var beginContractDate, endContractDate;
+                                        _self.remoteCall({
+                                            method: "getContractDate",
+                                            param: { positionId: item["position.id"] },
+                                            async: false,
+                                            success: function (data) {
+                                                beginContractDate = data.beginContractDate;
+                                                endContractDate = data.endContractDate;
+                                            },
+                                            error: function () { }
+                                        });
+
+                                        updateItem = {
+                                            "number": item["person.number"],
+                                            "adminOrgUnit": { id: item["adminOrg.id"], name: item["adminOrg.name"] },
+                                            "position": { id: item["position.id"], name: item["position.name"] },
+                                            "cmpEmpORelation": { id: item.id, name: item.id },
+                                            "person": { id: item["person.id"], name: item["person.name"] },
+                                            "submitElement": oldData.submitElement,
+                                            "id": oldData.id,
+                                            "tempId": oldData.tempId,
+                                            "effectDate": oldData.effectDate,
+                                            "currency": oldData.currency,
+                                            "dealStatus": oldData.dealStatus,
+                                            "superiorId": item["parentPerson.id"],
+                                            "hourlyWage": item["empOrgRelation.hourlywage"],
+                                            "beginContractDate": beginContractDate,
+                                            "endContractDate": endContractDate,
+                                            "superiorName": item["parentPerson.name"]
+                                        }
+
+                                        updateItem.beginContractDate = startDate
+                                        updateItem.endContractDate = endDate
+
+                                        var newData = _self.updateRow(updateItem, oldData);
+                                        $entry.wafGrid("setRowData", rowid, newData);
+                                    } else {
+
+                                        oldData.beginContractDate = startDate
+                                        oldData.endContractDate = endDate
+
+                                        $entry.wafGrid("setRowData", rowid, oldData);
+                                    }
+                                } else {
+                                    var beginContractDate, endContractDate;
+                                    _self.remoteCall({
+                                        method: "getContractDate",
+                                        param: { positionId: item["position.id"] },
+                                        async: false,
+                                        success: function (data) {
+                                            beginContractDate = data.beginContractDate;
+                                            endContractDate = data.endContractDate;
+                                        },
+                                        error: function () { }
+                                    });
+
+                                    var newData = _self.createNewEntryModel();
+                                    newData.number = item["person.number"];
+                                    newData.person = { id: item["person.id"], name: item["person.name"] };
+                                    newData.adminOrgUnit = { id: item["adminOrg.id"], name: item["adminOrg.name"] };
+                                    newData.position = { id: item["position.id"], name: item["position.name"] };
+                                    newData.cmpEmpORelation = { id: item.id, name: item.id };
+
+                                    newData.superiorId = item["parentPerson.id"];
+                                    newData.hourlyWage = item["empOrgRelation.hourlywage"];
+                                    newData.beginContractDate = beginContractDate;
+                                    newData.endContractDate = endContractDate;
+                                    newData.superiorName = item["parentPerson.name"];
+
+                                    newData.beginContractDate = startDate
+                                    newData.endContractDate = endDate
+                                    newRowData.push(newData);
+                                }
+                            }
+                            if (newRowData.length) {
+                                $entry.jqGrid('addBlockData', 'id', newRowData);
+                                $("#entry").jqGrid('setGridHeight', 300);
+                            }
+                            setTimeout(function () {
+                                var frozenScrollTop = $(".frozen-bdiv").scrollTop();
+                                $("#entry").parents(".ui-jqgrid-bdiv").scrollTop(frozenScrollTop);
+                            })
+                            _self.countHourAmount();
+                        }
+                    })
+                }
+            }
+        });
+        $entry.delegate('input', 'focus', function () {
+            _self.setCellLength();
+        });
+    },
+    //计算分录的工时和总金额
+    countHourAndMultiple: function (rowid) {
+        //发生日期
+        var effectTime = $("#entry").jqGrid("getCell", rowid, "effectDate");
+        //开始时间
+        var startTime = $("#entry").jqGrid("getCell", rowid, "startTime");
+        //结束时间
+        var endTime = $("#entry").jqGrid("getCell", rowid, "endTime");
+        //休息开始时间
+        var restStartTime = $("#entry").jqGrid("getCell", rowid, "restStartTime");
+        //休息结束时间
+        var restEndTime = $("#entry").jqGrid("getCell", rowid, "restEndTime");
+        if (startTime != "" && endTime != "") {
+            var startTimeOfDate = new Date(startTime);
+            var endTimeOfDate = new Date(endTime);
+            var times = 0;
+            if (restStartTime != "" && restEndTime != "") {
+                var restStartTimeOfDate = new Date(restStartTime);
+                var restEndTimeOfDate = new Date(restEndTime);
+                var times = restEndTimeOfDate.getTime() - restStartTimeOfDate.getTime();
+                if (times < 0) {
+                    times = 0;
+                }
+            }
+            var se = endTimeOfDate.getTime() - startTimeOfDate.getTime() - times;
+            //工时
+            var workHours = se / (3600 * 1000);
+            workHours = workHours.toFixed(2);
+            //时薪
+            var hourlyWage = $("#entry").jqGrid("getCell", rowid, "hourlyWage");
+            if (!hourlyWage) {
+                hourlyWage = 0;
+            }
+            //倍数
+            var multiple = 1;
+            var note = null;
+            //判断是否法定节假日和休息日
+            if (effectTime) {
+                let date = this.convertTimeZone(effectTime);
+                let year = date.getFullYear();   // 获取年份(4位数)
+                let month = date.getMonth() + 1; // 获取月份(0-11,需要加1)
+                let day = date.getDate();        // 获取日期(1-31)
+                // 格式化为年月日字符串
+                let formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
+                _self.remoteCall({
+                    type: "post",
+                    async: false,
+                    method: "workMultiple",
+                    param: { "otDate": formattedDate },
+                    success: function (res) {
+                        if (res.returnType) {
+                            if (res.returnType == "0") {
+                                //法定节假日
+                                multiple = 4;
+                                note = "Statuary Holiday,400%of basic salary";
+                            } else if (res.returnType == "1") {
+                                //休息日
+                                note = "Weekend";
+                            }
+                        }
+                    }
+                });
+            }
+
+            var amount = workHours * hourlyWage * multiple;
+            //工时
+            $("#entry").jqGrid("setCell", rowid, "totalWorkHours", workHours);
+            //总金额
+            $("#entry").jqGrid("setCell", rowid, "totalAmount", amount.toFixed(2));
+            //说明
+            $("#entry").jqGrid("setCell", rowid, "explain", note);
+            this.countHourAmount();
+        }
+    },
+    convertTimeZone: function (date) {
+        const inputDate = new Date(date);
+        const beijingTime = new Date(inputDate.toLocaleString("en-US", { timeZone: "Asia/Shanghai" }));
+        return beijingTime;
+    },
+    //计算单头的总工时和总金额
+    countHourAmount: function () {
+        var allRowData = $("#entry").jqGrid("getAllRowData");
+        var totalWorkHours = 0;
+        var totalAmount = 0;
+        for (var i = 0; i < allRowData.length; i++) {
+            var workHours = allRowData[i].totalWorkHours;
+            var amount = allRowData[i].totalAmount;
+            totalWorkHours = Number(totalWorkHours) + Number(workHours);
+            totalAmount = Number(totalAmount) + Number(amount);
+        }
+        this.getField("totalWorkHours").shrNumberField("setValue", totalWorkHours);
+        this.getField("totalAmount").shrNumberField("setValue", totalAmount);
+    },
+    verify: function () {
+        //_self.setEntryAttr();
+        var tds = $("#entry td[class*='dirty-cell']");
+        for (var i = 0; i < tds.length; i++) {
+            var cur = $(tds[i]);
+            var value;
+            if (cur.children().length > 0) {
+                value = cur.children().attr('value');
+            }
+            var type = "NUMBER";
+            if (!_self.checkNumValid(value, type)) {
+                shr.showWarning({
+                    message: $.cmpIntegrateI18n.submitBill.label11 /* 请输入正确格式 */,
+                    hideAfter: 9
+                });
+                $(tds[i]).focus();
+                $(tds[i]).css({
+                    "border": "solid 2px red"
+                });
+                return false;
+            } else {
+                $(tds[i]).css({
+                    "border": ""
+                });
+            }
+        }
+
+        //校验开始时间和结束时间不能有重叠
+        var allRowData = $("#entry").jqGrid("getAllRowData");
+        for (var i = 0; i < allRowData.length; i++) {
+            var startTime = new Date(allRowData[i]["startTime"]);
+            var endTime = new Date(allRowData[i]["endTime"]);
+            for (var j = i + 1; j < allRowData.length; j++) {
+                var nextStartTime = new Date(allRowData[j]["startTime"]);
+                var nextEndTime = new Date(allRowData[j]["endTime"]);
+                if (startTime < nextEndTime && nextStartTime < endTime) {
+                    shr.showWarning({ message: "Intersection between start and end times" });
+                    return false;
+                }
+            }
+        }
+
+        //校验分录只能有一种职位
+        var positionSet = new Set();
+        //校验分录只能是同一个直接上级
+        var superiorSet = new Set();
+        for (var i = 0; i < allRowData.length; i++) {
+            if (allRowData[i].position) {
+                positionSet.add(allRowData[i].position.id);
+            } else {
+                positionSet.add("");
+            }
+            if (allRowData[i].superiorId) {
+                superiorSet.add(allRowData[i].superiorId);
+            } else {
+                superiorSet.add("");
+            }
+            //j校验开始时间不能大于结束时间  20250509
+            var tstartTime = new Date(allRowData[i]["startTime"]);
+            var tendTime = new Date(allRowData[i]["endTime"]);
+            if (tstartTime > tendTime) {
+                    shr.showWarning({ message: "Line "+ (i+1) +", start time cannot be greater than end time" });
+                    return false;
+            }
+
+
+
+            
+        }
+        if (positionSet.size > 1) {
+            shr.showWarning({ message: "Entries cannot have data from different positions" });
+            return false;
+        }
+        if (superiorSet.size > 1) {
+            shr.showWarning({ message: "The direct supervisor corresponding to the employee position in the entry must be consistent" });
+            return false;
+        }
+
+        var calSchemeField = "submitScheme_el";
+        if (_self.getOperateState() == 'VIEW') {
+            calSchemeField = "submitScheme";
+        }
+        var calSchemeId = $("#" + calSchemeField).val();
+        //是否勾选校验方案
+        var isPlanCheck = true;
+        _self.remoteCall({
+            type: "post",
+            async: false,
+            method: "isTakeCheck",
+            param: { calSchemeId: calSchemeId },
+            success: function (res) {
+                isPlanCheck = res.isPlanCheck;
+            }
+        });
+        if (isPlanCheck) {
+            for (var i = 0; i < allRowData.length; i++) {
+                var beginContractDate = new Date(allRowData[i]["beginContractDate"]);
+                var endContractDate = new Date(allRowData[i]["endContractDate"]);
+                var effectDate = allRowData[i]["effectDate"];
+                if( effectDate.length==10){ 
+                 effectDate=  new Date( effectDate+="00:00:00.0")
+                }else{
+                  effectDate=  new Date(effectDate)
+                }
+                if (beginContractDate && endContractDate) {
+                    //发生日期要在合同开始和结束日期之间
+                    if (effectDate < beginContractDate || effectDate > endContractDate) {
+                        shr.showWarning({ message: "The occurrence date should be between the start and end dates of the contract" });
+                        return false;
+                    }
+                }
+            }
+
+            var flag = true;
+            _self.remoteCall({
+                type: "post",
+                async: false,
+                method: "getInductionDate",
+                param: {},
+                success: function (res) {
+                    if (res.enterDate) {
+                        var enterDate = new Date(res.enterDate);
+                        for (var i = 0; i < allRowData.length; i++) {
+                            var effectDate = new Date(allRowData[i]["effectDate"]);
+                            //发生日期不能小于入职日期
+                            if (effectDate < enterDate) {
+                                shr.showWarning({ message: "The occurrence date filled in by the employee cannot be earlier than the start date" });
+                                flag = false;
+                            }
+                        }
+                    }
+                }
+            });
+            if (!flag) {
+                return flag;
+            }
+        }
+
+        return true;
+    },
+    /**
+     * 删除行
+     */
+    deleteRowAction: function (event) {
+        var $editGrid = this.getEditGrid(event.currentTarget);
+        var submitSchemeId = '';
+        var ctrlrole = $('#submitScheme').attr('ctrlrole');
+        if (ctrlrole == 'promptBox') {
+            submitSchemeId = $('#submitScheme').shrPromptBox('getValue').id;
+        } else {
+            submitSchemeId = $('#submitScheme').val();
+        }
+        var ids = $editGrid.jqGrid('getSelectedRows');
+
+        if (!ids || ids.length === 0) {
+            shr.showWarning({ message: $.cmpIntegrateI18n.common.selectRowMust /* 请先选择表格中的数据! */ });
+            return;
+        }
+
+        var deleteRowIds = "";
+        if (ids) {
+            for (var i = ids.length - 1; i >= 0; i--) {
+                deleteRowIds += ids[i] + ",";
+                $editGrid.jqGrid('delRow', ids[i]);
+            }
+            //新增页面,清除缓存数据
+            $("#entry")[0].p.data = [];
+            this.clearDelEntryIdsFromDB(submitSchemeId, deleteRowIds);
+        }
+        var billId = $("#id").val();
+        //删除分录时如果这条数据已在数据库中,则会直接删除数据库记录,所以要重新计算单头的总工时和总金额
+        _self.remoteCall({
+            type: "post",
+            async: false,
+            method: "countHourAmount",
+            param: { "billId": billId },
+            success: function (res) {
+
+            }
+        });
+        this.countHourAmount();
+    },
+    submitAction: function (event) {
+        var _self = this;
+        if (_self.validate() && _self.verify()) {
+
+            var allRowData = $("#entry").jqGrid("getAllRowData");
+            // 获取当前日期
+            let currentDate = new Date();
+            // 获取本月的第一天
+            let firstDayOfCurrentMonth = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);
+            // 获取上个月的第一天
+            let firstDayOfLastMonth = new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, 1);
+            if (currentDate.getMonth() === 0) {
+                // 如果当前月份为1月,需要调整为上一年的12月
+                firstDayOfLastMonth.setFullYear(currentDate.getFullYear() - 1);
+            }
+
+            var calSchemeField = "submitScheme_el";
+            if (_self.getOperateState() == 'VIEW') {
+                calSchemeField = "submitScheme";
+            }
+            var calSchemeId = $("#" + calSchemeField).val();
+
+            var isPlanCheck = true;
+            var isCurrentDepart = true;
+            //获取是否勾选了 校验方案和离职方案
+            _self.remoteCall({
+                type: "post",
+                async: false,
+                method: "isTakeCheck",
+                param: { calSchemeId: calSchemeId },
+                success: function (res) {
+                    isPlanCheck = res.isPlanCheck;
+                    isCurrentDepart = res.isCurrentDepart;
+                }
+            });
+
+            //勾选离职方案
+            if (isCurrentDepart) {
+                var isDepartMonth = true;
+                var cmpOrgRelationId = "";
+                for (var i = 0; i < allRowData.length; i++) {
+                    cmpOrgRelationId = allRowData[i].cmpEmpORelation.id;
+                }
+                //判断当月是否有离职生效日期或兼职失效日期在本月的数据
+                _self.remoteCall({
+                    type: "post",
+                    async: false,
+                    method: "checkDepartDate",
+                    param: { cmpOrgRelationId: cmpOrgRelationId },
+                    success: function (res) {
+                        isDepartMonth = res.flag;
+                    }
+                });
+                //勾选离职方案后只能提交当月的数据
+                if (isDepartMonth) {
+                    for (var i = 0; i < allRowData.length; i++) {
+                        var effectDate = new Date(allRowData[i]["effectDate"]);
+                        if (!(effectDate.getFullYear() == currentDate.getFullYear() && effectDate.getMonth() == currentDate.getMonth())) {
+                            shr.showWarning({ message: "Only allow submission of the occurrence date of the current month" });
+                            return false;
+                        }
+                    }
+                } else {
+                    //当月没有离职或兼职失效数据时不允许提交
+                    shr.showWarning({ message: "The selected position does not have a resignation form that takes effect this month, or the expiration date of the part-time job is not within this month, so it cannot be submitted" });
+                    return false;
+                }
+            } else if (isPlanCheck) {
+                //校验XX号之后不允许提交
+                var submitDateMessage = '';
+                _self.remoteCall({
+                    type: "post",
+                    async: false,
+                    method: "checkSumbitDate",
+                    param: {},
+                    success: function (res) {
+                        submitDateMessage = res.resultMessage;
+                    }
+                });
+                if (submitDateMessage) {
+                    shr.showWarning({ message: submitDateMessage });
+                    return false;
+                }
+
+                //勾选校验方案只能提交上月的数据
+                for (var i = 0; i < allRowData.length; i++) {
+                    var effectDate = new Date(allRowData[i]["effectDate"]);
+                    if (!(effectDate >= firstDayOfLastMonth && effectDate < firstDayOfCurrentMonth)) {
+                        shr.showWarning({ message: "Only allow submission of work hours from the previous month" });
+                        return false;
+                    }
+                }
+            }
+
+            _self.preVerify(function () {
+                $.extend($.verifyRuleTool, _self.getVerifyOptions(submitNodeId))
+                $.verifyRuleTool.afterVeriyCallBack = function () {
+                    shr.showConfirm($.shrI18n.common.tips.submitConfirm, function () {
+                        _self.doSubmit(event, 'submit');
+                    });
+                };
+                $.verifyRuleTool.verifyInto();
+                $.verifyRuleTool.ip = "submitShemeBill"
+            }, 'submit')
+        }
+
+    },
+    initForm: function () {
+        var _self = this;
+        _self.assembleNewModelIdForAddNewOperate();
+        _self.setInitData();
+        _self.addCopyBtn();
+        _self.ChangeSubmitScheme_event();
+        _self.setSubmitSchemeState();
+        _self.auditPageAdjust();
+        shr.loadScript("/shr/addon/compensation/web/js/integrate/base/submitverify/cmpVerifyRuleTool.js")
+
+        //编辑和查看状态下初始化表格
+        if (_self.operateState == 'VIEW' || _self.operateState == 'EDIT') {
+            _self.getEditGridColModel();
+            _self.initF7TypeFieldArr();
+        }
+
+        if (_self.operateState == 'ADDNEW' || _self.operateState == 'EDIT') {
+            _self.setSubmitSchemeF7Filter();
+            _self.setDescriptionLength();
+        }
+        if (_self.operateState == 'ADDNEW' || _self.operateState == 'VIEW') {
+            $("#availableBudget").hide();
+        }
+
+        if (_self.operateState == 'VIEW') {
+            // 暂时先取消导出功能
+            _self.addViewBtn();
+            //排除员工自助提报的情景
+            if ('1' != $("#datasource").val()) {
+                _self.initJumpToPageButton();
+            }
+        }
+        // 字段授权
+        _self.checkNoPermFields();
+        // 根据提报方案是否关联了预算额度模板,来决定费用承担组织、预算年度,费用类型是否展示
+        _self.monitorBudget();
+    },
+    renderGridHeader: function (islocaldata) {
+        var _self = this;
+        var colModel = _self.colModel;
+        var colNames = _self.colNames;
+        var $entry = $('#entry');
+        //如果表头没数据,默认展示序号
+        if (!(colNames && colNames[0]) || !(colModel && colModel[0])) {
+            colNames = ['id'];
+            colModel = [{
+                "name": "id",
+                "label": "id",
+                "frozen": false,
+                "width": 150,
+                "align": "left",
+                "hidden": true,
+                "key": true,
+                "editable": false,
+                "sorttype": "",
+                "sortable": false,
+                "classes": "disabled"
+            }];
+        }
+
+        var ctrlrole = $entry.attr("ctrlrole");
+        //表格已初始化,销毁
+        if (ctrlrole) {
+            $entry.jqGrid('gridUnload');
+        }
+
+        var columnModel = '';
+        var hasFrozenColumn = false;
+        //拼接columnModel字符串
+        if (colModel && colModel[0]) {
+            colModel.forEach(function (element, index) {
+                if (element['frozen']) {
+                    hasFrozenColumn = true;
+                }
+                columnModel += element.name;
+                if (index != colModel.length - 1) {
+                    columnModel += ',';
+                }
+            });
+        }
+
+        // var grid_readonly = _self.operateState == 'VIEW';
+        var grid_readonly = _self.operateState === 'VIEW' || _self.operateState === 'EDIT' || _self.operateState === 'ADDNEW';
+        var grid_celledit = _self.operateState === 'EDIT' || _self.operateState === 'ADDNEW';
+
+        var url = _self.getGridDataRequestURL();
+        var dataGrid_option = {
+            url: url,
+            datatype: islocaldata == '1' ? "local" : "json",
+            colNames: colNames,
+            jsonReader: {
+                repeatitems: false
+            },
+            sorterItems: "",
+            colModel: colModel,
+            postData: $entry[0].p.postData,
+            customPager: '#gridPager',
+            hasPager: grid_readonly,
+            cellEdit: grid_celledit,
+            height: 'auto',
+            rowList: [50, 100, 200, 500],
+            autowidth: true,
+            viewrecords: true,
+            cellsubmit: "clientArray",
+            multiselect: true,
+            _type_: "EditGrid",
+            shrinkToFit: false,
+            mtype: "get",
+            recordtext: '({0}-{1})/{2}',
+            gridview: true,
+            pginput: true,
+            rownumbers: true,
+            footerrow: true,
+            userDataOnFooter: true,
+            clientFooter: false,
+            serverFooter: false,
+            sumColModel: [],
+            pagerpos: 'center',
+            recordpos: 'left',
+            pginputpos: 'right',
+            keyOptions: {
+                addNewRowForLastCell: false,
+                loop: true
+            }
+        };
+        //查看模式分页查询,编辑默认查全部
+        if (grid_readonly) {
+            dataGrid_option.rowNum = 50;
+        } else {
+            dataGrid_option.rowNum = 100000;
+        }
+        dataGrid_option.loadComplete = function (ret) {
+            $("#entry")[0].__isDirty = false;
+            if (grid_readonly) {
+                //初始化分页
+                if (!$("#gridPager")[0]) {
+                    var pagerDiv = '<div id="gridPager"></div>';
+                    if ($('.editGrid-toolbar')[0]) {
+                        $('.editGrid-toolbar').after(pagerDiv);
+                    } else {
+                        $('#entry_cont').prepend(pagerDiv);
+                    }
+                    $("#entry").setCustomPager("#gridPager");
+                }
+                var datas = $("#entry").jqGrid("getRowData");
+                if (datas && datas.length > 8) {   //表格数据超过一定数量,限制高度
+                    $("#entry").jqGrid('setGridHeight', 300);
+                }
+                shr.setIframeHeight();
+            }
+
+        };
+
+        dataGrid_option.onPaging = function () {
+        }
+
+        dataGrid_option.beforeReloadGrid = function () {
+            if (!grid_readonly) {
+                waf("#entry").find('tr.selected-row').click();
+                var data = waf("#entry").jqGrid('getGridParam', 'data');
+                data.length = 0;
+                waf("#entry").jqGrid('setGridParam', { data: $("#entry").jqGrid('getAllPageData'), datatype: 'local' });
+            }
+            shr.setIframeHeight();
+
+        }
+        //选择表格前设置姓名过滤条件
+        dataGrid_option.beforeSelectRow = function () {
+            _self.setNameF7Filter();
+        }
+        //审批时有滚动条时,把右侧DIV右移了一些挡住了列表的滚动条,现在先给列表的父标签一个右内边距,这样就不会被挡道。
+        $('#entry_cont').css('padding-right', '20px')
+        waf("#entry").jqGrid(dataGrid_option).jqGrid("setFrozenColumns");
+
+        waf("#entry").jqGrid("resizeGrid", {
+            base: waf("#entry"),
+            offset: 0
+        });
+        waf(window).resize(function () {
+            waf.ieHack.hackResize(function (e) {
+                waf("#entry").jqGrid("resizeGrid", {
+                    base: waf("#entry"),
+                    offset: 0
+                });
+            }, waf("#entry"));
+        });
+
+        $entry.jqGrid(dataGrid_option).trigger('reloadGrid');
+
+        //查看状态初始化分页
+        if (grid_readonly) {
+            _self.initPage();
+        }
+
+        if (_self.operateState == 'ADDNEW' || _self.operateState == 'EDIT') {
+            _self.setGridNameEvent();
+        }
+        if (!$("#entry_searchBar").length) {
+            _self.initCmpEntrySearchBar();
+        }
+    },
+    /**
+     * 分录增加复制按钮
+     */
+    addCopyBtn: function () {
+        var _self = this;
+        var str = [];
+        str.push('<button id="copyRow" type="button" onclick="jsBinder.copyRowAction" name="copyRow" class="shrbtn">');
+        str.push('Copy');
+        str.push('</button>');
+        str.push('<script>');
+        str.push('$(function() {');
+        str.push('  $("#copyRow").shrButton({');
+        str.push('  actionBinding: "copyRowAction",');
+        str.push('  subAction: "",');
+        str.push('  customData: "",');
+        str.push('  permItemId:""');
+        str.push('  });');
+        str.push('});');
+        str.push('</script>');
+        $("#deleteRow_entry").after(str.join(""));
+    },
+    copyRowAction: function (event) {
+        var $editGrid = this.getEditGrid(event.currentTarget);
+        var ids = $editGrid.jqGrid('getSelectedRows');
+        if (!ids || ids.length === 0) {
+            shr.showWarning({ message: $.cmpIntegrateI18n.common.selectRowMust /* 请先选择表格中的数据! */ });
+            return;
+        }
+
+        for (var i = 0; i < ids.length; i++) {
+            var getRowRealData = $("#entry").jqGrid("getRowRealData", ids[i]);
+            getRowRealData.id = '';
+            $("#entry").jqGrid("addRow", { data: getRowRealData });
+        }
+
+
+    }
+});

+ 52 - 0
patch/20250531/eas/server/deploy/easweb.ear/shr_web.war/addon/customer/web/js/shr/affair/hrman/PluralityDelBizBilllMultiEntryHrManEditExt.js

@@ -0,0 +1,52 @@
+//多人员工兼职终止单拓展  202503
+shr.defineClass( "shr.affair.hrman.PluralityDelBizBilllMultiEntryHrManEditExt", shr.affair.hrman.PluralityDelBizBilllMultiEntryHrManEdit, {
+
+ 
+
+	initalizeDOM : function () {
+		var self = this;
+		shr.affair.hrman.PluralityDelBizBilllMultiEntryHrManEditExt.superClass.initalizeDOM.call(this);
+		self.setBizBillInfoOsfName("getPersonPluralityDelBizBillInfoService");
+	},
+
+
+    assembleCustomRowData : function(rowdata, data, commonData, defaultValue){
+		var self = this;
+		if(commonData.company){
+			self.buildPositionFilter(commonData.person.id, commonData.company.id);
+		}
+		if(commonData.hrbizdefine[0].affairActionReason.length==1){
+			rowdata.affairActionReason=commonData.hrbizdefine[0].affairActionReason[0];
+		}
+		if(commonData.hrbizdefine[0].variationReason.length==1){
+			rowdata.variationReason=commonData.hrbizdefine[0].variationReason[0];
+		}
+		if(commonData.hrbizdefine[0].outEmpType.length==1){
+			rowdata.empType=commonData.hrbizdefine[0].outEmpType[0];
+		}
+        //202503 直接上级赋值
+        var personId =  rowdata.person.id ;
+		var positionId = rowdata.oldPosition.id ;
+        shr.callHandler({
+            handler : "com.kingdee.shr.affair.web.handler.hrman.FluctuationBizBillHrManEditHandlerEx",
+            action : 'getPartEmpOrgRelation',
+            async : false,
+            type : "POST",
+            param : {
+                    "personId" : personId,
+                    "positionId" : positionId
+                    },
+            success:function(data){
+                //【直属上级】
+                rowdata.ptlmanager = {id:data.leaderId,name:data.leaderName}
+                //【当前时薪】
+                rowdata.pthwage = data.hourlywage
+				//【 离职日期】
+				rowdata.bizDate = data.leftDate 
+
+            }
+        });
+		return rowdata;
+	},
+
+});

+ 400 - 0
patch/20250531/eas/server/deploy/easweb.ear/shr_web.war/addon/customer/web/js/shr/affair/hrman/empEnrollBizBillHrManEditExt.js

@@ -0,0 +1,400 @@
+var empTypeInfo = {};
+shr.defineClass("shr.affair.hrman.EmpEnrollBizBillHrManEditExt", shr.affair.hrman.EmpEnrollBizBillHrManEdit, {
+
+    initalizeDOM: function () {
+        var _self = this;
+        shr.affair.hrman.EmpEnrollBizBillHrManEditExt.superClass.initalizeDOM.call(this);
+        if (this.operateState.toUpperCase() != 'VIEW') {
+            _self.nameChange();
+        }
+        if (this.operateState.toUpperCase() == 'ADDNEW') {
+            var selectId = shr.getUrlRequestParam("selectId");
+            if (!selectId) {
+                shr.remoteCall({
+                    method: 'getEmpNumber',
+                    async: false,
+                    success: function (res) {
+                        //人员类型
+                        _self.getField("entrys_empNumber").shrTextField('setValue', res.empNumber);
+                    }
+                });
+            }
+        }
+        _self.entrysFtorptF7Action();
+
+    },
+    /**
+     * 2、入职单需控“全职或兼职”字段为“兼职”时才允许填写;
+     */
+    entrysFtorptF7Action() {
+        if( $("#entrys_ftorpt").val()=="兼职"||$("#ftorpt").val()=="Part Time"){
+            $('#entrys_jobEndTime').shrDateTimePicker('enable');//或者设为disable
+            $("#entrys_jobEndTime").shrDateTimePicker('option', 'required', true);
+
+        }
+        $("#entrys_ftorpt").shrPromptBox("option", {
+            onchange: function (e, value) {
+                var current = value.current["BaseInfo.number"];
+                if (current == "PART"||value.current.name=='Part Time') {
+                    $('#entrys_jobEndTime').shrDateTimePicker('enable');//或者设为disable
+                    $("#entrys_jobEndTime").shrDateTimePicker('option', 'required', true);
+                }else{
+                    $('#entrys_jobEndTime').shrDateTimePicker('disable');//或者设为enable
+                    $("#entrys_jobEndTime").shrDateTimePicker('setValue', "");
+
+                }
+            }
+        })
+
+    },
+    nameChange: function () {
+        var that = this;
+        //监听文本域,数值控件的值变化
+        that.getField("entrys_surname").on("change", function () {
+            var surname = $("#entrys_surname").val();
+            surname = surname.toUpperCase();
+            that.getField("entrys_surname").shrTextField('setValue', surname);
+            //用户名赋值
+            that.updateUserName();
+            //姓名赋值
+            that.updateName();
+        });
+        that.getField("entrys_givenName").on("change", function () {
+            //用户名赋值
+            that.updateUserName();
+            //姓名赋值
+            that.updateName();
+
+        });
+        //中间名
+        that.getField("entrys_middleNames").on("change", function () {
+            //姓名赋值
+            that.updateName();
+
+        });
+        //本地名称
+        that.getField("entrys_localname").on("change", function () {
+            //姓名赋值
+            that.updateName();
+        });
+        //试用期开始时间
+        that.getField("entrys_bizDate").on("change", function () {
+            //预入职日期
+            var preEnterDate = $("#entrys_bizDate").val();
+            that.getField("entrys_trialStartDate").shrDateTimePicker('setValue', preEnterDate);
+            that.updateTransferDate();
+        });
+        //预计转正日期
+        that.getField("entrys_probation").on("change", function () {
+            that.updateTransferDate();
+
+        });
+
+
+    },
+
+    //用户名赋值
+    updateUserName: function () {
+        var that = this;
+        //用户名赋值
+        var surname = $("#entrys_surname").val();
+        var givenName = $("#entrys_givenName").val();
+        var userName = givenName + "." + surname;
+        if (userName.length > 20) {
+            if (surname != '') {
+                userName = givenName + "." + surname.slice(0, 1).toUpperCase();
+                if (userName.length > 20) {
+                    var startLength = userName.length - 20;
+                    userName = userName.substring(startLength, userName.length);
+                }
+            }
+        }
+        userName = userName.toLowerCase();
+        that.getField("entrys_userName").shrTextField('setValue', userName);
+        that.getField("entrys_email").shrTextField('setValue', userName + "@gtiit.edu.cn");
+    },
+
+
+    updateName: function () {
+        var that = this;
+        //姓
+        var surname = $("#entrys_surname").val();
+        //名
+        var givenName = $("#entrys_givenName").val();
+        //本地名称
+        var localName = $("#entrys_localname").val();
+
+        var name = "";
+        if (givenName != '') {
+            name = givenName + " ";
+        }
+        if (surname != '') {
+            name = name + surname + " ";
+        }
+        if (localName != '') {
+            name = name + localName + " ";
+        }
+        //姓名
+        that.getField("entrys_empName").shrTextField('setValue', name);
+    },
+
+
+    //预计转正日期
+    updateTransferDate: function () {
+        var that = this;
+        //预入职日期
+        var preEnterDate = $("#entrys_bizDate").val();
+        //试用期(月)
+        var tryMonth = $("#entrys_probation").val();
+        let date = new Date(preEnterDate);  // 创建一个 Date 对象	
+        if (tryMonth != '' && tryMonth > 0 && preEnterDate != null) {
+            tryMonth = parseInt(tryMonth);
+            date.setMonth(date.getMonth() + tryMonth);
+            employeeType = { id: "00000000-0000-0000-0000-000000000002A29E85B3", name_l1: "On Probation", name: "试用员工", name_l2: "试用员工" };
+        } else {
+            date = null;
+            employeeType = { id: "00000000-0000-0000-0000-000000000001A29E85B3", name_l1: "Permanent Employee", name: "正式员工", name_l2: "正式员工" };
+        }
+        if (empTypeInfo != null) {
+            employeeType = empTypeInfo
+        }
+        that.getField("entrys_planFormalDate").shrDateTimePicker('setValue', date);
+        $("#entrys_empType").shrPromptBox("setValue", employeeType);
+    },
+
+
+    /**
+     * 预入职下推初始化数据
+     */
+    preEntryInit: function () {
+        var _self = this;
+        var selectId = shr.getUrlRequestParam("selectId");
+
+        shr.remoteCall({
+            url: shr.getContextPath() + "/dynamic.do?method=getPreEntryInitData&uipk=" + jsBinder.uipk,
+            type: "POST",
+            param: {
+                "billId": selectId,
+                "tempId": _self.getTemporaryPersonId()//传入tempId以复制一个预入职头像都入职单
+            },
+            success: function (res) {
+                if (res.preEntryInfo != undefined) {
+                    empTypeInfo = res.preEntryInfo.empType;
+                    var preEntryId = res.preEntryInfo.id;
+                    var talentId = res.preEntryInfo.talent.id;
+                    if (res.preEntryInfo.sourceBillType.value == 2) {//offer来的预入职单
+                        shr.callService({
+                            serviceName: 'getPreEntryInfoOSF',
+                            param: { preEntryId: preEntryId },
+                            async: false,
+                            success: function (data) {
+                                _self.initParameterByRecurit("entrys_probation", data.probationPeriod == undefined ? null : data.probationPeriod, false, 'numberField');//试用期
+                                _self.initParameterByRecurit("entrys_empType", data.employeeType == undefined ? null : data.employeeType, true);//用工关系状态
+                                _self.initParameterByRecurit("entrys_jobStartDate", data.jobStartDate == undefined ? null : data.jobStartDate.substring(0, 10), false);//参加工作日期
+                            }
+                        });
+                    }
+                    if (res.preEntryInfo.hrOrgUnit != undefined) {
+                        //基础资料在HR组织设置前先设置,可以接受HR组织可使用权限校验
+                        _self.initParameterByRecurit("entrys_variationReason", res.preEntryInfo.enrollSource, true);//招聘来源反写变动原因,,handler中用招聘来源按编码匹配查出变动原因放到enrollSource中
+                        var hrOrgUnitObj = { id: res.preEntryInfo.hrOrgUnit.id, name: res.preEntryInfo.hrOrgUnit.name }
+                        _self.initParameterByRecurit("hrOrgUnit", hrOrgUnitObj, true);//人事业务组织
+                    }
+
+                    if (res.preEntryInfo.talent != undefined) {
+                        _self.initParameterByRecurit('entrys_IDCardNo', res.preEntryInfo.talent.idCardNO, false);//身份证号码
+                        _self.initParameterByRecurit("entrys_passportNo", res.preEntryInfo.talent.passportNO, false);//护照号码
+                    }
+                    _self.getField("entrys.preEntryID").val(selectId);//隐藏预入职ID字段发送至后端
+                    if (res.errorMsg) {
+                        shr.showError({
+                            message: data.errorMsg,
+                            hideAfter: null
+                        });
+                    } else if (res.personExist && res.personExist == "true") {
+                        $("#entrys_enrollAgain").val(1);
+                        if (res.personOldInfo) {
+                            //编码,如果使用原编码,才设置原编码
+                            //osf取回来的 data.personOldInfo.useOldNumber 值为枚举值{0:使用原编码, 1:使用新编码}
+                            if (!res.personOldInfo.useOldNumber && res.personOldInfo.empNumber) {
+                                $("#entrys_empNumber").val(res.personOldInfo.empNumber);
+                                $("#entrys_useOldNumber").val(1);
+                                _self.getField('entrys_empNumber').shrTextField('disable');
+                            }
+                            else if (res.personOldInfo.useOldNumber) {
+                                $("#entrys_useOldNumber").val(0);
+                            }
+                            //参加工作日期
+                            if (res.personOldInfo.jobStartDate) {
+                                $("#entrys_jobStartDate").shrDateTimePicker('setValue', res.personOldInfo.jobStartDate);
+                            }
+                        }
+                        _self.swapHrbizDefineInfo(_self._hrBizdefine_enrollAgain);
+                        _self.getField("entrys.hrBizDefine").shrPromptBox("setFilter", _self._default_hrBizDefine_filter + " and bizDefineType = 16");//只能选择再入职变动操作
+                        _self.showEnrollAgainMsg(res);
+                    }
+                    //职位放在加载再入职信息之后,避免再入职使用原编码时又按职位刷编码
+                    _self.initParameterByRecurit("entrys_position", res.preEntryInfo.position, true);//入职职位
+                    //根据入职日期填写入职时间
+                    var effdt = _self.getField('entrys.bizDate').shrDateTimePicker("getValue");
+                    _self.getField('entrys.bizTime').shrDateTimePicker('setValue', effdt);
+                    //本地名称
+                    _self.getField("entrys_localname").shrTextField('setValue', res.preEntryInfo.localname_l2);
+                    //姓
+                    _self.getField("entrys_surname").shrTextField('setValue', res.preEntryInfo.surname_l2);
+                    //中间名
+                    _self.getField("entrys_middleNames").shrTextField('setValue', res.preEntryInfo.middlenames_l2);
+                    //名
+                    _self.getField("entrys_givenName").shrTextField('setValue', res.preEntryInfo.givenname_l2);
+                    //员工编码
+                    _self.getField("entrys_empNumber").shrTextField('setValue', res.preEntryInfo.empNumber);
+                    //用户名
+                    _self.getField("entrys_userName").shrTextField('setValue', res.preEntryInfo.username_l2);
+                    //工作邮箱
+                    _self.getField("entrys_email").shrTextField('setValue', res.preEntryInfo.workemail);
+                    //私人邮箱
+                    _self.getField("entrys_pemail").shrTextField('setValue', res.preEntryInfo.email);
+                    //试用期
+                    _self.getField("entrys_probation").shrTextField('setValue', res.preEntryInfo.tryMonth);
+                    //教师年假额度
+                    _self.getField("entrys_faentitlement").shrTextField('setValue', res.preEntryInfo.faentitlement);
+                    //教师病假额度
+                    _self.getField("entrys_fsentitlement").shrTextField('setValue', res.preEntryInfo.fsentitlement);
+                    //教师病假最高额度
+                    _self.getField("entrys_fsmentitlement").shrTextField('setValue', res.preEntryInfo.fsmentitlement);
+                    //Admin Title
+                    _self.getField("entrys_admintitle").shrTextField('setValue', res.preEntryInfo.admintitle);
+                    //时薪
+                    _self.getField("entrys_hwage").shrTextField('setValue', res.preEntryInfo.hwage);
+                    //试用期开始日期
+                    _self.getField("entrys_trialStartDate").shrDateTimePicker('setValue', res.preEntryInfo.trialStartDate);
+                    //居民
+                    $('#entrys_resident').shrSelect('setValue', res.preEntryInfo.resident);
+                    //支付币种
+                    $('#entrys_paycurrency').shrSelect('setValue', res.preEntryInfo.paycurrency);
+                    //兼职类人员任职结束时间
+                    _self.getField("entrys_jobEndTime").shrDateTimePicker('setValue', res.preEntryInfo.jobEndTime);
+                    shr.remoteCall({
+                        method: 'getEmpPreEntryData',
+                        async: false,
+                        param: {
+                            "billId": selectId
+                        },
+                        success: function (response) {
+                            //人员类型
+                            $("#entrys_persontype").shrPromptBox("setValue", { id: response.personTypeId, name: response.personTypeName });
+                            //员工类别
+                            $("#entrys_wcategory").shrPromptBox("setValue", { id: response.wcategoryId, name: response.wcategoryName });
+                            //全职或兼职
+                            $("#entrys_ftorpt").shrPromptBox("setValue", { id: response.ftorptId, name: response.ftorptName });
+                            if(response.ftorptName=='Part Time'){
+                                $('#entrys_jobEndTime').shrDateTimePicker('enable');//或者设为disable
+
+                            }
+                            //直接上级
+                            $("#entrys_lmanager").shrPromptBox("setValue", { id: response.lmanagerId, name: response.lmanagerName });
+                            //Academic Title
+                            $("#entrys_academictitle").shrPromptBox("setValue", { id: response.academictitleId, name: response.academictitleName });
+                            //job2
+                            $("#entrys_jobs").shrPromptBox("setValue", { id: response.jobsId, name: response.jobsName });
+                            //纳税方式
+                            $("#entrys_rmethod").shrPromptBox("setValue", { id: response.rmethodId, name: response.rmethodName });
+                            //职等
+                            $("#entrys_jobGrade").shrPromptBox("setValue", { id: response.jobId, name: response.jobName });
+                            //签发国家
+                            $("#entrys_countryRegion").shrPromptBox("setValue", { id: response.countryId, name: response.countryName });
+                            //签证类型
+                            $("#entrys_credentialsType").shrPromptBox("setValue", { id: response.credentTypeId, name: response.credentTypeName });
+                        }
+                    });
+
+                }
+            }
+        });
+        // 预入职转入职后端赋值,需要在前端主动触发一些change事件
+        _self.autoChange();
+    },
+
+    setEnrollAgainInfo: function (data) {
+        var that = this;
+        //根据身份证号和护照号将查出来的再入职人员信息填充到页面
+        if (data && data.errorMsg) {
+            shr.showError({
+                message: data.errorMsg,
+                hideAfter: null
+            });
+        } else if (data && data.personExist == "true") {
+            that.fillEnrollPersonDataByNo(data);
+            that.swapHrbizDefineInfo(that._hrBizdefine_enrollAgain);
+            that.getField("entrys.hrBizDefine").shrPromptBox("setFilter", that._default_hrBizDefine_filter + " and bizDefineType = 16");//只能选择再入职变动操作
+            that.showEnrollAgainMsg(data);
+
+            var idEntity = "";
+            if (data.personOldInfo.idCardNo) {
+                idEntity = data.personOldInfo.idCardNo;
+            } else {
+                idEntity = data.personOldInfo.passportNo;
+            }
+            shr.remoteCall({
+                method: 'getPersonName',
+                async: false,
+                param: {
+                    "idEntity": idEntity
+                },
+                success: function (response) {
+                    if (response.userName) {
+                        //姓
+                        $("#entrys_surname").shrTextField("setValue", response.surName);
+                        //本地名称
+                        $("#entrys_localname").shrTextField("setValue", response.localName);
+                        //中间名
+                        $("#entrys_middleNames").shrTextField("setValue", response.middleName);
+                        //名
+                        $("#entrys_givenName").shrTextField("setValue", response.givenName);
+                        //用户名
+                        $("#entrys_userName").shrTextField("setValue", response.userName);
+                    }
+                }
+            });
+        } else {
+            // 如果之前输入身份证带出过再入职人员才处理,避免正常情况下多次修改身份证也处理了以下逻辑
+            if ($("#entrys_enrollAgain").val() == "1" || $("#entrys_enrollAgain").val() == "true") {
+                $("#entrys_enrollAgain").val(0);
+                // 父类中存储了第一次加载的变动操作,将变动操作还原
+                that.swapHrbizDefineInfo(that._currentHRBizdefine.id);
+                that.getField("entrys.hrBizDefine").shrPromptBox("setFilter", that._default_hrBizDefine_filter);//还原默认变动操作可选范围
+            }
+            // 如果之前输入身份证带出过再入职人员并且是原编码,才处理,避免正常情况下多次修改身份证也处理了以下逻辑
+            if ($("#entrys_useOldNumber").val() == "1" || $("#entrys_useOldNumber").val() == "true") {
+                $("#entrys_useOldNumber").val(0);
+                // 没有编码规则,清空编码
+                if (that._isAutoNumber == false) {
+                    that.getField('entrys_empNumber').shrTextField('enable');
+                    that.getField('entrys_empNumber').val('');
+                }
+                // 有编码规则,需要看职位有没有选择
+                if (that._isAutoNumber == true) {
+                    // 如果职位没有选择,则清空编码
+                    if ($.isEmptyObject($("#entrys_position_el").val())) {
+                        that.getField('entrys_empNumber').val('');
+                    }
+                    // 如果职位不为空,重新按照编码规则刷新编码
+                    if (!$.isEmptyObject($("#entrys_position_el").val())) {
+                        that.refreshNumber($("#entrys_position_el").val());
+                    }
+                }
+            }
+
+            //      	//姓
+            // $("#entrys_surname").shrTextField("setValue", "");
+            // //本地名称
+            // $("#entrys_localname").shrTextField("setValue", "");
+            // //中间名
+            // $("#entrys_middleNames").shrTextField("setValue", "");
+            // //名
+            // $("#entrys_givenName").shrTextField("setValue", "");
+        }
+    }
+
+
+});

+ 94 - 0
patch/20250531/eas/server/deploy/easweb.ear/shr_web.war/addon/customer/web/js/shr/affair/hrman/pluralityDelBizBilllHrManEditExt.js

@@ -0,0 +1,94 @@
+
+shr.defineClass("shr.affair.hrman.PluralityDelBizBillHrManEditExt", shr.affair.hrman.PluralityDelBizBillHrManEdit, {
+
+    initalizeDOM: function () {
+        var _self = this;
+        shr.affair.hrman.PluralityDelBizBillHrManEditExt.superClass.initalizeDOM.call(this);
+        if (this.operateState.toUpperCase() != 'VIEW') {
+            _self.positionChange();
+        }
+    },
+
+    //兼职职位监控
+    positionChange: function () {
+        var self = this;
+
+        self.getField("entrys_oldPosition").on("change", function () {
+            var personId = $("#entrys_person_el").val();
+            var positionId = $("#entrys_oldPosition_el").val();
+            shr.callHandler({
+                handler: "com.kingdee.shr.affair.web.handler.hrman.FluctuationBizBillHrManEditHandlerEx",
+                action: 'getPartEmpOrgRelation',
+                async: false,
+                type: "POST",
+                param: {
+                    "personId": personId,
+                    "positionId": positionId
+                },
+                success: function (data) {
+                    //【直属上级】
+                    $("#entrys_ptlmanager").shrPromptBox("setValue", { id: data.leaderId, name: data.leaderName });
+                    //【当前时薪】
+                    self.getField("entrys_pthwage").shrTextField('setValue', data.hourlywage);
+                    // 【离职日期】
+                    // self.getField("entrys_bizDate").shrDateTimePicker('setValue',data.leftDate);
+                }
+            });
+
+        });
+    },
+    positionF7ChangeEvent: function () { //监听岗位的变化
+        var _self = this;
+        $("#entrys_oldPosition").shrPromptBox("option", {
+            onchange: function (e, value) {
+                _self.clearPluralityPositionF7AndAssociateF7();
+                if (value.current == null || value.current.id == null) {
+                    return true;
+                }
+                var positionId = value.current.id;
+                var personId = _self.getFieldValue("entrys.person");
+                if (!personId) {
+                    return true;
+                }
+                // 开始结束时间 赋值
+                var effdt = value.current["EmpPosOrgRelation.EFFDT"];
+                $("#entrys_beginDate").shrDateTimePicker("setValue", effdt)
+                var leffdt = value.current["EmpPosOrgRelation.LEFFDT"];
+                $("#entrys_bizDate").shrDateTimePicker("setValue", leffdt)
+                var adminOrgName = value.current["adminorgunit.department.name"];
+                // $("#entrys_oldPosition_adminOrgUnit_department").shrDateTimePicker("setValue",adminOrgName)
+
+
+
+
+                //			 	var positionAndAdminOrgData = _self.getPositionById(positionId);
+                //			 	_self.updateAdminF7Data(positionAndAdminOrgData);
+                //取兼职开始时间等相关信息
+                _self.remoteCall({
+                    method: "getPluralityPositionData", //获取员工任职岗位,初始化兼职岗位
+                    param: {
+                        positionId: positionId,
+                        personId: personId
+                    },
+                    success: function (response) {
+                        if (response.adminorgunit != null) {
+                            _self.updatePluralityPositionData(response);
+                        } else {
+                            _self.remoteCall({
+                                method: "getPluralityPositionDataEx", //获取员工任职岗位,初始化兼职岗位
+                                param: {
+                                    positionId: positionId,
+                                    personId: personId
+                                },
+                                success: function (response) {
+                                    _self.updatePluralityPositionData(response);
+                                }
+                            });
+                        }
+
+                    }
+                });
+            }
+        });
+    },
+});

+ 382 - 0
patch/20250531/eas/server/deploy/easweb.ear/shr_web.war/addon/customer/web/js/shr/emp/empPreEntryEditExt.js

@@ -0,0 +1,382 @@
+shr.defineClass('shr.emp.EmpPreEntryEditExt',shr.emp.EmpPreEntryEdit , {
+	
+	
+	
+	initalizeDOM: function () {
+		var _self = this;
+		shr.emp.EmpPreEntryEditExt.superClass.initalizeDOM.call(this);
+		if(this.operateState.toUpperCase() != 'VIEW'){
+			_self.nameChange();
+			_self.visaChange(); 
+		}
+		_self.ftorptF7Action();
+
+	},
+	 /**
+     * 2、入职单需控“全职或兼职”字段为“兼职”时才允许填写;
+     */
+	 ftorptF7Action() {
+		if($("#ftorpt").val()=="兼职"||$("#ftorpt").val()=="Part Time"){
+			$('#jobEndTime').shrDateTimePicker('enable');//或者设为disable
+			$("#jobEndTime").shrDateTimePicker('option', 'required', true);
+		}
+        $("#ftorpt").shrPromptBox("option", {
+            onchange: function (e, value) {
+                var current = value.current["BaseInfo.number"];
+                if (current == "PART"||value.current.name=='Part Time') {
+                    $('#jobEndTime').shrDateTimePicker('enable');//或者设为disable
+					$("#jobEndTime").shrDateTimePicker('option', 'required', true);
+
+                }else{
+                    $('#jobEndTime').shrDateTimePicker('disable');//或者设为enable
+                    $("#jobEndTime").shrDateTimePicker('setValue', "");
+
+                }
+            }
+        })
+
+    },
+	visaChange:function(){
+		var that = this;
+		//监听文本域,数值控件的值变化
+		$("#talent_birthday").on("change", function(){
+			if(that.checkAge()){
+				shr.showError({message:"Onboarding is not allowed for persons under 18 years old"});
+				return;
+			}
+			that.checkVisa();
+		});
+	},
+	//身份证变更事件处理
+	processIDCardNoChangeEvent: function () {
+		var self = this;
+
+		$("#" + self.getRealId('talent.idCardNO')).blur(function () {
+			var idCardNoValue = self.getFieldValue('talent.idCardNO');
+
+			//根据身份证取出生日期和性别,并且OSF校验,调用人事OSF,如要修改请联系人事开发
+			if (idCardNoValue) {
+				self._idCardNo_IsChanged = true;
+				self._idCardNo_IsPassed = false;
+			} else {
+				self._idCardNo_IsChanged = false;
+				self._idCardNo_IsPassed = true;
+				return;
+			}
+			var localLang = shr.getFieldLangByContext();
+			var personName = self.getFieldValue("name")[localLang];
+			shr.callService({
+				serviceName: 'getPersonIdCardNOInfoService',
+				param: {
+					idCardNO: idCardNoValue,
+					personId: "",
+					hrOrgUnitId: self.getFieldValue("hrOrgUnit"),
+					preEntryId: self.billId,
+					personName: personName
+				},
+				async: false,
+				success: function (data) {
+					self._isIdCardNoTrue = true;
+					self._idCardNo_IsPassed = true;
+					if (data.birthday) {
+						self.getField('talent.birthday').shrDateTimePicker('setValue', data.birthday);
+						self.calculateAge(data.birthday);
+						self.checkConstellationAndZodiac(data.birthday.split(" ")[0]);
+						if(self.checkAge()){
+							shr.showError({message:"Onboarding is not allowed for persons under 18 years old"});
+							return;
+						}else{
+							self.checkVisa();
+						}
+					}
+					if (data.gender_value) {
+						var value = data.gender_value;
+						self.getField('talent.gender').shrSelect('setValue', value);
+					}
+					_self.remoteCall({
+		                method: "checkIdEntity",
+		                param: {idCardNo:idCardNoValue}, 
+		                async: false,
+		                success: function(response) {
+		                    if(response.resultMessage){
+		                    	shr.showWarning({message:response.resultMessage});
+		                    }
+		                },
+		                error : function(){}
+		            });
+				}
+			});
+		});
+		$("#" + this.getRealId('talent.idCardNO')).keyup(function () {
+			self._idCardNo_IsChanged = true;
+			self._idCardNo_IsPassed = true;
+		});
+	},
+	nameChange:function(){
+		var that = this;
+		//监听文本域,数值控件的值变化
+		that.getField("surname").on("change", function(){
+			var surname =  $("#surname").val();
+			//全英校验
+			//var regex = /^[A-Za-z]+$/;
+			var regex = /^[A-Za-z\s]+$/;
+			if( !regex.test(surname)){
+				shr.showError({ message: "The first name must be in English" });
+			}
+			surname = surname.toUpperCase();
+			that.getField("surname").shrTextField('setValue',surname);
+			//用户名赋值
+			that.updateUserName();
+			//姓名赋值
+			that.updateName();
+			that.checkVisa();
+		});
+		that.getField("givenName").on("change", function(){
+			//用户名赋值
+			that.updateUserName();
+			//姓名赋值
+			that.updateName();
+			that.checkVisa();
+		});
+		
+		//本地名称
+		that.getField("LocalName").on("change", function(){
+			//姓名赋值
+			that.updateName();
+			that.checkVisa();
+		});
+		//试用期开始时间
+		that.getField("preEnterDate").on("change", function(){
+			//预入职日期
+			var preEnterDate =  $("#preEnterDate").val();
+			that.getField("trialStartDate").shrDateTimePicker('setValue',preEnterDate);
+			that.updateTransferDate();
+		});
+		//预计转正日期
+		that.getField("tryMonth").on("change", function(){
+			that.updateTransferDate();
+			
+		});
+		//职等过滤
+		that.getField("position").on("change", function(){
+			var positionId = $("#position_el").val();
+			shr.callService({
+				serviceName : 'getJobInfosByPositionService',
+				param : {
+					"positionId" : positionId
+				},
+				async:true,//职层职等可以异步更新
+				success: function(data) {
+					that.updateJobGrade(positionId,data);
+				}
+			});
+			$("#jobGrade").shrPromptBox("setValue", null);			
+		});
+		
+	},
+	
+	//职等过滤
+	updateJobGrade:function(currentId,data){
+		var self = this;
+		if(data){
+			var lowGradeObject = data.lowJobGrade;
+			var highGradeObject = data.highJobGrade;
+			var jobGradeModule = data.jobGradeModule;
+			if(lowGradeObject && highGradeObject ){
+				// 如果职位的最低职等=最高职等,F7只能选择一个
+				if(lowGradeObject.id ==highGradeObject.id){
+					 self.getField("jobGrade").shrPromptBox("setFilter","id ='"+lowGradeObject.id+"'");
+				}else if((lowGradeObject.index || lowGradeObject.index == 0) && (highGradeObject.index || highGradeObject.index == 0)){
+				   self.getField("jobGrade").shrPromptBox("setFilter", 
+							" index <="+highGradeObject.index+" and index >="+lowGradeObject.index+" and jobGradeModule.id='"+jobGradeModule.id+"'");
+				}
+			} else{
+				self.getField("jobGrade").shrPromptBox("setValueNoTrigger",null);
+				self.getField("jobGrade").shrPromptBox("setFilter", "index<-9999");//-9999 没有最低和最高则不要选到
+				
+			}
+		}
+	},
+	
+	//用户名赋值
+	updateUserName:function(){
+		var that = this;
+		//用户名赋值
+		var surname =  $("#surname").val();
+		var givenName = $("#givenName").val();
+		var userName = givenName + "." + surname;
+		if(userName.length > 20){
+			if(surname != '' ){
+				userName = givenName + "." + surname.slice(0,1).toUpperCase() ;
+				if(userName.length > 20){
+					var startLength = userName.length - 20;
+					userName = userName.substring(startLength,userName.length);
+				}	
+			}
+		}
+		userName = userName.toLowerCase();
+		that.getField("userName").shrTextField('setValue',userName);
+		that.getField("workemail").shrTextField('setValue',userName+"@gtiit.edu.cn");
+	},
+	
+	
+	updateName: function(){
+		var that = this;
+		//姓
+		var surname =  $("#surname").val();
+		//名
+		var givenName =  $("#givenName").val();
+		//本地名称
+		var localName =  $("#LocalName").val();
+		
+		var name = "";
+		if(givenName != ''){
+			name = givenName + " ";
+		}
+		
+		if(surname != ''){
+			name = name + surname + " ";
+		}
+		if(localName != ''){
+			name = name + localName + " ";
+		}
+		//姓名
+		that.getField("name").shrTextField('setValue',name);
+	},
+	
+	
+	//预计转正日期
+	updateTransferDate:function(){
+		var that = this;
+		//预入职日期
+		var preEnterDate =  $("#preEnterDate").val();
+		//试用期(月)
+		var tryMonth =  $("#tryMonth").val();
+		let date = new Date(preEnterDate);  // 创建一个 Date 对象	
+		if(tryMonth != '' && tryMonth > 0 && preEnterDate != null ){
+			tryMonth = parseInt(tryMonth);
+			date.setMonth(date.getMonth() + tryMonth);
+			employeeType = {id:"00000000-0000-0000-0000-000000000002A29E85B3", name_l1:"On Probation",name:"试用员工",name_l2:"试用员工"};
+		}else{
+			date = null;
+			employeeType = {id:"00000000-0000-0000-0000-000000000001A29E85B3", name_l1:"Permanent Employee",name:"正式员工",name_l2:"正式员工"};
+		}
+		that.getField("transferDate").shrDateTimePicker('setValue',date);
+		$("#empType").shrPromptBox("setValue", employeeType);
+	},
+	
+	
+	createBillAction:function(){
+		var self = this;
+		self.remoteCall({
+			method : 'createEmpBill',
+			async : false,
+			success:function(data){
+				shr.showInfo({message: "Test"+data});
+			}
+		});
+	},
+	verify: function () {
+		var self = this;
+		var beginDate = self.getFieldValue("talent.idCardBeginDate");
+		var endDate = self.getFieldValue("talent.idCardEndDate");
+		var idCardBeginDate = new Date(beginDate);
+		var idCardEndDate = new Date(endDate);
+		var localLang = shr.getFieldLangByContext();
+		var personName = self.getFieldValue("name")[localLang];
+		if (idCardBeginDate.getTime() > idCardEndDate.getTime()) {
+			shr.showError({
+				message: jsBizMultLan.emp_empPreEntryEdit_i18n_0
+			});
+			return false;
+		}
+
+		var idCardNO = self.getFieldValue("talent.idCardNO");
+		var passportNO = self.getFieldValue("talent.passportNO");
+		if(idCardNO == "" && passportNO == ""){
+			shr.showError({
+				message: jsBizMultLan.emp_empPreEntryEdit_i18n_8
+			});
+			return false;
+		}
+		if (idCardNO) {
+			var verifyFlag = false;
+			shr.callService({
+				serviceName: 'getPersonIdCardNOInfoService',
+				param: {
+					idCardNO: idCardNO,
+					personId: "",
+					hrOrgUnitId: self.getFieldValue("hrOrgUnit"),
+					preEntryId: self.billId,
+					personName: personName
+				},
+				async: false,
+				success: function (data) {
+					verifyFlag = true;
+				}
+			});
+			if(verifyFlag == false)
+				return false;
+		}
+		
+		if (passportNO){
+			var verifyFlag = false;
+			shr.callService({
+				serviceName: 'getPersonPassPortNOInfoService',
+				param: {
+					passportNO: passportNO,
+					personId: "",
+					preEntryId: self.billId,
+					personName: personName
+				},
+				async: false,
+				success: function (data) {
+					verifyFlag = true;
+				}
+			});
+			if(verifyFlag == false)
+				return false;
+		}
+		if(self.checkAge()){
+			shr.showError({message:"Onboarding is not allowed for persons under 18 years old"});
+			return false;
+		}
+
+		return true;
+	},
+	checkVisa:function(){
+		var name =  $("#name").val().trim();
+		var birthday =  $("#talent_birthday").val();
+		if(name && birthday){
+			_self.remoteCall({
+                method: "checkIdEntity",
+                param: {name:name,birthday:birthday}, 
+                async: false,
+                success: function(response) {
+                    if(response.resultMessage){
+                    	shr.showWarning({message:response.resultMessage});
+                    }
+                },
+                error : function(){}
+            });
+		}
+	},
+	checkAge:function(){
+		var birthday =  $("#talent_birthday").val();
+		if(birthday){
+			var bomDate = new Date(birthday);
+			var today = new Date();
+		    // 计算年份差异
+		    var yearDiff = today.getFullYear() - bomDate.getFullYear();
+		    // 如果出生日期在今年之后,则减去年份差异
+		    if (today < new Date(today.getFullYear(), bomDate.getMonth(), bomDate.getDate())) {
+		        yearDiff--;
+		    }
+		    if (yearDiff >= 18) {
+			    return false;
+			} else {
+			    return true;
+			}
+		}
+	}
+});