mbos_请假单_备份_202605.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732
  1. _this.pageinit = function () {
  2. newPageInit(_this)
  3. _this.entryleaveDay={};
  4. }
  5. // 在页面初始化加载之后
  6. mbos('page').bind('afterLoad', function () {
  7. _this.bfTypeValue = "8r0AAAAMhrv9LVKY"; // "8r0AAAA09p9IT3K3"
  8. _this.customeBf = "8r0AAAA09p9IT3K3";
  9. _this.path = mbos.pageInfo.path// 轻应用的路径编码 例如 trip880
  10. _this.detailPageCode = mbos.pageInfo.name.replace('Add', 'View') // 详情页面的编码 (个别页面可特殊处理直接写入) 例如 tripView.editui
  11. _this.operateState = mbos.getRequestParams().operateState // 'ADDNEW' 'EDIT' 'VIEW'
  12. // 初始化审批流
  13. //mbos('nextperson1').checkParticipantPerson({
  14. // "callback": function () { }
  15. //});
  16. // 单据说明
  17. mbos('description').bind('click', function () {
  18. handleClickDesc()
  19. })
  20. })
  21. // 【请假类型】F7过滤, _this.holidayIdList是接口返回的过滤数据,再依据这个过滤F7
  22. function filterLeaveTypeF7(index) {
  23. var filterStr = _this.holidayIdList.join('\',\'')
  24. mbos('entries_sourceHolidayType', index).attr('dynamicFilter', 'id in (\'' + filterStr + '\')'); // 动态添加过滤
  25. }
  26. // 哺乳假F7
  27. function filterBreastTypeF7(index) {
  28. mbos('entries.bfType', index).attr('dynamicFilter', 'state = 1'); // 动态添加过滤
  29. }
  30. // 分录渲染后
  31. mbos('entries').bind('afterRendered', function (e) {
  32. _this.leaveLengthTitle = mbos('entries_leaveLength_0').attr('title').split('(')[0] // 获取请假时长的标题
  33. _this.bindDateChange(e.index)
  34. _this.getAllDayField(e.index)
  35. getHolidayType(e)
  36. multiLangField(e.index)// 兼容多语言字段回显的问题
  37. })
  38. //兼容是否有整天请假字段,并根据分录数据的整天请假的值设置时间格式
  39. _this.getAllDayField = function (index) {
  40. var setAllDayTime = function () {
  41. if(_this.hasAllDayField === 'noAllDayField'){
  42. mbos('entries_isAllDay',index).hide()
  43. mbos('entries_isAllDay',index).value(false)
  44. }else {
  45. mbos('entries_isAllDay',index).show()
  46. _this.setTimeVisiable(index)
  47. }
  48. }
  49. if(!_this.hasAllDayField){
  50. var callback = function (res) {
  51. _this.hasAllDayField = res.data.isAllDay ? 'hasAllDayField' : 'noAllDayField';
  52. setAllDayTime()
  53. }
  54. baseInterface('getDecimalPlace', callback)
  55. }else{
  56. setAllDayTime()
  57. }
  58. }
  59. // 保存按钮
  60. _this.save = function (event) {
  61. var params = getModel(-1, 'save') // 封装model,不走common的封装
  62. if(params.entries.length > 1){
  63. params.billSourceType = '2'
  64. }
  65. baseInterface('save', toView, -1, params) // 调用保存接口
  66. }
  67. // 提交按钮
  68. _this.submit = function (event) {
  69. // 确认提交 弹框
  70. mbos.ui.showConfirm({
  71. title: localeResource.confirmSubmit,
  72. iconclass: "kdfont kdfont-zhuangtai_jingshi the_info",
  73. callback: function (data) {
  74. mbos('nextperson1').checkParticipantPerson({
  75. "editdata":getModel(-1, 'submit'),
  76. "callback": function () {
  77. if (data == 0) {
  78. var params = getModel(-1, 'submit') // 封装model,不走common的封装
  79. baseInterface('submit', toView, -1, params) // 调用提交接口
  80. }
  81. }
  82. });
  83. }
  84. });
  85. }
  86. // 点击“保存、提交” 跳转页面
  87. function toView(res) {
  88. // 提交接口 返回的res.data为数组,取第一条数据
  89. if (res.data.keyValue || (res.data.length > 0 && res.data[0].keyValue)) {
  90. // 操作成功 提示弹框
  91. mbos.ui.showInfo({
  92. title: localeResource.succeed,
  93. iconclass: "kdfont kdfont-zhuangtai_wancheng the_success",
  94. callback: function () {
  95. openPage(_this.path, _this.detailPageCode, { billID: res.data.keyValue || res.data[0].keyValue })
  96. }
  97. });
  98. }
  99. }
  100. // 给隐藏的model赋值
  101. function setModel() {
  102. if (typeof _this.operateState != "undefined" && (_this.operateState === "ADDNEW" || _this.operateState === "EDIT")) {
  103. var entries = _.cloneDeep(mbos('entity').data.entries) // lodash 深拷贝
  104. entries.map(function (entry, i) {
  105. entry.person = easContext.person
  106. // position和adminOrgUnit取后端默认值,前端取的是人事档案的不是正确的值
  107. // entry.position = easContext.position.id
  108. // entry.adminOrgUnit = easContext.position.adminOrgUnit.id
  109. getEntries(entry, i) // 各单据处理分录数据
  110. })
  111. return entries
  112. }
  113. }
  114. //哺乳假 是自定义还是非自定义
  115. _this.isCustomBr = function(index){
  116. var htype = mbos("entries.sourceHolidayType",index).value() ? mbos("entries.sourceHolidayType",index).value().id : ''
  117. var bfType = mbos("entries.bfType",index).value() ? mbos("entries.bfType",index).value().id : ''
  118. if(htype && bfType && htype===_this.bfTypeValue && bfType!== _this.customeBf){
  119. return 'noCustomBf';
  120. }else if(htype && bfType && htype===_this.bfTypeValue && bfType === _this.customeBf){
  121. return 'isCustomBf';
  122. }
  123. }
  124. function getModel(index, method) {
  125. var entries = setModel()
  126. var obj = mbos('entity').data
  127. if (method === "save" || method === "submit"){ // 只在保存喝提交时修改枚举字段的存储,不然会清空表头的枚举字段
  128. Object.keys(obj).map(function(key){
  129. if (obj[key] && obj[key].isenum) {// 遍历枚举字段 依据后端需要 传参只传value
  130. obj[key] = obj[key].value
  131. }
  132. })
  133. console.log(obj)
  134. }
  135. for(var i=0; i<entries.length;i++){
  136. var item = entries[i];
  137. var formate = 'YYYY-MM-DD HH:mm:ss'
  138. if(item.beginTime){
  139. item.beginTime = moment(item.beginTime).format(formate)
  140. }
  141. if(item.endTime){
  142. item.endTime = moment(item.endTime).format(formate)
  143. }
  144. if (method === "save" || method === "submit"){
  145. if(!item.beginYMD){
  146. item.beginYMD = item.beginTime ? item.beginTime.split(" ")[0] : '';
  147. }
  148. if(!item.endYMD){
  149. item.endYMD = item.endTime ? item.endTime.split(" ")[0] : '';
  150. }
  151. if(_this.isCustomBr(i) === 'noCustomBf' && new Date(item.beginTime.split(" ")[0]) <= new Date(item.mLEndTime)){
  152. mbos.msgBox.showError(localeResource.prMsg);
  153. throw new Error(localeResource.prMsg)
  154. }
  155. if(item.leaveLength > _this.entryleaveDay[i]){
  156. mbos.msgBox.showError(localeResource.detialNo+(i+1)+localeResource.leaveDaysMsg);
  157. throw new Error(localeResource.prMsg)
  158. }
  159. }
  160. }
  161. // var model = {
  162. // ...obj,
  163. // entries: entries,
  164. //}
  165. var model = $.extend({},obj,{entries: entries})
  166. if (index >= 0) { // index 为-1 时代表取所有明细
  167. model.entries = [entries[index]]
  168. }
  169. if ((method === "save" || method === "submit") && mbos.getRequestParams().abnormalId) {
  170. model.abnormalId = mbos.getRequestParams().abnormalId
  171. }
  172. var personList = mbos('personSelector1').$element ? mbos('personSelector1').getpersonList() : []; // 抄送人列表
  173. model.ccPersonIds = personList.map(function (i) { return (i.personid || i.id) }).join(',')
  174. model.ccPerson = personList.map(function (i) { return (i.personid || i.id) }).join(',')
  175. return model
  176. }
  177. // 各单据处理分录数据的函数
  178. function getEntries(entry, i) {
  179. if (!entry.bfType) entry.bfType = ''
  180. var halfData = _this['isHalf' + i]
  181. var beginHalf = mbos('beginHalf', i).value() ? mbos('beginHalf', i).value().value : ''
  182. if (halfData && entry.beginTime && !entry.beginTime.split(' ')[1] && beginHalf) {
  183. // 页面显示的是上午下午,但是传参得拼接上时分 格式为年月日时分
  184. //entry.beginTime = entry.beginTime + ' ' + (mbos('beginHalf', i).value().value === 'am' ? halfData.amBeginTime : halfData.pmBeginTime)
  185. //entry.endTime = entry.endTime + ' ' + (mbos('endHalf', i).value().value === 'am' ? halfData.amEndTime : halfData.pmEndTime)
  186. entry.beginTime = entry.beginTime.split(" ")[0] + ' ' + halfData[mbos('beginHalf', i).value().value]
  187. entry.endTime = entry.endTime.split(" ")[0] + ' ' + halfData[mbos('endHalf', i).value().value]
  188. }
  189. // 如果是哺乳假 非自定义的类型 结束时间需要拼接时分为23:59
  190. var _holidayType = mbos('entries_sourceHolidayType', i).value()
  191. var _bfType = mbos('entries_bfType', i).value()
  192. if (_holidayType && _holidayType.name == localeResource.bf_holiday && _bfType && _bfType.name !== localeResource.Customized){
  193. entry.beginTime = entry.beginTime.split(" ")[0] + ' 00:00'
  194. entry.endTime = entry.endTime.split(" ")[0] + ' 23:59'
  195. }
  196. if(_holidayType && _holidayType.name !== localeResource.bf_holiday && entry.isAllDay){
  197. if(_this['fullBeginTime_'+i]){
  198. entry.beginTime = _this['fullBeginTime_'+i];
  199. entry.endTime = _this['fullEndTime_'+i];
  200. } else {
  201. var beginHMS = _this['beginHMS_'+i] ? _this['beginHMS_'+i] : '00:00';
  202. var endHMS = _this['endHMS_'+i] ? _this['endHMS_'+i] : '23:59';
  203. entry.beginTime = (entry.beginYMD || '') + " " + beginHMS;
  204. entry.endTime = (entry.endYMD || '') + " " + endHMS;
  205. }
  206. }
  207. }
  208. // 获取请假类型
  209. var getHolidayType = _.debounce(function (e) {
  210. var callback = function (res) {
  211. var list = res.data
  212. _this.holidayIdList = res.data.map(function(item){return item.holidayTypeId.id}) // 存储过滤后的请假类型F7数据
  213. filterLeaveTypeF7(e.index)
  214. filterBreastTypeF7(e.index)
  215. // 请假类型数组
  216. _this.holidayType = {}
  217. for (var i = 0; i < list.length; i++) {
  218. var typeId = list[i].holidayTypeId.id
  219. _this.holidayType[typeId] = {
  220. holidayPolicyId: list[i].holidayPolicyInfo.id,
  221. sourceUnit: list[i].unit,
  222. sourceHolidayType: list[i].holidayTypeId,
  223. description: list[i].description
  224. }
  225. }
  226. if (mbos.getRequestParams().type && mbos.getRequestParams().holidayTypeId){
  227. // 从我的假期页面跳转过来,携带赋值假期类型
  228. mbos('entries_sourceHolidayType', e.index).value({
  229. id: decodeURIComponent(mbos.getRequestParams().holidayTypeId),
  230. name: mbos.getRequestParams().type
  231. })
  232. }
  233. if (mbos('entries_sourceHolidayType', e.index).value()) {
  234. _this.typeChange({
  235. index: e.index,
  236. new_value: mbos('entries_sourceHolidayType', e.index).value(),
  237. old_value: ''
  238. })
  239. }
  240. }
  241. var date = mbos.getRequestParams().date || new Date()
  242. // 需要传参时间,默认为当天 或其他页面带过来的参数
  243. var today = moment(date).format('YYYY-MM-DD')
  244. if (!mbos('entries_beginTime', e.index).value()) {
  245. mbos('entries_beginTime', e.index).value(today + ' 00:00')
  246. mbos('entries_beginYMD', e.index).value(today)
  247. }
  248. if (!mbos('entries_endTime', e.index).value()) {
  249. mbos('entries_endTime', e.index).value(today + ' 23:59')
  250. mbos('entries_endYMD', e.index).value(today)
  251. }
  252. setModel()
  253. baseInterface('getHolidayTypeByPerson', callback, e.index)
  254. }, 0)
  255. // 接口计算请假时长
  256. var getTimeLength = _.debounce(function (index) {
  257. var callback = function (res) {
  258. mbos('entries_leaveLength', index).value(res.data.leaveBillDays)
  259. _this.entryleaveDay[index] = res.data.leaveBillDays
  260. }
  261. var addDayCallback = function (res) {
  262. var isHalf = _this['isHalf' + index];
  263. mbos('entries_leaveLength', index).value(res.data.leaveLength);
  264. _this.entryleaveDay[index] = res.data.leaveBillDays
  265. if(isHalf){
  266. _this['beginHMS_'+index] = res.data.amStartWorkTime
  267. _this['endHMS_'+index] = res.data.pmEndWorkTime
  268. }else{
  269. _this['beginHMS_'+index] = res.data.beginHMS
  270. _this['endHMS_'+index] = res.data.endHMS
  271. }
  272. var beginHMS = isHalf ? res.data.amStartWorkTime : res.data.beginHMS;
  273. var endHMS = isHalf ? res.data.pmEndWorkTime : res.data.endHMS;
  274. _this['fullBeginTime_'+index] = res.data.beginYMD.split(" ")[0] + " " + beginHMS;
  275. _this['fullEndTime_'+index] = res.data.endYMD.split(" ")[0] + " " + endHMS;
  276. _this.changeTime = true
  277. mbos("entries_beginTime_"+index).value(res.data.beginYMD);
  278. mbos("entries_endTime_"+index).value(res.data.endYMD);
  279. setTimeout(function(){
  280. _this.changeTime = false
  281. $("#entries_beginTime_"+index+" .ng-pristine").val(_this['fullBeginTime_'+index])
  282. $("#entries_endTime_"+index+" .ng-pristine").val(_this['fullEndTime_'+index])
  283. })
  284. }
  285. var params = getModel(index,'changeLeaveBillTime') // 封装model,不走common的封装
  286. var entry = mbos('entity').data.entries[index]
  287. if (entry.beginTime && entry.endTime && entry.sourceHolidayType) {
  288. //整天请假
  289. var holidayTypeId = entry.sourceHolidayType.id;
  290. if(entry.isAllDay && holidayTypeId !== _this.bfTypeValue){
  291. var param = _.cloneDeep(params);
  292. param.entries[0].beginTime =entry.beginYMD ||entry.beginTime.split(" ")[0];
  293. param.entries[0].endTime = entry.endYMD || entry.endTime.split(" ")[0];
  294. param.entries[0].holidayTypeId = holidayTypeId
  295. param.entries[0].personId = params.entries[0].person.id;
  296. baseInterface('changeLeaveBillTime',addDayCallback, index, param)
  297. //非整体请假
  298. }
  299. baseInterface('getBillLength', callback, index, params)
  300. }
  301. }, 500)
  302. // 获取假期剩余额度单位
  303. var getRemainLength = _.debounce(function (event) {
  304. var index = event.index
  305. var entry = mbos('entity').data.entries[index]
  306. delete entry.SourceHolidayType
  307. if (entry.beginTime && entry.endTime && entry.sourceHolidayType) {
  308. var callback = function (res) {
  309. if (!res.data) {
  310. $('#remainCard_' + index).css('display', 'none')
  311. return
  312. }
  313. if (res && res.data) {
  314. var type = _this.holidayType[mbos('entries_sourceHolidayType', index).value().id]
  315. $('#remainCard_' + index).css('display', 'flex')
  316. //document.getElementById('remainCard_' + index).innerText = `${type.sourceHolidayType.name} ${localeResource.remained}${res.data.remainLimitVal}${type.sourceUnit.alias} ${localeResource.remainedDays}`
  317. document.getElementById('remainCard_' + index).innerText = type.sourceHolidayType.name+' '+localeResource.remained+res.data.remainLimitVal+type.sourceUnit.alias+localeResource.remainedDays
  318. }
  319. }
  320. setModel()
  321. baseInterface('getHolidayLimitByHolidayType', callback, index)
  322. }
  323. }, 200)
  324. // 根据时间判断 是否展示弹性算时长字段
  325. var isElastic = _.debounce(function (index) {
  326. var callback = function (res) {
  327. if (res.data) {
  328. mbos('entries_isElasticCalLen', index).show()
  329. } else {
  330. mbos('entries_isElasticCalLen', index).hide()
  331. }
  332. }
  333. // TODO holidayPolicyId待添加
  334. setModel(index)
  335. var entry = mbos('entity').data.entries[index]
  336. if (entry.beginTime && entry.endTime) {
  337. baseInterface('showIsElasticCalCtrl', callback, index)
  338. }
  339. }, 500)
  340. /**
  341. * 修改开始结束时间的格式
  342. * YYYY-MM-DD : 非【自定义】的所有哺乳假类型
  343. * YYYY-MM-DD HH:mm:未启用半天假的非哺乳假;【自定义】的哺乳假类型且未启用半天假;
  344. * YYYY-MM-DD AM/PM:启用半天假的非哺乳假、【自定义】的哺乳假类型且启用半天假
  345. */
  346. function beginEndFormat(format, index) {
  347. mbos('entries.beginTime', index).timeFormat(format);
  348. mbos('entries.endTime', index).timeFormat(format);
  349. }
  350. // 是否开启半天假
  351. function isHalfHoliday(index, timeFormat) {
  352. var callback = function (res) {
  353. if (res.data && res.data.isHalfDayOff) {
  354. // 先赋值 在设置半天假 最后格式化时间,顺序不能变
  355. _this['isHalf' + index] = res.data
  356. // setHalfDay(index)// 设置开启半天假的样式
  357. // beginEndFormat('YYYY-MM-DD', index)
  358. } else {
  359. _this['isHalf' + index] = false
  360. // hideHalfDay(index)// 隐藏半天假
  361. // beginEndFormat(timeFormat ? timeFormat : 'YYYY-MM-DD HH:mm', index)
  362. }
  363. _this.setTimeVisiable(index);
  364. }
  365. setModel()
  366. baseInterface('getSetIsCtrlHalfDayOff', callback, index)
  367. }
  368. // 设置开启半天假的样式
  369. function setHalfDay1(index) {
  370. $('#entries_beginTime_' + index).removeClass('col-xs-12').addClass('col-xs-9')
  371. $('#entries_endTime_' + index).removeClass('col-xs-12').addClass('col-xs-9')
  372. // mbos('beginHalf', index).show()
  373. // mbos('endHalf', index).show()
  374. $('#beginHalf_' + index).css("display", "block")
  375. $('#endHalf_' + index).css("display", "block")
  376. var half = {
  377. am: { alias: localeResource.AM, value: "am" },
  378. pm: { alias: localeResource.PM, value: "pm" },
  379. }
  380. var halfData = _this['isHalf' + index] // 半天假及时间字段
  381. // 编辑时 根据时间判断
  382. var startHM = halfData.pmBeginTime === mbos('entries_beginTime', index).value().split(' ')[1] ? half.pm : half.am
  383. var endHM = halfData.amEndTime === mbos('entries_endTime', index).value().split(' ')[1] ? half.am : half.pm
  384. //mbos('beginHalf', index).value(startHM)
  385. //mbos('endHalf', index).value(endHM)
  386. if(!mbos('beginHalf', index).value()){
  387. mbos('beginHalf', index).value(startHM)
  388. }
  389. if(!mbos('endHalf', index).value()){
  390. mbos('endHalf', index).value(endHM)
  391. }
  392. }
  393. // 设置开启半天假的样式
  394. function setHalfDay(index) {
  395. // 样式变动
  396. $('#entries_beginTime_' + index).removeClass('col-xs-12').addClass('col-xs-8')
  397. $('#entries_endTime_' + index).removeClass('col-xs-12').addClass('col-xs-8')
  398. $('#beginHalf_' + index).css("display", "block")
  399. $('#endHalf_' + index).css("display", "block")
  400. halfClick(index) // 半天枚举控件的点击事件
  401. var halfData = _this['isHalf' + index] // 半天假及时间字段
  402. var half = {}
  403. half[halfData.amBeginTime] = { alias: localeResource.AM + ' ' + halfData.amBeginTime, value: "amBeginTime" }
  404. half[halfData.amEndTime] = { alias: localeResource.AM + ' ' + halfData.amEndTime, value: "amEndTime" }
  405. half[halfData.pmBeginTime] = { alias: localeResource.PM + ' ' + halfData.pmBeginTime, value: "pmBeginTime" }
  406. half[halfData.pmEndTime] = { alias: localeResource.PM + ' ' + halfData.pmEndTime, value: "pmEndTime" }
  407. _this.halfEnum = half
  408. // 编辑时 根据时间判断
  409. var sTime = mbos('entries_beginTime', index).value().split(' ')[1]
  410. var eTime = mbos('entries_endTime', index).value().split(' ')[1]
  411. var startHM = half[sTime] || half[halfData.amBeginTime]
  412. var endHM = half[eTime] || half[halfData.pmEndTime]
  413. mbos('beginHalf', index).value(startHM)
  414. mbos('endHalf', index).value(endHM)
  415. }
  416. // 半天控件的点击事件 给枚举选项拼接时分
  417. function halfClick(index){
  418. var list = ["amBeginTime","amEndTime","pmBeginTime","pmEndTime"]
  419. $('#beginHalf_'+index).click(function () {
  420. setTimeout(function(){
  421. var enumList = $('.seldiv .ng-binding')
  422. for (var i = 0; i < enumList.length; i++) {
  423. if(i == 1 || i == 3){
  424. enumList.eq(i).closest('li').hide();
  425. }
  426. enumList[i].innerHTML = enumList[i].innerHTML.split(' ')[0] + ' ' + _this['isHalf' + index][list[i]]
  427. }
  428. }, 0)
  429. })
  430. $('#endHalf_'+index).click(function () {
  431. setTimeout(function(){
  432. var enumList = $('.seldiv .ng-binding')
  433. for (var i = 0; i < enumList.length; i++) {
  434. enumList.eq(i).closest('li').show();
  435. if(i == 0 || i == 2){
  436. enumList.eq(i).closest('li').hide();
  437. }
  438. enumList[i].innerHTML = enumList[i].innerHTML.split(' ')[0] + ' ' + _this['isHalf' + index][list[i]]
  439. }
  440. }, 0)
  441. })
  442. }
  443. // 隐藏半天假
  444. function hideHalfDay(index) {
  445. $('#entries_beginTime_' + index).removeClass('col-xs-8').addClass('col-xs-12')
  446. $('#entries_endTime_' + index).removeClass('col-xs-8').addClass('col-xs-12')
  447. mbos('beginHalf', index).hide()
  448. mbos('endHalf', index).hide()
  449. }
  450. // 监听请假类型
  451. _this.typeChange = function (event) {
  452. var index = event.index
  453. var entry = mbos('entity').data.entries[index]
  454. if (!event.new_value) return //清空
  455. var type = _this.holidayType && _this.holidayType[event.new_value.id]
  456. if (type) {
  457. entry.sourceUnit = type.sourceUnit // 1是天 2是小时
  458. entry.holidayPolicyId = type.holidayPolicyId
  459. entry.SourceHolidayType = type.sourceHolidayType.id
  460. }
  461. // 是否是哺乳假
  462. var sourceHolidayTypeValue = mbos('entries_sourceHolidayType', index).value();
  463. if (sourceHolidayTypeValue && (sourceHolidayTypeValue.id == _this.bfTypeValue || sourceHolidayTypeValue.name == localeResource.bf_holiday)) {
  464. mbos('entries.isAllDay', index).hide()
  465. mbos('entries_isAllDay',index).value(false)
  466. // 请假类型为【哺乳假】则显示 哺乳假类型、子女出生日期、产假结束日期
  467. mbos('entries.bfType', index).show()
  468. var format = 'YYYY-MM-DD'
  469. if (mbos('entries_bfType', index).value()) {
  470. if(mbos('entries_bfType', index).value().name == localeResource.Customized){
  471. format = 'YYYY-MM-DD HH:mm'
  472. } else {
  473. mbos('entries.childbirthday', index).show()
  474. mbos('entries.mLEndTime', index).show()
  475. }
  476. } else {
  477. // 如果哺乳假类型不存在则默认为自定义
  478. mbos('entries_bfType', index).value({id: _this.customeBf, name: localeResource.Customized})
  479. format = 'YYYY-MM-DD HH:mm'
  480. }
  481. isHalfHoliday(index, format) // 判断是否启用半天假
  482. } else {// 非哺乳假时间格式只有两种:【年月日时分】、【年月日 上/下午】。启用半天假时为【年月日 上/下午】,其他的都是【年月日时分】;
  483. // 其他类型则隐藏
  484. mbos('entries.bfType', index).hide()
  485. mbos('entries_bfType', index).value('')
  486. mbos('entries.childbirthday', index).hide()
  487. mbos('entries.childbirthday', index).value('')
  488. mbos('entries.mLEndTime', index).hide()
  489. mbos('entries.mLEndTime', index).value('')
  490. if(_this.hasAllDayField === 'hasAllDayField'){
  491. mbos('entries.isAllDay', index).show()
  492. }
  493. isHalfHoliday(index) // 判断是否启用半天假
  494. }
  495. if (entry.sourceUnit) {
  496. mbos('entries_leaveLength', index).attr('title', _this.leaveLengthTitle +`(${entry.sourceUnit.alias})`);
  497. }
  498. getTimeLength(index)
  499. getRemainLength(event)
  500. getExplain(index)
  501. }
  502. // 监听 开始时间
  503. _this.calTime1 = function (event) {
  504. if(_this.changeTime) return;
  505. var beginalue = mbos('entries.beginTime',event.index).value();
  506. var endValue = mbos('entries.endTime',event.index).value();
  507. var newEndValue = endValue;
  508. if(new Date(beginalue).getTime() > new Date(endValue).getTime()){
  509. if(endValue && endValue.split(' ').length >= 2){
  510. newEndValue = beginalue.split(' ')[0] + ' ' + endValue.split(' ')[1];
  511. mbos('entries.endTime',event.index).value(newEndValue.split(' ')[0]+" 23:59");
  512. }else{
  513. newEndValue = beginalue;
  514. mbos('entries.endTime',event.index).value(newEndValue);
  515. }
  516. mbos("entries.endYMD",event.index).value(newEndValue);
  517. }
  518. getHolidayType(event)
  519. getTimeLength(event.index)
  520. isElastic(event.index)
  521. getRemainLength(event)
  522. }
  523. // 监听 结束时间
  524. _this.calTime2 = function (event) {
  525. if(_this.changeTime) return;
  526. var beginalue = mbos('entries.beginTime',event.index).value();
  527. var endValue = mbos('entries.endTime',event.index).value();
  528. var newBeginValue = beginalue;
  529. if(new Date(beginalue).getTime() > new Date(endValue).getTime()){
  530. if(beginalue && beginalue.split(' ').length >= 2){
  531. newBeginValue = endValue.split(' ')[0] + ' ' + endValue.split(' ')[1];
  532. mbos('entries.beginTime',event.index).value(newBeginValue.split(' ')[0]+" 00:00");
  533. }else{
  534. newBeginValue = endValue;
  535. mbos('entries.beginTime',event.index).value(newBeginValue);
  536. }
  537. mbos("entries.beginYMD",event.index).value(newBeginValue);
  538. }
  539. getHolidayType(event)
  540. getTimeLength(event.index)
  541. isElastic(event.index)
  542. getRemainLength(event)
  543. }
  544. // 监听 子女出生日期
  545. _this.birthdayChange = function (event) {
  546. // 请假开始时间默认值:产假结束日期,再加1天;
  547. if (event.new_value) {
  548. var value = moment(mbos('entries_childbirthday', event.index).value()).add(1, 'years').format('YYYY-MM-DD')
  549. value = moment(value).subtract(1, 'days').format('YYYY-MM-DD')
  550. mbos('entries.endTime', event.index).value(value)
  551. }
  552. }
  553. // 监听 产假结束日期
  554. _this.mlEndChange = function (event) {
  555. // 请假结束时间默认值:子女出生日期延后一年,再减1天;
  556. if (event.new_value) {
  557. var value = moment(mbos('entries_mLEndTime', event.index).value()).add(1, 'days').format('YYYY-MM-DD')
  558. mbos('entries.beginTime', event.index).value(value)
  559. }
  560. }
  561. // 监听 哺乳假类型
  562. _this.bfTypeChange = function (event) {
  563. var index = event.index
  564. // 哺乳假类型是否为【自定义】
  565. if (!mbos('entries_bfType', index).value()){
  566. // 如果哺乳假类型不存在则默认为自定义
  567. setTimeout(function(){
  568. mbos('entries_bfType', index).value({id: _this.customeBf, name: localeResource.Customized})
  569. }, 0)
  570. }
  571. if (mbos('entries_bfType', index).value() && (mbos('entries_bfType', index).value().id == _this.customeBf || mbos('entries_bfType', index).value().name == localeResource.Customized)) {
  572. // 【自定义】: 则不展示【子女出生日期、产假结束日期】
  573. mbos('entries.childbirthday', index).value('')
  574. mbos('entries.childbirthday', index).hide()
  575. mbos('entries.mLEndTime', index).value('')
  576. mbos('entries.mLEndTime', index).hide()
  577. // 哺乳假类型为【自定义】时,启用半天假时为【年月日 上/下午】,其他的都是【年月日 时分】
  578. isHalfHoliday(index) // 判断是否启用半天假
  579. } else {
  580. // 非【自定义】的所有哺乳假类型 日期格式为年月日
  581. beginEndFormat('YYYY-MM-DD', index)
  582. mbos('entries.childbirthday', index).show()
  583. mbos('entries.mLEndTime', index).show()
  584. }
  585. getTimeLength(event.index)
  586. }
  587. // 监听是否是弹性算时长
  588. _this.isElasticChange = function (event) {
  589. getTimeLength(event.index)
  590. }
  591. // 更改半天假开始
  592. _this.calTime3 = function (event) {
  593. if (event.new_value.alias.split(' ').length === 1 ){
  594. event.new_value.alias += ' '+ _this['isHalf' + event.index][event.new_value.value]
  595. }
  596. getTimeLength(event.index)
  597. }
  598. // 更改半天假结束
  599. _this.calTime4 = function (event) {
  600. if (event.new_value.alias.split(' ').length === 1 ){
  601. event.new_value.alias += ' '+ _this['isHalf' + event.index][event.new_value.value]
  602. }
  603. getTimeLength(event.index)
  604. }
  605. // 时长更改时 做校验
  606. _this.lengthChange = function(event){
  607. var value = event.new_value
  608. // 判断是否等于小于0
  609. if (!isNaN(parseFloat(value)) && value <= 0) {
  610. mbos.msgBox.showError(localeResource.lengthValid);
  611. setTimeout(function(){
  612. mbos('entries_leaveLength',event.index).value('')
  613. })
  614. return
  615. }
  616. }
  617. //更新整体请假
  618. _this.isAllDayChange = function(event){
  619. var index = event.index
  620. _this.setTimeVisiable(index);
  621. getTimeLength(index)
  622. }
  623. //设置半天假的上午下午选择框可见不可见
  624. _this.setTimeVisiable = function(index){
  625. var isAllDay = mbos("entries_isAllDay",index).value();
  626. var isHalf = _this['isHalf' + index] ? _this['isHalf' + index].isHalfDayOff : false;
  627. if(isAllDay){
  628. if(isHalf){
  629. hideHalfDay(index)
  630. }
  631. _this.changeTime = true
  632. beginEndFormat('YYYY-MM-DD', index)
  633. setTimeout(()=>{
  634. _this.changeTime = false
  635. })
  636. }else{
  637. if(isHalf){
  638. //半天假时 整天请假需要显示时间点,切换为非整天请假时需要将时间点去掉
  639. var beginTime = $("#entries_beginTime_"+index+" .ng-pristine").val();
  640. var endTime = $("#entries_endTime_"+index+" .ng-pristine").val()
  641. $("#entries_beginTime_"+index+" .ng-pristine").val(beginTime ? beginTime.split(" ")[0]:'')
  642. $("#entries_endTime_"+index+" .ng-pristine").val(endTime ? endTime.split(" ")[0]:'')
  643. setHalfDay(index)
  644. }else{
  645. hideHalfDay(index)
  646. }
  647. _this.changeTime = true
  648. //半天假和非自定义哺乳假
  649. if(isHalf || _this.isCustomBr(index)==="noCustomBf"){
  650. beginEndFormat('YYYY-MM-DD', index)
  651. }else{
  652. _this.setTimeYMDHM('YYYY-MM-DD HH:mm', index)
  653. }
  654. setTimeout(()=>{
  655. _this.changeTime = false
  656. })
  657. }
  658. }
  659. _this.setTimeYMDHM = function(format, index){
  660. mbos('entries.beginTime', index).timeFormat(format);
  661. mbos('entries.endTime', index).timeFormat(format);
  662. var startTimeValue = mbos('entries.beginTime', index).value();
  663. var endTimeValue = mbos('entries.endTime', index).value();
  664. var isAllDay = mbos('entries.isAllDay', index).value();
  665. var endDate = endTimeValue ? endTimeValue.split(" ")[0] : '';
  666. var endTime = endTimeValue && endTimeValue.split(" ").length == 2 ? endTimeValue.split(" ")[1] : '';
  667. var startDate = startTimeValue ? startTimeValue.split(" ")[0] : '';
  668. var startTime = startTimeValue && startTimeValue.split(" ").length == 2 ? startTimeValue.split(" ")[1] : '';
  669. if(!isAllDay && endTime.indexOf('00:00')!== -1 && startDate===endDate){
  670. var endDate = endTimeValue.split(" ")[0];
  671. mbos('entries.endTime', index).value(endDate+" 23:59")
  672. }
  673. },
  674. _this.bindDateChange = function(index){
  675. $("#entries_beginTime_"+index+" .mobInput").bind('change',function(){
  676. var value = mbos("entries_beginTime_"+index).value();
  677. value = value ? value.split(" ")[0] : '';
  678. mbos("entries_beginYMD_"+index).value(value);
  679. //当开始日期大于于用户选的结束日期时将结束时间设置为开始日期
  680. var endYMD = mbos("entries_endYMD_"+index).value();
  681. if(new Date(endYMD).getTime() < new Date(value).getTime()){
  682. mbos("entries_endYMD_"+index).value(value);
  683. }
  684. })
  685. $("#entries_endTime_"+index+" .mobInput").bind('change',function(){
  686. var value = mbos("entries_endTime_"+index).value();
  687. value = value ? value.split(" ")[0] : '';
  688. mbos("entries_endYMD_"+index).value(value);
  689. //当结束日期小于用户选的开始日期时将开始时间设置为结束日期
  690. var beginYMD = mbos("entries_beginYMD_"+index).value();
  691. if(new Date(beginYMD).getTime() > new Date(value).getTime()){
  692. mbos("entries_beginYMD_"+index).value(value);
  693. }
  694. })
  695. // 工作流根据请假类型匹配不同的流程定义,请假类型改变后要刷新下一步参与人控件
  696. mbos("entries.sourceHolidayType",index).bind("change",function(newF7Value) {
  697. var model = mbos('entity').value();
  698. var param = $.extend(true, {}, model);
  699. var entries = param.entries;
  700. if(entries && entries.length>0){
  701. entries[index].sourceHolidayType = newF7Value;
  702. // 这几个字段导致model转单据实体失败,先去掉待shr排查!
  703. delete entries[index].beginTime;
  704. delete entries[index].beginYMD;
  705. delete entries[index].endTime;
  706. delete entries[index].endYMD;
  707. }
  708. mbos('nextperson1').getNextPerson(param,null);
  709. });
  710. }