fmui-base 2.2.87 → 2.2.88

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 CHANGED
@@ -3,6 +3,7 @@
3
3
  ---npm publish
4
4
 
5
5
  ## 更新日志
6
+ - 2.2.88:表单关联字段重构
6
7
  - 2.2.87:选人组件添加隐藏页签,增加业务建模表单组件
7
8
  - 2.2.86: 流程表单按钮超过三个按钮显示更多,修改更多按钮样式,待办保存按钮强制放到更多里面
8
9
  - 2.2.85: 北京ca开启电子签章获取ca签名,不受表单加签控制
package/lib/form/form.js CHANGED
@@ -1757,157 +1757,132 @@ var PageHome = function (_React$Component) {
1757
1757
  return '' + (num < 10 ? '0' : '') + num;
1758
1758
  }
1759
1759
 
1760
- //处理关联字段初始化
1760
+ // 规范化触发字段取值(与 table.jsx 保持一致)
1761
1761
 
1762
1762
  }, {
1763
- key: 'dealwithRelaField',
1764
- value: function dealwithRelaField(itemParam, allForm) {
1765
- console.log("dealwithRelaField===");
1766
- var formRelaFieldMaps = this.props.formRelaFieldMaps;
1767
- var defaultmustFields = [];
1768
- var defaulthideFields = [];
1769
- var fieldControll = this.props.fieldControll;
1770
- var hiddenFields = fieldControll.hiddenFields;
1771
- var mustFieldsStr = fieldControll.mustFields;
1772
- if (hiddenFields && hiddenFields != '') {
1773
- for (var i = 0; i < hiddenFields.split(',').length; i++) {
1774
- if (hiddenFields.split(',')[i] && hiddenFields.split(',')[i] != '') {
1775
- defaulthideFields.push(hiddenFields.split(',')[i]);
1763
+ key: 'normalizeRelaTriggerValue',
1764
+ value: function normalizeRelaTriggerValue(nowValue) {
1765
+ if (nowValue == null || typeof nowValue == 'undefined') {
1766
+ return "";
1767
+ }
1768
+ if (nowValue && nowValue.indexOf("[") >= 0 && nowValue.indexOf("]") >= 0) {
1769
+ try {
1770
+ var nowValueArray = JSON.parse(nowValue);
1771
+ if (nowValueArray.length == 1) {
1772
+ return nowValueArray[0];
1776
1773
  }
1774
+ return nowValueArray.join(",");
1775
+ } catch (e) {
1776
+ return nowValue;
1777
1777
  }
1778
1778
  }
1779
- if (mustFieldsStr && mustFieldsStr != '') {
1780
- for (var i = 0; i < mustFieldsStr.split(',').length; i++) {
1781
- if (mustFieldsStr.split(',')[i] && mustFieldsStr.split(',')[i] != '') {
1782
- defaultmustFields.push(mustFieldsStr.split(',')[i]);
1779
+ if (nowValue != '' && (nowValue.indexOf("$#$#") >= 0 || nowValue.indexOf("#$#$") >= 0)) {
1780
+ if (nowValue.indexOf("#$#$") >= 0) {
1781
+ var nowValueList = nowValue.split("#$#$");
1782
+ if (nowValueList.length == 1) {
1783
+ return nowValueList[0].replace("$#$#", "");
1783
1784
  }
1785
+ return nowValueList.map(function (item) {
1786
+ return item.replace("$#$#", "");
1787
+ }).join(",");
1784
1788
  }
1789
+ return nowValue.replace("$#$#", "");
1785
1790
  }
1791
+ return nowValue;
1792
+ }
1786
1793
 
1787
- if (formRelaFieldMaps) {
1788
- if (formRelaFieldMaps[itemParam.uniqueName]) {
1789
- var data = this.props.data;
1790
- var mainTblData = data.mainTblData;
1791
- var mainTblName = data.mainTblName;
1792
- // var subTbl = data.subTbl;
1793
- var subTbl = allForm;
1794
- var formRelaFieldMapsArray = formRelaFieldMaps[itemParam.uniqueName];
1795
- formRelaFieldMapsArray.map(function (item) {
1796
- if (item.triggerTblName == mainTblName) {
1797
- mainTblData.map(function (mainTblDataItem) {
1798
- if (item.triggerFieldName == mainTblDataItem.key) {
1799
- var nowValue = mainTblDataItem.value ? mainTblDataItem.value : "";
1800
- if (nowValue && nowValue.indexOf("[") >= 0 && nowValue.indexOf("]") >= 0) {
1801
- var nowValueArray = JSON.parse(nowValue);
1802
- if (nowValueArray.length == 1) {
1803
- nowValue = nowValueArray[0];
1804
- } else {
1805
- nowValue = nowValueArray.join(",");
1806
- }
1807
- }
1808
- // if(item.triggerFieldVal == mainTblDataItem.value){
1809
- var editType = item.editType;
1810
- if (editType == 'hide' || editType == 'rowhide') {
1811
- // relaFieldMap["key"]="isHidden";
1812
- if (item.triggerFieldVal == nowValue || nowValue.split(',').indexOf(item.triggerFieldVal) != -1) {
1813
- itemParam.isHidden = true;
1814
- defaulthideFields.push(itemParam.uniqueName);
1815
- console.log("true====" + itemParam.uniqueName);
1816
- } else if (defaulthideFields.indexOf(itemParam.uniqueName) != -1) {
1817
- itemParam.isHidden = true;
1818
- } else {
1819
- console.log("false====" + itemParam.uniqueName);
1820
- itemParam.isHidden = false;
1821
- }
1822
- } else if (editType == 'must') {
1823
- // relaFieldMap["key"]="required";
1824
- var triggerFieldValBoolean = false;
1825
- if (item.triggerFieldVal == nowValue || nowValue.split(',').indexOf(item.triggerFieldVal) != -1) {
1826
- itemParam.required = true;
1827
- triggerFieldValBoolean = true;
1828
- } else {
1829
- itemParam.required = false;
1830
- triggerFieldValBoolean = false;
1831
- }
1832
- // var relaFieldNameArray = formRelaFieldMapsObjItem.relaFieldName.split(",");
1833
- // mainTblData.map(function(item){
1834
- // if(item.key==relaFieldNameArray[index]){
1835
- // item.required = triggerFieldValBoolean;
1836
- // }
1837
- // });
1838
- if (item.relaFieldName == mainTblDataItem.key) {
1839
- mainTblDataItem.required = triggerFieldValBoolean;
1840
- }
1841
- } else if (editType == 'edit') {
1842
- if (item.triggerFieldVal == nowValue || nowValue.split(',').indexOf(item.triggerFieldVal) != -1) {
1843
- itemParam.readOnly = false;
1844
- } else {
1845
- itemParam.readOnly = true;
1846
- }
1847
- }
1848
- // }
1849
- }
1850
- });
1851
- } else {
1852
- var subTbls = subTbl.item;
1853
- subTbls.map(function (subTblItem) {
1854
- if (subTbl.tblName == item.triggerTblName) {
1855
- var subTblData = subTblItem;
1856
- subTblData.map(function (mainTblDataItem) {
1857
- if (item.triggerFieldName == mainTblDataItem.itemCode) {
1858
- // if(item.triggerFieldVal == mainTblDataItem.value){
1859
- var nowValue = mainTblDataItem.value ? mainTblDataItem.value : "";
1860
- if (nowValue && nowValue.indexOf("[") >= 0 && nowValue.indexOf("]") >= 0) {
1861
- var nowValueArray = JSON.parse(nowValue);
1862
- if (nowValueArray.length == 1) {
1863
- nowValue = nowValueArray[0];
1864
- } else {
1865
- nowValue = nowValueArray.join(",");
1866
- }
1867
- }
1794
+ // 读取触发字段当前值
1868
1795
 
1869
- var editType = item.editType;
1870
- if (editType == 'hide' || editType == 'rowhide') {
1871
- // relaFieldMap["key"]="isHidden";
1872
- if (item.triggerFieldVal == nowValue || nowValue.split(',').indexOf(item.triggerFieldVal) != -1) {
1873
- itemParam.isHidden = true;
1874
- } else {
1875
- itemParam.isHidden = false;
1876
- }
1877
- } else if (editType == 'must') {
1878
- // relaFieldMap["key"]="required";
1879
- var triggerFieldValBoolean = false;
1880
- if (item.triggerFieldVal == nowValue || nowValue.split(',').indexOf(item.triggerFieldVal) != -1) {
1881
- itemParam.required = true;
1882
- triggerFieldValBoolean = true;
1883
- } else {
1884
- itemParam.required = false;
1885
- triggerFieldValBoolean = false;
1886
- }
1887
- // var relaFieldNameArray = formRelaFieldMapsObjItem.relaFieldName.split(",");
1888
- // mainTblData.map(function(item){
1889
- // if(item.key==relaFieldNameArray[index]){
1890
- // item.required = triggerFieldValBoolean;
1891
- // }
1892
- // });
1893
- if (item.relaFieldName == mainTblDataItem.itemCode) {
1894
- mainTblDataItem.required = triggerFieldValBoolean;
1895
- }
1896
- } else if (editType == 'edit') {
1897
- if (item.triggerFieldVal == nowValue || nowValue.split(',').indexOf(item.triggerFieldVal) != -1) {
1898
- itemParam.readOnly = false;
1899
- } else {
1900
- itemParam.readOnly = true;
1901
- }
1902
- }
1903
- // }
1904
- }
1905
- });
1906
- }
1907
- });
1908
- }
1909
- });
1796
+ }, {
1797
+ key: 'getRelaTriggerFieldValue',
1798
+ value: function getRelaTriggerFieldValue(rule, data, allForm) {
1799
+ var nowValue = "";
1800
+ var mainTblData = data.mainTblData || [];
1801
+ var mainTblName = data.mainTblName;
1802
+ if (rule.triggerTblName == mainTblName) {
1803
+ for (var i = 0; i < mainTblData.length; i++) {
1804
+ if (mainTblData[i].key == rule.triggerFieldName) {
1805
+ nowValue = mainTblData[i].value ? mainTblData[i].value : "";
1806
+ break;
1807
+ }
1808
+ }
1809
+ } else if (allForm && allForm.item) {
1810
+ allForm.item.map(function (subTblItem) {
1811
+ if (allForm.tblName == rule.triggerTblName && subTblItem) {
1812
+ subTblItem.map(function (subField) {
1813
+ if (subField.itemCode == rule.triggerFieldName) {
1814
+ nowValue = subField.value ? subField.value : "";
1815
+ }
1816
+ });
1817
+ }
1818
+ });
1819
+ }
1820
+ return this.normalizeRelaTriggerValue(nowValue);
1821
+ }
1822
+ }, {
1823
+ key: 'isRelaRuleMatched',
1824
+ value: function isRelaRuleMatched(rule, nowValue) {
1825
+ var triggerFieldVal = rule.triggerFieldVal;
1826
+ if (triggerFieldVal == " ") {
1827
+ triggerFieldVal = "";
1828
+ }
1829
+ if (triggerFieldVal === '') {
1830
+ return true;
1831
+ }
1832
+ return triggerFieldVal == nowValue || nowValue.split(',').indexOf(triggerFieldVal) != -1;
1833
+ }
1834
+
1835
+ //处理关联字段初始化(按 relaFieldsMap 全局顺序,后写入覆盖先写入,与配置页优先级一致)
1836
+
1837
+ }, {
1838
+ key: 'dealwithRelaField',
1839
+ value: function dealwithRelaField(itemParam, allForm) {
1840
+ var formRelaFieldMaps = this.props.formRelaFieldMaps;
1841
+ if (!formRelaFieldMaps || !formRelaFieldMaps[itemParam.uniqueName]) {
1842
+ return itemParam;
1843
+ }
1844
+ var data = this.props.data;
1845
+ var formRelaFieldMapsArray = formRelaFieldMaps[itemParam.uniqueName];
1846
+ var fieldControll = this.props.fieldControll || {};
1847
+ var defaulthideFields = [];
1848
+ if (fieldControll.hiddenFields) {
1849
+ fieldControll.hiddenFields.split(',').forEach(function (f) {
1850
+ if (f) {
1851
+ defaulthideFields.push(f);
1852
+ }
1853
+ });
1854
+ }
1855
+ if (defaulthideFields.indexOf(itemParam.uniqueName) != -1) {
1856
+ itemParam.isHidden = true;
1857
+ }
1858
+
1859
+ formRelaFieldMapsArray.forEach(function (rule) {
1860
+ var nowValue = this.getRelaTriggerFieldValue(rule, data, allForm);
1861
+ var matched = this.isRelaRuleMatched(rule, nowValue);
1862
+ var editType = rule.editType;
1863
+ if (editType == 'hide' || editType == 'rowhide') {
1864
+ if (matched) {
1865
+ itemParam.isHidden = true;
1866
+ } else if (defaulthideFields.indexOf(itemParam.uniqueName) == -1) {
1867
+ itemParam.isHidden = false;
1868
+ }
1869
+ } else if (editType == 'must') {
1870
+ if (matched) {
1871
+ itemParam.required = true;
1872
+ } else {
1873
+ itemParam.required = false;
1874
+ }
1875
+ } else if (editType == 'edit') {
1876
+ if (matched) {
1877
+ itemParam.readOnly = false;
1878
+ } else if (nowValue != '') {
1879
+ itemParam.readOnly = true;
1880
+ }
1910
1881
  }
1882
+ }.bind(this));
1883
+
1884
+ if (itemParam.isHidden) {
1885
+ itemParam.required = false;
1911
1886
  }
1912
1887
  return itemParam;
1913
1888
  }
@@ -1936,12 +1911,13 @@ var PageHome = function (_React$Component) {
1936
1911
  this.loadComponet();
1937
1912
  }
1938
1913
 
1939
- //重新加载组件
1914
+ //重新加载组件;options.silent=true 时不向上触发 onChange(用于字段关联批量刷新,避免死循环)
1940
1915
 
1941
1916
  }, {
1942
1917
  key: 'reloadItemParam',
1943
- value: function reloadItemParam(itemNew) {
1918
+ value: function reloadItemParam(itemNew, options) {
1944
1919
  var dataType = this.state.dataType;
1920
+ var silent = options && options.silent === true;
1945
1921
 
1946
1922
  if (itemNew != null && itemNew != undefined && Array.isArray(itemNew)) {
1947
1923
  var itemParam = this.state.itemParam;
@@ -2009,7 +1985,14 @@ var PageHome = function (_React$Component) {
2009
1985
  if (itemParam.itemType == 'popuser') {
2010
1986
  this.refs['selectMember_' + itemParam.key].initSelectData();
2011
1987
  }
2012
- this.props.onChange(this.props.data, itemParam);
1988
+ // 静默刷新时仍需同步 mainTblData.required,否则提交校验不生效
1989
+ if (silent && this.props.data) {
1990
+ var formData = this.props.data;
1991
+ this.dealwithData(itemParam, formData.mainTblData || [], formData.relatedTbl || []);
1992
+ }
1993
+ if (!silent && this.props.onChange) {
1994
+ this.props.onChange(this.props.data, itemParam);
1995
+ }
2013
1996
  });
2014
1997
  }
2015
1998
  }
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,33 +908,329 @@ 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;
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;
853
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
+ }
871
1077
  }
872
1078
  }
873
1079
  }
874
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
+ }
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;
1231
+ }
1232
+ }
1233
+ }
875
1234
  }
876
1235
  }, {
877
1236
  key: 'dealwithRelaField',
@@ -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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fmui-base",
3
- "version": "2.2.87",
3
+ "version": "2.2.88",
4
4
  "title": "fmui-base",
5
5
  "description": "fmui移动端组件",
6
6
  "main": "lib/index.js",