_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
    }
    
  }
          
  