|
|
@@ -0,0 +1,808 @@
|
|
|
+_this.pageinit = function () {
|
|
|
+ newPageInit(_this)
|
|
|
+ _this.entryleaveDay={};
|
|
|
+}
|
|
|
+// 在页面初始化加载之后
|
|
|
+mbos('page').bind('afterLoad', function () {
|
|
|
+ _this.bfTypeValue = "8r0AAAAMhrv9LVKY"; // "8r0AAAA09p9IT3K3"
|
|
|
+ _this.customeBf = "8r0AAAA09p9IT3K3";
|
|
|
+ _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] // 获取请假时长的标题
|
|
|
+ _this.bindDateChange(e.index)
|
|
|
+ _this.getAllDayField(e.index)
|
|
|
+ getHolidayType(e)
|
|
|
+ multiLangField(e.index)// 兼容多语言字段回显的问题
|
|
|
+ //20260507 出差地必填
|
|
|
+ _this.controlPlaceRequired(e.index);
|
|
|
+})
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+//兼容是否有整天请假字段,并根据分录数据的整天请假的值设置时间格式
|
|
|
+_this.getAllDayField = function (index) {
|
|
|
+ var setAllDayTime = function () {
|
|
|
+ if(_this.hasAllDayField === 'noAllDayField'){
|
|
|
+ mbos('entries_isAllDay',index).hide()
|
|
|
+ mbos('entries_isAllDay',index).value(false)
|
|
|
+ }else {
|
|
|
+ mbos('entries_isAllDay',index).show()
|
|
|
+ _this.setTimeVisiable(index)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!_this.hasAllDayField){
|
|
|
+ var callback = function (res) {
|
|
|
+ _this.hasAllDayField = res.data.isAllDay ? 'hasAllDayField' : 'noAllDayField';
|
|
|
+ setAllDayTime()
|
|
|
+ }
|
|
|
+ baseInterface('getDecimalPlace', callback)
|
|
|
+ }else{
|
|
|
+ setAllDayTime()
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+// 保存按钮
|
|
|
+_this.save = function (event) {
|
|
|
+
|
|
|
+ // ====================== 在这里加开始 20260507 ======================
|
|
|
+ if(!_this.validatePlaceRequired()){
|
|
|
+ return; // 校验不通过,直接拦截,不往下执行
|
|
|
+ }
|
|
|
+ // ====================== 在这里加结束 ======================
|
|
|
+
|
|
|
+ var params = getModel(-1, 'save') // 封装model,不走common的封装
|
|
|
+ if(params.entries.length > 1){
|
|
|
+ params.billSourceType = '2'
|
|
|
+ }
|
|
|
+ baseInterface('save', toView, -1, params) // 调用保存接口
|
|
|
+}
|
|
|
+// 提交按钮
|
|
|
+_this.submit = function (event) {
|
|
|
+ // ====================== 在这里加开始 20260507 ======================
|
|
|
+ if(!_this.validatePlaceRequired()){
|
|
|
+ return; // 校验不通过,直接拦截,不往下执行
|
|
|
+ }
|
|
|
+ // ====================== 在这里加结束 ======================
|
|
|
+ // 确认提交 弹框
|
|
|
+ mbos.ui.showConfirm({
|
|
|
+ title: localeResource.confirmSubmit,
|
|
|
+ iconclass: "kdfont kdfont-zhuangtai_jingshi the_info",
|
|
|
+ callback: function (data) {
|
|
|
+ mbos('nextperson1').checkParticipantPerson({
|
|
|
+ "editdata":getModel(-1, 'submit'),
|
|
|
+ "callback": function () {
|
|
|
+ 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赋值
|
|
|
+function setModel() {
|
|
|
+ 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) // 各单据处理分录数据
|
|
|
+ })
|
|
|
+ return entries
|
|
|
+ }
|
|
|
+}
|
|
|
+//哺乳假 是自定义还是非自定义
|
|
|
+_this.isCustomBr = function(index){
|
|
|
+ var htype = mbos("entries.sourceHolidayType",index).value() ? mbos("entries.sourceHolidayType",index).value().id : ''
|
|
|
+ var bfType = mbos("entries.bfType",index).value() ? mbos("entries.bfType",index).value().id : ''
|
|
|
+ if(htype && bfType && htype===_this.bfTypeValue && bfType!== _this.customeBf){
|
|
|
+ return 'noCustomBf';
|
|
|
+ }else if(htype && bfType && htype===_this.bfTypeValue && bfType === _this.customeBf){
|
|
|
+ return 'isCustomBf';
|
|
|
+ }
|
|
|
+}
|
|
|
+function getModel(index, method) {
|
|
|
+ var entries = setModel()
|
|
|
+ var obj = mbos('entity').data
|
|
|
+ if (method === "save" || method === "submit"){ // 只在保存喝提交时修改枚举字段的存储,不然会清空表头的枚举字段
|
|
|
+ Object.keys(obj).map(function(key){
|
|
|
+ if (obj[key] && obj[key].isenum) {// 遍历枚举字段 依据后端需要 传参只传value
|
|
|
+ obj[key] = obj[key].value
|
|
|
+ }
|
|
|
+ })
|
|
|
+ console.log(obj)
|
|
|
+ }
|
|
|
+ for(var i=0; i<entries.length;i++){
|
|
|
+ var item = entries[i];
|
|
|
+ var formate = 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ if(item.beginTime){
|
|
|
+ item.beginTime = moment(item.beginTime).format(formate)
|
|
|
+ }
|
|
|
+ if(item.endTime){
|
|
|
+ item.endTime = moment(item.endTime).format(formate)
|
|
|
+ }
|
|
|
+ if (method === "save" || method === "submit"){
|
|
|
+ if(!item.beginYMD){
|
|
|
+ item.beginYMD = item.beginTime ? item.beginTime.split(" ")[0] : '';
|
|
|
+ }
|
|
|
+ if(!item.endYMD){
|
|
|
+ item.endYMD = item.endTime ? item.endTime.split(" ")[0] : '';
|
|
|
+ }
|
|
|
+ if(_this.isCustomBr(i) === 'noCustomBf' && new Date(item.beginTime.split(" ")[0]) <= new Date(item.mLEndTime)){
|
|
|
+ mbos.msgBox.showError(localeResource.prMsg);
|
|
|
+ throw new Error(localeResource.prMsg)
|
|
|
+ }
|
|
|
+ if(item.leaveLength > _this.entryleaveDay[i]){
|
|
|
+ mbos.msgBox.showError(localeResource.detialNo+(i+1)+localeResource.leaveDaysMsg);
|
|
|
+ throw new Error(localeResource.prMsg)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // var model = {
|
|
|
+ // ...obj,
|
|
|
+ // entries: entries,
|
|
|
+ //}
|
|
|
+ var model = $.extend({},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
|
|
|
+}
|
|
|
+// 各单据处理分录数据的函数
|
|
|
+function getEntries(entry, i) {
|
|
|
+ if (!entry.bfType) entry.bfType = ''
|
|
|
+ var halfData = _this['isHalf' + i]
|
|
|
+ var beginHalf = mbos('beginHalf', i).value() ? mbos('beginHalf', i).value().value : ''
|
|
|
+ if (halfData && entry.beginTime && !entry.beginTime.split(' ')[1] && beginHalf) {
|
|
|
+ // 页面显示的是上午下午,但是传参得拼接上时分 格式为年月日时分
|
|
|
+ //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)
|
|
|
+ entry.beginTime = entry.beginTime.split(" ")[0] + ' ' + halfData[mbos('beginHalf', i).value().value]
|
|
|
+ entry.endTime = entry.endTime.split(" ")[0] + ' ' + halfData[mbos('endHalf', i).value().value]
|
|
|
+ }
|
|
|
+ // 如果是哺乳假 非自定义的类型 结束时间需要拼接时分为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 = entry.beginTime.split(" ")[0] + ' 00:00'
|
|
|
+ entry.endTime = entry.endTime.split(" ")[0] + ' 23:59'
|
|
|
+ }
|
|
|
+ if(_holidayType && _holidayType.name !== localeResource.bf_holiday && entry.isAllDay){
|
|
|
+ if(_this['fullBeginTime_'+i]){
|
|
|
+ entry.beginTime = _this['fullBeginTime_'+i];
|
|
|
+ entry.endTime = _this['fullEndTime_'+i];
|
|
|
+ } else {
|
|
|
+ var beginHMS = _this['beginHMS_'+i] ? _this['beginHMS_'+i] : '00:00';
|
|
|
+ var endHMS = _this['endHMS_'+i] ? _this['endHMS_'+i] : '23:59';
|
|
|
+ entry.beginTime = (entry.beginYMD || '') + " " + beginHMS;
|
|
|
+ entry.endTime = (entry.endYMD || '') + " " + endHMS;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+// 获取请假类型
|
|
|
+var getHolidayType = _.debounce(function (e) {
|
|
|
+ var callback = function (res) {
|
|
|
+ var list = res.data
|
|
|
+ _this.holidayIdList = res.data.map(function(item){return 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')
|
|
|
+ mbos('entries_beginYMD', e.index).value(today)
|
|
|
+ }
|
|
|
+ if (!mbos('entries_endTime', e.index).value()) {
|
|
|
+ mbos('entries_endTime', e.index).value(today + ' 23:59')
|
|
|
+ mbos('entries_endYMD', e.index).value(today)
|
|
|
+ }
|
|
|
+ setModel()
|
|
|
+ baseInterface('getHolidayTypeByPerson', callback, e.index)
|
|
|
+}, 0)
|
|
|
+// 接口计算请假时长
|
|
|
+var getTimeLength = _.debounce(function (index) {
|
|
|
+ var callback = function (res) {
|
|
|
+ mbos('entries_leaveLength', index).value(res.data.leaveBillDays)
|
|
|
+ _this.entryleaveDay[index] = res.data.leaveBillDays
|
|
|
+ }
|
|
|
+ var addDayCallback = function (res) {
|
|
|
+ var isHalf = _this['isHalf' + index];
|
|
|
+ mbos('entries_leaveLength', index).value(res.data.leaveLength);
|
|
|
+ _this.entryleaveDay[index] = res.data.leaveBillDays
|
|
|
+ if(isHalf){
|
|
|
+ _this['beginHMS_'+index] = res.data.amStartWorkTime
|
|
|
+ _this['endHMS_'+index] = res.data.pmEndWorkTime
|
|
|
+ }else{
|
|
|
+ _this['beginHMS_'+index] = res.data.beginHMS
|
|
|
+ _this['endHMS_'+index] = res.data.endHMS
|
|
|
+ }
|
|
|
+
|
|
|
+ var beginHMS = isHalf ? res.data.amStartWorkTime : res.data.beginHMS;
|
|
|
+ var endHMS = isHalf ? res.data.pmEndWorkTime : res.data.endHMS;
|
|
|
+ _this['fullBeginTime_'+index] = res.data.beginYMD.split(" ")[0] + " " + beginHMS;
|
|
|
+ _this['fullEndTime_'+index] = res.data.endYMD.split(" ")[0] + " " + endHMS;
|
|
|
+
|
|
|
+ _this.changeTime = true
|
|
|
+ mbos("entries_beginTime_"+index).value(res.data.beginYMD);
|
|
|
+ mbos("entries_endTime_"+index).value(res.data.endYMD);
|
|
|
+ setTimeout(function(){
|
|
|
+ _this.changeTime = false
|
|
|
+ $("#entries_beginTime_"+index+" .ng-pristine").val(_this['fullBeginTime_'+index])
|
|
|
+ $("#entries_endTime_"+index+" .ng-pristine").val(_this['fullEndTime_'+index])
|
|
|
+ })
|
|
|
+ }
|
|
|
+ var params = getModel(index,'changeLeaveBillTime') // 封装model,不走common的封装
|
|
|
+ var entry = mbos('entity').data.entries[index]
|
|
|
+ if (entry.beginTime && entry.endTime && entry.sourceHolidayType) {
|
|
|
+ //整天请假
|
|
|
+ var holidayTypeId = entry.sourceHolidayType.id;
|
|
|
+ if(entry.isAllDay && holidayTypeId !== _this.bfTypeValue){
|
|
|
+ var param = _.cloneDeep(params);
|
|
|
+ param.entries[0].beginTime =entry.beginYMD ||entry.beginTime.split(" ")[0];
|
|
|
+ param.entries[0].endTime = entry.endYMD || entry.endTime.split(" ")[0];
|
|
|
+ param.entries[0].holidayTypeId = holidayTypeId
|
|
|
+ param.entries[0].personId = params.entries[0].person.id;
|
|
|
+ baseInterface('changeLeaveBillTime',addDayCallback, index, param)
|
|
|
+ //非整体请假
|
|
|
+ }
|
|
|
+ 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')
|
|
|
+ //document.getElementById('remainCard_' + index).innerText = `${type.sourceHolidayType.name} ${localeResource.remained}${res.data.remainLimitVal}${type.sourceUnit.alias} ${localeResource.remainedDays}`
|
|
|
+ document.getElementById('remainCard_' + index).innerText = type.sourceHolidayType.name+' '+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)
|
|
|
+ }
|
|
|
+ _this.setTimeVisiable(index);
|
|
|
+ }
|
|
|
+ setModel()
|
|
|
+ baseInterface('getSetIsCtrlHalfDayOff', callback, index)
|
|
|
+}
|
|
|
+// 设置开启半天假的样式
|
|
|
+function setHalfDay1(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)
|
|
|
+ if(!mbos('beginHalf', index).value()){
|
|
|
+ mbos('beginHalf', index).value(startHM)
|
|
|
+ }
|
|
|
+ if(!mbos('endHalf', index).value()){
|
|
|
+ mbos('endHalf', index).value(endHM)
|
|
|
+ }
|
|
|
+}
|
|
|
+// 设置开启半天假的样式
|
|
|
+function setHalfDay(index) {
|
|
|
+ // 样式变动
|
|
|
+ $('#entries_beginTime_' + index).removeClass('col-xs-12').addClass('col-xs-8')
|
|
|
+ $('#entries_endTime_' + index).removeClass('col-xs-12').addClass('col-xs-8')
|
|
|
+ $('#beginHalf_' + index).css("display", "block")
|
|
|
+ $('#endHalf_' + index).css("display", "block")
|
|
|
+ halfClick(index) // 半天枚举控件的点击事件
|
|
|
+ var halfData = _this['isHalf' + index] // 半天假及时间字段
|
|
|
+ var half = {}
|
|
|
+ half[halfData.amBeginTime] = { alias: localeResource.AM + ' ' + halfData.amBeginTime, value: "amBeginTime" }
|
|
|
+ half[halfData.amEndTime] = { alias: localeResource.AM + ' ' + halfData.amEndTime, value: "amEndTime" }
|
|
|
+ half[halfData.pmBeginTime] = { alias: localeResource.PM + ' ' + halfData.pmBeginTime, value: "pmBeginTime" }
|
|
|
+ half[halfData.pmEndTime] = { alias: localeResource.PM + ' ' + halfData.pmEndTime, value: "pmEndTime" }
|
|
|
+ _this.halfEnum = half
|
|
|
+ // 编辑时 根据时间判断
|
|
|
+ var sTime = mbos('entries_beginTime', index).value().split(' ')[1]
|
|
|
+ var eTime = mbos('entries_endTime', index).value().split(' ')[1]
|
|
|
+ var startHM = half[sTime] || half[halfData.amBeginTime]
|
|
|
+ var endHM = half[eTime] || half[halfData.pmEndTime]
|
|
|
+
|
|
|
+ mbos('beginHalf', index).value(startHM)
|
|
|
+ mbos('endHalf', index).value(endHM)
|
|
|
+}
|
|
|
+// 半天控件的点击事件 给枚举选项拼接时分
|
|
|
+function halfClick(index){
|
|
|
+ var list = ["amBeginTime","amEndTime","pmBeginTime","pmEndTime"]
|
|
|
+ $('#beginHalf_'+index).click(function () {
|
|
|
+ setTimeout(function(){
|
|
|
+ var enumList = $('.seldiv .ng-binding')
|
|
|
+ for (var i = 0; i < enumList.length; i++) {
|
|
|
+ if(i == 1 || i == 3){
|
|
|
+ enumList.eq(i).closest('li').hide();
|
|
|
+ }
|
|
|
+ enumList[i].innerHTML = enumList[i].innerHTML.split(' ')[0] + ' ' + _this['isHalf' + index][list[i]]
|
|
|
+ }
|
|
|
+ }, 0)
|
|
|
+ })
|
|
|
+ $('#endHalf_'+index).click(function () {
|
|
|
+ setTimeout(function(){
|
|
|
+ var enumList = $('.seldiv .ng-binding')
|
|
|
+ for (var i = 0; i < enumList.length; i++) {
|
|
|
+ enumList.eq(i).closest('li').show();
|
|
|
+ if(i == 0 || i == 2){
|
|
|
+ enumList.eq(i).closest('li').hide();
|
|
|
+ }
|
|
|
+ enumList[i].innerHTML = enumList[i].innerHTML.split(' ')[0] + ' ' + _this['isHalf' + index][list[i]]
|
|
|
+ }
|
|
|
+ }, 0)
|
|
|
+ })
|
|
|
+}
|
|
|
+// 隐藏半天假
|
|
|
+function hideHalfDay(index) {
|
|
|
+ $('#entries_beginTime_' + index).removeClass('col-xs-8').addClass('col-xs-12')
|
|
|
+ $('#entries_endTime_' + index).removeClass('col-xs-8').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
|
|
|
+ }
|
|
|
+ // 是否是哺乳假
|
|
|
+ var sourceHolidayTypeValue = mbos('entries_sourceHolidayType', index).value();
|
|
|
+ if (sourceHolidayTypeValue && (sourceHolidayTypeValue.id == _this.bfTypeValue || sourceHolidayTypeValue.name == localeResource.bf_holiday)) {
|
|
|
+ mbos('entries.isAllDay', index).hide()
|
|
|
+ mbos('entries_isAllDay',index).value(false)
|
|
|
+ // 请假类型为【哺乳假】则显示 哺乳假类型、子女出生日期、产假结束日期
|
|
|
+ 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: _this.customeBf, 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('')
|
|
|
+ if(_this.hasAllDayField === 'hasAllDayField'){
|
|
|
+ mbos('entries.isAllDay', index).show()
|
|
|
+ }
|
|
|
+
|
|
|
+ isHalfHoliday(index) // 判断是否启用半天假
|
|
|
+ }
|
|
|
+ if (entry.sourceUnit) {
|
|
|
+ mbos('entries_leaveLength', index).attr('title', _this.leaveLengthTitle +`(${entry.sourceUnit.alias})`);
|
|
|
+ }
|
|
|
+ getTimeLength(index)
|
|
|
+ getRemainLength(event)
|
|
|
+ getExplain(index)
|
|
|
+}
|
|
|
+// 监听 开始时间
|
|
|
+_this.calTime1 = function (event) {
|
|
|
+ if(_this.changeTime) return;
|
|
|
+ var beginalue = mbos('entries.beginTime',event.index).value();
|
|
|
+ var endValue = mbos('entries.endTime',event.index).value();
|
|
|
+ var newEndValue = endValue;
|
|
|
+ if(new Date(beginalue).getTime() > new Date(endValue).getTime()){
|
|
|
+ if(endValue && endValue.split(' ').length >= 2){
|
|
|
+ newEndValue = beginalue.split(' ')[0] + ' ' + endValue.split(' ')[1];
|
|
|
+ mbos('entries.endTime',event.index).value(newEndValue.split(' ')[0]+" 23:59");
|
|
|
+ }else{
|
|
|
+ newEndValue = beginalue;
|
|
|
+ mbos('entries.endTime',event.index).value(newEndValue);
|
|
|
+ }
|
|
|
+
|
|
|
+ mbos("entries.endYMD",event.index).value(newEndValue);
|
|
|
+ }
|
|
|
+ getHolidayType(event)
|
|
|
+ getTimeLength(event.index)
|
|
|
+ isElastic(event.index)
|
|
|
+ getRemainLength(event)
|
|
|
+}
|
|
|
+// 监听 结束时间
|
|
|
+_this.calTime2 = function (event) {
|
|
|
+ if(_this.changeTime) return;
|
|
|
+ var beginalue = mbos('entries.beginTime',event.index).value();
|
|
|
+ var endValue = mbos('entries.endTime',event.index).value();
|
|
|
+ var newBeginValue = beginalue;
|
|
|
+ if(new Date(beginalue).getTime() > new Date(endValue).getTime()){
|
|
|
+ if(beginalue && beginalue.split(' ').length >= 2){
|
|
|
+ newBeginValue = endValue.split(' ')[0] + ' ' + endValue.split(' ')[1];
|
|
|
+ mbos('entries.beginTime',event.index).value(newBeginValue.split(' ')[0]+" 00:00");
|
|
|
+ }else{
|
|
|
+ newBeginValue = endValue;
|
|
|
+ mbos('entries.beginTime',event.index).value(newBeginValue);
|
|
|
+ }
|
|
|
+
|
|
|
+ mbos("entries.beginYMD",event.index).value(newBeginValue);
|
|
|
+ }
|
|
|
+ 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')
|
|
|
+ value = moment(value).subtract(1, 'days').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(function(){
|
|
|
+ mbos('entries_bfType', index).value({id: _this.customeBf, name: localeResource.Customized})
|
|
|
+ }, 0)
|
|
|
+ }
|
|
|
+ if (mbos('entries_bfType', index).value() && (mbos('entries_bfType', index).value().id == _this.customeBf || 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) {
|
|
|
+ if (event.new_value.alias.split(' ').length === 1 ){
|
|
|
+ event.new_value.alias += ' '+ _this['isHalf' + event.index][event.new_value.value]
|
|
|
+ }
|
|
|
+ getTimeLength(event.index)
|
|
|
+}
|
|
|
+// 更改半天假结束
|
|
|
+_this.calTime4 = function (event) {
|
|
|
+ if (event.new_value.alias.split(' ').length === 1 ){
|
|
|
+ event.new_value.alias += ' '+ _this['isHalf' + event.index][event.new_value.value]
|
|
|
+ }
|
|
|
+ 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(function(){
|
|
|
+ mbos('entries_leaveLength',event.index).value('')
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+//更新整体请假
|
|
|
+_this.isAllDayChange = function(event){
|
|
|
+ var index = event.index
|
|
|
+ _this.setTimeVisiable(index);
|
|
|
+ getTimeLength(index)
|
|
|
+}
|
|
|
+//设置半天假的上午下午选择框可见不可见
|
|
|
+_this.setTimeVisiable = function(index){
|
|
|
+ var isAllDay = mbos("entries_isAllDay",index).value();
|
|
|
+ var isHalf = _this['isHalf' + index] ? _this['isHalf' + index].isHalfDayOff : false;
|
|
|
+ if(isAllDay){
|
|
|
+ if(isHalf){
|
|
|
+ hideHalfDay(index)
|
|
|
+ }
|
|
|
+ _this.changeTime = true
|
|
|
+ beginEndFormat('YYYY-MM-DD', index)
|
|
|
+ setTimeout(()=>{
|
|
|
+ _this.changeTime = false
|
|
|
+ })
|
|
|
+ }else{
|
|
|
+ if(isHalf){
|
|
|
+ //半天假时 整天请假需要显示时间点,切换为非整天请假时需要将时间点去掉
|
|
|
+ var beginTime = $("#entries_beginTime_"+index+" .ng-pristine").val();
|
|
|
+ var endTime = $("#entries_endTime_"+index+" .ng-pristine").val()
|
|
|
+ $("#entries_beginTime_"+index+" .ng-pristine").val(beginTime ? beginTime.split(" ")[0]:'')
|
|
|
+ $("#entries_endTime_"+index+" .ng-pristine").val(endTime ? endTime.split(" ")[0]:'')
|
|
|
+ setHalfDay(index)
|
|
|
+ }else{
|
|
|
+ hideHalfDay(index)
|
|
|
+ }
|
|
|
+ _this.changeTime = true
|
|
|
+ //半天假和非自定义哺乳假
|
|
|
+ if(isHalf || _this.isCustomBr(index)==="noCustomBf"){
|
|
|
+ beginEndFormat('YYYY-MM-DD', index)
|
|
|
+ }else{
|
|
|
+ _this.setTimeYMDHM('YYYY-MM-DD HH:mm', index)
|
|
|
+ }
|
|
|
+ setTimeout(()=>{
|
|
|
+ _this.changeTime = false
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+_this.setTimeYMDHM = function(format, index){
|
|
|
+ mbos('entries.beginTime', index).timeFormat(format);
|
|
|
+ mbos('entries.endTime', index).timeFormat(format);
|
|
|
+ var startTimeValue = mbos('entries.beginTime', index).value();
|
|
|
+ var endTimeValue = mbos('entries.endTime', index).value();
|
|
|
+ var isAllDay = mbos('entries.isAllDay', index).value();
|
|
|
+ var endDate = endTimeValue ? endTimeValue.split(" ")[0] : '';
|
|
|
+ var endTime = endTimeValue && endTimeValue.split(" ").length == 2 ? endTimeValue.split(" ")[1] : '';
|
|
|
+
|
|
|
+ var startDate = startTimeValue ? startTimeValue.split(" ")[0] : '';
|
|
|
+ var startTime = startTimeValue && startTimeValue.split(" ").length == 2 ? startTimeValue.split(" ")[1] : '';
|
|
|
+ if(!isAllDay && endTime.indexOf('00:00')!== -1 && startDate===endDate){
|
|
|
+ var endDate = endTimeValue.split(" ")[0];
|
|
|
+ mbos('entries.endTime', index).value(endDate+" 23:59")
|
|
|
+ }
|
|
|
+},
|
|
|
+
|
|
|
+_this.bindDateChange = function(index){
|
|
|
+ $("#entries_beginTime_"+index+" .mobInput").bind('change',function(){
|
|
|
+ var value = mbos("entries_beginTime_"+index).value();
|
|
|
+ value = value ? value.split(" ")[0] : '';
|
|
|
+ mbos("entries_beginYMD_"+index).value(value);
|
|
|
+ //当开始日期大于于用户选的结束日期时将结束时间设置为开始日期
|
|
|
+ var endYMD = mbos("entries_endYMD_"+index).value();
|
|
|
+ if(new Date(endYMD).getTime() < new Date(value).getTime()){
|
|
|
+ mbos("entries_endYMD_"+index).value(value);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ $("#entries_endTime_"+index+" .mobInput").bind('change',function(){
|
|
|
+ var value = mbos("entries_endTime_"+index).value();
|
|
|
+ value = value ? value.split(" ")[0] : '';
|
|
|
+ mbos("entries_endYMD_"+index).value(value);
|
|
|
+ //当结束日期小于用户选的开始日期时将开始时间设置为结束日期
|
|
|
+ var beginYMD = mbos("entries_beginYMD_"+index).value();
|
|
|
+ if(new Date(beginYMD).getTime() > new Date(value).getTime()){
|
|
|
+ mbos("entries_beginYMD_"+index).value(value);
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ // 工作流根据请假类型匹配不同的流程定义,请假类型改变后要刷新下一步参与人控件
|
|
|
+mbos("entries.sourceHolidayType",index).bind("change",function(newF7Value) {
|
|
|
+ var model = mbos('entity').value();
|
|
|
+ var param = $.extend(true, {}, model);
|
|
|
+ var entries = param.entries;
|
|
|
+ if(entries && entries.length>0){
|
|
|
+ entries[index].sourceHolidayType = newF7Value;
|
|
|
+ // 这几个字段导致model转单据实体失败,先去掉待shr排查!
|
|
|
+ delete entries[index].beginTime;
|
|
|
+ delete entries[index].beginYMD;
|
|
|
+ delete entries[index].endTime;
|
|
|
+ delete entries[index].endYMD;
|
|
|
+ }
|
|
|
+ mbos('nextperson1').getNextPerson(param,null);
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+_this.sflsChange = function(event){
|
|
|
+ var index = event.index;
|
|
|
+ _this.controlPlaceRequired(index);
|
|
|
+
|
|
|
+}
|
|
|
+_this.sfcgjChange = function(event){
|
|
|
+ var index = event.index;
|
|
|
+ _this.controlPlaceRequired(index);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+// 核心:控制目的地必填 + 前端标红 20260507
|
|
|
+_this.controlPlaceRequired = function(index){
|
|
|
+ // 替换成你自己两个布尔字段编码、目的地字段编码
|
|
|
+ var b1 = mbos('entries_sfls', index).value();
|
|
|
+ var b2 = mbos('entries_sfcgj', index).value();
|
|
|
+ var needReq = b1 || b2;
|
|
|
+
|
|
|
+ // 1. 设置 MBOS 内部必录属性(给后台校验用)
|
|
|
+ mbos('entries_place', index).attr('mustinput', needReq);
|
|
|
+
|
|
|
+ // 2. 找到目的地的 label 标签
|
|
|
+ var $fieldContainer = $('#entries_place_' + index);
|
|
|
+ var $label = $fieldContainer.find('label.lclabel');
|
|
|
+
|
|
|
+ if (!$label.length) return;
|
|
|
+
|
|
|
+ // 3. 先移除旧的红星(防止重复添加)
|
|
|
+ $label.find('i.mustinput').remove();
|
|
|
+
|
|
|
+ // 4. 需要必填时,添加 MBOS 原生红星 <i class="mustinput">*</i>
|
|
|
+ if (needReq) {
|
|
|
+ $label.append('<i class="mustinput">*</i>');
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+// ====================== 多分录目的地必填校验(通用方法)======================
|
|
|
+_this.validatePlaceRequired = function(){
|
|
|
+ // 1. 获取所有分录行数
|
|
|
+ var entries = mbos('entity').data.entries;
|
|
|
+ if(!entries || entries.length === 0) return true;
|
|
|
+
|
|
|
+ // 2. 遍历每一行进行校验
|
|
|
+ for(var i = 0; i < entries.length; i++){
|
|
|
+ var sfls = mbos('entries_sfls', i).value() || false;
|
|
|
+ var sfcgj = mbos('entries_sfcgj', i).value() || false;
|
|
|
+ var place = mbos('entries_place', i).value();
|
|
|
+
|
|
|
+ // 3. 判断:任一勾选,但目的地为空
|
|
|
+ if((sfls || sfcgj) && (!place || !place.trim())){
|
|
|
+ // 4. 提示具体是第几行
|
|
|
+ mbos.msgBox.showError('第' + (i+1) + '行:勾选了【是否离深】或【是否出国境】时,请填写目的地!');
|
|
|
+ return false; // 校验不通过,返回 false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true; // 所有行都校验通过,返回 true
|
|
|
+};
|