| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376 |
- _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('<i class="mustinput">*</i>');
- }
- }
- // 多分录具体事由必填校验
- _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;
- };
|