@wufengteam/wform
Version:
@wufengteam/wform
162 lines (160 loc) • 6.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.subFormDataBackfill = exports.getLinkDataId = exports.WFORMCOMPTYPE = void 0;
var _lodash = _interopRequireDefault(require("lodash.clonedeep"));
var _tool = require("../utils/tool");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* eslint-disable no-console */
/**
* 获取子表单中的关联数据组件所关联数据Id
*/
var getLinkDataId = exports.getLinkDataId = function getLinkDataId(data) {
if ((0, _tool.isPlainObject)(data)) {
var dataLinkageKey = Object.keys(data).find(function (key) {
return key.startsWith('DataLinkage_');
});
if (dataLinkageKey) {
return data[dataLinkageKey];
}
return undefined;
}
return undefined;
};
/**
* 获取选择数据时类型,单选或多选
* @returns 是否多选
*/
var getIsMultipleSelect = function getIsMultipleSelect(subFormDataList, subFormStartIndex) {
if (subFormDataList && Array.isArray(subFormDataList) && subFormDataList.length > 0) {
var item = subFormDataList[subFormStartIndex || 0];
// getLinkDataId(item)返回值为undefined时表示关联数据未选择数据
return getLinkDataId(item) === undefined;
}
return true;
};
/**
* 根据数据填充规则填充数据
*/
var dataLinkageRule = function dataLinkageRule(dataLinkageRuleInfo, sourceData, targetData) {
dataLinkageRuleInfo === null || dataLinkageRuleInfo === void 0 ? void 0 : dataLinkageRuleInfo.forEach(function (rule) {
var _a;
var _ref = rule || {},
fieldInfo = _ref.fieldInfo,
fillFieldInfo = _ref.fillFieldInfo;
var _ref2 = fieldInfo || {},
name = _ref2.name,
compType = _ref2.compType;
var _ref3 = fillFieldInfo || {},
fillName = _ref3.name,
fillCompType = _ref3.compType;
if (name && fillName) {
if (compType === 'Location' && ['Input', 'TextArea'].includes(fillCompType)) {
targetData[fillName] = (_a = sourceData[name]) === null || _a === void 0 ? void 0 : _a.name;
} else if (compType === 'AddMember' && ['Input', 'TextArea'].includes(fillCompType)) {
var sourceValue = sourceData[name];
if (sourceValue && Array.isArray(sourceValue) && sourceValue.length > 0) {
var fillValue = sourceValue.map(function (val) {
return val === null || val === void 0 ? void 0 : val.staffName;
});
targetData[fillName] = fillValue === null || fillValue === void 0 ? void 0 : fillValue.join('、');
}
} else if (compType === 'AddDepartment' && ['Input', 'TextArea'].includes(fillCompType)) {
var _sourceValue = sourceData[name];
if (_sourceValue && Array.isArray(_sourceValue) && _sourceValue.length > 0) {
var _fillValue = _sourceValue.map(function (val) {
return val === null || val === void 0 ? void 0 : val.orgName;
});
targetData[fillName] = _fillValue === null || _fillValue === void 0 ? void 0 : _fillValue.join('、');
}
} else {
targetData[fillName] = sourceData[name];
}
}
});
};
/**
* 子表单数据回填
* @returns 返回回填的数据列表
*/
var subFormDataBackfill = exports.subFormDataBackfill = function subFormDataBackfill(subFormDataList, subFormStartIndex, formDataSourceList, dataLinkageRuleInfo) {
var subFormDataListCopy = (0, _lodash.default)(subFormDataList);
// 关联数据可以多选的逻辑
if (getIsMultipleSelect(subFormDataList, subFormStartIndex)) {
var _startIndex = subFormStartIndex || 0;
formDataSourceList.forEach(function (item) {
var id = (Math.random() * 1000000).toFixed(0);
if (_startIndex === subFormStartIndex) {
if (getLinkDataId(subFormDataListCopy[_startIndex]) === undefined) {
// 无关联数据
var _subFormDataItem = subFormDataListCopy[_startIndex] || {};
Object.keys(_subFormDataItem).forEach(function (key) {
if (key.startsWith('DataLinkage')) {
_subFormDataItem[key] = item.obj_id;
}
if (_subFormDataItem[key] === undefined) {
_subFormDataItem[key] = item[key];
}
// 解决低代码复选组组件为undefined时候展示有问题
// if (key.startsWith('MultipleSelect')) {
// subFormDataItem[key] = item[key];
// }
});
dataLinkageRule(dataLinkageRuleInfo, item, _subFormDataItem);
} else {
// 有关联数据,则从下一个插入
var _subFormDataItem2 = (0, _lodash.default)(subFormDataListCopy[_startIndex]) || {};
Object.keys(_subFormDataItem2).forEach(function (key) {
if (key.startsWith('DataLinkage')) {
_subFormDataItem2[key] = item.obj_id;
}
if (_subFormDataItem2[key] === undefined) {
_subFormDataItem2[key] = item[key];
}
// 解决低代码复选组组件为undefined时候展示有问题
// if (key.startsWith('MultipleSelect')) {
// subFormDataItem[key] = item[key];
// }
_subFormDataItem2.id = id;
});
dataLinkageRule(dataLinkageRuleInfo, item, _subFormDataItem2);
subFormDataListCopy.splice(_startIndex + 1, 0, Object.assign({}, _subFormDataItem2));
}
} else {
// 多选,生成下一个数据,从上一个数据拷贝
var _subFormDataItem3 = (0, _lodash.default)(subFormDataListCopy[_startIndex - 1]) || {};
Object.keys(_subFormDataItem3).forEach(function (key) {
if (key.startsWith('DataLinkage')) {
_subFormDataItem3[key] = item.obj_id;
} else {
_subFormDataItem3.id = id;
_subFormDataItem3[key] = item[key];
}
});
dataLinkageRule(dataLinkageRuleInfo, item, _subFormDataItem3);
subFormDataListCopy.splice(_startIndex, 0, Object.assign({}, _subFormDataItem3));
}
_startIndex += 1;
});
return subFormDataListCopy;
}
// 子表单选择数据单选 替换数据
var startIndex = subFormStartIndex || 0;
var subFormDataItem = subFormDataListCopy[startIndex] || {};
formDataSourceList.forEach(function (item) {
var itemKeys = Object.keys(item);
Object.keys(subFormDataItem).forEach(function (key) {
if (key !== 'id' && itemKeys.includes(key)) {
subFormDataItem[key] = item[key];
}
// 修复子表单中选择关联数据无法正确回填
if (key.startsWith('DataLinkage') && item.obj_id) {
subFormDataItem[key] = item.obj_id;
}
});
dataLinkageRule(dataLinkageRuleInfo, item, subFormDataItem);
});
return subFormDataListCopy;
};
var WFORMCOMPTYPE = exports.WFORMCOMPTYPE = ['Address', 'Location', 'Autograph', 'AddMember', 'AddDepartment', 'InputPhone', 'InputMail', 'VideoUpload', 'ImgUpload'];