fmui-base 2.3.40 → 2.3.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/lib/common/formValidUtil.js +127 -0
- package/lib/form/form.js +3 -14
- package/lib/form/formExtHelper.js +19 -8
- package/lib/form/table.js +7 -18
- package/lib/form_info/formInfo.js +13 -0
- package/lib/process_info/processInfo.js +10 -28
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.checkCompareRegular = checkCompareRegular;
|
|
7
|
+
exports.isDateTimeValue = isDateTimeValue;
|
|
8
|
+
/**
|
|
9
|
+
* 表单校验工具(与 PC form.runtime.util.api.js compare 逻辑对齐)
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
function isDateTimeLikeValue(value) {
|
|
13
|
+
if (value === null || value === undefined || value === '') {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
return (/^\d{4}-\d{1,2}-\d{1,2}/.test(String(value).trim())
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function shouldParseAsDateTime(itemType, inputFormat, fieldType, value) {
|
|
21
|
+
if (itemType === 'datetime' || itemType === 'datetimeStep') {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
if (fieldType === 'date' || inputFormat === 'date') {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
return isDateTimeLikeValue(value);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function parseCompareValue(value, meta) {
|
|
31
|
+
if (value === null || value === undefined || value === '') {
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
var itemType = meta && meta.itemType;
|
|
35
|
+
var inputFormat = meta && meta.inputFormat;
|
|
36
|
+
var fieldType = meta && meta.fieldType;
|
|
37
|
+
if (shouldParseAsDateTime(itemType, inputFormat, fieldType, value)) {
|
|
38
|
+
var time = new Date(String(value).replace(/-/g, '/')).getTime();
|
|
39
|
+
return isNaN(time) ? 0 : time;
|
|
40
|
+
}
|
|
41
|
+
var num = parseFloat(value);
|
|
42
|
+
if (!isNaN(num) && String(value).trim() !== '') {
|
|
43
|
+
return num;
|
|
44
|
+
}
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function getFieldMeta(saveItem, key, mainTblData, index) {
|
|
49
|
+
var row = mainTblData[index] || {};
|
|
50
|
+
var formItem = null;
|
|
51
|
+
if (saveItem && saveItem.length) {
|
|
52
|
+
for (var i = 0; i < saveItem.length; i++) {
|
|
53
|
+
if (saveItem[i].itemCode === key) {
|
|
54
|
+
formItem = saveItem[i];
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
itemType: row.itemType || formItem && formItem.itemType,
|
|
61
|
+
inputFormat: row.inputFormat || formItem && formItem.inputFormat,
|
|
62
|
+
fieldType: row.fieldType || formItem && formItem.fieldType
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function resolveOtherCompareValue(otherId, mainTblName, mainTblData, saveItem) {
|
|
67
|
+
if (!otherId) {
|
|
68
|
+
return 0;
|
|
69
|
+
}
|
|
70
|
+
if (otherId.indexOf('+') > -1) {
|
|
71
|
+
var plusArr = otherId.split('+');
|
|
72
|
+
var leftVal = resolveOtherCompareValue(plusArr[0], mainTblName, mainTblData, saveItem);
|
|
73
|
+
return eval(leftVal + '+' + plusArr[1]);
|
|
74
|
+
}
|
|
75
|
+
if (otherId.indexOf('-') > -1 && otherId.indexOf('_') > -1) {
|
|
76
|
+
var minusParts = otherId.split('-');
|
|
77
|
+
if (minusParts.length === 2 && /^\d+(\.\d+)?$/.test(minusParts[1])) {
|
|
78
|
+
var baseVal = resolveOtherCompareValue(minusParts[0], mainTblName, mainTblData, saveItem);
|
|
79
|
+
return eval(baseVal + '-' + minusParts[1]);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (otherId.indexOf('*') > -1) {
|
|
83
|
+
var mulArr = otherId.split('*');
|
|
84
|
+
var mulLeft = resolveOtherCompareValue(mulArr[0], mainTblName, mainTblData, saveItem);
|
|
85
|
+
return eval(mulLeft + '*' + mulArr[1]);
|
|
86
|
+
}
|
|
87
|
+
if (otherId.indexOf('/') > -1) {
|
|
88
|
+
var divArr = otherId.split('/');
|
|
89
|
+
var divLeft = resolveOtherCompareValue(divArr[0], mainTblName, mainTblData, saveItem);
|
|
90
|
+
return eval(divLeft + '/' + divArr[1]);
|
|
91
|
+
}
|
|
92
|
+
for (var f = 0; f < mainTblData.length; f++) {
|
|
93
|
+
if (mainTblName + '_' + mainTblData[f].key === otherId) {
|
|
94
|
+
return parseCompareValue(mainTblData[f].value, getFieldMeta(saveItem, mainTblData[f].key, mainTblData, f));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return 0;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* compare|>|表名_字段名 字段比较校验,失败返回提示,成功返回空字符串
|
|
102
|
+
*/
|
|
103
|
+
function checkCompareRegular(regular, tips, currentValue, currentMeta, mainTblName, mainTblData, saveItem) {
|
|
104
|
+
if (!regular || regular.indexOf('compare') === -1) {
|
|
105
|
+
return '';
|
|
106
|
+
}
|
|
107
|
+
var regularArr = regular.split('|');
|
|
108
|
+
if (regularArr.length < 3 || !regularArr[1] || !regularArr[2]) {
|
|
109
|
+
return '';
|
|
110
|
+
}
|
|
111
|
+
var compareMark = regularArr[1];
|
|
112
|
+
var otherUniqueName = regularArr[2];
|
|
113
|
+
var thisValue = parseCompareValue(currentValue, currentMeta);
|
|
114
|
+
var otherValue = resolveOtherCompareValue(otherUniqueName, mainTblName, mainTblData, saveItem);
|
|
115
|
+
try {
|
|
116
|
+
if (eval(thisValue + compareMark + otherValue)) {
|
|
117
|
+
return tips || '';
|
|
118
|
+
}
|
|
119
|
+
} catch (e) {
|
|
120
|
+
return tips || '';
|
|
121
|
+
}
|
|
122
|
+
return '';
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function isDateTimeValue(value, meta) {
|
|
126
|
+
return shouldParseAsDateTime(meta && meta.itemType, meta && meta.inputFormat, meta && meta.fieldType, value);
|
|
127
|
+
}
|
package/lib/form/form.js
CHANGED
|
@@ -1988,19 +1988,7 @@ var PageHome = function (_React$Component) {
|
|
|
1988
1988
|
}
|
|
1989
1989
|
});
|
|
1990
1990
|
}
|
|
1991
|
-
return
|
|
1992
|
-
}
|
|
1993
|
-
}, {
|
|
1994
|
-
key: 'isRelaRuleMatched',
|
|
1995
|
-
value: function isRelaRuleMatched(rule, nowValue) {
|
|
1996
|
-
var triggerFieldVal = rule.triggerFieldVal;
|
|
1997
|
-
if (triggerFieldVal == " ") {
|
|
1998
|
-
triggerFieldVal = "";
|
|
1999
|
-
}
|
|
2000
|
-
if (triggerFieldVal === '') {
|
|
2001
|
-
return true;
|
|
2002
|
-
}
|
|
2003
|
-
return triggerFieldVal == nowValue || nowValue.split(',').indexOf(triggerFieldVal) != -1;
|
|
1991
|
+
return (0, _formExtHelper.normalizeRelaMatchValue)(nowValue);
|
|
2004
1992
|
}
|
|
2005
1993
|
|
|
2006
1994
|
//处理关联字段初始化(按 relaFieldsMap 全局顺序,后写入覆盖先写入,与配置页优先级一致)
|
|
@@ -2059,7 +2047,7 @@ var PageHome = function (_React$Component) {
|
|
|
2059
2047
|
for (var ri = sortedRules.length - 1; ri >= 0; ri--) {
|
|
2060
2048
|
var rule = sortedRules[ri];
|
|
2061
2049
|
var nowValue = this.getRelaTriggerFieldValue(rule, data, allForm);
|
|
2062
|
-
var matched =
|
|
2050
|
+
var matched = (0, _formExtHelper.isRelaRuleMatched)(rule, nowValue);
|
|
2063
2051
|
var editType = rule.editType;
|
|
2064
2052
|
if (editType == 'hide' || editType == 'rowhide') {
|
|
2065
2053
|
if (matched) {
|
|
@@ -2368,6 +2356,7 @@ var PageHome = function (_React$Component) {
|
|
|
2368
2356
|
mainTblData[i].inputFormat = itemParam.inputFormat;
|
|
2369
2357
|
mainTblData[i].fieldType = itemParam.fieldType;
|
|
2370
2358
|
mainTblData[i].decimalPlace = itemParam.decimalPlace;
|
|
2359
|
+
mainTblData[i].itemType = itemParam.itemType;
|
|
2371
2360
|
// if(item.showValue){
|
|
2372
2361
|
// value = item.showValue;
|
|
2373
2362
|
// item.showValue = null;
|
|
@@ -10,6 +10,7 @@ exports.buildDetailItemParam = buildDetailItemParam;
|
|
|
10
10
|
exports.applyDealwithFormParamExt = applyDealwithFormParamExt;
|
|
11
11
|
exports.resolveSubColumnCountFromConfig = resolveSubColumnCountFromConfig;
|
|
12
12
|
exports.normalizeRelaTriggerValue = normalizeRelaTriggerValue;
|
|
13
|
+
exports.normalizeRelaMatchValue = normalizeRelaMatchValue;
|
|
13
14
|
exports.isRelaRuleMatched = isRelaRuleMatched;
|
|
14
15
|
exports.getRelaTriggerFieldValueForLayout = getRelaTriggerFieldValueForLayout;
|
|
15
16
|
exports.resolveFieldRelaHidden = resolveFieldRelaHidden;
|
|
@@ -264,17 +265,27 @@ function normalizeRelaTriggerValue(nowValue) {
|
|
|
264
265
|
return nowValue;
|
|
265
266
|
}
|
|
266
267
|
|
|
267
|
-
/**
|
|
268
|
+
/** 关联匹配用触发值:空值与 PC getRelaTriggerValFromDom 一致转为空格(单选未选/请选择) */
|
|
269
|
+
function normalizeRelaMatchValue(nowValue) {
|
|
270
|
+
var normalized = normalizeRelaTriggerValue(nowValue);
|
|
271
|
+
if (normalized === '' || normalized == null) {
|
|
272
|
+
return ' ';
|
|
273
|
+
}
|
|
274
|
+
return normalized;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/** 关联规则是否命中(与 PC linkageUtils.isRelaRuleMatchedPc 一致) */
|
|
268
278
|
function isRelaRuleMatched(rule, nowValue) {
|
|
269
279
|
var triggerFieldVal = rule.triggerFieldVal;
|
|
270
|
-
if (
|
|
271
|
-
|
|
280
|
+
if (nowValue == null || nowValue === '') {
|
|
281
|
+
nowValue = ' ';
|
|
282
|
+
} else {
|
|
283
|
+
nowValue = String(nowValue);
|
|
272
284
|
}
|
|
273
|
-
if (triggerFieldVal
|
|
274
|
-
|
|
285
|
+
if (triggerFieldVal == null) {
|
|
286
|
+
triggerFieldVal = '';
|
|
275
287
|
}
|
|
276
|
-
|
|
277
|
-
return triggerFieldVal == nowValue || nowValue.split(',').indexOf(triggerFieldVal) !== -1;
|
|
288
|
+
return triggerFieldVal == nowValue || nowValue.split(',').indexOf(String(triggerFieldVal)) !== -1;
|
|
278
289
|
}
|
|
279
290
|
|
|
280
291
|
/** 读取关联触发字段当前值(布局预判,与 form.jsx 子表场景一致) */
|
|
@@ -306,7 +317,7 @@ function getRelaTriggerFieldValueForLayout(rule, fullFormData, rowIndex) {
|
|
|
306
317
|
}
|
|
307
318
|
}
|
|
308
319
|
}
|
|
309
|
-
return
|
|
320
|
+
return normalizeRelaMatchValue(nowValue);
|
|
310
321
|
}
|
|
311
322
|
|
|
312
323
|
/**
|
package/lib/form/table.js
CHANGED
|
@@ -1132,7 +1132,7 @@ var PageHome = function (_React$Component) {
|
|
|
1132
1132
|
triggerRef = this.refs[triggerUnique];
|
|
1133
1133
|
}
|
|
1134
1134
|
if (triggerRef && triggerRef.state && triggerRef.state.itemParam.isHidden) {
|
|
1135
|
-
return '';
|
|
1135
|
+
return ' ';
|
|
1136
1136
|
}
|
|
1137
1137
|
var mainTblData = data.mainTblData || [];
|
|
1138
1138
|
if (rule.triggerTblName == mainTblName) {
|
|
@@ -1155,19 +1155,7 @@ var PageHome = function (_React$Component) {
|
|
|
1155
1155
|
}
|
|
1156
1156
|
}
|
|
1157
1157
|
}
|
|
1158
|
-
return
|
|
1159
|
-
}
|
|
1160
|
-
}, {
|
|
1161
|
-
key: 'isRelaRuleMatched',
|
|
1162
|
-
value: function isRelaRuleMatched(rule, nowValue) {
|
|
1163
|
-
var triggerFieldVal = rule.triggerFieldVal;
|
|
1164
|
-
if (triggerFieldVal == " ") {
|
|
1165
|
-
triggerFieldVal = "";
|
|
1166
|
-
}
|
|
1167
|
-
if (triggerFieldVal === '') {
|
|
1168
|
-
return true;
|
|
1169
|
-
}
|
|
1170
|
-
return triggerFieldVal == nowValue || nowValue.split(',').indexOf(triggerFieldVal) != -1;
|
|
1158
|
+
return (0, _formExtHelper.normalizeRelaMatchValue)(nowValue);
|
|
1171
1159
|
}
|
|
1172
1160
|
|
|
1173
1161
|
// 获取关联字段还原基线(流程权限/表单设计后的初始状态)
|
|
@@ -1291,7 +1279,7 @@ var PageHome = function (_React$Component) {
|
|
|
1291
1279
|
continue;
|
|
1292
1280
|
}
|
|
1293
1281
|
}
|
|
1294
|
-
var matched =
|
|
1282
|
+
var matched = (0, _formExtHelper.isRelaRuleMatched)(rule, nowValue);
|
|
1295
1283
|
var editType = rule.editType;
|
|
1296
1284
|
if (editType == 'hide' || editType == 'rowhide') {
|
|
1297
1285
|
if (matched) {
|
|
@@ -1544,14 +1532,15 @@ var PageHome = function (_React$Component) {
|
|
|
1544
1532
|
}
|
|
1545
1533
|
}
|
|
1546
1534
|
var relaFieldMap = {};
|
|
1535
|
+
if (nowValue === '' || nowValue == null) {
|
|
1536
|
+
nowValue = ' ';
|
|
1537
|
+
}
|
|
1547
1538
|
if (editType == 'hide' || editType == 'rowhide') {
|
|
1548
1539
|
relaFieldMap["key"] = "isHidden";
|
|
1549
|
-
if (
|
|
1540
|
+
if ((0, _formExtHelper.isRelaRuleMatched)({ triggerFieldVal: triggerFieldVal }, nowValue)) {
|
|
1550
1541
|
relaFieldMap["value"] = true;
|
|
1551
1542
|
hideFlag = true;
|
|
1552
1543
|
hideFields.push(relaFieldTblNameArrayItem);
|
|
1553
|
-
} else if (triggerFieldVal == '') {
|
|
1554
|
-
relaFieldMap["value"] = true;
|
|
1555
1544
|
} else if (!hideFlag && defaulthideFields.indexOf(relaFieldTblNameArrayItem) != -1) {
|
|
1556
1545
|
relaFieldMap["value"] = true;
|
|
1557
1546
|
} else if (!hideFlag && hideFields.indexOf(relaFieldTblNameArrayItem) == -1) {
|
|
@@ -78,6 +78,8 @@ var _table2 = _interopRequireDefault(_table);
|
|
|
78
78
|
|
|
79
79
|
var _filterEmptySubTblRows = require('../form/filterEmptySubTblRows');
|
|
80
80
|
|
|
81
|
+
var _formValidUtil = require('../common/formValidUtil');
|
|
82
|
+
|
|
81
83
|
var _FlowChart = require('./FlowChart');
|
|
82
84
|
|
|
83
85
|
var _FlowChart2 = _interopRequireDefault(_FlowChart);
|
|
@@ -1091,6 +1093,7 @@ var PageHome = function (_React$Component) {
|
|
|
1091
1093
|
key: 'checkRegularSubmit',
|
|
1092
1094
|
value: function checkRegularSubmit(saveTable, saveItem) {
|
|
1093
1095
|
var mainTblData = saveTable.mainTblData;
|
|
1096
|
+
var mainTblName = saveTable.mainTblName || '';
|
|
1094
1097
|
var subTbl = saveTable.subTbl;
|
|
1095
1098
|
for (var i = 0; i < mainTblData.length; i++) {
|
|
1096
1099
|
var key = mainTblData[i].key;
|
|
@@ -1110,6 +1113,16 @@ var PageHome = function (_React$Component) {
|
|
|
1110
1113
|
if (!s.test(value)) {
|
|
1111
1114
|
return saveItem[j].itemTitle + ':' + tips;
|
|
1112
1115
|
}
|
|
1116
|
+
} else if (regular.indexOf('compare') != -1) {
|
|
1117
|
+
var currentMeta = {
|
|
1118
|
+
itemType: mainTblData[i].itemType || saveItem[j].itemType,
|
|
1119
|
+
inputFormat: mainTblData[i].inputFormat || saveItem[j].inputFormat,
|
|
1120
|
+
fieldType: mainTblData[i].fieldType || saveItem[j].fieldType
|
|
1121
|
+
};
|
|
1122
|
+
var compareMsg = (0, _formValidUtil.checkCompareRegular)(regular, tips, value, currentMeta, mainTblName, mainTblData, saveItem);
|
|
1123
|
+
if (compareMsg) {
|
|
1124
|
+
return saveItem[j].itemTitle + ':' + compareMsg;
|
|
1125
|
+
}
|
|
1113
1126
|
} else {
|
|
1114
1127
|
var extRegex = /^(.+?)(\d+)-(\d+)$/; //判断是否为 *1-2或n1-2等默认属性的形式
|
|
1115
1128
|
var mac = regular.match(extRegex),
|
|
@@ -90,6 +90,8 @@ var _formExtHelper = require('../form/formExtHelper');
|
|
|
90
90
|
|
|
91
91
|
var _filterEmptySubTblRows = require('../form/filterEmptySubTblRows');
|
|
92
92
|
|
|
93
|
+
var _formValidUtil = require('../common/formValidUtil');
|
|
94
|
+
|
|
93
95
|
var _FlowChart = require('./FlowChart');
|
|
94
96
|
|
|
95
97
|
var _FlowChart2 = _interopRequireDefault(_FlowChart);
|
|
@@ -2079,34 +2081,14 @@ var PageHome = function (_React$Component) {
|
|
|
2079
2081
|
return saveItem[j].itemTitle + ':' + tips;
|
|
2080
2082
|
}
|
|
2081
2083
|
} else if (regular.indexOf('compare') != -1) {
|
|
2082
|
-
var
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
if (value != '') {
|
|
2092
|
-
if (mainTblData[i].itemType == 'datetime') {
|
|
2093
|
-
thisValue = new Date(value).getTime();
|
|
2094
|
-
} else {
|
|
2095
|
-
thisValue = value;
|
|
2096
|
-
}
|
|
2097
|
-
}
|
|
2098
|
-
if (mainTblData[f].value != '') {
|
|
2099
|
-
if (mainTblData[f].itemType == 'datetime') {
|
|
2100
|
-
otherValue = new Date(mainTblData[f].value).getTime();
|
|
2101
|
-
} else {
|
|
2102
|
-
otherValue = mainTblData[f].value;
|
|
2103
|
-
}
|
|
2104
|
-
}
|
|
2105
|
-
}
|
|
2106
|
-
}
|
|
2107
|
-
if (eval(thisValue + compareMark + otherValue)) {
|
|
2108
|
-
return saveItem[j].itemTitle + ':' + tips;
|
|
2109
|
-
}
|
|
2084
|
+
var currentMeta = {
|
|
2085
|
+
itemType: mainTblData[i].itemType || saveItem[j].itemType,
|
|
2086
|
+
inputFormat: mainTblData[i].inputFormat || saveItem[j].inputFormat,
|
|
2087
|
+
fieldType: mainTblData[i].fieldType || saveItem[j].fieldType
|
|
2088
|
+
};
|
|
2089
|
+
var compareMsg = (0, _formValidUtil.checkCompareRegular)(regular, tips, value, currentMeta, mainTblName, mainTblData, saveItem);
|
|
2090
|
+
if (compareMsg) {
|
|
2091
|
+
return saveItem[j].itemTitle + ':' + compareMsg;
|
|
2110
2092
|
}
|
|
2111
2093
|
} else {
|
|
2112
2094
|
var extRegex = /^(.+?)(\d+)-(\d+)$/; //判断是否为 *1-2或n1-2等默认属性的形式
|