fmui-base 2.3.31 → 2.3.33

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.3.33:移动端支持新疆CA电子签章功能,移动端选人组件增加一些再次加载的入口
7
+ - 2.3.32:移动端子表字段为空时不存,只读情况下不再默认拼一行空子表
6
8
  - 2.3.31:移动端推送点开的流程表单切换组织不显示,集成新疆CA
7
9
  - 2.3.30:移动端日期型字段日期格式(xx年xx月xx日)移动端办理后丢失
8
10
  - 2.3.29:移动端办理宏值签名丢失
@@ -53,36 +53,161 @@ var PageHome = function (_React$Component) {
53
53
 
54
54
  var _this = _possibleConstructorReturn(this, (PageHome.__proto__ || Object.getPrototypeOf(PageHome)).call(this, props));
55
55
 
56
+ var list = props.list || [];
56
57
  _this.state = {
57
58
  loadImg: _variables2.default.loadImg + "&fid=",
58
- commentList: props.list || []
59
+ commentList: list,
60
+ // 意见表 ca_signature_img:有值则优先渲染(可来自接口字段或二次拉取)
61
+ caSignatureMap: _this.buildCaSignatureMap(list)
59
62
  };
60
-
61
63
  return _this;
62
64
  }
63
65
 
64
66
  _createClass(PageHome, [{
67
+ key: 'buildCaSignatureMap',
68
+ value: function buildCaSignatureMap(list) {
69
+ var map = {};
70
+ if (!list || !list.length) {
71
+ return map;
72
+ }
73
+ for (var i = 0; i < list.length; i++) {
74
+ var item = list[i];
75
+ if (item && item.id && item.caSignatureImg) {
76
+ var img = this.normalizeBase64(item.caSignatureImg);
77
+ if (img) {
78
+ map[item.id] = img;
79
+ }
80
+ }
81
+ }
82
+ return map;
83
+ }
84
+ }, {
65
85
  key: 'componentDidMount',
66
86
  value: function componentDidMount() {
67
87
  var t = this;
88
+ var list = t.props.list || [];
68
89
  t.setState({
69
- commentList: t.props.list || []
90
+ commentList: list,
91
+ caSignatureMap: Object.assign({}, t.state.caSignatureMap, t.buildCaSignatureMap(list))
70
92
  }, function () {
71
- t.casigin();
93
+ t.casigin(t.props);
72
94
  });
73
95
  }
96
+ }, {
97
+ key: 'componentWillReceiveProps',
98
+ value: function componentWillReceiveProps(nextProps) {
99
+ var t = this;
100
+ var nextList = nextProps.list || [];
101
+ var prevList = this.props.list || [];
102
+ var listChanged = nextList !== prevList || nextList.length !== prevList.length || nextList[0] && prevList[0] && nextList[0].id !== prevList[0].id;
103
+ var caChanged = nextProps.caFirm !== this.props.caFirm || nextProps.caESignatureName !== this.props.caESignatureName || nextProps.caFormSign !== this.props.caFormSign;
104
+ if (listChanged) {
105
+ t.setState({
106
+ commentList: nextList,
107
+ caSignatureMap: Object.assign({}, t.state.caSignatureMap, t.buildCaSignatureMap(nextList))
108
+ }, function () {
109
+ t.casigin(nextProps);
110
+ });
111
+ } else if (caChanged) {
112
+ t.casigin(nextProps);
113
+ }
114
+ }
74
115
 
75
- //批示意见验签
116
+ /** 去掉 dataURL 前缀,并只保留第一张 PNG(兼容库内多段 base64 粘连) */
117
+
118
+ }, {
119
+ key: 'normalizeBase64',
120
+ value: function normalizeBase64(signatureImg) {
121
+ if (!signatureImg) {
122
+ return '';
123
+ }
124
+ var imgData = String(signatureImg);
125
+ var base64Mark = 'base64,';
126
+ var markIdx = imgData.indexOf(base64Mark);
127
+ if (markIdx > -1) {
128
+ imgData = imgData.substring(markIdx + base64Mark.length);
129
+ }
130
+ imgData = imgData.replace(/\s+/g, '');
131
+ var pngStart = imgData.indexOf('iVBORw0KGgo');
132
+ if (pngStart > 0) {
133
+ imgData = imgData.substring(pngStart);
134
+ }
135
+ if (pngStart >= 0) {
136
+ var endMark = 'ASUVORK5CYII';
137
+ var endIdx = imgData.indexOf(endMark);
138
+ if (endIdx >= 0) {
139
+ endIdx = endIdx + endMark.length;
140
+ while (endIdx < imgData.length && imgData.charAt(endIdx) === '=') {
141
+ endIdx++;
142
+ }
143
+ imgData = imgData.substring(0, endIdx);
144
+ }
145
+ }
146
+ return imgData;
147
+ }
148
+ }, {
149
+ key: 'applyCaSignatureImg',
150
+ value: function applyCaSignatureImg(commentId, signatureImg) {
151
+ var t = this;
152
+ if (!commentId || !signatureImg) {
153
+ return;
154
+ }
155
+ var imgData = t.normalizeBase64(signatureImg);
156
+ if (!imgData) {
157
+ return;
158
+ }
159
+ t.setState(function (prev) {
160
+ var map = Object.assign({}, prev.caSignatureMap || {});
161
+ if (map[commentId] === imgData) {
162
+ return null;
163
+ }
164
+ map[commentId] = imgData;
165
+ return { caSignatureMap: map };
166
+ });
167
+ }
168
+
169
+ /** 按意见 id 补拉 ca_signature_img(仅补列表里还没有的) */
170
+
171
+ }, {
172
+ key: 'loadCaSignatureImgs',
173
+ value: function loadCaSignatureImgs(commentList) {
174
+ var t = this;
175
+ if (!commentList || !commentList.length) {
176
+ return;
177
+ }
178
+ commentList.forEach(function (item) {
179
+ if (!item || !item.id) {
180
+ return;
181
+ }
182
+ if (t.state.caSignatureMap && t.state.caSignatureMap[item.id]) {
183
+ return;
184
+ }
185
+ _db2.default.FlowApproval.getXinjiangCaImage({ commentId: item.id }).then(function (content) {
186
+ var signatureImg = content && content.image;
187
+ if (signatureImg) {
188
+ t.applyCaSignatureImg(item.id, signatureImg);
189
+ }
190
+ }).catch(function () {});
191
+ });
192
+ }
193
+
194
+ //批示意见验签 / 本地签名快照落款
76
195
 
77
196
  }, {
78
197
  key: 'casigin',
79
- value: function casigin() {
198
+ value: function casigin(props) {
80
199
  console.log("批示意见验签");
81
- var commentList = this.props.list;
82
- var isCaUser = this.props.isCaUser; //是否是CA加签用户
83
- var caFirm = this.props.caFirm; //是否是开启CA加签
84
- var caESignatureName = this.props.caESignatureName; //CA电子签名名称
85
- var caFormSign = this.props.caFormSign; //CA表单签名
200
+ props = props || this.props;
201
+ var commentList = props.list;
202
+ var isCaUser = props.isCaUser;
203
+ var caFirm = props.caFirm;
204
+ var caESignatureName = props.caESignatureName;
205
+ var caFormSign = props.caFormSign;
206
+ var t = this;
207
+
208
+ // 有 ca_signature_img 一律按该图渲染:先用列表字段,缺的再按 id 补拉
209
+ t.loadCaSignatureImgs(commentList);
210
+
86
211
  if (commentList && caFirm && caFirm != '' && caFormSign == '1') {
87
212
  commentList.map(function (item) {
88
213
  var param = {};
@@ -90,20 +215,11 @@ var PageHome = function (_React$Component) {
90
215
  param.relationId = getLoginUserInfo().mobile;
91
216
  param.msg = item.fullMessage;
92
217
  param.commentId = item.id;
93
- // setTimeout(function(){
94
- // $("#"+item.id+"_sucess").show();
95
- // },1000)
96
218
  _db2.default.FlowApproval.verifySign(param).then(function (content) {
97
219
  var result = content.verifySignRes;
98
220
  var signatureImg = content.signatureImg;
99
221
  if (signatureImg && signatureImg != null && signatureImg != '') {
100
- if ($("#commentSign-" + item.id).find(".signPic").length > 0) {
101
- $("#commentSign-" + item.id).find(".signPic").attr("src", 'data:image/png;base64,' + signatureImg);
102
- } else {
103
- var signPicHtml = '<img class="t-H64 t-PR5 signPic" src="data:image/png;base64,' + signatureImg + '"/>';
104
- $("#commentSign-" + item.id).find('.comment-html').append(signPicHtml);
105
- $("#commentSign-" + item.id).find(".userName").css("display", "none");
106
- }
222
+ t.applyCaSignatureImg(item.id, signatureImg);
107
223
  }
108
224
 
109
225
  if (result == 'success') {
@@ -115,12 +231,6 @@ var PageHome = function (_React$Component) {
115
231
  $("#commentSign-" + item.id).removeClass('t-PR16');
116
232
  $("#" + item.id + "_fail").show();
117
233
  }
118
- // else{
119
- // Toast.show({
120
- // type: 'error',
121
- // content: error.errorMsg,
122
- // });
123
- // }
124
234
  });
125
235
  });
126
236
  } else if (caESignatureName == '1' && isCaUser == '1' && caFirm == 'bjca') {
@@ -130,36 +240,10 @@ var PageHome = function (_React$Component) {
130
240
  param.relationId = getLoginUserInfo().mobile;
131
241
  param.msg = item.fullMessage;
132
242
  param.commentId = item.id;
133
- // setTimeout(function(){
134
- // $("#"+item.id+"_sucess").show();
135
- // },1000)
136
243
  _db2.default.FlowApproval.getBeiJingCaImage(param).then(function (content) {
137
244
  var signatureImg = content.image;
138
245
  if (signatureImg && signatureImg != null && signatureImg != '') {
139
- if ($("#commentSign-" + item.id).find(".signPic").length > 0) {
140
- $("#commentSign-" + item.id).find(".signPic").attr("src", 'data:image/png;base64,' + signatureImg);
141
- } else {
142
- var signPicHtml = '<img class="t-H64 t-PR5 signPic" src="data:image/png;base64,' + signatureImg + '"/>';
143
- $("#commentSign-" + item.id).find('.comment-html').append(signPicHtml);
144
- $("#commentSign-" + item.id).find(".userName").css("display", "none");
145
- }
146
- }
147
- }).catch(function (error) {});
148
- });
149
- } else if (caESignatureName == '1' && caFirm == 'xjca') {
150
- commentList.map(function (item) {
151
- var param = {};
152
- param.commentId = item.id;
153
- _db2.default.FlowApproval.getXinjiangCaImage(param).then(function (content) {
154
- var signatureImg = content.image;
155
- if (signatureImg && signatureImg != null && signatureImg != '') {
156
- if ($("#commentSign-" + item.id).find(".signPic").length > 0) {
157
- $("#commentSign-" + item.id).find(".signPic").attr("src", 'data:image/png;base64,' + signatureImg);
158
- } else {
159
- var signPicHtml = '<img class="t-H64 t-PR5 signPic" src="data:image/png;base64,' + signatureImg + '"/>';
160
- $("#commentSign-" + item.id).find('.comment-html').append(signPicHtml);
161
- $("#commentSign-" + item.id).find(".userName").css("display", "none");
162
- }
246
+ t.applyCaSignatureImg(item.id, signatureImg);
163
247
  }
164
248
  }).catch(function (error) {});
165
249
  });
@@ -210,7 +294,9 @@ var PageHome = function (_React$Component) {
210
294
  { className: 't-PR5' },
211
295
  item.orgShowName
212
296
  );
213
- var signPicHtml = item.signPic ? _react2.default.createElement('img', { className: 't-H64 t-PR5 signPic', src: t.state.loadImg + item.signPic }) : "";
297
+ var caImg = t.state.caSignatureMap && t.state.caSignatureMap[item.id] || t.normalizeBase64(item.caSignatureImg);
298
+ var hasSignImg = !!(caImg || item.signPic != null && item.signPic !== '');
299
+ var signPicHtml = caImg ? _react2.default.createElement('img', { className: 't-H64 t-PR5 signPic', src: 'data:image/png;base64,' + caImg }) : item.signPic ? _react2.default.createElement('img', { className: 't-H64 t-PR5 signPic', src: t.state.loadImg + item.signPic }) : "";
214
300
  var taskNameHtml = _react2.default.createElement(
215
301
  'span',
216
302
  { className: 't-PR5' },
@@ -220,7 +306,7 @@ var PageHome = function (_React$Component) {
220
306
  var inscriptionShowArray = item.inscriptionShow.split(",");
221
307
  var _returnHtml = inscriptionShowArray.map(function (inscriptionItem) {
222
308
  if (inscriptionItem) {
223
- if (inscriptionItem == "userName" && (item.inscriptionShow.indexOf("signImg") < 0 || item.inscriptionShow.indexOf("signImg") >= 0 && (typeof item.signPic == 'undefined' || item.signPic == null || item.signPic == ""))) {
309
+ if (inscriptionItem == "userName" && (item.inscriptionShow.indexOf("signImg") < 0 || item.inscriptionShow.indexOf("signImg") >= 0 && !hasSignImg)) {
224
310
  return userNameHtml;
225
311
  } else if (inscriptionItem == "date") {
226
312
  return dateHtml;
package/lib/db/db.js CHANGED
@@ -280,14 +280,8 @@ context.create('FlowApproval', {
280
280
  header: {
281
281
  Authorization: 'Bearer ' + getLoginUserInfo().token
282
282
  },
283
- method: 'POST',
284
- willFetch: function willFetch() {
285
- _Toast2.default.show({
286
- content: _react2.default.createElement(_loading2.default, null),
287
- hasMask: true,
288
- duration: 800
289
- });
290
- }
283
+ method: 'POST'
284
+ // 静默读取本地快照,避免每条意见都弹出 Loading 遮罩
291
285
  },
292
286
 
293
287
  getPreTaskInfo: {
@@ -0,0 +1,148 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
8
+
9
+ exports.cloneAndFilterEmptySubTblRows = cloneAndFilterEmptySubTblRows;
10
+ /**
11
+ * 子表空行过滤(提交用):UI 仍可留空行,仅从提交数据中去掉业务全空行。
12
+ * 系统字段忽略;0/false 有值;宏回填有值则保留。
13
+ */
14
+
15
+ var SUB_TBL_SYS_FIELDS = {
16
+ id: true,
17
+ rowId: true,
18
+ rowid: true,
19
+ createdBy: true,
20
+ createdDate: true,
21
+ createdOrg: true,
22
+ lastModifiedBy: true,
23
+ lastModifiedDate: true,
24
+ lastModifiedOrg: true,
25
+ optlock: true,
26
+ fkid: true,
27
+ corp_id: true,
28
+ formid: true,
29
+ sort_no: true
30
+ };
31
+
32
+ function isSubTblSysField(key) {
33
+ if (key == null || key === '') {
34
+ return true;
35
+ }
36
+ if (SUB_TBL_SYS_FIELDS[key]) {
37
+ return true;
38
+ }
39
+ var lower = String(key).toLowerCase();
40
+ for (var k in SUB_TBL_SYS_FIELDS) {
41
+ if (Object.prototype.hasOwnProperty.call(SUB_TBL_SYS_FIELDS, k) && k.toLowerCase() === lower) {
42
+ return true;
43
+ }
44
+ }
45
+ return false;
46
+ }
47
+
48
+ function hasSubTblBusinessValue(value) {
49
+ if (value === null || typeof value === 'undefined') {
50
+ return false;
51
+ }
52
+ if (typeof value === 'boolean' || typeof value === 'number') {
53
+ return true;
54
+ }
55
+ if (Array.isArray(value)) {
56
+ if (value.length === 0) {
57
+ return false;
58
+ }
59
+ for (var i = 0; i < value.length; i++) {
60
+ if (hasSubTblBusinessValue(value[i])) {
61
+ return true;
62
+ }
63
+ }
64
+ return false;
65
+ }
66
+ if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {
67
+ return Object.keys(value).length > 0;
68
+ }
69
+ var s = String(value).replace(/^\s+|\s+$/g, '');
70
+ if (s === '' || s === 'null' || s === 'undefined' || s === '[]' || s === '{}') {
71
+ return false;
72
+ }
73
+ if (s.charAt(0) === '[' && s.indexOf('scopeValue') >= 0) {
74
+ var compact = s.replace(/\s+/g, '');
75
+ if (compact.indexOf('"scopeValue":""') >= 0 || compact.indexOf('"scopeValue":null') >= 0) {
76
+ var stripped = compact.replace(/\{"scopeValue":""[^}]*\}/g, '').replace(/\{"scopeValue":null[^}]*\}/g, '').replace(/,/g, '');
77
+ if (stripped === '[]' || stripped.length <= 2) {
78
+ return false;
79
+ }
80
+ }
81
+ }
82
+ return true;
83
+ }
84
+
85
+ function isEmptySubTblBusinessRow(row) {
86
+ if (!row || !row.length) {
87
+ return true;
88
+ }
89
+ for (var i = 0; i < row.length; i++) {
90
+ var kv = row[i];
91
+ if (!kv || isSubTblSysField(kv.key)) {
92
+ continue;
93
+ }
94
+ if (hasSubTblBusinessValue(kv.value)) {
95
+ return false;
96
+ }
97
+ }
98
+ return true;
99
+ }
100
+
101
+ function filterEmptySubTblDataList(subTblData) {
102
+ if (!subTblData || !subTblData.length) {
103
+ return subTblData || [];
104
+ }
105
+ var kept = [];
106
+ for (var i = 0; i < subTblData.length; i++) {
107
+ if (!isEmptySubTblBusinessRow(subTblData[i])) {
108
+ kept.push(subTblData[i]);
109
+ }
110
+ }
111
+ return kept;
112
+ }
113
+
114
+ /**
115
+ * 深拷贝后过滤空子表行(不改动页面 state / UI)
116
+ */
117
+ function cloneAndFilterEmptySubTblRows(editFormData) {
118
+ if (!editFormData) {
119
+ return editFormData;
120
+ }
121
+ var data;
122
+ try {
123
+ data = JSON.parse(JSON.stringify(editFormData));
124
+ } catch (e) {
125
+ return editFormData;
126
+ }
127
+ var subTbl = data.subTbl || [];
128
+ for (var i = 0; i < subTbl.length; i++) {
129
+ if (subTbl[i] && subTbl[i].subTblData) {
130
+ subTbl[i].subTblData = filterEmptySubTblDataList(subTbl[i].subTblData);
131
+ }
132
+ }
133
+ var relatedTbl = data.relatedTbl || [];
134
+ for (var r = 0; r < relatedTbl.length; r++) {
135
+ var relatedSub = relatedTbl[r] && relatedTbl[r].relatedSubTblData;
136
+ if (!relatedSub) {
137
+ continue;
138
+ }
139
+ for (var s = 0; s < relatedSub.length; s++) {
140
+ if (relatedSub[s] && relatedSub[s].subTblData) {
141
+ relatedSub[s].subTblData = filterEmptySubTblDataList(relatedSub[s].subTblData);
142
+ }
143
+ }
144
+ }
145
+ return data;
146
+ }
147
+
148
+ exports.default = cloneAndFilterEmptySubTblRows;
package/lib/form/form.js CHANGED
@@ -2396,6 +2396,7 @@ var PageHome = function (_React$Component) {
2396
2396
  var subFormList = [];
2397
2397
  subForm = { show: true, form: subForm };
2398
2398
  var itemCode = itemParam.key;
2399
+ var subtableReadonly = itemParam.subtableReadonly === true || this.props.status == 2;
2399
2400
  var value = [];
2400
2401
  if (subTbl.length > 0) {
2401
2402
  for (var i = 0; i < subTbl.length; i++) {
@@ -2407,7 +2408,7 @@ var PageHome = function (_React$Component) {
2407
2408
  value.push({ mainTblData: subTblData[j], mainTblName: itemCode });
2408
2409
  subFormList.push(subForm);
2409
2410
  }
2410
- } else {
2411
+ } else if (!subtableReadonly) {
2411
2412
  value.push({ mainTblData: [], mainTblName: itemCode });
2412
2413
  subFormList.push(subForm);
2413
2414
  }
@@ -2417,6 +2418,11 @@ var PageHome = function (_React$Component) {
2417
2418
  }
2418
2419
  if (subFormList.length > 0) {
2419
2420
  itemParam.subForm = subFormList;
2421
+ } else if (subtableReadonly) {
2422
+ itemParam.subForm = [];
2423
+ if (subTbl.length === 0) {
2424
+ subTbl.push({ subTblData: [], subTblName: itemCode });
2425
+ }
2420
2426
  } else {
2421
2427
  subFormList.push(subForm);
2422
2428
  itemParam.subForm = subFormList;
@@ -4910,7 +4916,7 @@ var PageHome = function (_React$Component) {
4910
4916
  _react2.default.createElement(
4911
4917
  'div',
4912
4918
  { className: 't-PT10 t-FB1' },
4913
- _react2.default.createElement(_List2.default, { list: t.state.itemParam.value, isCaUser: t.state.isCaUser, caFirm: t.state.caFirm, caESignatureName: t.state.caESignatureName }),
4919
+ _react2.default.createElement(_List2.default, { list: t.state.itemParam.value, isCaUser: t.state.isCaUser, caFirm: t.state.caFirm, caESignatureName: t.state.caESignatureName, caFormSign: t.state.caFormSign }),
4914
4920
  _react2.default.createElement(
4915
4921
  'div',
4916
4922
  { className: t.state.commentField == this.state.itemParam.uniqueName ? 't-PL10 t-PR10' : 't-DN' },
@@ -224,6 +224,7 @@ var PageHome = function (_React$Component) {
224
224
  var subFormList = [];
225
225
  var itemCode = itemParam.key;
226
226
  var fieldControll = itemParam.fieldControll;
227
+ var subtableReadonly = itemParam.subtableReadonly === true;
227
228
  var mustFields = "";
228
229
  if (fieldControll) {
229
230
  mustFields = fieldControll.mustFields;
@@ -251,7 +252,7 @@ var PageHome = function (_React$Component) {
251
252
  var subForm1 = { show: true, form: subForm };
252
253
  subFormList.push(subForm1);
253
254
  }
254
- } else {
255
+ } else if (!subtableReadonly) {
255
256
  var subForm2 = { show: true, form: subForm };
256
257
  value.push({ mainTblData: [], mainTblName: itemCode });
257
258
  subFormList.push(subForm2);
@@ -273,7 +274,7 @@ var PageHome = function (_React$Component) {
273
274
  var subForm1 = { show: true, form: subForm };
274
275
  subFormList.push(subForm1);
275
276
  }
276
- } else {
277
+ } else if (!subtableReadonly) {
277
278
  var subForm2 = { show: true, form: subForm };
278
279
  value.push({ mainTblData: [], mainTblName: itemCode });
279
280
  subFormList.push(subForm2);
@@ -284,6 +285,12 @@ var PageHome = function (_React$Component) {
284
285
  }
285
286
  if (subFormList.length > 0) {
286
287
  itemParam.subForm = subFormList;
288
+ } else if (subtableReadonly) {
289
+ // 只读/查看且无数据:不补空行,仅挂空结构
290
+ itemParam.subForm = [];
291
+ if (subTbl.length === 0 && !(relatedTbl && relatedTbl.length > 0)) {
292
+ subTbl.push({ subTblData: [], subTblName: itemCode });
293
+ }
287
294
  } else if (relatedTbl && relatedTbl.length > 0) {
288
295
  var subForm3 = { show: true, form: subForm };
289
296
  subFormList.push(subForm3);
@@ -76,6 +76,8 @@ var _table = require('../form/table');
76
76
 
77
77
  var _table2 = _interopRequireDefault(_table);
78
78
 
79
+ var _filterEmptySubTblRows = require('../form/filterEmptySubTblRows');
80
+
79
81
  var _FlowChart = require('./FlowChart');
80
82
 
81
83
  var _FlowChart2 = _interopRequireDefault(_FlowChart);
@@ -1394,12 +1396,12 @@ var PageHome = function (_React$Component) {
1394
1396
  });
1395
1397
  } else if (operate == 1) {
1396
1398
  //提交
1397
- var sendData = t.state.editFormData;
1399
+ var sendData = (0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(t.state.editFormData) || {};
1398
1400
  sendData.formItem = [];
1399
1401
  var param = {
1400
1402
  taskId: this.state.taskId,
1401
1403
  auditorUserIds: auditorUserIds,
1402
- allEditIds: this.getAllEditIds(t.state.editFormData),
1404
+ allEditIds: this.getAllEditIds(sendData),
1403
1405
  code: this.state.code,
1404
1406
  formData: JSON.stringify(sendData),
1405
1407
  dataId: this.state.dataId,
@@ -2282,9 +2284,9 @@ var PageHome = function (_React$Component) {
2282
2284
  taskId: t.state.taskId,
2283
2285
  permissionCode: t.state.permissionCode,
2284
2286
  processInstanceId: t.state.processInstanceId,
2285
- allEditIds: t.getAllEditIds(t.state.editFormData),
2287
+ allEditIds: t.getAllEditIds((0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(t.state.editFormData)),
2286
2288
  editType: t.state.editType,
2287
- formData: JSON.stringify(t.state.editFormData),
2289
+ formData: JSON.stringify((0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(t.state.editFormData)),
2288
2290
  module: t.state.module,
2289
2291
  comment: newComment
2290
2292
  }).then(function (content) {
@@ -2454,7 +2456,7 @@ var PageHome = function (_React$Component) {
2454
2456
  while (1) {
2455
2457
  switch (_context2.prev = _context2.next) {
2456
2458
  case 0:
2457
- editFormData = _this2.state.editFormData;
2459
+ editFormData = (0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(_this2.state.editFormData);
2458
2460
  nextRadomListSelect = _this2.state.nextRadomList;
2459
2461
  nextActivityListSelect = _this2.state.nextActivityList;
2460
2462
  selectedActivity = '';
@@ -2727,7 +2729,7 @@ var PageHome = function (_React$Component) {
2727
2729
  param = {
2728
2730
  taskId: _this2.state.taskId,
2729
2731
  selectedActivity: selectedActivity,
2730
- allEditIds: _this2.getAllEditIds(t.state.editFormData),
2732
+ allEditIds: _this2.getAllEditIds(editFormData),
2731
2733
  corpId: corpid,
2732
2734
  code: _this2.state.code,
2733
2735
  formData: JSON.stringify(editFormData),
@@ -2814,7 +2816,7 @@ var PageHome = function (_React$Component) {
2814
2816
  this.jump();
2815
2817
  } else if (operate == 10) {
2816
2818
  //随机节点结束
2817
- var editFormData = this.state.editFormData;
2819
+ var editFormData = (0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(this.state.editFormData);
2818
2820
  var sshortMessage = '0';
2819
2821
  var sendShortMessage = t.state.sendShortMessage;
2820
2822
  /*if(sendShortMessage.length>0){
@@ -2828,7 +2830,7 @@ var PageHome = function (_React$Component) {
2828
2830
  var param = {
2829
2831
  taskId: this.state.taskId,
2830
2832
  selectedActivity: '',
2831
- allEditIds: this.getAllEditIds(t.state.editFormData),
2833
+ allEditIds: this.getAllEditIds(editFormData),
2832
2834
  corpId: corpid,
2833
2835
  code: this.state.code,
2834
2836
  formData: JSON.stringify(editFormData),
@@ -3037,7 +3039,7 @@ var PageHome = function (_React$Component) {
3037
3039
 
3038
3040
  var t = this;
3039
3041
  var db = _db2.default;
3040
- var editFormData = this.state.editFormData;
3042
+ var editFormData = (0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(this.state.editFormData);
3041
3043
  newComment = t.state.newspyj.content;
3042
3044
  if (typeof newComment == "undefined" || newComment == '') {
3043
3045
  newComment = t.state.defaultValue;
@@ -3047,7 +3049,7 @@ var PageHome = function (_React$Component) {
3047
3049
  taskId: this.state.taskId,
3048
3050
  module: t.state.module,
3049
3051
  processInstanceId: t.state.processInstanceId,
3050
- allEditIds: t.getAllEditIds(t.state.editFormData),
3052
+ allEditIds: t.getAllEditIds(editFormData),
3051
3053
  formData: JSON.stringify(editFormData),
3052
3054
  formType: "4",
3053
3055
  editType: this.state.editType
@@ -3435,10 +3437,10 @@ var PageHome = function (_React$Component) {
3435
3437
  $(window).scrollTop(0);
3436
3438
  });
3437
3439
  } else {
3438
- var editFormData = this.state.editFormData;
3440
+ var editFormData = (0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(this.state.editFormData);
3439
3441
  var param = {
3440
3442
  taskId: this.state.taskId,
3441
- allEditIds: this.getAllEditIds(t.state.editFormData),
3443
+ allEditIds: this.getAllEditIds(editFormData),
3442
3444
  code: this.state.code,
3443
3445
  formData: JSON.stringify(editFormData),
3444
3446
  dataId: this.state.dataId,
@@ -4162,8 +4164,8 @@ var PageHome = function (_React$Component) {
4162
4164
  processInstanceId: t.state.processInstanceId,
4163
4165
  selectedActivity: selectedActivity,
4164
4166
  auditorUserIds: assignId,
4165
- allEditIds: t.getAllEditIds(t.state.editFormData),
4166
- formData: JSON.stringify(t.state.editFormData),
4167
+ allEditIds: t.getAllEditIds((0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(t.state.editFormData)),
4168
+ formData: JSON.stringify((0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(t.state.editFormData)),
4167
4169
  hasCommentField: '0',
4168
4170
  editType: t.state.editType,
4169
4171
  module: t.state.module,
@@ -88,6 +88,8 @@ var _table2 = _interopRequireDefault(_table);
88
88
 
89
89
  var _formExtHelper = require('../form/formExtHelper');
90
90
 
91
+ var _filterEmptySubTblRows = require('../form/filterEmptySubTblRows');
92
+
91
93
  var _FlowChart = require('./FlowChart');
92
94
 
93
95
  var _FlowChart2 = _interopRequireDefault(_FlowChart);
@@ -2558,8 +2560,8 @@ var PageHome = function (_React$Component) {
2558
2560
 
2559
2561
  // 定义后续提交逻辑的执行函数
2560
2562
  var executeSubmitProcess = function executeSubmitProcess() {
2561
- var sendData = t.state.editFormData;
2562
- var allEditIds = _this2.getAllEditIds(t.state.editFormData);
2563
+ var sendData = (0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(t.state.editFormData);
2564
+ var allEditIds = _this2.getAllEditIds(sendData);
2563
2565
  var dataId = "";
2564
2566
  if (allEditIds) {
2565
2567
  dataId = allEditIds.split(",")[0];
@@ -2571,7 +2573,7 @@ var PageHome = function (_React$Component) {
2571
2573
  var param = {
2572
2574
  taskId: _this2.state.taskId,
2573
2575
  auditorUserIds: auditorUserIds,
2574
- allEditIds: _this2.getAllEditIds(t.state.editFormData),
2576
+ allEditIds: allEditIds,
2575
2577
  code: _this2.state.code,
2576
2578
  formData: JSON.stringify(sendData),
2577
2579
  dataId: dataId,
@@ -3777,14 +3779,15 @@ var PageHome = function (_React$Component) {
3777
3779
  title: '提示',
3778
3780
  content: '确定已阅吗?',
3779
3781
  onConfirm: function onConfirm() {
3782
+ var submitEditFormData = (0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(t.state.editFormData);
3780
3783
  db.FlowModuleAPI.readCompleteTask({
3781
3784
  dataId: t.state.dataId,
3782
3785
  taskId: t.state.taskId,
3783
3786
  permissionCode: t.state.permissionCode,
3784
3787
  processInstanceId: t.state.processInstanceId,
3785
- allEditIds: t.getAllEditIds(t.state.editFormData),
3788
+ allEditIds: t.getAllEditIds(submitEditFormData),
3786
3789
  editType: t.state.editType,
3787
- formData: JSON.stringify(t.state.editFormData),
3790
+ formData: JSON.stringify(submitEditFormData),
3788
3791
  module: t.state.module,
3789
3792
  comment: newComment,
3790
3793
  commentAttitude: t.getSelectedCommentAttitude()
@@ -4032,7 +4035,7 @@ var PageHome = function (_React$Component) {
4032
4035
  while (1) {
4033
4036
  switch (_context2.prev = _context2.next) {
4034
4037
  case 0:
4035
- editFormData = _this3.state.editFormData;
4038
+ editFormData = (0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(_this3.state.editFormData);
4036
4039
  nextRadomListSelect = _this3.state.nextRadomList;
4037
4040
  nextActivityListSelect = _this3.state.nextActivityList;
4038
4041
  selectedActivity = '';
@@ -4315,7 +4318,7 @@ var PageHome = function (_React$Component) {
4315
4318
  cshortMessage=circulateShortMessage[0].value;
4316
4319
  }*/
4317
4320
 
4318
- allEditIds = _this3.getAllEditIds(t.state.editFormData);
4321
+ allEditIds = _this3.getAllEditIds(editFormData);
4319
4322
  dataId = "";
4320
4323
 
4321
4324
  if (allEditIds) {
@@ -4421,7 +4424,7 @@ var PageHome = function (_React$Component) {
4421
4424
  this.handleInvalid();
4422
4425
  } else if (operate == 10) {
4423
4426
  //随机节点结束
4424
- var editFormData = this.state.editFormData;
4427
+ var editFormData = (0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(this.state.editFormData);
4425
4428
  var sshortMessage = '0';
4426
4429
  var sendShortMessage = t.state.sendShortMessage;
4427
4430
  /*if(sendShortMessage.length>0){
@@ -4435,7 +4438,7 @@ var PageHome = function (_React$Component) {
4435
4438
  var param = {
4436
4439
  taskId: this.state.taskId,
4437
4440
  selectedActivity: '',
4438
- allEditIds: this.getAllEditIds(t.state.editFormData),
4441
+ allEditIds: this.getAllEditIds(editFormData),
4439
4442
  corpId: corpid,
4440
4443
  code: this.state.code,
4441
4444
  formData: JSON.stringify(editFormData),
@@ -4921,14 +4924,14 @@ var PageHome = function (_React$Component) {
4921
4924
 
4922
4925
  var t = this;
4923
4926
  var db = _db2.default;
4924
- var editFormData = this.state.editFormData;
4927
+ var editFormData = (0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(this.state.editFormData);
4925
4928
  newComment = t.state.newspyj.content;
4926
4929
  if (typeof newComment == "undefined" || newComment == '') {
4927
4930
  newComment = t.state.defaultValue;
4928
4931
  }
4929
4932
  var isPush = t.state.isPush;
4930
4933
 
4931
- var allEditIds = this.getAllEditIds(t.state.editFormData);
4934
+ var allEditIds = this.getAllEditIds(editFormData);
4932
4935
  var dataId = "";
4933
4936
  if (allEditIds) {
4934
4937
  dataId = allEditIds.split(",")[0];
@@ -5757,10 +5760,10 @@ var PageHome = function (_React$Component) {
5757
5760
  $(window).scrollTop(0);
5758
5761
  });
5759
5762
  } else {
5760
- var editFormData = this.state.editFormData;
5763
+ var editFormData = (0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(this.state.editFormData);
5761
5764
  var param = {
5762
5765
  taskId: this.state.taskId,
5763
- allEditIds: this.getAllEditIds(t.state.editFormData),
5766
+ allEditIds: this.getAllEditIds(editFormData),
5764
5767
  code: this.state.code,
5765
5768
  formData: JSON.stringify(editFormData),
5766
5769
  dataId: this.state.dataId,
@@ -5982,13 +5985,14 @@ var PageHome = function (_React$Component) {
5982
5985
  if (urgent == '') {
5983
5986
  urgent = '50';
5984
5987
  }
5988
+ var submitEditFormData = (0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(t.state.editFormData);
5985
5989
  var param = {
5986
5990
  formId: t.state.formId,
5987
5991
  dataId: t.state.dataId,
5988
5992
  taskId: t.state.taskId,
5989
5993
  processInstanceId: t.state.processInstanceId,
5990
- allEditIds: this.getAllEditIds(t.state.editFormData),
5991
- formData: JSON.stringify(t.state.editFormData),
5994
+ allEditIds: this.getAllEditIds(submitEditFormData),
5995
+ formData: JSON.stringify(submitEditFormData),
5992
5996
  assignId: assignId,
5993
5997
  assignName: assignName,
5994
5998
  hasCommentField: t.state.hasCommentField,
@@ -6614,6 +6618,7 @@ var PageHome = function (_React$Component) {
6614
6618
  if (jumpShortMessage) {
6615
6619
  shortMessage = jumpShortMessage;
6616
6620
  }
6621
+ var submitEditFormData = (0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(t.state.editFormData);
6617
6622
  var param = {
6618
6623
  formId: t.state.formId,
6619
6624
  dataId: t.state.dataId,
@@ -6621,8 +6626,8 @@ var PageHome = function (_React$Component) {
6621
6626
  processInstanceId: t.state.processInstanceId,
6622
6627
  selectedActivity: selectedActivity,
6623
6628
  auditorUserIds: assignId,
6624
- allEditIds: t.getAllEditIds(t.state.editFormData),
6625
- formData: JSON.stringify(t.state.editFormData),
6629
+ allEditIds: t.getAllEditIds(submitEditFormData),
6630
+ formData: JSON.stringify(submitEditFormData),
6626
6631
  hasCommentField: t.state.hasCommentField,
6627
6632
  editType: t.state.editType,
6628
6633
  module: t.state.module,
@@ -387,11 +387,33 @@ var Page = function (_React$Component) {
387
387
 
388
388
  }, {
389
389
  key: 'componentWillReceiveProps',
390
- value: function componentWillReceiveProps() {
391
- this.setState({
392
- showSecret: this.props.showSecret, //是否开启定密 true/false
393
- secretlevel: this.props.secretlevel == null ? "" : this.props.secretlevel //密级 绝密-1/机密-2/秘密-3/非密-4
394
- });
390
+ value: function componentWillReceiveProps(nextProps) {
391
+ var nextState = {
392
+ showSecret: nextProps.showSecret, //是否开启定密 true/false
393
+ secretlevel: nextProps.secretlevel == null ? "" : nextProps.secretlevel //密级 绝密-1/机密-2/秘密-3/非密-4
394
+ };
395
+ // 字段关联动态改必填/只读时,需同步到 state,否则红星标识不刷新
396
+ if (typeof nextProps.required !== 'undefined' && nextProps.required !== this.state.required) {
397
+ nextState.required = nextProps.required;
398
+ }
399
+ if (typeof nextProps.readOnly !== 'undefined' && nextProps.readOnly !== this.state.readOnly) {
400
+ nextState.readOnly = nextProps.readOnly;
401
+ }
402
+ // 显式传 isDelete 时以 props 为准;未传时随 readOnly 推导(表单选人常用)
403
+ if (typeof nextProps.isDelete !== 'undefined') {
404
+ if (nextProps.isDelete !== this.state.isDelete) {
405
+ nextState.isDelete = nextProps.isDelete;
406
+ }
407
+ } else if (typeof nextProps.readOnly !== 'undefined' && nextProps.readOnly !== this.state.readOnly) {
408
+ nextState.isDelete = !nextProps.readOnly;
409
+ }
410
+ if (typeof nextProps.label !== 'undefined' && nextProps.label !== this.state.label) {
411
+ nextState.label = nextProps.label;
412
+ }
413
+ if (typeof nextProps.placeholder !== 'undefined' && nextProps.placeholder !== this.state.placeholder) {
414
+ nextState.placeholder = nextProps.placeholder;
415
+ }
416
+ this.setState(nextState);
395
417
  }
396
418
 
397
419
  //检查是否有额外tab
@@ -6,9 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getAllEditIds = getAllEditIds;
7
7
  exports.buildRuntimeDataSaveParams = buildRuntimeDataSaveParams;
8
8
  exports.isRuntimeSaveSuccess = isRuntimeSaveSuccess;
9
- /**
10
- * 纯表单保存:runtimeData 与 processInfo.editFormData 结构一致
11
- */
9
+
10
+ var _filterEmptySubTblRows = require('../form/filterEmptySubTblRows');
12
11
 
13
12
  /** 收集主表/关联表/子表已有数据 id,对应后端 allEditIds */
14
13
  function getAllEditIds(data) {
@@ -86,12 +85,16 @@ function getAllEditIds(data) {
86
85
  /**
87
86
  * 组装 runtimeDataSave 请求参数
88
87
  */
88
+ /**
89
+ * 纯表单保存:runtimeData 与 processInfo.editFormData 结构一致
90
+ */
89
91
  function buildRuntimeDataSaveParams(editFormData, options) {
90
92
  var opts = options || {};
91
93
  var editType = opts.editType || 'add';
92
94
  var existDataId = opts.existDataId != null ? opts.existDataId : editFormData.dataId || '';
93
95
 
94
- var runtimeData = JSON.parse(JSON.stringify(editFormData));
96
+ // 提交前过滤空子表行(不改 UI state)
97
+ var runtimeData = (0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(editFormData) || {};
95
98
  if (!runtimeData.formId && opts.formId) {
96
99
  runtimeData.formId = opts.formId;
97
100
  }
@@ -99,7 +102,7 @@ function buildRuntimeDataSaveParams(editFormData, options) {
99
102
  return {
100
103
  runtimeData: JSON.stringify(runtimeData),
101
104
  editType: editType,
102
- allEditIds: getAllEditIds(editFormData),
105
+ allEditIds: getAllEditIds(runtimeData),
103
106
  existDataId: existDataId || '',
104
107
  formType: opts.formType != null ? opts.formType : '4',
105
108
  logField: opts.logField || '',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fmui-base",
3
- "version": "2.3.31",
3
+ "version": "2.3.33",
4
4
  "title": "fmui-base",
5
5
  "description": "fmui移动端组件",
6
6
  "main": "lib/index.js",