_this.pageinit = function () { newPageInit() } // 在页面初始化加载之后 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() }) }) // 【请假类型】F7过滤, _this.holidayIdList是接口返回的过滤数据,再依据这个过滤F7 function filterLeaveTypeF7(index) { var filterStr = _this.holidayIdList.join('\',\'') mbos('entries_sourceHolidayType', index).attr('dynamicFilter', 'id in (\'' + filterStr + '\')'); // 动态添加过滤 } // 哺乳假F7 function filterBreastTypeF7(index) { mbos('entries.bfType', index).attr('dynamicFilter', 'state = 1'); // 动态添加过滤 } // 分录渲染后 mbos('entries').bind('afterRendered', function (e) { _this.leaveLengthTitle = mbos('entries_leaveLength_0').attr('title').split('(')[0] // 获取请假时长的标题 getHolidayType(e) multiLangField(e.index)// 兼容多语言字段回显的问题 // 初始化审批流 _this.getNextPerson(); }) // 初始化审批流 _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 () { } }); } }) } // 提交前增加校验,R20240625-5062 计算时长为0、手动修改为大于0时,增加不允许提交校验 _this.verify = function(action){ var flag = true; var params = getModel(-1, action); $.each(params.entries, function(i,item){ if(item.leaveLength > item.realLeaveLength){ mbos.ui.showInfo('请假长度只能改小,不能改大。'); flag = false; return false; } }) return flag; } // 保存按钮 _this.save = function (event) { // R20240625-5062 计算时长为0、手动修改为大于0时,增加不允许提交校验 if(!_this.verify('save')){ return false; } var params = getModel(-1, 'save') // 封装model,不走common的封装 baseInterface('save', toView, -1, params) // 调用保存接口 } // 提交按钮 _this.submit = function (event) { // R20240625-5062 计算时长为0、手动修改为大于0时,增加不允许提交校验 if(!_this.verify('submit')){ return false; } // 确认提交 弹框 mbos.ui.showConfirm({ title: localeResource.confirmSubmit, iconclass: "kdfont kdfont-zhuangtai_jingshi the_info", callback: function (data) { if (data == 0) { var params = getModel(-1, 'submit') // 封装model,不走common的封装 baseInterface('submit', toView, -1, params) // 调用提交接口 } } }); } // 点击“保存、提交” 跳转页面 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 }) } }); } } // 给隐藏的model赋值 // method: getNextPerson,获取审批人数据 function setModel(method) { if (typeof _this.operateState != "undefined" && (_this.operateState === "ADDNEW" || _this.operateState === "EDIT")) { var entries = _.cloneDeep(mbos('entity').data.entries) // lodash 深拷贝 entries.map(function (entry, i) { entry.person = easContext.person // position和adminOrgUnit取后端默认值,前端取的是人事档案的不是正确的值 // entry.position = easContext.position.id // entry.adminOrgUnit = easContext.position.adminOrgUnit.id getEntries(entry, i, method) // 各单据处理分录数据 }) return entries } } function getModel(index, method) { var entries = setModel() var obj = mbos('entity').data if (method === "save" || method === "submit"){ // 只在保存喝提交时修改枚举字段的存储,不然会清空表头的枚举字段 Object.keys(obj).map(key => { if (obj[key] && obj[key].isenum) {// 遍历枚举字段 依据后端需要 传参只传value obj[key] = obj[key].value } }) console.log(obj) } var model = { ...obj, entries: entries, } if (index >= 0) { // index 为-1 时代表取所有明细 model.entries = [entries[index]] } if ((method === "save" || method === "submit") && mbos.getRequestParams().abnormalId) { model.abnormalId = mbos.getRequestParams().abnormalId } var personList = mbos('personSelector1').$element ? mbos('personSelector1').getpersonList() : []; // 抄送人列表 model.ccPersonIds = personList.map(function (i) { return (i.personid || i.id) }).join(',') model.ccPerson = personList.map(function (i) { return (i.personid || i.id) }).join(',') return model } // 各单据处理分录数据的函数 // method: getNextPerson,获取审批人数据 function getEntries(entry, i, method) { if (!entry.bfType) entry.bfType = '' var halfData = _this['isHalf' + i] if (halfData && entry.beginTime && !entry.beginTime.split(' ')[1] && mbos('beginHalf', i).value().value) { // 页面显示的是上午下午,但是传参得拼接上时分 格式为年月日时分 entry.beginTime = entry.beginTime + ' ' + (mbos('beginHalf', i).value().value === 'am' ? halfData.amBeginTime : halfData.pmBeginTime) entry.endTime = entry.endTime + ' ' + (mbos('endHalf', i).value().value === 'am' ? halfData.amEndTime : halfData.pmEndTime) } // 如果是哺乳假 非自定义的类型 结束时间需要拼接时分为23:59 var _holidayType = mbos('entries_sourceHolidayType', i).value() var _bfType = mbos('entries_bfType', i).value() if (_holidayType && _holidayType.name == localeResource.bf_holiday && _bfType && _bfType.name !== localeResource.Customized){ entry.beginTime += ' 00:00' entry.endTime += ' 23:59' } if(method == 'getNextPerson'){ entry.position = easContext.position; entry.adminOrgUnit = easContext.position.adminOrgUnit; if(entry.beginTime){ entry.beginTime = moment(entry.beginTime).format('YYYY-MM-DD HH:mm:ss'); } if(entry.endTime){ entry.endTime = moment(entry.endTime).format('YYYY-MM-DD HH:mm:ss'); } }else{ delete entry.position; delete entry.adminOrgUnit; } } // 获取请假类型 var getHolidayType = _.debounce(function (e) { var callback = function (res) { var list = res.data _this.holidayIdList = res.data.map(item => item.holidayTypeId.id) // 存储过滤后的请假类型F7数据 filterLeaveTypeF7(e.index) filterBreastTypeF7(e.index) // 请假类型数组 _this.holidayType = {} for (var i = 0; i < list.length; i++) { var typeId = list[i].holidayTypeId.id _this.holidayType[typeId] = { holidayPolicyId: list[i].holidayPolicyInfo.id, sourceUnit: list[i].unit, sourceHolidayType: list[i].holidayTypeId, description: list[i].description } } if (mbos.getRequestParams().type && mbos.getRequestParams().holidayTypeId){ // 从我的假期页面跳转过来,携带赋值假期类型 mbos('entries_sourceHolidayType', e.index).value({ id: decodeURIComponent(mbos.getRequestParams().holidayTypeId), name: mbos.getRequestParams().type }) } if (mbos('entries_sourceHolidayType', e.index).value()) { _this.typeChange({ index: e.index, new_value: mbos('entries_sourceHolidayType', e.index).value(), old_value: '' }) } } var date = mbos.getRequestParams().date || new Date() // 需要传参时间,默认为当天 或其他页面带过来的参数 var today = moment(date).format('YYYY-MM-DD') if (!mbos('entries_beginTime', e.index).value()) { mbos('entries_beginTime', e.index).value(today + ' 00:00') } if (!mbos('entries_endTime', e.index).value()) { mbos('entries_endTime', e.index).value(today + ' 23:59') } setModel() baseInterface('getHolidayTypeByPerson', callback, e.index) }, 0) // 接口计算请假时长 var getTimeLength = _.debounce(function (index) { var callback = function (res) { mbos('entries_leaveLength', index).value(res.data.leaveBillDays) // R20240625-5062 计算时长为0、手动修改为大于0时,增加不允许提交校验 mbos('entries_realLeaveLength', index).value(res.data.leaveBillDays) } var params = getModel(index) // 封装model,不走common的封装 var entry = mbos('entity').data.entries[index] if (entry.beginTime && entry.endTime && entry.sourceHolidayType) { baseInterface('getBillLength', callback, index, params) } }, 500) // 获取假期剩余额度单位 var getRemainLength = _.debounce(function (event) { var index = event.index var entry = mbos('entity').data.entries[index] delete entry.SourceHolidayType if (entry.beginTime && entry.endTime && entry.sourceHolidayType) { var callback = function (res) { if (!res.data) { $('#remainCard_' + index).css('display', 'none') return } if (res && res.data) { var type = _this.holidayType[mbos('entries_sourceHolidayType', index).value().id] $('#remainCard_' + index).css('display', 'flex') var sourceTypeName = type.sourceHolidayType.name == "年假" ? "本年度全年年假" : type.sourceHolidayType.name; document.getElementById('remainCard_' + index).innerText = `${sourceTypeName} ${localeResource.remained}${res.data.remainLimitVal}${type.sourceUnit.alias} ${localeResource.remainedDays}` } } setModel() baseInterface('getHolidayLimitByHolidayType', callback, index) } }, 200) // 根据时间判断 是否展示弹性算时长字段 var isElastic = _.debounce(function (index) { var callback = function (res) { if (res.data) { mbos('entries_isElasticCalLen', index).show() } else { mbos('entries_isElasticCalLen', index).hide() } } // TODO holidayPolicyId待添加 setModel(index) var entry = mbos('entity').data.entries[index] if (entry.beginTime && entry.endTime) { baseInterface('showIsElasticCalCtrl', callback, index) } }, 500) /** * 修改开始结束时间的格式 * YYYY-MM-DD : 非【自定义】的所有哺乳假类型 * YYYY-MM-DD HH:mm:未启用半天假的非哺乳假;【自定义】的哺乳假类型且未启用半天假; * YYYY-MM-DD AM/PM:启用半天假的非哺乳假、【自定义】的哺乳假类型且启用半天假 */ function beginEndFormat(format, index) { mbos('entries.beginTime', index).timeFormat(format) mbos('entries.endTime', index).timeFormat(format) } // 是否开启半天假 function isHalfHoliday(index, timeFormat) { var callback = function (res) { if (res.data && res.data.isHalfDayOff) { // 先赋值 在设置半天假 最后格式化时间,顺序不能变 _this['isHalf' + index] = res.data setHalfDay(index)// 设置开启半天假的样式 beginEndFormat('YYYY-MM-DD', index) } else { _this['isHalf' + index] = false hideHalfDay(index)// 隐藏半天假 beginEndFormat(timeFormat ? timeFormat : 'YYYY-MM-DD HH:mm', index) } } setModel() baseInterface('getSetIsCtrlHalfDayOff', callback, index) } // 设置开启半天假的样式 function setHalfDay(index) { $('#entries_beginTime_' + index).removeClass('col-xs-12').addClass('col-xs-9') $('#entries_endTime_' + index).removeClass('col-xs-12').addClass('col-xs-9') // mbos('beginHalf', index).show() // mbos('endHalf', index).show() $('#beginHalf_' + index).css("display", "block") $('#endHalf_' + index).css("display", "block") var half = { am: { alias: localeResource.AM, value: "am" }, pm: { alias: localeResource.PM, value: "pm" }, } var halfData = _this['isHalf' + index] // 半天假及时间字段 // 编辑时 根据时间判断 var startHM = halfData.pmBeginTime === mbos('entries_beginTime', index).value().split(' ')[1] ? half.pm : half.am var endHM = halfData.amEndTime === mbos('entries_endTime', index).value().split(' ')[1] ? half.am : half.pm mbos('beginHalf', index).value(startHM) mbos('endHalf', index).value(endHM) } // 隐藏半天假 function hideHalfDay(index) { $('#entries_beginTime_' + index).removeClass('col-xs-9').addClass('col-xs-12') $('#entries_endTime_' + index).removeClass('col-xs-9').addClass('col-xs-12') mbos('beginHalf', index).hide() mbos('endHalf', index).hide() } // 监听请假类型 _this.typeChange = function (event) { var index = event.index var entry = mbos('entity').data.entries[index] if (!event.new_value) return //清空 var type = _this.holidayType && _this.holidayType[event.new_value.id] if (type) { entry.sourceUnit = type.sourceUnit // 1是天 2是小时 entry.holidayPolicyId = type.holidayPolicyId entry.SourceHolidayType = type.sourceHolidayType.id } // 是否是哺乳假 if (mbos('entries_sourceHolidayType', index).value() && (mbos('entries_sourceHolidayType', index).value().id == "8r0AAAAMhrv9LVKY" || mbos('entries_sourceHolidayType', index).value().name == localeResource.bf_holiday)) { // 请假类型为【哺乳假】则显示 哺乳假类型、子女出生日期、产假结束日期 mbos('entries.bfType', index).show() var format = 'YYYY-MM-DD' if (mbos('entries_bfType', index).value()) { if(mbos('entries_bfType', index).value().name == localeResource.Customized){ format = 'YYYY-MM-DD HH:mm' } else { mbos('entries.childbirthday', index).show() mbos('entries.mLEndTime', index).show() } } else { // 如果哺乳假类型不存在则默认为自定义 mbos('entries_bfType', index).value({id: "8r0AAAA09p9IT3K3", name: localeResource.Customized}) format = 'YYYY-MM-DD HH:mm' } isHalfHoliday(index, format) // 判断是否启用半天假 } else {// 非哺乳假时间格式只有两种:【年月日时分】、【年月日 上/下午】。启用半天假时为【年月日 上/下午】,其他的都是【年月日时分】; // 其他类型则隐藏 mbos('entries.bfType', index).hide() mbos('entries_bfType', index).value('') mbos('entries.childbirthday', index).hide() mbos('entries.childbirthday', index).value('') mbos('entries.mLEndTime', index).hide() mbos('entries.mLEndTime', index).value('') isHalfHoliday(index) // 判断是否启用半天假 } if (entry.sourceUnit) { mbos('entries_leaveLength', index).attr('title', _this.leaveLengthTitle + `(${entry.sourceUnit.alias})`); } getTimeLength(index) getRemainLength(event) } // 监听 开始时间 _this.calTime1 = function (event) { getHolidayType(event) getTimeLength(event.index) isElastic(event.index) getRemainLength(event) } // 监听 结束时间 _this.calTime2 = function (event) { getHolidayType(event) getTimeLength(event.index) isElastic(event.index) getRemainLength(event) } // 监听 子女出生日期 _this.birthdayChange = function (event) { // 请假开始时间默认值:产假结束日期,再加1天; if (event.new_value) { var value = moment(mbos('entries_childbirthday', event.index).value()).add(1, 'years').format('YYYY-MM-DD') mbos('entries.endTime', event.index).value(value) } } // 监听 产假结束日期 _this.mlEndChange = function (event) { // 请假结束时间默认值:子女出生日期延后一年,再减1天; if (event.new_value) { var value = moment(mbos('entries_mLEndTime', event.index).value()).add(1, 'days').format('YYYY-MM-DD') mbos('entries.beginTime', event.index).value(value) } } // 监听 哺乳假类型 _this.bfTypeChange = function (event) { var index = event.index // 哺乳假类型是否为【自定义】 if (!mbos('entries_bfType', index).value()){ // 如果哺乳假类型不存在则默认为自定义 setTimeout(()=>{ mbos('entries_bfType', index).value({id: "8r0AAAA09p9IT3K3", name: localeResource.Customized}) }, 0) } if (mbos('entries_bfType', index).value() && (mbos('entries_bfType', index).value().id == "8r0AAAA09p9IT3K3" || mbos('entries_bfType', index).value().name == localeResource.Customized)) { // 【自定义】: 则不展示【子女出生日期、产假结束日期】 mbos('entries.childbirthday', index).value('') mbos('entries.childbirthday', index).hide() mbos('entries.mLEndTime', index).value('') mbos('entries.mLEndTime', index).hide() // 哺乳假类型为【自定义】时,启用半天假时为【年月日 上/下午】,其他的都是【年月日 时分】 isHalfHoliday(index) // 判断是否启用半天假 } else { // 非【自定义】的所有哺乳假类型 日期格式为年月日 beginEndFormat('YYYY-MM-DD', index) mbos('entries.childbirthday', index).show() mbos('entries.mLEndTime', index).show() } getTimeLength(event.index) } // 监听是否是弹性算时长 _this.isElasticChange = function (event) { getTimeLength(event.index) } // 更改半天假开始 _this.calTime3 = function (event) { getTimeLength(event.index) } // 更改半天假结束 _this.calTime4 = function (event) { getTimeLength(event.index) } // 时长更改时 做校验 _this.lengthChange = function(event){ var value = event.new_value // 判断是否等于小于0 if (!isNaN(parseFloat(value)) && value <= 0) { mbos.msgBox.showError(localeResource.lengthValid); setTimeout(()=>{ mbos('entries_leaveLength',event.index).value('') }) return } }