fmui-base 2.3.60 → 2.3.61

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.3.61:移动端流程提交时过滤主键无效参数,如null字符串
6
7
  - 2.3.60:移动端支持减签
7
8
  - 2.3.59:移动端不通过的流程允许作废,移动端支持关联流程
8
9
  - 2.3.58:移动端数据表设置字段的关联值支持用户岗位
@@ -244,7 +244,12 @@ function cloneAndFilterEmptySubTblRows(editFormData) {
244
244
  try {
245
245
  data = JSON.parse(JSON.stringify(editFormData));
246
246
  } catch (e) {
247
- return editFormData;
247
+ // 深拷贝失败时仍做顶层清洗,避免新建把 formItem/optlock 原样提交
248
+ try {
249
+ data = Object.assign({}, editFormData);
250
+ } catch (e2) {
251
+ return slimFormDataForSubmit(editFormData);
252
+ }
248
253
  }
249
254
  var subTbl = data.subTbl || [];
250
255
  for (var i = 0; i < subTbl.length; i++) {
@@ -1615,11 +1615,17 @@ var PageHome = function (_React$Component) {
1615
1615
  t._pendingForceOptlock = null;
1616
1616
  forceOptlock = true;
1617
1617
  }
1618
- // 无有效主表主键时不缓存 optlock,避免发起/新建误传版本号
1619
- if (!forceOptlock && !(0, _filterEmptySubTblRows.isValidFormDataId)(formData && formData.dataId) && !(0, _filterEmptySubTblRows.isValidFormDataId)(t.state.dataId)) {
1618
+ // 无有效主表主键时不缓存 optlock,避免发起/新建误传版本号。
1619
+ // 仅认 formData.dataId(提交真正用的主键);不要用 businessKey 单独保留版本号,否则会顶栏带 optlock、formData 无 dataId 被后端拦。
1620
+ if (!forceOptlock && !(0, _filterEmptySubTblRows.isValidFormDataId)(formData && formData.dataId)) {
1620
1621
  var contentDataId = content && (content.dataId || content.businessKey);
1621
- if (!(0, _filterEmptySubTblRows.isValidFormDataId)(contentDataId)) {
1622
+ if ((0, _filterEmptySubTblRows.isValidFormDataId)(contentDataId)) {
1623
+ formData.dataId = contentDataId;
1624
+ } else {
1622
1625
  resolvedOptlock = '';
1626
+ if (formData && formData.hasOwnProperty('optlock')) {
1627
+ delete formData.optlock;
1628
+ }
1623
1629
  }
1624
1630
  }
1625
1631
  t.setState({
@@ -2720,12 +2726,12 @@ var PageHome = function (_React$Component) {
2720
2726
  reminderContent: _this2.state.reminderContent,
2721
2727
  processInstanceId: _this2.state.processInstanceId,
2722
2728
  permissionCode: _this2.state.permissionCode
2723
- };
2724
- if (t.state.module === 'approve' && t.state.formDataOptlock !== '' && t.state.formDataOptlock !== null && typeof t.state.formDataOptlock !== 'undefined') {
2725
- // 无有效主表 dataId 时不传 optlock,避免后端「已传版本却无主键」直接报冲突
2726
- var optlockDataId = dataId || sendData && sendData.dataId || t.state.dataId;
2727
- if ((0, _filterEmptySubTblRows.isValidFormDataId)(optlockDataId)) {
2729
+ // 仅当提交 formData 有真实主键时带 optlock(勿用 state.dataId 兜底,新建易误传)
2730
+ };if (t.state.module === 'approve') {
2731
+ if ((0, _filterEmptySubTblRows.isValidFormDataId)(sendData && sendData.dataId) && t.state.formDataOptlock !== '' && t.state.formDataOptlock != null) {
2728
2732
  param.optlock = t.state.formDataOptlock;
2733
+ } else if (param.optlock !== undefined) {
2734
+ delete param.optlock;
2729
2735
  }
2730
2736
  }
2731
2737
  var dealActionName = "";
@@ -5762,6 +5768,67 @@ var PageHome = function (_React$Component) {
5762
5768
  _Toast2.default.show({ type: 'error', content: '刷新表单失败,请手动刷新页面' });
5763
5769
  });
5764
5770
  }
5771
+
5772
+ /**
5773
+ * sendFlow 提交前清洗 optlock:
5774
+ * - 以 formData.dataId 为准(再 slim 一次)
5775
+ * - 无有效主键时删除顶栏 optlock,并去掉 formData 内 optlock
5776
+ * - 勿用 state.dataId 兜底(新建场景易误传 0)
5777
+ */
5778
+
5779
+ }, {
5780
+ key: 'sanitizeSendFlowOptlockParam',
5781
+ value: function sanitizeSendFlowOptlockParam(param) {
5782
+ var t = this;
5783
+ if (!param || t.state.module !== 'approve') {
5784
+ return;
5785
+ }
5786
+ var fd = null;
5787
+ try {
5788
+ if (param.formData) {
5789
+ fd = typeof param.formData === 'string' ? JSON.parse(param.formData) : param.formData;
5790
+ fd = (0, _filterEmptySubTblRows.cloneAndFilterEmptySubTblRows)(fd) || fd;
5791
+ }
5792
+ } catch (e1) {
5793
+ fd = null;
5794
+ }
5795
+ var payloadDataId = '';
5796
+ if (fd && (0, _filterEmptySubTblRows.isValidFormDataId)(fd.dataId)) {
5797
+ payloadDataId = fd.dataId;
5798
+ } else if ((0, _filterEmptySubTblRows.isValidFormDataId)(param.dataId)) {
5799
+ payloadDataId = param.dataId;
5800
+ }
5801
+ if (!(0, _filterEmptySubTblRows.isValidFormDataId)(payloadDataId)) {
5802
+ delete param.optlock;
5803
+ if (fd) {
5804
+ fd.dataId = '';
5805
+ if (fd.hasOwnProperty('optlock')) {
5806
+ delete fd.optlock;
5807
+ }
5808
+ try {
5809
+ param.formData = JSON.stringify(fd);
5810
+ } catch (e2) {}
5811
+ }
5812
+ return;
5813
+ }
5814
+ if (t.state.formDataOptlock !== '' && t.state.formDataOptlock != null && typeof t.state.formDataOptlock !== 'undefined') {
5815
+ param.optlock = t.state.formDataOptlock;
5816
+ if (fd) {
5817
+ fd.optlock = t.state.formDataOptlock;
5818
+ try {
5819
+ param.formData = JSON.stringify(fd);
5820
+ } catch (e3) {}
5821
+ }
5822
+ } else {
5823
+ delete param.optlock;
5824
+ if (fd && fd.hasOwnProperty('optlock')) {
5825
+ delete fd.optlock;
5826
+ try {
5827
+ param.formData = JSON.stringify(fd);
5828
+ } catch (e4) {}
5829
+ }
5830
+ }
5831
+ }
5765
5832
  }, {
5766
5833
  key: 'sendFlowFuc',
5767
5834
  value: function sendFlowFuc(param) {
@@ -5828,23 +5895,8 @@ var PageHome = function (_React$Component) {
5828
5895
  // param.commentbizSn=commentbizSn;
5829
5896
  // }
5830
5897
  param.commentbizSn = commentbizSn;
5831
- if (t.state.module === 'approve' && t.state.formDataOptlock !== '' && t.state.formDataOptlock !== null && typeof t.state.formDataOptlock !== 'undefined') {
5832
- // 无有效主表 dataId 时不传 optlock,避免后端「已传版本却无主键」直接报冲突
5833
- var sendOptlockDataId = param.dataId || t.state.dataId;
5834
- try {
5835
- if ((!sendOptlockDataId || !(0, _filterEmptySubTblRows.isValidFormDataId)(sendOptlockDataId)) && param.formData) {
5836
- var parsedFd = typeof param.formData === 'string' ? JSON.parse(param.formData) : param.formData;
5837
- if (parsedFd && (0, _filterEmptySubTblRows.isValidFormDataId)(parsedFd.dataId)) {
5838
- sendOptlockDataId = parsedFd.dataId;
5839
- }
5840
- }
5841
- } catch (eOpt) {}
5842
- if ((0, _filterEmptySubTblRows.isValidFormDataId)(sendOptlockDataId)) {
5843
- param.optlock = t.state.formDataOptlock;
5844
- } else if (param.optlock !== undefined) {
5845
- delete param.optlock;
5846
- }
5847
- }
5898
+ // 提交前统一清洗:新建无主键绝不带 optlock(含 getNextActivity 残留)
5899
+ t.sanitizeSendFlowOptlockParam(param);
5848
5900
 
5849
5901
  var db = _db2.default;
5850
5902
  db.FlowModuleAPI.sendFlow(param).then(function (content) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fmui-base",
3
- "version": "2.3.60",
3
+ "version": "2.3.61",
4
4
  "title": "fmui-base",
5
5
  "description": "fmui移动端组件",
6
6
  "main": "lib/index.js",