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/README.md CHANGED
@@ -3,6 +3,8 @@
3
3
  ---npm publish
4
4
 
5
5
  ## 更新日志
6
+ - 2.2.89:表单子表支持一行多列显示,并支持扩展
7
+ - 2.2.88:表单关联字段重构
6
8
  - 2.2.87:选人组件添加隐藏页签,增加业务建模表单组件
7
9
  - 2.2.86: 流程表单按钮超过三个按钮显示更多,修改更多按钮样式,待办保存按钮强制放到更多里面
8
10
  - 2.2.85: 北京ca开启电子签章获取ca签名,不受表单加签控制
package/lib/form/form.js CHANGED
@@ -1594,6 +1594,9 @@ var PageHome = function (_React$Component) {
1594
1594
  $("." + itemParam.fieldId).find(".t-datetime-field-placeholder").attr("style", placeholderStyleStr);
1595
1595
  }
1596
1596
  }
1597
+ if (t.props.dataType === 'sub') {
1598
+ t.applySubFormLabelStyle(itemParam);
1599
+ }
1597
1600
  this.props.onChange(data, itemParam);
1598
1601
  });
1599
1602
  }
@@ -1757,157 +1760,132 @@ var PageHome = function (_React$Component) {
1757
1760
  return '' + (num < 10 ? '0' : '') + num;
1758
1761
  }
1759
1762
 
1760
- //处理关联字段初始化
1763
+ // 规范化触发字段取值(与 table.jsx 保持一致)
1761
1764
 
1762
1765
  }, {
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]);
1766
+ key: 'normalizeRelaTriggerValue',
1767
+ value: function normalizeRelaTriggerValue(nowValue) {
1768
+ if (nowValue == null || typeof nowValue == 'undefined') {
1769
+ return "";
1770
+ }
1771
+ if (nowValue && nowValue.indexOf("[") >= 0 && nowValue.indexOf("]") >= 0) {
1772
+ try {
1773
+ var nowValueArray = JSON.parse(nowValue);
1774
+ if (nowValueArray.length == 1) {
1775
+ return nowValueArray[0];
1776
1776
  }
1777
+ return nowValueArray.join(",");
1778
+ } catch (e) {
1779
+ return nowValue;
1777
1780
  }
1778
1781
  }
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]);
1782
+ if (nowValue != '' && (nowValue.indexOf("$#$#") >= 0 || nowValue.indexOf("#$#$") >= 0)) {
1783
+ if (nowValue.indexOf("#$#$") >= 0) {
1784
+ var nowValueList = nowValue.split("#$#$");
1785
+ if (nowValueList.length == 1) {
1786
+ return nowValueList[0].replace("$#$#", "");
1783
1787
  }
1788
+ return nowValueList.map(function (item) {
1789
+ return item.replace("$#$#", "");
1790
+ }).join(",");
1784
1791
  }
1792
+ return nowValue.replace("$#$#", "");
1785
1793
  }
1794
+ return nowValue;
1795
+ }
1786
1796
 
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
- }
1797
+ // 读取触发字段当前值
1868
1798
 
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
- });
1799
+ }, {
1800
+ key: 'getRelaTriggerFieldValue',
1801
+ value: function getRelaTriggerFieldValue(rule, data, allForm) {
1802
+ var nowValue = "";
1803
+ var mainTblData = data.mainTblData || [];
1804
+ var mainTblName = data.mainTblName;
1805
+ if (rule.triggerTblName == mainTblName) {
1806
+ for (var i = 0; i < mainTblData.length; i++) {
1807
+ if (mainTblData[i].key == rule.triggerFieldName) {
1808
+ nowValue = mainTblData[i].value ? mainTblData[i].value : "";
1809
+ break;
1810
+ }
1811
+ }
1812
+ } else if (allForm && allForm.item) {
1813
+ allForm.item.map(function (subTblItem) {
1814
+ if (allForm.tblName == rule.triggerTblName && subTblItem) {
1815
+ subTblItem.map(function (subField) {
1816
+ if (subField.itemCode == rule.triggerFieldName) {
1817
+ nowValue = subField.value ? subField.value : "";
1818
+ }
1819
+ });
1820
+ }
1821
+ });
1822
+ }
1823
+ return this.normalizeRelaTriggerValue(nowValue);
1824
+ }
1825
+ }, {
1826
+ key: 'isRelaRuleMatched',
1827
+ value: function isRelaRuleMatched(rule, nowValue) {
1828
+ var triggerFieldVal = rule.triggerFieldVal;
1829
+ if (triggerFieldVal == " ") {
1830
+ triggerFieldVal = "";
1831
+ }
1832
+ if (triggerFieldVal === '') {
1833
+ return true;
1834
+ }
1835
+ return triggerFieldVal == nowValue || nowValue.split(',').indexOf(triggerFieldVal) != -1;
1836
+ }
1837
+
1838
+ //处理关联字段初始化(按 relaFieldsMap 全局顺序,后写入覆盖先写入,与配置页优先级一致)
1839
+
1840
+ }, {
1841
+ key: 'dealwithRelaField',
1842
+ value: function dealwithRelaField(itemParam, allForm) {
1843
+ var formRelaFieldMaps = this.props.formRelaFieldMaps;
1844
+ if (!formRelaFieldMaps || !formRelaFieldMaps[itemParam.uniqueName]) {
1845
+ return itemParam;
1846
+ }
1847
+ var data = this.props.data;
1848
+ var formRelaFieldMapsArray = formRelaFieldMaps[itemParam.uniqueName];
1849
+ var fieldControll = this.props.fieldControll || {};
1850
+ var defaulthideFields = [];
1851
+ if (fieldControll.hiddenFields) {
1852
+ fieldControll.hiddenFields.split(',').forEach(function (f) {
1853
+ if (f) {
1854
+ defaulthideFields.push(f);
1855
+ }
1856
+ });
1857
+ }
1858
+ if (defaulthideFields.indexOf(itemParam.uniqueName) != -1) {
1859
+ itemParam.isHidden = true;
1860
+ }
1861
+
1862
+ formRelaFieldMapsArray.forEach(function (rule) {
1863
+ var nowValue = this.getRelaTriggerFieldValue(rule, data, allForm);
1864
+ var matched = this.isRelaRuleMatched(rule, nowValue);
1865
+ var editType = rule.editType;
1866
+ if (editType == 'hide' || editType == 'rowhide') {
1867
+ if (matched) {
1868
+ itemParam.isHidden = true;
1869
+ } else if (defaulthideFields.indexOf(itemParam.uniqueName) == -1) {
1870
+ itemParam.isHidden = false;
1871
+ }
1872
+ } else if (editType == 'must') {
1873
+ if (matched) {
1874
+ itemParam.required = true;
1875
+ } else {
1876
+ itemParam.required = false;
1877
+ }
1878
+ } else if (editType == 'edit') {
1879
+ if (matched) {
1880
+ itemParam.readOnly = false;
1881
+ } else if (nowValue != '') {
1882
+ itemParam.readOnly = true;
1883
+ }
1910
1884
  }
1885
+ }.bind(this));
1886
+
1887
+ if (itemParam.isHidden) {
1888
+ itemParam.required = false;
1911
1889
  }
1912
1890
  return itemParam;
1913
1891
  }
@@ -1935,13 +1913,59 @@ var PageHome = function (_React$Component) {
1935
1913
  value: function componentDidMount() {
1936
1914
  this.loadComponet();
1937
1915
  }
1916
+ }, {
1917
+ key: 'componentDidUpdate',
1918
+ value: function componentDidUpdate() {
1919
+ if (this.props.dataType === 'sub' && this.state.loaded && this.state.itemParam && this.state.itemParam.fieldId) {
1920
+ this.applySubFormLabelStyle(this.state.itemParam);
1921
+ }
1922
+ }
1923
+
1924
+ // 子表标签:单列保留主表边距,仅同步字号颜色;多列去掉 label 左边距
1925
+
1926
+ }, {
1927
+ key: 'applySubFormLabelStyle',
1928
+ value: function applySubFormLabelStyle(itemParam) {
1929
+ if (!itemParam || !itemParam.fieldId || typeof $ === 'undefined') {
1930
+ return;
1931
+ }
1932
+ var subColumnCount = parseInt(this.props.subColumnCount, 10);
1933
+ var isSubFormMultiCol = this.props.dataType === 'sub' && !isNaN(subColumnCount) && subColumnCount > 1;
1934
+ var ts = itemParam.formStyleObj && itemParam.formStyleObj.titleStyle ? itemParam.formStyleObj.titleStyle : {};
1935
+ var styleStr = 'font-size:14px;line-height:24px;color:rgb(51, 51, 51);font-weight:bold;';
1936
+ if (ts.fontSize) {
1937
+ styleStr += 'font-size:' + ts.fontSize + ';';
1938
+ }
1939
+ if (ts.color) {
1940
+ styleStr = styleStr.replace(/color:[^;]+;?/, '') + 'color:' + ts.color + ';';
1941
+ }
1942
+ if (ts.fontFamily) {
1943
+ styleStr += 'font-family:' + ts.fontFamily + ';';
1944
+ }
1945
+ if (ts.fontWeight) {
1946
+ styleStr += 'font-weight:' + ts.fontWeight + ';';
1947
+ }
1948
+ if (ts.fontStyle) {
1949
+ styleStr += 'font-style:' + ts.fontStyle + ';';
1950
+ }
1951
+ if (isSubFormMultiCol) {
1952
+ styleStr += 'margin-left:0;padding-left:0;padding-right:0;';
1953
+ }
1954
+ var $root = $('.' + itemParam.fieldId);
1955
+ $root.find('.t-field-layout-v-label-left').attr('style', styleStr);
1956
+ $root.find('.t-field-layout-h-label').attr('style', styleStr);
1957
+ if (isSubFormMultiCol) {
1958
+ $root.find('.t-field-layout-v-label').attr('style', styleStr);
1959
+ }
1960
+ }
1938
1961
 
1939
- //重新加载组件
1962
+ //重新加载组件;options.silent=true 时不向上触发 onChange(用于字段关联批量刷新,避免死循环)
1940
1963
 
1941
1964
  }, {
1942
1965
  key: 'reloadItemParam',
1943
- value: function reloadItemParam(itemNew) {
1966
+ value: function reloadItemParam(itemNew, options) {
1944
1967
  var dataType = this.state.dataType;
1968
+ var silent = options && options.silent === true;
1945
1969
 
1946
1970
  if (itemNew != null && itemNew != undefined && Array.isArray(itemNew)) {
1947
1971
  var itemParam = this.state.itemParam;
@@ -2009,7 +2033,14 @@ var PageHome = function (_React$Component) {
2009
2033
  if (itemParam.itemType == 'popuser') {
2010
2034
  this.refs['selectMember_' + itemParam.key].initSelectData();
2011
2035
  }
2012
- this.props.onChange(this.props.data, itemParam);
2036
+ // 静默刷新时仍需同步 mainTblData.required,否则提交校验不生效
2037
+ if (silent && this.props.data) {
2038
+ var formData = this.props.data;
2039
+ this.dealwithData(itemParam, formData.mainTblData || [], formData.relatedTbl || []);
2040
+ }
2041
+ if (!silent && this.props.onChange) {
2042
+ this.props.onChange(this.props.data, itemParam);
2043
+ }
2013
2044
  });
2014
2045
  }
2015
2046
  }
@@ -3600,9 +3631,16 @@ var PageHome = function (_React$Component) {
3600
3631
  // itemParam:itemParam
3601
3632
  // })
3602
3633
  }
3634
+ var subColumnCount = parseInt(t.props.subColumnCount, 10);
3635
+ var isSubFormMultiCol = t.props.dataType === 'sub' && !isNaN(subColumnCount) && subColumnCount > 1;
3636
+ var subFormFieldLayout = isSubFormMultiCol ? 'v' : 'h';
3637
+ var rootClassName = this.state.itemParam.isHidden ? 't-DN' : '';
3638
+ if (isSubFormMultiCol) {
3639
+ rootClassName = (rootClassName ? rootClassName + ' ' : '') + 'subform-col-field';
3640
+ }
3603
3641
  return _react2.default.createElement(
3604
3642
  'div',
3605
- { className: this.state.itemParam.isHidden ? "t-DN" : "" },
3643
+ { className: rootClassName },
3606
3644
  this.state.itemParam.itemType == 'text' ? _react2.default.createElement(
3607
3645
  _Group2.default.List,
3608
3646
  { borderTopNone: true },
@@ -3630,6 +3668,7 @@ var PageHome = function (_React$Component) {
3630
3668
  { className: 't-FBH', id: t.state.prefixName + "_" + t.state.itemParam.key },
3631
3669
  _react2.default.createElement(_TextareaField2.default, {
3632
3670
  className: 't-W100',
3671
+ layout: subFormFieldLayout,
3633
3672
  required: t.state.itemParam.required,
3634
3673
  label: t.state.itemParam.title,
3635
3674
  readOnly: t.state.itemParam.readOnly,
@@ -3648,9 +3687,10 @@ var PageHome = function (_React$Component) {
3648
3687
  { className: t.state.itemParam.fieldId, style: t.state.itemParam.formStyleObj.contentStyle == null ? {} : t.state.itemParam.formStyleObj.contentStyle },
3649
3688
  _react2.default.createElement(
3650
3689
  'div',
3651
- { className: 't-FBH', id: t.state.prefixName + "_" + t.state.itemParam.key },
3690
+ { className: isSubFormMultiCol ? '' : 't-FBH', id: t.state.prefixName + "_" + t.state.itemParam.key },
3652
3691
  _react2.default.createElement(_TextField2.default, {
3653
3692
  className: 't-W100',
3693
+ layout: subFormFieldLayout,
3654
3694
  required: t.state.itemParam.required,
3655
3695
  readOnly: t.state.itemParam.readOnly,
3656
3696
  label: t.state.itemParam.title,
@@ -3846,9 +3886,10 @@ var PageHome = function (_React$Component) {
3846
3886
  { borderTopNone: true },
3847
3887
  _react2.default.createElement(
3848
3888
  'div',
3849
- { className: 't-FBH', id: t.state.prefixName + "_" + t.state.itemParam.key },
3889
+ { className: isSubFormMultiCol ? '' : 't-FBH', id: t.state.prefixName + "_" + t.state.itemParam.key },
3850
3890
  _react2.default.createElement(_SelectField2.default, {
3851
3891
  className: 't-W100',
3892
+ layout: subFormFieldLayout,
3852
3893
  required: t.state.itemParam.required,
3853
3894
  label: t.state.itemParam.title,
3854
3895
  readOnly: t.state.itemParam.readOnly,
@@ -3869,9 +3910,10 @@ var PageHome = function (_React$Component) {
3869
3910
  { borderTopNone: true },
3870
3911
  _react2.default.createElement(
3871
3912
  'div',
3872
- { id: t.state.prefixName + "_" + t.state.itemParam.key, className: t.state.itemParam.dateFormat == "DateInterval" ? "" : "t-FBH" },
3913
+ { id: t.state.prefixName + "_" + t.state.itemParam.key, className: t.state.itemParam.dateFormat == "DateInterval" ? "" : isSubFormMultiCol ? "" : "t-FBH" },
3873
3914
  t.state.itemParam.readOnly ? _react2.default.createElement(_TextareaField2.default, {
3874
3915
  className: 't-W100',
3916
+ layout: subFormFieldLayout,
3875
3917
  required: t.state.itemParam.required,
3876
3918
  label: t.state.itemParam.title,
3877
3919
  readOnly: t.state.itemParam.readOnly,
@@ -3900,6 +3942,8 @@ var PageHome = function (_React$Component) {
3900
3942
  , onOk: t.handleChangeDate.bind(t, t.state.itemParam.key)
3901
3943
  }) : _react2.default.createElement(_DatetimeField2.default, {
3902
3944
  className: 't-W100',
3945
+ layout: subFormFieldLayout,
3946
+ multiLine: isSubFormMultiCol,
3903
3947
  label: t.state.itemParam.title,
3904
3948
  required: t.state.itemParam.required,
3905
3949
  readOnly: t.state.itemParam.readOnly,