fmui-base 2.2.87 → 2.2.89

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/lib/form/table.js CHANGED
@@ -86,6 +86,85 @@ var savePhraseList = [{
86
86
  }];
87
87
  var formRelaFieldMaps = void 0;
88
88
 
89
+ /**
90
+ * 将按触发字段分组的数据转为按关联字段分组,并保持配置页自上而下优先级
91
+ */
92
+ function buildFormRelaFieldMapsByRelaField(triggerFieldsMap) {
93
+ var relaFieldsMap = {};
94
+ if (!triggerFieldsMap) {
95
+ return relaFieldsMap;
96
+ }
97
+ var allRules = [];
98
+ var _iteratorNormalCompletion = true;
99
+ var _didIteratorError = false;
100
+ var _iteratorError = undefined;
101
+
102
+ try {
103
+ for (var _iterator = Object.keys(triggerFieldsMap)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
104
+ var triggerKey = _step.value;
105
+
106
+ var ruleList = triggerFieldsMap[triggerKey] || [];
107
+ for (var i = 0; i < ruleList.length; i++) {
108
+ allRules.push(ruleList[i]);
109
+ }
110
+ }
111
+ } catch (err) {
112
+ _didIteratorError = true;
113
+ _iteratorError = err;
114
+ } finally {
115
+ try {
116
+ if (!_iteratorNormalCompletion && _iterator.return) {
117
+ _iterator.return();
118
+ }
119
+ } finally {
120
+ if (_didIteratorError) {
121
+ throw _iteratorError;
122
+ }
123
+ }
124
+ }
125
+
126
+ allRules.sort(function (a, b) {
127
+ var sortA = parseInt(a.sortNo, 10);
128
+ var sortB = parseInt(b.sortNo, 10);
129
+ if (isNaN(sortA)) {
130
+ sortA = 0;
131
+ }
132
+ if (isNaN(sortB)) {
133
+ sortB = 0;
134
+ }
135
+ return sortA - sortB;
136
+ });
137
+ allRules.reverse();
138
+ allRules.forEach(function (item) {
139
+ var relaFieldTblName = item.relaFieldTblName;
140
+ var relaFieldName = item.relaFieldName;
141
+ if (!relaFieldTblName) {
142
+ return;
143
+ }
144
+ var relaFieldTblNameArray = relaFieldTblName.split(",");
145
+ var relaFieldNameArray = relaFieldName ? relaFieldName.split(",") : [];
146
+ var relaTblNameArray = item.relaTblName ? item.relaTblName.split(",") : [];
147
+ relaFieldTblNameArray.forEach(function (relaFieldTblNameItem, index) {
148
+ var relaFieldItem = {
149
+ relaFieldTblName: relaFieldTblNameItem,
150
+ triggerFieldName: item.triggerFieldName,
151
+ triggerFieldVal: item.triggerFieldVal,
152
+ triggerTblName: item.triggerTblName,
153
+ editType: item.editType,
154
+ relaFieldName: relaFieldNameArray[index] || relaFieldNameArray[0],
155
+ relaTblName: relaTblNameArray[index] || relaTblNameArray[0],
156
+ sortNo: item.sortNo
157
+ };
158
+ if (relaFieldsMap[relaFieldTblNameItem]) {
159
+ relaFieldsMap[relaFieldTblNameItem].push(relaFieldItem);
160
+ } else {
161
+ relaFieldsMap[relaFieldTblNameItem] = [relaFieldItem];
162
+ }
163
+ });
164
+ });
165
+ return relaFieldsMap;
166
+ }
167
+
89
168
  var PageHome = function (_React$Component) {
90
169
  _inherits(PageHome, _React$Component);
91
170
 
@@ -118,53 +197,14 @@ var PageHome = function (_React$Component) {
118
197
  async: false,
119
198
  success: function success(data) {
120
199
  if (data.code == "0") {
121
- formRelaFieldMaps = data.data;
122
- if (formRelaFieldMaps) {
123
- var _iteratorNormalCompletion = true;
124
- var _didIteratorError = false;
125
- var _iteratorError = undefined;
126
-
127
- try {
128
- for (var _iterator = Object.keys(formRelaFieldMaps)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
129
- var k = _step.value;
130
-
131
- formRelaFieldMaps[k].map(function (item) {
132
- var relaFieldTblName = item.relaFieldTblName;
133
- var relaFieldName = item.relaFieldName;
134
- var relaFieldTblNameArray = relaFieldTblName.split(",");
135
- var relaFieldNameArray = relaFieldName.split(",");
136
- relaFieldTblNameArray.map(function (relaFieldTblNameArrayItem, index) {
137
- var relaFieldTblNameNew = {
138
- "relaFieldTblName": relaFieldTblNameArrayItem,
139
- "triggerFieldName": item.triggerFieldName,
140
- "triggerFieldVal": item.triggerFieldVal,
141
- "triggerTblName": item.triggerTblName,
142
- "editType": item.editType,
143
- "relaFieldName": relaFieldNameArray[index],
144
- "relaTblName": item.relaTblName
145
- };
146
- if (formRelaFieldMapsNew[relaFieldTblNameArrayItem]) {
147
- formRelaFieldMapsNew[relaFieldTblNameArrayItem].push(relaFieldTblNameNew);
148
- } else {
149
- formRelaFieldMapsNew[relaFieldTblNameArrayItem] = [relaFieldTblNameNew];
150
- }
151
- });
152
- });
153
- }
154
- } catch (err) {
155
- _didIteratorError = true;
156
- _iteratorError = err;
157
- } finally {
158
- try {
159
- if (!_iteratorNormalCompletion && _iterator.return) {
160
- _iterator.return();
161
- }
162
- } finally {
163
- if (_didIteratorError) {
164
- throw _iteratorError;
165
- }
166
- }
167
- }
200
+ var responseData = data.data || {};
201
+ // 移动端新结构:triggerFieldsMap 按触发字段分组;relaFieldsMap 按关联字段分组且保留全局优先级
202
+ if (responseData.triggerFieldsMap) {
203
+ formRelaFieldMaps = responseData.triggerFieldsMap;
204
+ formRelaFieldMapsNew = responseData.relaFieldsMap || {};
205
+ } else {
206
+ formRelaFieldMaps = responseData;
207
+ formRelaFieldMapsNew = buildFormRelaFieldMapsByRelaField(formRelaFieldMaps);
168
208
  }
169
209
  }
170
210
  },
@@ -339,8 +379,11 @@ var PageHome = function (_React$Component) {
339
379
  }, {
340
380
  key: 'change',
341
381
  value: function change(data, itemParam, subTblNo) {
342
- console.log("formRelaFieldMaps==" + this.state.formRelaFieldMaps);
343
382
  var t = this;
383
+ // 字段关联 reloadItemParam 会再次进入 change,此处拦截避免死循环
384
+ if (t._isRelaFieldRefreshing) {
385
+ return;
386
+ }
344
387
  var module = t.props.module;
345
388
  var formKey = t.props.allForm ? t.props.allForm.formcode : "";
346
389
  var formTblId = t.props.allForm ? t.props.allForm.formTblId : "";
@@ -774,11 +817,31 @@ var PageHome = function (_React$Component) {
774
817
  }
775
818
  }
776
819
 
777
- //关联字段
778
- if (formRelaFieldMaps) {
820
+ //关联字段刷新(silent 模式,不向上触发 onChange)
821
+ if (t.state.formRelaFieldMaps) {
822
+ var isSubTrigger = typeof subTblNo != 'undefined' && itemParam.tableName != data.mainTblName;
823
+ t._isRelaFieldRefreshing = true;
824
+ try {
825
+ if (!isSubTrigger) {
826
+ t.refreshAllRelaFieldsByRelaMap(data);
827
+ } else if (formRelaFieldMaps) {
828
+ var formRelaFieldMapsObj = formRelaFieldMaps[itemParam.uniqueName];
829
+ if (formRelaFieldMapsObj && formRelaFieldMapsObj.length > 0) {
830
+ t.dealwithRelaField(formRelaFieldMapsObj, data, itemParam);
831
+ }
832
+ }
833
+ } finally {
834
+ t._isRelaFieldRefreshing = false;
835
+ }
836
+ } else if (formRelaFieldMaps) {
779
837
  var formRelaFieldMapsObj = formRelaFieldMaps[itemParam.uniqueName];
780
838
  if (formRelaFieldMapsObj && formRelaFieldMapsObj.length > 0) {
781
- t.dealwithRelaField(formRelaFieldMapsObj, data, itemParam);
839
+ t._isRelaFieldRefreshing = true;
840
+ try {
841
+ t.dealwithRelaField(formRelaFieldMapsObj, data, itemParam);
842
+ } finally {
843
+ t._isRelaFieldRefreshing = false;
844
+ }
782
845
  }
783
846
  }
784
847
  }
@@ -845,30 +908,326 @@ var PageHome = function (_React$Component) {
845
908
  value: function reloadFormRelaField() {
846
909
  var t = this;
847
910
  var data = t.props.data;
848
- //关联字段
849
- if (formRelaFieldMaps) {
850
- var _iteratorNormalCompletion2 = true;
851
- var _didIteratorError2 = false;
852
- var _iteratorError2 = undefined;
911
+ t._isRelaFieldRefreshing = true;
912
+ try {
913
+ if (t.state.formRelaFieldMaps) {
914
+ t.refreshAllRelaFieldsByRelaMap(data);
915
+ } else if (formRelaFieldMaps) {
916
+ var _iteratorNormalCompletion2 = true;
917
+ var _didIteratorError2 = false;
918
+ var _iteratorError2 = undefined;
853
919
 
920
+ try {
921
+ for (var _iterator2 = Object.keys(formRelaFieldMaps)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
922
+ var k = _step2.value;
923
+
924
+ var triggerRules = formRelaFieldMaps[k];
925
+ if (triggerRules && triggerRules.length > 0) {
926
+ t.dealwithRelaField(triggerRules, data, { uniqueName: k, key: k.split('_').pop(), tableName: k.split('_')[0] });
927
+ }
928
+ }
929
+ } catch (err) {
930
+ _didIteratorError2 = true;
931
+ _iteratorError2 = err;
932
+ } finally {
933
+ try {
934
+ if (!_iteratorNormalCompletion2 && _iterator2.return) {
935
+ _iterator2.return();
936
+ }
937
+ } finally {
938
+ if (_didIteratorError2) {
939
+ throw _iteratorError2;
940
+ }
941
+ }
942
+ }
943
+ }
944
+ } finally {
945
+ t._isRelaFieldRefreshing = false;
946
+ }
947
+ }
948
+ }, {
949
+ key: 'normalizeRelaTriggerValue',
950
+ value: function normalizeRelaTriggerValue(nowValue) {
951
+ if (nowValue == null || typeof nowValue == 'undefined') {
952
+ return "";
953
+ }
954
+ if (nowValue && nowValue.indexOf("[") >= 0 && nowValue.indexOf("]") >= 0) {
854
955
  try {
855
- for (var _iterator2 = Object.keys(formRelaFieldMaps)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
856
- var k = _step2.value;
956
+ var nowValueArray = JSON.parse(nowValue);
957
+ if (nowValueArray.length == 1) {
958
+ return nowValueArray[0];
959
+ }
960
+ return nowValueArray.join(",");
961
+ } catch (e) {
962
+ return nowValue;
963
+ }
964
+ }
965
+ if (nowValue != '' && (nowValue.indexOf("$#$#") >= 0 || nowValue.indexOf("#$#$") >= 0)) {
966
+ if (nowValue.indexOf("#$#$") >= 0) {
967
+ var nowValueList = nowValue.split("#$#$");
968
+ if (nowValueList.length == 1) {
969
+ return nowValueList[0].replace("$#$#", "");
970
+ }
971
+ return nowValueList.map(function (item) {
972
+ return item.replace("$#$#", "");
973
+ }).join(",");
974
+ }
975
+ return nowValue.replace("$#$#", "");
976
+ }
977
+ return nowValue;
978
+ }
979
+ }, {
980
+ key: 'clearFieldDataValue',
981
+ value: function clearFieldDataValue(data, uniqueName) {
982
+ if (!data || !uniqueName) {
983
+ return;
984
+ }
985
+ var mainTblName = data.mainTblName;
986
+ var mainTblData = data.mainTblData || [];
987
+ for (var i = 0; i < mainTblData.length; i++) {
988
+ if (mainTblName + '_' + mainTblData[i].key == uniqueName) {
989
+ mainTblData[i].value = '';
990
+ }
991
+ }
992
+ if (data.subTbl && data.subTbl.length > 0) {
993
+ for (var j = 0; j < data.subTbl.length; j++) {
994
+ var subRows = data.subTbl[j].subTblData || [];
995
+ for (var r = 0; r < subRows.length; r++) {
996
+ var row = subRows[r] || [];
997
+ for (var c = 0; c < row.length; c++) {
998
+ if (row[c].uniqueName == uniqueName) {
999
+ row[c].value = '';
1000
+ }
1001
+ }
1002
+ }
1003
+ }
1004
+ }
1005
+ }
1006
+
1007
+ // 同步关联字段的必填等元数据到提交数据(checkSubmit 读取 mainTblData.required,非组件 state)
857
1008
 
858
- t.dealwithRelaField(formRelaFieldMaps[k], data, k);
1009
+ }, {
1010
+ key: 'syncRelaFieldMetaToData',
1011
+ value: function syncRelaFieldMetaToData(data, uniqueName, meta) {
1012
+ if (!data || !uniqueName || !meta) {
1013
+ return;
1014
+ }
1015
+ var mainTblName = data.mainTblName;
1016
+ var mainTblData = data.mainTblData || [];
1017
+ if (typeof meta.required !== 'undefined') {
1018
+ for (var i = 0; i < mainTblData.length; i++) {
1019
+ if (mainTblName + '_' + mainTblData[i].key == uniqueName) {
1020
+ mainTblData[i].required = meta.required;
859
1021
  }
860
- } catch (err) {
861
- _didIteratorError2 = true;
862
- _iteratorError2 = err;
863
- } finally {
864
- try {
865
- if (!_iteratorNormalCompletion2 && _iterator2.return) {
866
- _iterator2.return();
1022
+ }
1023
+ }
1024
+ if (data.subTbl && data.subTbl.length > 0 && typeof meta.required !== 'undefined') {
1025
+ for (var j = 0; j < data.subTbl.length; j++) {
1026
+ var subRows = data.subTbl[j].subTblData || [];
1027
+ for (var r = 0; r < subRows.length; r++) {
1028
+ var row = subRows[r] || [];
1029
+ for (var c = 0; c < row.length; c++) {
1030
+ if (row[c].uniqueName == uniqueName) {
1031
+ row[c].required = meta.required;
1032
+ }
867
1033
  }
868
- } finally {
869
- if (_didIteratorError2) {
870
- throw _iteratorError2;
1034
+ }
1035
+ }
1036
+ }
1037
+ if (data.relatedTbl && data.relatedTbl.length > 0 && typeof meta.required !== 'undefined') {
1038
+ for (var ri = 0; ri < data.relatedTbl.length; ri++) {
1039
+ var relatedMainTblData = data.relatedTbl[ri].relatedMainTblData;
1040
+ if (!relatedMainTblData) {
1041
+ continue;
1042
+ }
1043
+ var relatedTblName = data.relatedTbl[ri].relatedMainTblName;
1044
+ for (var rk = 0; rk < relatedMainTblData.length; rk++) {
1045
+ if (relatedTblName + '_' + relatedMainTblData[rk].key == uniqueName) {
1046
+ relatedMainTblData[rk].required = meta.required;
1047
+ }
1048
+ }
1049
+ }
1050
+ }
1051
+ }
1052
+ }, {
1053
+ key: 'getRelaTriggerFieldValue',
1054
+ value: function getRelaTriggerFieldValue(rule, data) {
1055
+ var nowValue = "";
1056
+ var mainTblName = data.mainTblName;
1057
+ var triggerUnique = rule.triggerTblName + '_' + rule.triggerFieldName;
1058
+ if (this.refs[triggerUnique] && this.refs[triggerUnique].state && this.refs[triggerUnique].state.itemParam.isHidden) {
1059
+ return '';
1060
+ }
1061
+ var mainTblData = data.mainTblData || [];
1062
+ if (rule.triggerTblName == mainTblName) {
1063
+ for (var i = 0; i < mainTblData.length; i++) {
1064
+ if (mainTblData[i].key == rule.triggerFieldName) {
1065
+ nowValue = mainTblData[i].value ? mainTblData[i].value : "";
1066
+ break;
1067
+ }
1068
+ }
1069
+ } else if (data.subTbl && data.subTbl.length > 0) {
1070
+ for (var j = 0; j < data.subTbl.length; j++) {
1071
+ if (data.subTbl[j].subTblName == rule.triggerTblName && data.subTbl[j].subTblData && data.subTbl[j].subTblData.length > 0) {
1072
+ var subRow = data.subTbl[j].subTblData[0];
1073
+ for (var k = 0; k < subRow.length; k++) {
1074
+ if (subRow[k].key == rule.triggerFieldName) {
1075
+ nowValue = subRow[k].value ? subRow[k].value : "";
1076
+ }
1077
+ }
1078
+ }
1079
+ }
1080
+ }
1081
+ return this.normalizeRelaTriggerValue(nowValue);
1082
+ }
1083
+ }, {
1084
+ key: 'isRelaRuleMatched',
1085
+ value: function isRelaRuleMatched(rule, nowValue) {
1086
+ var triggerFieldVal = rule.triggerFieldVal;
1087
+ if (triggerFieldVal == " ") {
1088
+ triggerFieldVal = "";
1089
+ }
1090
+ if (triggerFieldVal === '') {
1091
+ return true;
1092
+ }
1093
+ return triggerFieldVal == nowValue || nowValue.split(',').indexOf(triggerFieldVal) != -1;
1094
+ }
1095
+
1096
+ // 静默刷新关联字段 UI,不触发 change 死循环
1097
+
1098
+ }, {
1099
+ key: 'reloadRelaItemParam',
1100
+ value: function reloadRelaItemParam(formRef, paramList) {
1101
+ if (formRef && formRef.reloadItemParam) {
1102
+ formRef.reloadItemParam(paramList, { silent: true });
1103
+ }
1104
+ }
1105
+
1106
+ // 按 relaFieldsMap 全局顺序刷新所有关联字段(props 传入 form.jsx 的同一份数据)
1107
+
1108
+ }, {
1109
+ key: 'refreshAllRelaFieldsByRelaMap',
1110
+ value: function refreshAllRelaFieldsByRelaMap(data) {
1111
+ var t = this;
1112
+ var relaFieldsMap = t.state.formRelaFieldMaps;
1113
+ if (!relaFieldsMap) {
1114
+ return;
1115
+ }
1116
+ var fieldControll = t.props.fieldControll || {};
1117
+ var defaulthideFields = [];
1118
+ var defaultmustFields = [];
1119
+ var defaultshowFields = [];
1120
+ if (fieldControll.hiddenFields) {
1121
+ fieldControll.hiddenFields.split(',').forEach(function (f) {
1122
+ if (f) {
1123
+ defaulthideFields.push(f);
1124
+ }
1125
+ });
1126
+ }
1127
+ if (fieldControll.mustFields) {
1128
+ fieldControll.mustFields.split(',').forEach(function (f) {
1129
+ if (f) {
1130
+ defaultmustFields.push(f);
1131
+ }
1132
+ });
1133
+ }
1134
+ if (fieldControll.showFields) {
1135
+ fieldControll.showFields.split(',').forEach(function (f) {
1136
+ if (f) {
1137
+ defaultshowFields.push(f);
1138
+ }
1139
+ });
1140
+ }
1141
+
1142
+ var _iteratorNormalCompletion3 = true;
1143
+ var _didIteratorError3 = false;
1144
+ var _iteratorError3 = undefined;
1145
+
1146
+ try {
1147
+ for (var _iterator3 = Object.keys(relaFieldsMap)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
1148
+ var targetUniqueName = _step3.value;
1149
+
1150
+ var rules = relaFieldsMap[targetUniqueName];
1151
+ if (!rules || !rules.length || !t.refs[targetUniqueName]) {
1152
+ continue;
1153
+ }
1154
+ var hideFlag = defaulthideFields.indexOf(targetUniqueName) != -1;
1155
+ var mustFlag = defaultmustFields.indexOf(targetUniqueName) != -1;
1156
+ var editFlag = false;
1157
+ var isHidden = hideFlag;
1158
+ var required = false;
1159
+ var readOnly = false;
1160
+
1161
+ // sortNo 升序排列后倒序执行,配置页越靠上的规则越晚执行、优先生效
1162
+ var sortedRules = rules.slice().sort(function (a, b) {
1163
+ return (parseInt(a.sortNo, 10) || 0) - (parseInt(b.sortNo, 10) || 0);
1164
+ });
1165
+ for (var ri = sortedRules.length - 1; ri >= 0; ri--) {
1166
+ var rule = sortedRules[ri];
1167
+ var nowValue = t.getRelaTriggerFieldValue(rule, data);
1168
+ if (nowValue === '' && rule.triggerTblName) {
1169
+ var triggerUnique = rule.triggerTblName + '_' + rule.triggerFieldName;
1170
+ if (t.refs[triggerUnique] && t.refs[triggerUnique].state && t.refs[triggerUnique].state.itemParam.isHidden) {
1171
+ continue;
1172
+ }
871
1173
  }
1174
+ var matched = t.isRelaRuleMatched(rule, nowValue);
1175
+ var editType = rule.editType;
1176
+ if (editType == 'hide' || editType == 'rowhide') {
1177
+ if (matched) {
1178
+ isHidden = true;
1179
+ hideFlag = true;
1180
+ required = false;
1181
+ } else if (!hideFlag && defaulthideFields.indexOf(targetUniqueName) == -1) {
1182
+ isHidden = false;
1183
+ }
1184
+ } else if (editType == 'must') {
1185
+ if (matched && !hideFlag) {
1186
+ required = true;
1187
+ mustFlag = true;
1188
+ isHidden = false;
1189
+ } else if (!mustFlag) {
1190
+ required = false;
1191
+ }
1192
+ } else if (editType == 'edit') {
1193
+ if (matched && defaultshowFields.indexOf(targetUniqueName) != -1) {
1194
+ readOnly = false;
1195
+ editFlag = true;
1196
+ } else if (!editFlag && defaultshowFields.indexOf(targetUniqueName) != -1 && nowValue != '') {
1197
+ readOnly = true;
1198
+ }
1199
+ }
1200
+ }
1201
+ if (isHidden) {
1202
+ t.clearFieldDataValue(data, targetUniqueName);
1203
+ }
1204
+ var finalRequired = isHidden ? false : required;
1205
+ t.syncRelaFieldMetaToData(data, targetUniqueName, { required: finalRequired });
1206
+ var paramList = [];
1207
+ if (isHidden) {
1208
+ paramList.push({ key: "value", value: "" });
1209
+ paramList.push({ key: "required", value: false });
1210
+ } else if (required) {
1211
+ paramList.push({ key: "isHidden", value: false });
1212
+ }
1213
+ paramList.push({ key: "isHidden", value: isHidden });
1214
+ paramList.push({ key: "required", value: finalRequired });
1215
+ if (defaultshowFields.indexOf(targetUniqueName) != -1) {
1216
+ paramList.push({ key: "readOnly", value: readOnly });
1217
+ }
1218
+ t.reloadRelaItemParam(t.refs[targetUniqueName], paramList);
1219
+ }
1220
+ } catch (err) {
1221
+ _didIteratorError3 = true;
1222
+ _iteratorError3 = err;
1223
+ } finally {
1224
+ try {
1225
+ if (!_iteratorNormalCompletion3 && _iterator3.return) {
1226
+ _iterator3.return();
1227
+ }
1228
+ } finally {
1229
+ if (_didIteratorError3) {
1230
+ throw _iteratorError3;
872
1231
  }
873
1232
  }
874
1233
  }
@@ -1121,7 +1480,7 @@ var PageHome = function (_React$Component) {
1121
1480
  isSubField = true;
1122
1481
  var subTblNameItem = "sub_" + subTblName;
1123
1482
  var subItem = relaFieldTblNameArrayItem + '_' + thisSubTblNo;
1124
- t.refs[subTblNameItem].refs[subItem].reloadItemParam([relaFieldMap]);
1483
+ t.reloadRelaItemParam(t.refs[subTblNameItem].refs[subItem], [relaFieldMap]);
1125
1484
  }
1126
1485
  }
1127
1486
  }
@@ -1134,7 +1493,7 @@ var PageHome = function (_React$Component) {
1134
1493
  isSubField = true;
1135
1494
  var subTblNameItem = "sub_" + subTblName;
1136
1495
  var subItem = relaFieldTblNameArrayItem + '_' + b;
1137
- t.refs[subTblNameItem].refs[subItem].reloadItemParam([relaFieldMap]);
1496
+ t.reloadRelaItemParam(t.refs[subTblNameItem].refs[subItem], [relaFieldMap]);
1138
1497
  }
1139
1498
  }
1140
1499
  }
@@ -1146,10 +1505,10 @@ var PageHome = function (_React$Component) {
1146
1505
  }
1147
1506
  if (isSubField) {} else if (t.refs[relaFieldTblNameArrayItem]) {
1148
1507
  if (relaFieldMap.key == "required" && relaFieldMap.value) {
1149
- console.log('[{"key":"isHidden","value":true}]');
1150
- t.refs[relaFieldTblNameArrayItem].reloadItemParam([{ "key": "isHidden", "value": false }]);
1508
+ t.reloadRelaItemParam(t.refs[relaFieldTblNameArrayItem], [{ "key": "isHidden", "value": false }, relaFieldMap]);
1509
+ } else {
1510
+ t.reloadRelaItemParam(t.refs[relaFieldTblNameArrayItem], [relaFieldMap]);
1151
1511
  }
1152
- t.refs[relaFieldTblNameArrayItem].reloadItemParam([relaFieldMap]);
1153
1512
  }
1154
1513
  }
1155
1514
  }
@@ -1955,6 +2314,43 @@ var PageHome = function (_React$Component) {
1955
2314
  // })
1956
2315
  // }
1957
2316
 
2317
+ // 子表列数:走 form_common / flow_common / mobileExt 现有扩展(dealwithCommonFormParam、dealwithFormParamExt)
2318
+
2319
+ }, {
2320
+ key: 'getSubColumnCount',
2321
+ value: function getSubColumnCount(detailItem) {
2322
+ var t = this;
2323
+ if (detailItem && detailItem.__subColumnCountResolved != null) {
2324
+ return detailItem.__subColumnCountResolved;
2325
+ }
2326
+ var allForm = t.props.allForm;
2327
+ var formKey = allForm && allForm.formcode;
2328
+ var formCode = t.state.formCode || t.props.formCode || '';
2329
+ var module = t.props.module;
2330
+ var flowCommonRef = FlowCommon;
2331
+ if (!flowCommonRef && formCode) {
2332
+ var loaded = (0, _formExtHelper.loadFlowOrFormCommon)({ formCode: formCode, module: module || '' });
2333
+ flowCommonRef = loaded.FlowCommon;
2334
+ }
2335
+ var itemParam = (0, _formExtHelper.applyDealwithFormParamExt)({
2336
+ detailForm: detailItem,
2337
+ FlowCommon: flowCommonRef,
2338
+ module: module,
2339
+ formKey: formKey,
2340
+ formCode: formCode,
2341
+ component: t
2342
+ });
2343
+ var count = (0, _formExtHelper.resolveSubColumnCountFromConfig)({
2344
+ itemParam: itemParam,
2345
+ detailForm: detailItem,
2346
+ subColumnCount: t.props.subColumnCount,
2347
+ allForm: allForm
2348
+ });
2349
+ if (detailItem) {
2350
+ detailItem.__subColumnCountResolved = count;
2351
+ }
2352
+ return count;
2353
+ }
1958
2354
  }, {
1959
2355
  key: 'render',
1960
2356
  value: function render() {
@@ -1984,7 +2380,7 @@ var PageHome = function (_React$Component) {
1984
2380
  }.bind(this)) : item.itemType == 'detail' ? _react2.default.createElement(
1985
2381
  'div',
1986
2382
  { className: "subform_" + item.itemCode },
1987
- _react2.default.createElement(_subForm2.default, { keyNo: i, ref: 'sub_' + item.itemCode, operate: t.props.operate, newspyj: t.props.newspyj, hasCommentField: t.props.hasCommentField, commentUpload: t.props.commentUpload, commentField: t.props.commentField, commentAttitude: t.props.commentAttitude, module: t.props.module, formKey: t.props.allForm.formcode, status: t.props.status, form: item, allForm: t.props.allForm, formStyle: t.props.formStyleObj, isCaUser: t.props.isCaUser, caFirm: t.props.caFirm, caESignatureName: t.props.caESignatureName, caFormSign: t.props.caFormSign, commentList: t.props.commentFieldList, defaultValue: t.props.defaultValue, data: t.props.data, fieldControll: t.props.fieldControll, caIsPrd: t.props.caIsPrd, preCaFields: t.props.preCaFields, formRelaFieldMaps: t.state.formRelaFieldMaps, linkFields: t.state.linkFields, isRemoveCommentFormHtml: t.props.isRemoveCommentFormHtml, inscriptionShow: t.props.inscriptionShow, onChange: this.change.bind(this) })
2383
+ _react2.default.createElement(_subForm2.default, { keyNo: i, ref: 'sub_' + item.itemCode, subColumnCount: t.getSubColumnCount(item), operate: t.props.operate, newspyj: t.props.newspyj, hasCommentField: t.props.hasCommentField, commentUpload: t.props.commentUpload, commentField: t.props.commentField, commentAttitude: t.props.commentAttitude, module: t.props.module, formKey: t.props.allForm.formcode, status: t.props.status, form: item, allForm: t.props.allForm, formStyle: t.props.formStyleObj, isCaUser: t.props.isCaUser, caFirm: t.props.caFirm, caESignatureName: t.props.caESignatureName, caFormSign: t.props.caFormSign, commentList: t.props.commentFieldList, defaultValue: t.props.defaultValue, data: t.props.data, fieldControll: t.props.fieldControll, caIsPrd: t.props.caIsPrd, preCaFields: t.props.preCaFields, formRelaFieldMaps: t.state.formRelaFieldMaps, linkFields: t.state.linkFields, isRemoveCommentFormHtml: t.props.isRemoveCommentFormHtml, inscriptionShow: t.props.inscriptionShow, onChange: this.change.bind(this) })
1988
2384
  ) : _react2.default.createElement(
1989
2385
  'div',
1990
2386
  { className: "form_" + item.uniqueName },
@@ -2020,7 +2416,7 @@ var PageHome = function (_React$Component) {
2020
2416
  }.bind(this)) : item.itemType == 'detail' ? _react2.default.createElement(
2021
2417
  'div',
2022
2418
  { className: t.state.active == item.tabCode ? "" : "t-DN" },
2023
- _react2.default.createElement(_subForm2.default, { className: "subform_" + item.itemCode, keyNo: i, ref: 'sub_' + item.itemCode, operate: t.props.operate, newspyj: t.props.newspyj, hasCommentField: t.props.hasCommentField, commentUpload: t.props.commentUpload, commentAttitude: t.props.commentAttitude, commentField: t.props.commentField, module: t.props.module, formKey: t.props.allForm.formcode, isCaUser: t.props.isCaUser, caFirm: t.props.caFirm, caESignatureName: t.props.caESignatureName, caFormSign: t.props.caFormSign, status: t.props.status, form: item, allForm: t.props.allForm, formStyle: t.props.formStyleObj, commentList: t.props.commentFieldList, inscriptionShow: t.props.inscriptionShow, data: t.props.data, fieldControll: t.props.fieldControll, onChange: this.change.bind(this) })
2419
+ _react2.default.createElement(_subForm2.default, { className: "subform_" + item.itemCode, keyNo: i, ref: 'sub_' + item.itemCode, subColumnCount: t.getSubColumnCount(item), operate: t.props.operate, newspyj: t.props.newspyj, hasCommentField: t.props.hasCommentField, commentUpload: t.props.commentUpload, commentAttitude: t.props.commentAttitude, commentField: t.props.commentField, module: t.props.module, formKey: t.props.allForm.formcode, isCaUser: t.props.isCaUser, caFirm: t.props.caFirm, caESignatureName: t.props.caESignatureName, caFormSign: t.props.caFormSign, status: t.props.status, form: item, allForm: t.props.allForm, formStyle: t.props.formStyleObj, commentList: t.props.commentFieldList, inscriptionShow: t.props.inscriptionShow, data: t.props.data, fieldControll: t.props.fieldControll, onChange: this.change.bind(this) })
2024
2420
  ) : _react2.default.createElement(
2025
2421
  'div',
2026
2422
  { className: t.state.active == item.tabCode ? "" : "t-DN" },
@@ -349,6 +349,7 @@ var PageHome = function (_React$Component) {
349
349
  userId: loginUserId,
350
350
  formItem: [],
351
351
  formStyleObj: {}, //表单字体样式
352
+ subColumnCount: props.subColumnCount != null && props.subColumnCount !== '' ? props.subColumnCount : 1, //子表每行列数,默认1
352
353
  formTblName: '',
353
354
  dataId: dataId,
354
355
  formId: props.formId,
@@ -7786,7 +7787,7 @@ var PageHome = function (_React$Component) {
7786
7787
  _react2.default.createElement(
7787
7788
  _Group2.default.List,
7788
7789
  null,
7789
- this.state.tableStatus == '0' ? "" : _react2.default.createElement(_table2.default, { module: this.state.module, operate: this.state.operate, editType: this.state.editType, dataId: this.state.dataId, hasCommentField: t.state.hasCommentField, newspyj: t.state.newspyj, commentField: t.state.commentField, commentAttitude: t.state.commentAttitude, status: t.state.status, form: t.state.formItem, formStyleObj: t.state.formStyleObj, allForm: t.state.form, data: t.state.editFormData, commentFieldList: t.state.commentFieldList, defaultValue: t.state.defaultValue, commentDefaultList: t.state.commentDefaultList, commentBackList: t.state.commentBackList, fieldControll: t.state.fieldControll, caIsPrd: t.state.caIsPrd, preCaFields: t.state.preCaFields, formRelaField: t.state.formRelaField, isRemoveCommentFormHtml: t.state.isRemoveCommentFormHtml, commentUpload: t.state.commentUpload, isCaUser: t.state.isCaUser, caFirm: t.state.caFirm, caESignatureName: t.state.caESignatureName, caFormSign: t.state.caFormSign, inscriptionShow: t.state.inscriptionShow, onChange: this.change.bind(this) })
7790
+ this.state.tableStatus == '0' ? "" : _react2.default.createElement(_table2.default, { module: this.state.module, operate: this.state.operate, editType: this.state.editType, dataId: this.state.dataId, hasCommentField: t.state.hasCommentField, newspyj: t.state.newspyj, commentField: t.state.commentField, commentAttitude: t.state.commentAttitude, status: t.state.status, form: t.state.formItem, formStyleObj: t.state.formStyleObj, subColumnCount: t.state.subColumnCount, allForm: t.state.form, data: t.state.editFormData, commentFieldList: t.state.commentFieldList, defaultValue: t.state.defaultValue, commentDefaultList: t.state.commentDefaultList, commentBackList: t.state.commentBackList, fieldControll: t.state.fieldControll, caIsPrd: t.state.caIsPrd, preCaFields: t.state.preCaFields, formRelaField: t.state.formRelaField, isRemoveCommentFormHtml: t.state.isRemoveCommentFormHtml, commentUpload: t.state.commentUpload, isCaUser: t.state.isCaUser, caFirm: t.state.caFirm, caESignatureName: t.state.caESignatureName, caFormSign: t.state.caFormSign, inscriptionShow: t.state.inscriptionShow, onChange: this.change.bind(this) })
7790
7791
  )
7791
7792
  )
7792
7793
  )
@@ -325,8 +325,11 @@ export default {
325
325
  // table: TblForm 实例(可访问 refs)
326
326
  },
327
327
 
328
- /** 字段参数处理(Form 加载字段时调用) */
329
- dealwithCommonFormParam(itemParam, form) {
328
+ /** 字段参数处理(子表 SubForm 加载时也会调用,可设置 subColumnCount: 1-4) */
329
+ dealwithCommonFormParam(itemParam, subForm) {
330
+ if (itemParam.key === 'sub_tbl_1') {
331
+ itemParam.subColumnCount = 2;
332
+ }
330
333
  return itemParam;
331
334
  },
332
335
 
@@ -345,12 +348,18 @@ window.test_lizhao0316_mobileExt = {
345
348
  dealwithFormItemChangeExt(itemParam, table, callback) {
346
349
  // callback([{ type: 'main', key: 'f11$', data: '联动值' }]);
347
350
  },
348
- dealwithFormParamExt(itemParam, form) {
351
+ dealwithFormParamExt(itemParam, subForm) {
352
+ // 子表多列:在现有扩展里赋值 subColumnCount(1-4),SubForm/Table 会自动读取
353
+ if (itemParam.key === 'sub_tbl_1') {
354
+ itemParam.subColumnCount = 2;
355
+ }
349
356
  return itemParam;
350
357
  },
351
358
  };
352
359
  ```
353
360
 
361
+ 流程表单在 `pages/flow_common/{module}.js` 的 **`dealwithCommonFormParam`** 中同样可设置 `itemParam.subColumnCount`;流程页还可通过 `{module}_{formKey}_mobileExt.dealwithFormParamExt` 按子表编码区分列数。无需新增扩展方法名。
362
+
354
363
  ### 手动加载扩展(高级)
355
364
 
356
365
  ```javascript