yylib-quick-mobile
Version:
yylib-quick-mobile
1,420 lines (1,382 loc) • 58.8 kB
JavaScript
/**
* 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