_this.pageinit = function () { newPageInit() } // 从其他页面跳过来时,获取日期 function setDate() { var date = moment(mbos.getRequestParams().date).format('YYYY-MM-DD') if (date && mbos.getRequestParams().operateState == 'ADDNEW') { mbos('entries_startTime', 0).value(date + ' 08:00') getStartEndTime(0) } } // 异地办公类型F7 传递变量 ,TeleOfficeType为异地办公类型数据源的id mbos('TeleOfficeType').bind('beforeLoad', function (e) { var params = setParams('getOtherOffsiteFilter', e.index) // 获取参数 mbos.variable.setValue("v_entry", encodeURIComponent(JSON.stringify(params))); //赋值给变量 }) // 交通工具F7 传递变量 ,AtsVehicle为交通工具数据源的id mbos('AtsVehicle').bind('beforeLoad', function (e) { var params = setParams('getTrafficFilter', e.index) // 获取参数 mbos.variable.setValue("v_entry", encodeURIComponent(JSON.stringify(params))); //赋值给变量 }) // 在页面初始化加载之后 mbos('page').bind('afterLoad', function () { _this.path = mbos.pageInfo.path// 轻应用的路径编码 例如 trip880 _this.detailPageCode = mbos.pageInfo.name.replace('Add', 'View') // 详情页面的编码 (个别页面可特殊处理直接写入) 例如 offsiteView.editui _this.operateState = mbos.getRequestParams().operateState // 'ADDNEW' 'EDIT' 'VIEW' _this.type = mbos.getRequestParams().type || ''; // team 团队考勤 // 单据说明 mbos('description').bind('click', function () { handleClickDesc() }) }) mbos('entries').bind('afterRendered', function (e) { multiLangField(e.index)// 兼容多语言字段回显的问题 _this.setDefaultValue(e.index); if (e.index == 0) { setDate() } //debugger; if(_this.type == 'team'){ mbos('entries_person',e.index).show(); mbos('entries_person',e.index).attr("mustinput",true) } // 出国(境)事由控制具体事由必填 _this.controlRemarkRequired(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 () { } }); } }) } // 设置默认值 _this.setDefaultValue = function(index){ var type = mbos.getRequestParams().type; var teleOfficeType = mbos('entries_teleOfficeType',index).value(); if(!teleOfficeType || type==="team"){ mbos('entries_teleOfficeType',index).value({ bosType: "C543D2BA", id: "rqRfuUU1RuGNkFYUz/SeksVD0ro=", name: "其它外出单", number: "0003" }) } } // 提交前增加校验 _this.verify = function(action){ var flag = true; var entries = mbos('entity').data.entries $.each(entries, function(i,item){ if(item.startTime >= item.endTime){ mbos.ui.showInfo('开始时间应小于结束时间'); flag = false; return false; } if(item.days === 0){ mbos.ui.showInfo('天数不能为0'); flag = false; return false; } }) return flag; } // 保存按钮 _this.save = function (event) { if(!_this.verify()){ return false; } if(!_this.validateRemarkRequired()){ return false; } setModel() //debugger var param = getModel('', 'save'); if(_this.type == 'team'){ param.assistBill = 1; param.permItemId = 'e87c4069-0622-47ed-b592-22bbe0cb1321PERMITEM'; } baseInterface('save', toView, '', param) // 调用保存接口 } // 提交按钮 _this.submit = function (event) { if(!_this.verify()){ return false; } if(!_this.validateRemarkRequired()){ return false; } // 确认提交 弹框 mbos.ui.showConfirm({ title: localeResource.confirmSubmit, iconclass: "kdfont kdfont-zhuangtai_jingshi the_info", callback: function (data) { if (data == 0) { setModel() //debugger var param = getModel('', 'submit'); if(_this.type == 'team'){ param.assistBill = '1'; param.permItemId = 'e87c4069-0622-47ed-b592-22bbe0cb1321PERMITEM'; } baseInterface('submit', toView, '', param, _this.type) // 调用提交接口 } } }); } // 点击“保存、提交” 跳转页面 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, type: _this.type }) } }); } } // 给隐藏的model赋值 function setModel(method) { if (typeof _this.operateState != "undefined" && (_this.operateState === "ADDNEW" || _this.operateState === "EDIT")) { var entries = mbos('entity').data.entries entries.map(function (entry,i) { if(_this.type != 'team'){ entry.person = easContext.person } // entry.position = easContext.position.id // entry.adminOrgUnit = easContext.position.adminOrgUnit.id // mbos('entries_person',i).value(easContext.person); // mbos('entries_adminOrgUnit',i).value(easContext.position.adminOrgUnit); // mbos('entries_position',i).value(easContext.position); entry.hours = mbos('hours',i).value(); getEntries(entry,method) // 各单据处理分录数据 }) return entries; } } // 各单据处理分录数据的函数 function getEntries(entry,method) { // 给时间点赋值 entry.startTimeHMS = entry.startTime entry.endTimeHMS = entry.endTime if(method == 'getNextPerson'){ entry.position = easContext.position.id; entry.adminOrgUnit = easContext.position.adminOrgUnit.id; if(entry.startTime){ entry.startTime = moment(entry.startTime).format('YYYY-MM-DD HH:mm:ss'); } if(entry.endTime){ entry.endTime = moment(entry.endTime).format('YYYY-MM-DD HH:mm:ss'); } if(entry.startTimeHMS){ entry.startTimeHMS = moment(entry.startTimeHMS).format('YYYY-MM-DD HH:mm:ss'); } if(entry.endTimeHMS){ entry.endTimeHMS = moment(entry.endTimeHMS).format('YYYY-MM-DD HH:mm:ss'); } if(entry.startTimeDate){ entry.startTimeDate = moment(entry.startTimeDate).format('YYYY-MM-DD HH:mm:ss'); } if(entry.endTimeDate){ entry.endTimeDate = moment(entry.endTimeDate).format('YYYY-MM-DD HH:mm:ss'); } }else{ delete entry.position; delete entry.adminOrgUnit; } } // 计算单据时长 function getTimeLength(index) { var callback = function (res) { mbos('entries_days', index).value(res.data.days); mbos('hours', index).value(res.data.hours); } setModel(index) var entry = mbos('entity').data.entries[index] if (entry.endTime && entry.startTime) { baseInterface('getBillLength', callback, index) } } // 根据时间判断 是否展示弹性算时长字段 function isElastic(index) { var callback = function (res) { if (res.data) { mbos('entries_isElasticCalLen', index).show() } } setModel(index) var entry = mbos('entity').data.entries[index] if (entry.endTime && entry.startTime) { baseInterface('showIsElasticCalCtrl', callback, index) } } // 获取整天的开始、结束时间 function getStartEndTime(i) { var callback = function (res) { if(res.data.beginTime || res.data.endTime){ mbos('entries_startTime', i).value(moment(res.data.beginTime).format('YYYY-MM-DD HH:mm')) mbos('entries_endTime', i).value(moment(res.data.endTime).format('YYYY-MM-DD HH:mm')) } } if (mbos('entries_startTime', i).value() || mbos('entries_endTime', i).value()){ setModel(i) var params = _.cloneDeep(mbos('entity').data) var endTime = params.entries[i].endTime if (endTime && endTime.includes('00:00')) { // 防止结束日期会一直触发 params.entries[i].endTime = moment(endTime).subtract(1, "minutes").format("YYYY-MM-DD HH:mm") } // 【BT-01684276】改为传一条分录数据 params.entries = [params.entries[i]]; baseInterface('getAllDayBeginAndEndTime', callback, i, params) } } // 如果是整天出差 则使用date;否则使用datetime,同时清空时长 function recalcTime(event) { mbos('entries_days', event.index).value('') if (String(event.new_value) == 'true') { var entry = mbos('entity').data.entries[event.index] if (entry.endTime || entry.startTime) { getStartEndTime(event.index) // 获取pc端配置的起止时间 // _this.startHadCalculate = true // 阻止二次触发 异地办公单整天时 开始时间触发问题 // _this.endHadCalculate = true // 阻止二次触发 } } } // 计算时长 _this.calTime1 = function (event) { getTimeLength(event.index) isElastic(event.index) if (String(mbos('entries_isAllDay', event.index).value()) == 'true' && !Boolean(_this.startHadCalculate)) { getStartEndTime(event.index) // _this.startHadCalculate = true // 阻止二次触发 } else { _this.startHadCalculate = false } console.log('startHadCalculate', _this.startHadCalculate) } _this.calTime2 = function (event) { getTimeLength(event.index) isElastic(event.index) if (String(mbos('entries_isAllDay', event.index).value()) == 'true' && !Boolean(_this.endHadCalculate)) { getStartEndTime(event.index) // _this.endHadCalculate = true// 阻止二次触发 } else { _this.endHadCalculate = false } console.log('endHadCalculate', _this.endHadCalculate) } // 监听是否整天 _this.calTime3 = function (event) { getTimeLength(event.index) recalcTime(event) } // 监听弹性 _this.calTime4 = function (event) { getTimeLength(event.index) } // 时长更改时 做校验 _this.lengthChange = function(event){ var value = event.new_value // 判断是否小于0 if (!isNaN(parseFloat(value)) && Number(value) < 0) { mbos.msgBox.showError(localeResource.lengthValid); setTimeout(()=>{ mbos('entries_days',event.index).value(0) }) return } } // 出国(境)事由:处理个人事务(枚举值 = 3) var CGSY_PERSONAL_AFFAIRS = '3'; function isPersonalAffairs(cgsy) { if (cgsy == null || cgsy === '') { return false; } if (typeof cgsy === 'object') { return String(cgsy.value != null ? cgsy.value : cgsy) === CGSY_PERSONAL_AFFAIRS; } return String(cgsy) === CGSY_PERSONAL_AFFAIRS; } // 出国(境)事由变更,设计器绑定 onChange = _this.cgsyChange _this.cgsyChange = function (event) { _this.controlRemarkRequired(event.index); } // 控制具体事由必填 + 前端红星 _this.controlRemarkRequired = function (index) { var needReq = isPersonalAffairs(mbos('entries_cgsy', index).value()); // 1. 设置 MBOS 内部必录属性(给后台校验用) mbos('entries_remark', index).attr('mustinput', needReq); // 2. 找到具体事由的 label var $fieldContainer = $('#entries_remark_' + index); var $label = $fieldContainer.find('label.lclabel'); if (!$label.length) return; // 3. 先移除旧的红星(防止重复添加) $label.find('i.mustinput').remove(); // 4. 需要必填时,添加 MBOS 原生红星 if (needReq) { $label.append('*'); } } // 多分录具体事由必填校验 _this.validateRemarkRequired = function () { var entries = mbos('entity').data.entries; if (!entries || entries.length === 0) return true; for (var i = 0; i < entries.length; i++) { var cgsy = mbos('entries_cgsy', i).value(); var remark = mbos('entries_remark', i).value(); if (isPersonalAffairs(cgsy) && (!remark || !String(remark).trim())) { mbos.msgBox.showError('第' + (i + 1) + '行:出国(境)事由为【处理个人事务】时,请填写具体事由!'); return false; } } return true; };