UNPKG

yylib-quick-mobile

Version:

yylib-quick-mobile

1,420 lines (1,382 loc) 58.8 kB
/** * Created by gaoly on 2018/6/14. * * 卡片模版列表默认事件处理Handler */ 'use strict'; import _ from 'lodash' var assign = require('lodash/assign'); import {Toast,Modal} from 'antd-mobile'; var ADDR = window.EnvConfig.ADDR; var YYMessage=Toast; var PubConstants = { /** * 设计器中的组件 */ COM_BPM_MODAL: 'YYBpmModal',//审批流程弹窗 COM_PROCESS_LIST:'YYProcessList',//审批流程列表 COMP_ACCORDION: "YYAccordion", // 多卡片组件 COMP_ACCORDION2: "YYPanel", // 多卡片组件(公有云) COMP_FORM: 'YYFormDev', // 普通表单 COMP_AUDIT_FORM: 'CPAuditInfo', // 审计信息表单 COMP_BPM_SUBMIT: 'CPBpmSubmit', // 提交组件 COM_SUBMIT_BTN:'YYApproveSubmitBtn',//提交按钮 COMP_BPM_SUBMIT2: 'BpmSubmitWidget', // 提交组件(公有云) COMP_BPM_APPROVE: 'CPBpmApprove', // 审批组件 COMP_BPM_APPROVE2: 'BpmApproveWidget', // 审批组件(公有云) /** * 卡片 */ SAVE_BTN_KEY: "saveBtn", // 保存按钮键值 TEM_BTN_KEY:"temBtn", PK_FIELD: "primaryKey", // 审计信息中的主键字段名称 TS_FIELD: "ts", // 审计信息中的ts字段名称 BILL_TYPE_FIELD: "billType", // 审计信息中的单据类型code字段名称 BILL_TYPE_NAME_FIELD: "billName", // 审计信息中的单据类型name字段名称 BILL_STATE_FIELD: "billState", // 审计信息中的单据状态字段名称 BILL_CODE_FIELD: "billCode", // 审计信息中的单据编号字段名称 ATTACH_MGR_FIELD: "attachMgr", // 审计信息中的附件管理字段(存储附件的id) /** * 卡片返回列表的路由标识 */ CARD_TO_LIST: "cardToList", /** * 编辑表格 */ ATTACH_UPLOAD_FIELD: "attachObjs", // 附件上传与后端对应的字段 /** * 公共 */ DEFAULT_PK_FIELD_VALUE: "id", // 默认的主键字段值 DEFAULT_DATE_FORMAT: "yyyy-MM-dd HH:mm:ss", // 默认的日期格式 DEFAULT_ORG_FIELD: "companyId", // 单据上面默认的组织字段 /** * 单据状态 */ BILL_STATE: { STORAGE: -1, // 暂存 FREE: 0, // 自由态 COMMIT: 1, // 提交态 APPROVING: 2, // 审批进行中 APPROVED: 3, // 审批通过 UNAPPROVED: 4, // 审批不通过 APPROVED2: 5 // 已审批(直审) } }; var formatDate=function(date, format){ if (date===undefined || date === null || !(date instanceof Date)) { return date; } var o = { "M+": date.getMonth() + 1, "d+": date.getDate(), "(H|h)+": date.getHours(), "m+": date.getMinutes(), "s+": date.getSeconds(), "q+": Math.floor((date.getMonth() + 3) / 3), "S": date.getMilliseconds() }; if (/(y+)/.test(format)) { format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); } for (var k in o) { if (new RegExp("(" + k + ")").test(format)) { format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]) .substr(("" + o[k]).length)); } } return format; } var ajax =window.YYUtils.Ajax;//ajax请求类 var AuthToken =window.YYUtils.AuthToken;//单点登录工具类 var CardEventHandler = {}; /** * 卡片页面初始化 * @param page * @param urls * @param options * autoLoadData 是否自动加载数据 * autoRenderOperate 是否自动渲染编辑表格的行操作按钮 * setDefaultData 设置默认值的回调 * beforeSetData 设值到界面显示前的回调 * callback 加载数据之后的回调函数 * beforeFormSetData 设置到对应表单数据前的回调 * beforeFormSaveData 保存表单数据 * clearAttachIds 是否清空附件id(bool类型,默认true) */ CardEventHandler.init = function (page, urls, options) { if (!urls) { console.error("卡片界面初始化失败,urls未定义"); return; } var _this = this; this.getRepeaterApi(page);//初始化子表组件 var _ref = options || {}, autoLoadData = _ref.autoLoadData, autoRenderOperate = _ref.autoRenderOperate, setDefaultData = _ref.setDefaultData, beforeSetData = _ref.beforeSetData, beforeFormSetData=_ref.beforeFormSetData, beforeFormSaveData=_ref.beforeFormSaveData, beforeSetRepeaterData =_ref.beforeSetRepeaterData, beforeGetRepeaterData =_ref.beforeGetRepeaterData, clearAttachIds = _ref.clearAttachIds, callback = _ref.callback; this.urls = urls; this.setDefaultData = setDefaultData; this.beforeSetData = beforeSetData; this.clearAttachIds = clearAttachIds; this.beforeFormSetData=beforeFormSetData this.beforeFormSaveData=beforeFormSaveData this.beforeSetRepeaterData = beforeSetRepeaterData this.beforeGetRepeaterData = beforeGetRepeaterData var forms = this.getForms(page, true); if (forms.length) { var form = forms[0]; this.offline = form&&form.api&&form.api.props&&form.api.props.offline; } // 缓存设计器中禁用的表单项 if (autoRenderOperate != false) {} if (autoLoadData != false) { var routeParams = page.getRouteQuery() || page.getRouteParams(); if (routeParams && !_.isEmpty(routeParams)) { var primaryField = this.getPrimaryField(page); if (routeParams[primaryField]) { this.queryDetail(page, { params: routeParams, callback: callback }); } else if (this.offline && routeParams['billId']) { this.saveDataBillId = routeParams['billId']; this.queryDetail(page, { params: routeParams, callback: callback }); } else { CardEventHandler.getInitBillId(page); this.refresh(page, setDefaultData); } } else { CardEventHandler.getInitBillId(page); this.refresh(page, setDefaultData); } } else { CardEventHandler.getInitBillId(page); this.refresh(page, setDefaultData); } }; CardEventHandler.getInitBillId = function(page) { var imgs = page.findUIByType('YYImagePicker'); if (this.offline) { this.saveDataBillId = ''; this.initbillId = '';//初始化数据 CardEventHandler.getUUid(function(billId){ _this.initbillId = billId; }); } } /***** * 获取当前卡片页面所有的子表组件 * * *******/ CardEventHandler.getAllRepeater=function(page){ var repeaterList = page.findUIByType("YYRepeater"); if (repeaterList&&repeaterList.length) { return repeaterList; } else { return []; } } /***** *获取所有字表组件的api * *****/ CardEventHandler.getRepeaterApi=function(page){ var repeaterList=this.getAllRepeater(page);//获取所有的list repeaterList.map(function(repeater,index){ repeater.useCrud=true; }) } /** * 循环项目子表,设置数据 * @param page * @param data form表单的数据 */ CardEventHandler.setAllRepeaterData = function(page,data) { let repeater = this.getAllRepeater(page); var _this = this; repeater.map((item,index)=>{ let repeaterItem = page.findUI(item.uikey); if (data[item.uikey]&&data[item.uikey].length) { if(_.isFunction(_this.beforeFormSetData)){ //如果表单设置数据不为空 var returnData=_this.beforeFormSetData(repeaterItem.uikey,data[item.uikey]); if(returnData){ repeaterItem.beforeData = returnData; data[item.uikey].map((child,index)=>{ child = Object.assign({},returnData,child); }); } repeaterItem.api.setData(data[item.uikey]); }else{ repeaterItem.api.setData(data[item.uikey]); } } }); } /** * 循环项目子表,获取数据 * @param page * @return 所有循环项目列表数据 */ CardEventHandler.getAllRepeaterData = function(page) { let repeater = this.getAllRepeater(page); let data = {}; var _this = this; repeater.map((item,index)=>{ let repeaterItem = page.findUI(item.uikey); data[item.uikey] = repeaterItem.api.getData(); data[item.uikey].map((item,index)=>{ for(var key in item){ if(item[key] instanceof Date) { item[key] =formatDate(item[key], "yyyy-MM-dd HH:mm:ss"); } if (item[key] instanceof Array) { item[key]=item[key].join(',');//将数组转化成数字 } } }); }); return data; } /**** * 获取对象中的表单组件对应的key(只匹配第一个key) * ***/ CardEventHandler.getFormControlKey=function(obj){ var key; if(obj){ for(var item in obj){ if(obj[item].uitype=="YYFormDev"){ key=item; break;//只找一个 } } } return key; } /** * 判断当前运行环境是否本地环境 */ CardEventHandler.isLocalEnv = function () { return !window.top.getAuthorityButtons || !_.isFunction(window.top.getAuthorityButtons); }; /** * 流程列表的行点击事件 * @param page * @param row */ CardEventHandler.onListClick = function(page) { CardEventHandler.reloadData(page); }; /** * 表单保存按钮 * param page */ CardEventHandler.save = function(page){ var form = page.findUI("YYFormDev"); form.api.validateFields(function(error,values){ if(error){ Toast.info("请输入必填项!",1) return; }else{ CardEventHandler.saveData(page) } }) } /** * 表单暂存按钮 * param page */ CardEventHandler.tempSave = function(page){ CardEventHandler.saveTempData(page); } /** * 卡片界面默认uiEvent */ CardEventHandler.API = { "YYButton2":{ "onClick":function(){ alert(JSON.stringify(this.findUI("ExtensionEntity").api.getData())) } }, "saveBtn": {//保存按钮 onClick: function(options) { CardEventHandler.save(this) } }, "temBtn": {//暂存按钮 onClick: function(options) { CardEventHandler.tempSave(this); } }, "YYApproveNavBar": {//审批导航栏 onLeftClick: function onClick() { var primaryKey = CardEventHandler.getPrimaryKey(this); var _this = this; if (!primaryKey) { Modal.alert( "确认", "当前界面数据未保存,是否确定返回?", [ { text:'确认', onPress: function onOk() { CardEventHandler.goBack(_this); } }, { text: '取消' } ]); } else { CardEventHandler.goBack(this); } }, onSelect:function(options) { if(options) { CardEventHandler.reloadData(this); } } }, 'YYApproveSubmitBtn':{//提交审批 onlistClick: function() {//点击列表 CardEventHandler.onListClick(this); }, onBeforeClick:function(callbackFun) { var _this = this; CardEventHandler.saveData(this, { callback: function callback(result) { if (result.success) { callbackFun(result.backData); } else { Toast.fail(result.backMsg, 1); } } }); }, onClose:function(options) { CardEventHandler.reloadData(this); } }, }; /** * 标准单据卡片界面返回列表界面 * 卡片界面返回的特殊性: 要考虑点击磁贴"添加", 从portal主页直接跳转到卡片界面时的情况,此时需要返回列表界面,而不是portal主页 * @param page */ CardEventHandler.goBack = function (page) { window.EnvConfig = window.EnvConfig || null; var routeParams = {}; routeParams[PubConstants.CARD_TO_LIST] = true; // 有自定义的卡片界面返回路由路径 if (this.urls && this.urls.CARD_GO_BACK) { page.routeTo('' + this.urls.CARD_GO_BACK, null, routeParams); } else if (this.isLocalEnv()) { // 本地环境 page.goBack(); } else { // 线上环境 var routePath = page.props.location.pathname; var listRoute = ''; if (routePath) { var routes = routePath.split('/'); if (_.isArray(routes) && routes.length > 1) { listRoute = routes[0] ? routes[0] : routes[1]; } } if (listRoute) { page.routeTo(listRoute, null, routeParams); } else { page.goBack(); } } }; /** * 刷新界面 * @param page * @param callback 刷新完毕后的回调函数 */ CardEventHandler.refresh = function (page, callback) { // 1.重置界面状态 var submitBtn = page.findUI(PubConstants.COM_SUBMIT_BTN);//提交按钮 var pk = this.getPrimaryKey(page); var saveBtn = page.findUI(PubConstants.SAVE_BTN_KEY); //保存按钮 var temBtn = page.findUI(PubConstants.TEM_BTN_KEY);//暂存按钮 var repeater = this.getAllRepeater(page); if (pk) { // 判断单据状态 var billState = this.getBillState(page); switch (billState) { case PubConstants.BILL_STATE.STORAGE: if (submitBtn) { submitBtn.disabled = true; } if (saveBtn) { saveBtn.disabled = false; } if (temBtn) { temBtn.disabled = false; } repeater.map((item,index)=>{ item.addNavBar = true; item.editNavBar = true; item.delNavBar = true; }); this.enablePage(page); break; case PubConstants.BILL_STATE.FREE: if (submitBtn) { submitBtn.disabled = false; } if (saveBtn) { saveBtn.disabled = false; } if (temBtn) { temBtn.disabled = false; } repeater.map((item,index)=>{ item.addNavBar = true; item.editNavBar = true; item.delNavBar = true; }); this.enablePage(page); break; case PubConstants.BILL_STATE.COMMIT: if (submitBtn) { submitBtn.disabled = true; } if (saveBtn) { saveBtn.disabled = true; } if (temBtn) { temBtn.disabled = true; } repeater.map((item,index)=>{ item.addNavBar = false; item.editNavBar = false; item.delNavBar = false; }); this.disablePage(page); break; case PubConstants.BILL_STATE.APPROVING: if (submitBtn) { submitBtn.disabled = true; } if (saveBtn) { saveBtn.disabled = true; } if (temBtn) { temBtn.disabled = true; } repeater.map((item,index)=>{ item.addNavBar = false; item.editNavBar = false; item.delNavBar = false; }); this.disablePage(page); break; case PubConstants.BILL_STATE.APPROVED: case PubConstants.BILL_STATE.UNAPPROVED: if (submitBtn) { submitBtn.disabled = true; } if (saveBtn) { saveBtn.disabled = true; } if (temBtn) { temBtn.disabled = true; } repeater.map((item,index)=>{ item.addNavBar = false; item.editNavBar = false; item.delNavBar = false; }); this.disablePage(page); break; default: break; } } else { if (submitBtn) { submitBtn.disabled = true; } if (saveBtn) { saveBtn.disabled = false; } if (temBtn) { temBtn.disabled = false; } repeater.map((item,index)=>{ item.addNavBar = true; item.editNavBar = true; item.delNavBar = true; }); this.enablePage(page); } // 取消卡片界面加载中状态 if (callback && _.isFunction(callback)) { page.refresh(callback); } else { page.refresh(); } }; /** * 界面切换为非编辑态 * @param page */ CardEventHandler.disablePage = function (page) { var forms = this.getForms(page, true); _.forEach(forms, function (form) { form.disabled = true; }); }; /** * 界面切换为编辑态(排除界面设计器默认非编辑态的字段) * @param page */ CardEventHandler.enablePage = function (page) { var forms = this.getForms(page, true); _.forEach(forms, function (form) { form.disabled = false; }); page.refresh(); }; /** * 重新加载界面数据 * @param page * @param callback 回调函数 */ CardEventHandler.reloadData = function (page, billId ,callback) { var primaryField = this.getPrimaryField(page); var primaryKey = this.getPrimaryKey(page); this.saveDataBillId = ''; if (primaryKey) { var routeParams = page.getRouteQuery() || page.getRouteParams() || {}; routeParams[primaryField] = primaryKey; this.queryDetail(page, { params: routeParams, callback: callback }); } else { if (billId) { this.saveDataBillId = billId; this.queryDetail(page, { params: {billId:billId}, callback: callback }); } else { page.refresh(); } } }; /** * 设值到界面显示 * @param page * @param data */ CardEventHandler.setData = function (page, data) { if (!data || _.isEmpty(data)) { return; } if (_.isFunction(this.beforeSetData)) { data = this.beforeSetData(data); if (!data || _.isEmpty(data)) { console.error("beforeSetData回调函数未返回任何数据!"); return; } } var forms = this.getForms(page); var primaryField = this.getPrimaryField(page); var billType = this.getBillType(page); var billState = data['' + PubConstants.BILL_STATE_FIELD] ? data['' + PubConstants.BILL_STATE_FIELD] : PubConstants.BILL_STATE.FREE; var primaryKey = data['' + primaryField]; var _this = this; //处理审批导航栏---start var approveNavBar = page.findUI("YYApproveNavBar"); if(approveNavBar){ approveNavBar.billId = data.id; approveNavBar.billTypeId = data.billType; approveNavBar.billState = data.billState; } var YYApproveSubmitBtn = page.findUI(PubConstants.COM_SUBMIT_BTN); if (YYApproveSubmitBtn) { var defaultProcInstName = page.findUI('defaultProcInstName')&&page.findUI('defaultProcInstName').uititle; var subParam = { billTypeId: data.billType, billTypeCode: data.billCode, billId: data.id, defaultProcInstName:defaultProcInstName } YYApproveSubmitBtn.subParam = subParam; } //处理审批导航栏---end _this.setAllRepeaterData(page,data); // 处理表单 var defaultData=_.cloneDeep(data);//克隆一份数据 _.forEach(forms, function (form) { if(_.isFunction(_this.beforeFormSetData)){ //如果表单设置数据不为空 var returnData=_this.beforeFormSetData(form.uikey,defaultData); if(returnData){ data=returnData; }else{ if (form.automatch) { var key = form.uikey; // var keys = key.split('.'); var data = defaultData[key]; // keys.map((item,index)=>{ // if (data[item]) { // data = data[item]; // } // }); if(Array.isArray(data)) { data = data[0] } else { data = data; } } else { data=_.cloneDeep(defaultData); } } }else{ if (form.automatch) { var key = form.uikey; // var keys = key.split('.'); var data = defaultData[key]; // keys.map((item,index)=>{ // if (data[item]) { // data = data[item]; // } // }); if(Array.isArray(data)) { data = data[0] } else { data = data; } } else { data=_.cloneDeep(defaultData); } } _.forEach(form.children, function (formItem) { if ("YYDatePicker" === formItem.uitype||formItem.uitype=="YYCalendar") { // 日期组件或者日历 if(formItem.uitype=="YYCalendar"){ var calendarValue={}; if(data[formItem.startField]){ calendarValue[formItem.startField]=new Date(data[formItem.startField]) } if(data[formItem.endField]){ calendarValue[formItem.endField]=new Date(data[formItem.endField]) } data[formItem.field]=calendarValue; }else{ if(!(data[formItem.field] instanceof Date)){ data[formItem.field] = data[formItem.field]&&data[formItem.field].replace(/\-/g,'/'); data[formItem.field] = new Date(data[formItem.field]); } } } else if ("YYImagePicker" === formItem.uitype) { // 附件上传和图片上传 if (primaryKey) { if (formItem.source) { //formItem.source.sourceId = primaryKey; formItem.source = {...formItem.source,sourceId:primaryKey}; } } else { if (_this.offline){ if (formItem.source) { formItem.source = {...formItem.source,sourceId: _this.saveDataBillId ? _this.saveDataBillId : _this.initbillId}; // formItem.source.sourceId = _this.saveDataBillId ? _this.saveDataBillId : _this.initbillId; } } } } else if("YYPicker" === formItem.uitype){ var values = data[formItem.field]; if(typeof values=="string"){ data[formItem.field]=values.split(',');//转化成数组形式 } } else if ("YYRefer" === formItem.uitype) { // 选择器 var values = data[formItem.field]; if (_.isPlainObject(values)) { // 单选 var cvalue = _.cloneDeep(values); // 值类型为对象 if ("id" !== formItem.id) { // 取code delete cvalue['id']; data[formItem.field] = cvalue; } } else if (_.isArray(values)) { // 多选 var cvalue = _.cloneDeep(values); // 值类型为对象 if ("id" !== formItem.id) { // 取code cvalue.map(function (value) { delete value['id']; }); data[formItem.field] = cvalue; } } } }); if (form.api) { form.api.setFieldsValue(data); } }); }; /** * 根据id查询明细 * @param page * @param options * url ajax请求的url * params 参数 * beforeAction 前事件,返回true继续,返回false终止 * callback 回调函数 * error ajax请求失败的回调函数 */ CardEventHandler.queryDetail = function (page, options) { var _this = this; var _ref4 = options || {}, url = _ref4.url, params = _ref4.params, beforeAction = _ref4.beforeAction, callback = _ref4.callback, error = _ref4.error; var result = true; if (beforeAction && _.isFunction(beforeAction)) { result = beforeAction(); } if (!result) { this.pageLoaded(page); return; } if (_this.offline) {//离线标识 var offlineParam = { billId:params.id?params.id:params.billId, reqUrl: url ? url : this.urls.QUERY_DETAIL, reqMethod: 'get', params: {id: params.id ? params.id : params.billId} } ajax.offLineQueryBillData(offlineParam,function(res){//离线-根据单据ID查询单据详情 if (res['issubmit']==='1') {//线上数据 var result = res['data']; if (callback && _.isFunction(callback)) { callback(result); } else { if (result.success) { // 默认处理,设值到界面 var data = result.backData; _this.setData(page, data); _this.refresh(page); } else { YYMessage.fail(result.backMsg, 1); _this.refresh(page); } } } else if (res.success) { var data = res.backData; _this.setData(page, data); _this.refresh(page); } else {//暂存数据 var data = res['data']; data = Object.assign({},data,{billId:offlineParam.params.id}); _this.setData(page, data); _this.refresh(page); } },function(error){ YYMessage.fail(error, 1); }); } else { ajax.getJSON(url ? url : this.urls.QUERY_DETAIL, params, function (result) { if (callback && _.isFunction(callback)) { callback(result); } else { if (result.success) { // 默认处理,设值到界面 var data = result.backData; _this.setData(page, data); _this.refresh(page); } else { YYMessage.fail(result.backMsg, 1); _this.refresh(page); } } }, error); } }; /** * 多表单校验(递归方式) * @param page * @param options * formKeys 待校验的表单键值 * error 校验失败之后的回调函数(任意一个表单未校验通过都会回调该方法) * success 校验成功之后的回调函数(所有表单校验通过回调该方法) */ CardEventHandler.multiFormValid = function (page, options) { var _assign = assign({}, { formKeys: [], index: 0, formValues: {}, formErrors: {}, success: null, error: null }, options), formKeys = _assign.formKeys, formMains = _assign.formMains, index = _assign.index, formValues = _assign.formValues, formErrors = _assign.formErrors, success = _assign.success, error = _assign.error; if (formKeys && _.isArray(formKeys) && formKeys.length > 0) { var formKey = formKeys[index]; var form = page.findUI(formKey); if (form && form.api) { form.api.validateFields(function (errors, values) { if (!!errors) { // 验证失败 formErrors[formKey] = errors; formValues[formKey] = values; } if (formKeys.length === index + 1) { // 所有表单校验完毕 if (_.isEmpty(formErrors)) { if (_.isFunction(success)) { success({ formValues: formValues }); } } else { if (_.isFunction(error)) { error({ formErrors: formErrors }); } } } else { // 继续递归 CardEventHandler.multiFormValid(page, assign({}, options, { formValues: formValues, formErrors: formErrors, index: index + 1 })); } }); } } else { console.warn("待校验的表单为空!"); success(); } }; /** * 多表单不校验(递归方式) * @param page */ CardEventHandler.multiForm = function (page, options) { var _assign = assign({}, { formKeys: [], index: 0, formValues: {}, formErrors: {}, success: null, error: null }, options), formKeys = _assign.formKeys, formMains = _assign.formMains, index = _assign.index, formValues = _assign.formValues, formErrors = _assign.formErrors, success = _assign.success, error = _assign.error; if (formKeys && _.isArray(formKeys) && formKeys.length > 0) { var formKey = formKeys[index]; var form = page.findUI(formKey); if (form && form.api) { formValues[formKey] = form.api.getFieldsValue(); if (formKeys.length === index + 1) { // 所有表单校验完毕 success({ formValues: formValues }); } else { // 继续递归 CardEventHandler.multiForm(page, assign({}, options, { formValues: formValues, formErrors: formErrors, index: index + 1 })); } } } else { console.warn("待校验的表单为空!"); success(); } }; /** * 保存数据 * @param page * @param options * url ajax请求的url * btnKey 保存按钮的键值(保存并新增|保存并复制) * excludeKeys 不进行校验的表单和表格键值集合(String or Array) * excludeSaveKeys 不进行保存的表单键值集合(String or Array) * beforeAction 前事件(主要在保存前做自定义校验),返回true继续,返回false终止 * prepareDataCallback 合并数据后的回调(此时能够对要保存的数据进行处理) * callback 保存后的回调函数 * validateError 任意表单校验失败的回调 * error ajax请求失败的回调函数 */ CardEventHandler.saveData = function (page, options) { // 1.表单校验 var _ref5 = options || {}, excludeKeys = _ref5.excludeKeys, excludeSaveKeys = _ref5.excludeSaveKeys, validateError = _ref5.validateError; var formKeys = this.getFormKeys(page); var validFormKeys = this.getFormKeys(page, true); if (excludeKeys) { validFormKeys = validFormKeys.filter(function (formKey) { if (_.isArray(excludeKeys)) { return !contains(excludeKeys, formKey); } else { return excludeKeys !== formKey; } }); } var childData = this.getAllRepeaterData(page);//获取子表的数据 var _this = this; this.multiFormValid(page, { formKeys: validFormKeys, success: function success(formValues) { var _ref6 = options || {}, url = _ref6.url, btnKey = _ref6.btnKey, beforeAction = _ref6.beforeAction, excludeKeys = _ref6.excludeKeys, prepareDataCallback = _ref6.prepareDataCallback, callback = _ref6.callback, error = _ref6.error; if (!success) { return; } var result = true; if (beforeAction && _.isFunction(beforeAction)) { result = beforeAction(); } if (!result) { return; } // 2.合并数据 //_this.pageLoading(page); var saveData = {}; _.forEach(formKeys, function (formKey) { var formData = {}; var form = page.findUI(formKey); if (form && form.api) { if (excludeSaveKeys) { if (_.isArray(excludeSaveKeys)) { // 是数组 if (!contains(excludeSaveKeys, formKey)) { formData = form.api.getFieldsValue(); } } else { // 单个字符串 if (excludeSaveKeys !== formKey) { formData = form.api.getFieldsValue(); } } } else { formData = form.api.getFieldsValue(); } } if (!_.isEmpty(formData)) { var attachObjs = []; _.forEach(form.children, function (formItem) { var values = formData[formItem.field];//取字段 if (values) { if ("YYDatePicker" === formItem.uitype&&formData[formItem.field] instanceof Date) { // 日期 formData[formItem.field] =formatDate(formData[formItem.field], "yyyy-MM-dd HH:mm:ss"); } else if("YYPicker" === formItem.uitype){ if(values instanceof Array){ formData[formItem.field]=values.join(',');//将数组转化成数字 } }else if("YYCalendar" === formItem.uitype){ //处理日历组件 if(formItem.startField){ formData[formItem.startField]=formatDate(formData[formItem.field][formItem.startField], "yyyy-MM-dd HH:mm:ss"); } if(formItem.endField){ formData[formItem.endField]=formatDate(formData[formItem.field][formItem.endField], "yyyy-MM-dd HH:mm:ss"); } formData[formItem.field]=null; } } else{ if ("YYImagePicker" === formItem.uitype) { var attachValues=formData[formItem.source&&formItem.source.sourceType];//附件字段取的是上传图片组件的单据业务类型 // 附件上传和图片上传 var attachObj = { attachMgr: attachValues, sourceType: formItem.source&&formItem.source.sourceType ? formItem.source.sourceType : formItem.uikey }; attachObjs.push(attachObj); formData['' + formItem.field]=null;//清空附件信息 } } }); if(_this.beforeFormSaveData&& _.isFunction(_this.beforeFormSaveData)){ //如果需要特殊处理数据 var returnData=_this.beforeFormSaveData(formKey,_.cloneDeep(saveData),formData); if(returnData){ saveData=returnData; }else{ saveData = assign(formData, saveData); if (form.automatch) { var key = form.uikey; if (form.dataType=='array') { formData={[key]:[formData]}; } else { formData={[key]:formData}; } saveData = assign(formData, saveData); } else { saveData = assign(formData, saveData); } } }else{ if (form.automatch) { var key = form.uikey; if (form.dataType=='array') { formData={[key]:[formData]}; } else { formData={[key]:formData}; } saveData = assign(formData, saveData); } else { saveData = assign(formData, saveData); } } var existAttachs = saveData['attachObjs']; if (existAttachs && _.isArray(existAttachs)) { //如果原来有数据 则进行合并 saveData['attachObjs'] = existAttachs.concat(attachObjs); } else { saveData['attachObjs'] = attachObjs; } } }); var pk = _this.getPrimaryKey(page); var saveUrl = pk ? _this.urls.UPDATE : _this.urls.INSERT; // 对待保存数据进行处理 if (prepareDataCallback && _.isFunction(prepareDataCallback)) { var customSaveData = prepareDataCallback(_.cloneDeep(saveData)); if (customSaveData && _.isPlainObject(customSaveData)) { saveData = customSaveData; } } saveData = assign(saveData,childData); if (_this.offline) { var routeParams = page.getRouteQuery() || page.getRouteParams(); var billId = saveData['id']?saveData['id']:routeParams&&routeParams['billId']?routeParams['billId']:_this.saveDataBillId; var saveParams = { billId:billId, reqUrl: url ? url : saveUrl, reqMethod: 'post', params:saveData }; ajax.onLineSaveData(saveParams,function(result){ if (callback && _.isFunction(callback)) { callback(result); } else { if (result.success) { // 默认处理,设值到界面显示 var data = result.backData; _this.setData(page, data); _this.refresh(page, function () { YYMessage.success('保存成功', 1); _this.reloadData(page); }); } else { YYMessage.fail(result.backMsg, 1); _this.refresh(page); } } },function(error){ YYMessage.fail(error, 1); }); } else { // 3.执行保存 ajax.postJSON(url ? url : saveUrl, saveData, function (result) { if (callback && _.isFunction(callback)) { callback(result); } else { if (result.success) { // 默认处理,设值到界面显示 var data = result.backData; _this.setData(page, data); _this.refresh(page, function () { YYMessage.success('保存成功', 1); _this.reloadData(page); }); } else { YYMessage.fail(result.backMsg, 1); _this.refresh(page); } } }, error); } }, error: function error(formErrors) { if (_.isFunction(validateError)) { validateError(formErrors); } } }); }; /** * 保存-暂存数据 * @param page */ CardEventHandler.saveTempData = function (page, options) { // 1.表单校验 var _ref5 = options || {}, excludeKeys = _ref5.excludeKeys, excludeSaveKeys = _ref5.excludeSaveKeys, validateError = _ref5.validateError; var formKeys = this.getFormKeys(page); var validFormKeys = this.getFormKeys(page, true); if (excludeKeys) { validFormKeys = validFormKeys.filter(function (formKey) { if (_.isArray(excludeKeys)) { return !contains(excludeKeys, formKey); } else { return excludeKeys !== formKey; } }); } var childData = this.getAllRepeaterData(page);//获取子表的数据 var _this = this; this.multiForm(page, { formKeys: validFormKeys, success: function success(formValues) { var _ref6 = options || {}, url = _ref6.url, btnKey = _ref6.btnKey, beforeAction = _ref6.beforeAction, excludeKeys = _ref6.excludeKeys, prepareDataCallback = _ref6.prepareDataCallback, callback = _ref6.callback, error = _ref6.error; if (!success) { return; } var result = true; if (beforeAction && _.isFunction(beforeAction)) { result = beforeAction(); } if (!result) { return; } // 2.合并数据 //_this.pageLoading(page); var saveData = {}; _.forEach(formKeys, function (formKey) { var formData = {}; var form = page.findUI(formKey); if (form && form.api) { if (excludeSaveKeys) { if (_.isArray(excludeSaveKeys)) { // 是数组 if (!contains(excludeSaveKeys, formKey)) { formData = form.api.getFieldsValue(); } } else { // 单个字符串 if (excludeSaveKeys !== formKey) { formData = form.api.getFieldsValue(); } } } else { formData = form.api.getFieldsValue(); } } if (!_.isEmpty(formData)) { var attachObjs = []; _.forEach(form.children, function (formItem) { var values = formData[formItem.field];//取字段 if (values) { if ("YYDatePicker" === formItem.uitype&&formData[formItem.field] instanceof Date) { // 日期 formData[formItem.field] =formatDate(formData[formItem.field], "yyyy-MM-dd HH:mm:ss"); } else if("YYPicker" === formItem.uitype){ if(values instanceof Array){ formData[formItem.field]=values.join(',');//将数组转化成数字 } }else if("YYCalendar" === formItem.uitype){ //处理日历组件 if(formItem.startField){ formData[formItem.startField]=formatDate(formData[formItem.field][formItem.startField], "yyyy-MM-dd HH:mm:ss"); } if(formItem.endField){ formData[formItem.endField]=formatDate(formData[formItem.field][formItem.endField], "yyyy-MM-dd HH:mm:ss"); } formData[formItem.field]=null; } } else{ if ("YYImagePicker" === formItem.uitype) { var attachValues=formData[formItem.source&&formItem.source.sourceType];//附件字段取的是上传图片组件的单据业务类型 // 附件上传和图片上传 var attachObj = { attachMgr: attachValues, sourceType: formItem.source&&formItem.source.sourceType ? formItem.source.sourceType : formItem.uikey }; attachObjs.push(attachObj); formData['' + formItem.field]=null;//清空附件信息 } } }); if(_this.beforeFormSaveData&& _.isFunction(_this.beforeFormSaveData)){ //如果需要特殊处理数据 var returnData=_this.beforeFormSaveData(formKey,_.cloneDeep(saveData),formData); if(returnData){ saveData=returnData; }else{ saveData = assign(formData, saveData); if (form.automatch) { var key = form.uikey; if (form.dataType=='array') { formData={[key]:[formData]}; } else { formData={[key]:formData}; } saveData = assign(formData, saveData); } else { saveData = assign(formData, saveData); } } }else{ if (form.automatch) { var key = form.uikey; if (form.dataType=='array') { formData={[key]:[formData]}; } else { formData={[key]:formData}; } saveData = assign(formData, saveData); } else { saveData = assign(formData, saveData); } } var existAttachs = saveData['attachObjs']; if (existAttachs && _.isArray(existAttachs)) { //如果原来有数据 则进行合并 saveData['attachObjs'] = existAttachs.concat(attachObjs); } else { saveData['attachObjs'] = attachObjs; } } }); var pk = _this.getPrimaryKey(page); var saveUrl = pk ? _this.urls.UPDATE : _this.urls.INSERT; // 对待保存数据进行处理 if (prepareDataCallback && _.isFunction(prepareDataCallback)) { var customSaveData = prepareDataCallback(_.cloneDeep(saveData)); if (customSaveData && _.isPlainObject(customSaveData)) { saveData = customSaveData; } } saveData = assign(saveData,childData); if (_this.offline) { var routeParams = page.getRouteQuery() || page.getRouteParams(); var billId = saveData['id'] ? saveData['id'] : routeParams && routeParams['billId'] ? routeParams['billId'] : _this.saveDataBillId; if (!billId) { billId = _this.initbillId; } var tempParam = { billTypeCode: saveData['billType'], billId: billId, params: saveData }; ajax.offLineSaveTempData(tempParam, function (data) { if (data['billId']) { _this.refresh(page, function () { YYMessage.success('离线暂存成功', 1); _this.reloadData(page, data['billId']); }); } }, function (error) { YYMessage.fail(error, 1); _this.refresh(); }); } }, error: function error(formErrors) { if (_.isFunction(validateError)) { validateError(formErrors); } } }); }; /** * 离线方案 * 获取单据唯一标识方法 * @param page */ CardEventHandler.getUUid = function () { var uuid = ''; var _this = this; try { YYPlugin.call("ExpandPlugin", "getUuid", {}, function (data) { if (data) { uuid = data['Uuid']; _this.initbillId = uuid; } else { YYMessage.fail(data['msg'], 1); } }, function (error) { YYMessage.fail(error, 1); }); } catch (err) { uuid = ''; } }; /** * 获取页面所有的表单 * @param page * @param excludeAudit 是否排除审计信息Form * @returns */ CardEventHandler.getForms = function (page, excludeAudit) { var normalForms = page.findUIByType(PubConstants.COMP_FORM); var resultForms = []; var auditForm = this.getAuditInfoForm(page); if (auditForm && !excludeAudit) { return normalForms.concat(auditForm); } normalForms.map((item,index)=>{ if(item&&item.api) { resultForms.push(item); } }); return resultForms; }; /** * 获取页面所有表单键值 * @param pa