@bit-sun/business-component 4.2.1-alpha.17-aiwei → 4.2.1-alpha.18-aiwei

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/dist/index.esm.js CHANGED
@@ -38348,6 +38348,18 @@ function RenderCompItem(props) {
38348
38348
  }
38349
38349
 
38350
38350
  var RangePicker$2 = DatePicker.RangePicker;
38351
+ var FIXED_DATA_TYPES = {
38352
+ 10: '字符串',
38353
+ 20: '短整数',
38354
+ 21: '长整数',
38355
+ 22: '小数',
38356
+ 40: '数组',
38357
+ 41: '布尔值',
38358
+ 12: '富文本',
38359
+ 30: '日期',
38360
+ 31: '时间',
38361
+ 32: '日期时间'
38362
+ };
38351
38363
  var RuleObjectComponent = /*#__PURE__*/function (_Component) {
38352
38364
  function RuleObjectComponent(props) {
38353
38365
  var _this;
@@ -38391,6 +38403,8 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
38391
38403
  value: element.id,
38392
38404
  id: element.id,
38393
38405
  dataTypeCode: element.valueType,
38406
+ entityValueType: element.entityValueType,
38407
+ entityInputType: element.entityInputType,
38394
38408
  dataChoiceBusinessType: element.choiceType,
38395
38409
  dataInputBusinessType: element.inputType,
38396
38410
  info: element.info,
@@ -38412,6 +38426,8 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
38412
38426
  metaObjectCode: _this.props.metaObjectCode || item.code
38413
38427
  }, item), {}, {
38414
38428
  dataTypeCode: item.valueType,
38429
+ entityValueType: item.entityValueType,
38430
+ entityInputType: item.entityInputType,
38415
38431
  dataChoiceBusinessType: item.choiceType,
38416
38432
  dataInputBusinessType: item.inputType
38417
38433
  }));
@@ -38445,6 +38461,8 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
38445
38461
  value: element.id,
38446
38462
  id: element.id,
38447
38463
  dataTypeCode: element.valueType,
38464
+ entityValueType: element.entityValueType,
38465
+ entityInputType: element.entityInputType,
38448
38466
  dataChoiceBusinessType: element.choiceType,
38449
38467
  dataInputBusinessType: element.inputType,
38450
38468
  info: element.info,
@@ -38814,7 +38832,8 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
38814
38832
  initialThresholdQuery = _this$props3$initialT === void 0 ? {} : _this$props3$initialT,
38815
38833
  disabled = _this$props3.disabled,
38816
38834
  systemVariableList = _this$props3.systemVariableList,
38817
- needShowInsertSQL = _this$props3.needShowInsertSQL;
38835
+ needShowInsertSQL = _this$props3.needShowInsertSQL,
38836
+ needShowReqCondition = _this$props3.needShowReqCondition;
38818
38837
  var thresholdQuery = _objectSpread2(_objectSpread2({}, initialThresholdQuery), relateDatas);
38819
38838
  var finalIndex = floorIndex + 1;
38820
38839
  var queryIdentify = '';
@@ -38905,6 +38924,8 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
38905
38924
  itemDetail.elementId = nodeInfo.triggerNode.props.id;
38906
38925
  itemDetail.elementName = nodeInfo.triggerNode.props.title;
38907
38926
  itemDetail.dataTypeCode = nodeInfo.triggerNode.props.dataTypeCode;
38927
+ itemDetail.entityValueType = nodeInfo.triggerNode.props.entityValueType;
38928
+ itemDetail.entityInputType = nodeInfo.triggerNode.props.entityInputType;
38908
38929
  itemDetail.metaObjectCode = nodeInfo.triggerNode.props.metaObjectCode;
38909
38930
  itemDetail.isInsertParam = false;
38910
38931
  if (needShowInsertSQL) {
@@ -39091,7 +39112,98 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
39091
39112
  fontSize: '14px',
39092
39113
  marginRight: '5px'
39093
39114
  }
39094
- }), "\u6DFB\u52A0\u6761\u4EF6"))));
39115
+ }), "\u6DFB\u52A0\u6761\u4EF6"), needShowReqCondition && /*#__PURE__*/React$1.createElement("span", {
39116
+ style: {
39117
+ marginLeft: 10
39118
+ }
39119
+ }, /*#__PURE__*/React$1.createElement(Button, {
39120
+ type: "link",
39121
+ style: {
39122
+ padding: 0,
39123
+ height: 'auto'
39124
+ },
39125
+ onClick: function onClick() {
39126
+ return _this.handleReqConditionToggle(itemDetail);
39127
+ }
39128
+ }, itemDetail.isReqCondition ? '取消参数条件控制' : '参数条件控制')), itemDetail.isReqCondition && itemDetail.reqConditionData && /*#__PURE__*/React$1.createElement("div", {
39129
+ style: {
39130
+ marginTop: 10,
39131
+ display: 'flex',
39132
+ alignItems: 'center',
39133
+ background: '#f5f5f5',
39134
+ padding: '10px',
39135
+ borderRadius: '4px'
39136
+ }
39137
+ }, /*#__PURE__*/React$1.createElement("span", {
39138
+ style: {
39139
+ marginRight: 8,
39140
+ flexShrink: 0
39141
+ }
39142
+ }, "\u8BF7\u6C42\u53C2\u6570\u540D\u79F0:"), /*#__PURE__*/React$1.createElement(Input, {
39143
+ style: {
39144
+ width: 150,
39145
+ marginRight: 10
39146
+ },
39147
+ value: itemDetail.reqConditionData.reqParamName,
39148
+ onChange: function onChange(e) {
39149
+ return _this.handleReqDataChange(itemDetail, 'reqParamName', e.target.value);
39150
+ }
39151
+ }), /*#__PURE__*/React$1.createElement("span", {
39152
+ style: {
39153
+ marginRight: 8,
39154
+ flexShrink: 0
39155
+ }
39156
+ }, "\u7C7B\u578B:"), /*#__PURE__*/React$1.createElement(Select, {
39157
+ style: {
39158
+ width: 120,
39159
+ marginRight: 10
39160
+ },
39161
+ value: itemDetail.reqConditionData.dataTypeCode,
39162
+ onChange: function onChange(val) {
39163
+ return _this.handleReqDataChange(itemDetail, 'dataTypeCode', val);
39164
+ }
39165
+ }, Object.keys(FIXED_DATA_TYPES).map(function (code) {
39166
+ return /*#__PURE__*/React$1.createElement(Select.Option, {
39167
+ key: code,
39168
+ value: code
39169
+ }, FIXED_DATA_TYPES[code]);
39170
+ })), /*#__PURE__*/React$1.createElement(Select, {
39171
+ style: {
39172
+ width: 120,
39173
+ marginRight: 10
39174
+ },
39175
+ value: itemDetail.reqConditionData.operationCode,
39176
+ onChange: function onChange(val) {
39177
+ return _this.handleReqDataChange(itemDetail, 'operationCode', val);
39178
+ }
39179
+ }, [{
39180
+ 'code': 'eq',
39181
+ 'name': '等于'
39182
+ }, {
39183
+ 'code': 'cn',
39184
+ 'name': '包含'
39185
+ }, {
39186
+ code: 'gt',
39187
+ name: '大于'
39188
+ }, {
39189
+ code: 'lt',
39190
+ name: '小于'
39191
+ }].map(function (op) {
39192
+ return /*#__PURE__*/React$1.createElement(Select.Option, {
39193
+ key: op.code,
39194
+ value: op.code
39195
+ }, op.name);
39196
+ })), /*#__PURE__*/React$1.createElement(RuleField, {
39197
+ customerWidth: '180px',
39198
+ selectOperation: itemDetail.reqConditionData.operationCode,
39199
+ dataTypeCode: itemDetail.reqConditionData.dataTypeCode,
39200
+ values: itemDetail.reqConditionData.params || [],
39201
+ valueNames: itemDetail.reqConditionData.paramNames || [],
39202
+ callback: function callback(newValues, newValueNames) {
39203
+ return _this.handleReqDataChange(itemDetail, 'params', newValues, newValueNames);
39204
+ },
39205
+ disabled: disabled
39206
+ })))));
39095
39207
  };
39096
39208
  _this.handleEditExtraInfoResponse = function (code, val, parentDetail, classDataIndex, key) {
39097
39209
  var ruleClassData = _this.state.ruleClassData;
@@ -39407,6 +39519,8 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
39407
39519
  delete itemDetail.params;
39408
39520
  delete itemDetail.paramNames;
39409
39521
  delete itemDetail.dataTypeCode;
39522
+ delete itemDetail.entityValueType;
39523
+ delete itemDetail.entityInputType;
39410
39524
  delete itemDetail.elementId;
39411
39525
  delete itemDetail.elementName;
39412
39526
  delete itemDetail.metaObjectCode;
@@ -39457,6 +39571,8 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
39457
39571
  parentDetail.elementId = parentDetail.subExpression[0].elementId;
39458
39572
  parentDetail.elementName = parentDetail.subExpression[0].elementName;
39459
39573
  parentDetail.dataTypeCode = parentDetail.subExpression[0].dataTypeCode;
39574
+ parentDetail.entityValueType = parentDetail.subExpression[0].entityValueType;
39575
+ parentDetail.entityInputType = parentDetail.subExpression[0].entityInputType;
39460
39576
  delete parentDetail.subExpression;
39461
39577
  }
39462
39578
  }
@@ -39530,6 +39646,51 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
39530
39646
  callBack(ruleClassData);
39531
39647
  });
39532
39648
  };
39649
+ _this.handleReqConditionToggle = function (itemDetail) {
39650
+ var ruleClassData = _this.state.ruleClassData;
39651
+ var callBack = _this.props.callBack;
39652
+ itemDetail.isReqCondition = !itemDetail.isReqCondition;
39653
+ if (itemDetail.isReqCondition && !itemDetail.reqConditionData) {
39654
+ itemDetail.reqConditionData = {
39655
+ operationType: 'relation',
39656
+ dataTypeCode: '21',
39657
+ operationCode: '',
39658
+ reqParamName: '',
39659
+ params: [],
39660
+ paramNames: []
39661
+ };
39662
+ }
39663
+ _this.setState({
39664
+ ruleClassData: ruleClassData
39665
+ }, function () {
39666
+ callBack(ruleClassData);
39667
+ });
39668
+ };
39669
+ _this.handleReqDataChange = function (itemDetail, field, value, valueNames) {
39670
+ var ruleClassData = _this.state.ruleClassData;
39671
+ var callBack = _this.props.callBack;
39672
+ if (!itemDetail.reqConditionData) return;
39673
+ if (field === 'dataTypeCode') {
39674
+ itemDetail.reqConditionData.dataTypeCode = value;
39675
+ itemDetail.reqConditionData.operationCode = '';
39676
+ itemDetail.reqConditionData.params = [];
39677
+ itemDetail.reqConditionData.paramNames = [];
39678
+ } else if (field === 'operationCode') {
39679
+ itemDetail.reqConditionData.operationCode = value;
39680
+ } else if (field === 'reqParamName') {
39681
+ itemDetail.reqConditionData.reqParamName = value;
39682
+ } else if (field === 'params') {
39683
+ itemDetail.reqConditionData.params = value;
39684
+ if (valueNames) {
39685
+ itemDetail.reqConditionData.paramNames = valueNames;
39686
+ }
39687
+ }
39688
+ _this.setState({
39689
+ ruleClassData: ruleClassData
39690
+ }, function () {
39691
+ callBack(ruleClassData);
39692
+ });
39693
+ };
39533
39694
  _this.state = {
39534
39695
  editNameIndex: 0,
39535
39696
  isEdit: false,
package/dist/index.js CHANGED
@@ -38371,6 +38371,18 @@ function RenderCompItem(props) {
38371
38371
  }
38372
38372
 
38373
38373
  var RangePicker$2 = antd.DatePicker.RangePicker;
38374
+ var FIXED_DATA_TYPES = {
38375
+ 10: '字符串',
38376
+ 20: '短整数',
38377
+ 21: '长整数',
38378
+ 22: '小数',
38379
+ 40: '数组',
38380
+ 41: '布尔值',
38381
+ 12: '富文本',
38382
+ 30: '日期',
38383
+ 31: '时间',
38384
+ 32: '日期时间'
38385
+ };
38374
38386
  var RuleObjectComponent = /*#__PURE__*/function (_Component) {
38375
38387
  function RuleObjectComponent(props) {
38376
38388
  var _this;
@@ -38414,6 +38426,8 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
38414
38426
  value: element.id,
38415
38427
  id: element.id,
38416
38428
  dataTypeCode: element.valueType,
38429
+ entityValueType: element.entityValueType,
38430
+ entityInputType: element.entityInputType,
38417
38431
  dataChoiceBusinessType: element.choiceType,
38418
38432
  dataInputBusinessType: element.inputType,
38419
38433
  info: element.info,
@@ -38435,6 +38449,8 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
38435
38449
  metaObjectCode: _this.props.metaObjectCode || item.code
38436
38450
  }, item), {}, {
38437
38451
  dataTypeCode: item.valueType,
38452
+ entityValueType: item.entityValueType,
38453
+ entityInputType: item.entityInputType,
38438
38454
  dataChoiceBusinessType: item.choiceType,
38439
38455
  dataInputBusinessType: item.inputType
38440
38456
  }));
@@ -38468,6 +38484,8 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
38468
38484
  value: element.id,
38469
38485
  id: element.id,
38470
38486
  dataTypeCode: element.valueType,
38487
+ entityValueType: element.entityValueType,
38488
+ entityInputType: element.entityInputType,
38471
38489
  dataChoiceBusinessType: element.choiceType,
38472
38490
  dataInputBusinessType: element.inputType,
38473
38491
  info: element.info,
@@ -38837,7 +38855,8 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
38837
38855
  initialThresholdQuery = _this$props3$initialT === void 0 ? {} : _this$props3$initialT,
38838
38856
  disabled = _this$props3.disabled,
38839
38857
  systemVariableList = _this$props3.systemVariableList,
38840
- needShowInsertSQL = _this$props3.needShowInsertSQL;
38858
+ needShowInsertSQL = _this$props3.needShowInsertSQL,
38859
+ needShowReqCondition = _this$props3.needShowReqCondition;
38841
38860
  var thresholdQuery = _objectSpread2(_objectSpread2({}, initialThresholdQuery), relateDatas);
38842
38861
  var finalIndex = floorIndex + 1;
38843
38862
  var queryIdentify = '';
@@ -38928,6 +38947,8 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
38928
38947
  itemDetail.elementId = nodeInfo.triggerNode.props.id;
38929
38948
  itemDetail.elementName = nodeInfo.triggerNode.props.title;
38930
38949
  itemDetail.dataTypeCode = nodeInfo.triggerNode.props.dataTypeCode;
38950
+ itemDetail.entityValueType = nodeInfo.triggerNode.props.entityValueType;
38951
+ itemDetail.entityInputType = nodeInfo.triggerNode.props.entityInputType;
38931
38952
  itemDetail.metaObjectCode = nodeInfo.triggerNode.props.metaObjectCode;
38932
38953
  itemDetail.isInsertParam = false;
38933
38954
  if (needShowInsertSQL) {
@@ -39114,7 +39135,98 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
39114
39135
  fontSize: '14px',
39115
39136
  marginRight: '5px'
39116
39137
  }
39117
- }), "\u6DFB\u52A0\u6761\u4EF6"))));
39138
+ }), "\u6DFB\u52A0\u6761\u4EF6"), needShowReqCondition && /*#__PURE__*/React__default['default'].createElement("span", {
39139
+ style: {
39140
+ marginLeft: 10
39141
+ }
39142
+ }, /*#__PURE__*/React__default['default'].createElement(antd.Button, {
39143
+ type: "link",
39144
+ style: {
39145
+ padding: 0,
39146
+ height: 'auto'
39147
+ },
39148
+ onClick: function onClick() {
39149
+ return _this.handleReqConditionToggle(itemDetail);
39150
+ }
39151
+ }, itemDetail.isReqCondition ? '取消参数条件控制' : '参数条件控制')), itemDetail.isReqCondition && itemDetail.reqConditionData && /*#__PURE__*/React__default['default'].createElement("div", {
39152
+ style: {
39153
+ marginTop: 10,
39154
+ display: 'flex',
39155
+ alignItems: 'center',
39156
+ background: '#f5f5f5',
39157
+ padding: '10px',
39158
+ borderRadius: '4px'
39159
+ }
39160
+ }, /*#__PURE__*/React__default['default'].createElement("span", {
39161
+ style: {
39162
+ marginRight: 8,
39163
+ flexShrink: 0
39164
+ }
39165
+ }, "\u8BF7\u6C42\u53C2\u6570\u540D\u79F0:"), /*#__PURE__*/React__default['default'].createElement(antd.Input, {
39166
+ style: {
39167
+ width: 150,
39168
+ marginRight: 10
39169
+ },
39170
+ value: itemDetail.reqConditionData.reqParamName,
39171
+ onChange: function onChange(e) {
39172
+ return _this.handleReqDataChange(itemDetail, 'reqParamName', e.target.value);
39173
+ }
39174
+ }), /*#__PURE__*/React__default['default'].createElement("span", {
39175
+ style: {
39176
+ marginRight: 8,
39177
+ flexShrink: 0
39178
+ }
39179
+ }, "\u7C7B\u578B:"), /*#__PURE__*/React__default['default'].createElement(antd.Select, {
39180
+ style: {
39181
+ width: 120,
39182
+ marginRight: 10
39183
+ },
39184
+ value: itemDetail.reqConditionData.dataTypeCode,
39185
+ onChange: function onChange(val) {
39186
+ return _this.handleReqDataChange(itemDetail, 'dataTypeCode', val);
39187
+ }
39188
+ }, Object.keys(FIXED_DATA_TYPES).map(function (code) {
39189
+ return /*#__PURE__*/React__default['default'].createElement(antd.Select.Option, {
39190
+ key: code,
39191
+ value: code
39192
+ }, FIXED_DATA_TYPES[code]);
39193
+ })), /*#__PURE__*/React__default['default'].createElement(antd.Select, {
39194
+ style: {
39195
+ width: 120,
39196
+ marginRight: 10
39197
+ },
39198
+ value: itemDetail.reqConditionData.operationCode,
39199
+ onChange: function onChange(val) {
39200
+ return _this.handleReqDataChange(itemDetail, 'operationCode', val);
39201
+ }
39202
+ }, [{
39203
+ 'code': 'eq',
39204
+ 'name': '等于'
39205
+ }, {
39206
+ 'code': 'cn',
39207
+ 'name': '包含'
39208
+ }, {
39209
+ code: 'gt',
39210
+ name: '大于'
39211
+ }, {
39212
+ code: 'lt',
39213
+ name: '小于'
39214
+ }].map(function (op) {
39215
+ return /*#__PURE__*/React__default['default'].createElement(antd.Select.Option, {
39216
+ key: op.code,
39217
+ value: op.code
39218
+ }, op.name);
39219
+ })), /*#__PURE__*/React__default['default'].createElement(RuleField, {
39220
+ customerWidth: '180px',
39221
+ selectOperation: itemDetail.reqConditionData.operationCode,
39222
+ dataTypeCode: itemDetail.reqConditionData.dataTypeCode,
39223
+ values: itemDetail.reqConditionData.params || [],
39224
+ valueNames: itemDetail.reqConditionData.paramNames || [],
39225
+ callback: function callback(newValues, newValueNames) {
39226
+ return _this.handleReqDataChange(itemDetail, 'params', newValues, newValueNames);
39227
+ },
39228
+ disabled: disabled
39229
+ })))));
39118
39230
  };
39119
39231
  _this.handleEditExtraInfoResponse = function (code, val, parentDetail, classDataIndex, key) {
39120
39232
  var ruleClassData = _this.state.ruleClassData;
@@ -39430,6 +39542,8 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
39430
39542
  delete itemDetail.params;
39431
39543
  delete itemDetail.paramNames;
39432
39544
  delete itemDetail.dataTypeCode;
39545
+ delete itemDetail.entityValueType;
39546
+ delete itemDetail.entityInputType;
39433
39547
  delete itemDetail.elementId;
39434
39548
  delete itemDetail.elementName;
39435
39549
  delete itemDetail.metaObjectCode;
@@ -39480,6 +39594,8 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
39480
39594
  parentDetail.elementId = parentDetail.subExpression[0].elementId;
39481
39595
  parentDetail.elementName = parentDetail.subExpression[0].elementName;
39482
39596
  parentDetail.dataTypeCode = parentDetail.subExpression[0].dataTypeCode;
39597
+ parentDetail.entityValueType = parentDetail.subExpression[0].entityValueType;
39598
+ parentDetail.entityInputType = parentDetail.subExpression[0].entityInputType;
39483
39599
  delete parentDetail.subExpression;
39484
39600
  }
39485
39601
  }
@@ -39553,6 +39669,51 @@ var RuleObjectComponent = /*#__PURE__*/function (_Component) {
39553
39669
  callBack(ruleClassData);
39554
39670
  });
39555
39671
  };
39672
+ _this.handleReqConditionToggle = function (itemDetail) {
39673
+ var ruleClassData = _this.state.ruleClassData;
39674
+ var callBack = _this.props.callBack;
39675
+ itemDetail.isReqCondition = !itemDetail.isReqCondition;
39676
+ if (itemDetail.isReqCondition && !itemDetail.reqConditionData) {
39677
+ itemDetail.reqConditionData = {
39678
+ operationType: 'relation',
39679
+ dataTypeCode: '21',
39680
+ operationCode: '',
39681
+ reqParamName: '',
39682
+ params: [],
39683
+ paramNames: []
39684
+ };
39685
+ }
39686
+ _this.setState({
39687
+ ruleClassData: ruleClassData
39688
+ }, function () {
39689
+ callBack(ruleClassData);
39690
+ });
39691
+ };
39692
+ _this.handleReqDataChange = function (itemDetail, field, value, valueNames) {
39693
+ var ruleClassData = _this.state.ruleClassData;
39694
+ var callBack = _this.props.callBack;
39695
+ if (!itemDetail.reqConditionData) return;
39696
+ if (field === 'dataTypeCode') {
39697
+ itemDetail.reqConditionData.dataTypeCode = value;
39698
+ itemDetail.reqConditionData.operationCode = '';
39699
+ itemDetail.reqConditionData.params = [];
39700
+ itemDetail.reqConditionData.paramNames = [];
39701
+ } else if (field === 'operationCode') {
39702
+ itemDetail.reqConditionData.operationCode = value;
39703
+ } else if (field === 'reqParamName') {
39704
+ itemDetail.reqConditionData.reqParamName = value;
39705
+ } else if (field === 'params') {
39706
+ itemDetail.reqConditionData.params = value;
39707
+ if (valueNames) {
39708
+ itemDetail.reqConditionData.paramNames = valueNames;
39709
+ }
39710
+ }
39711
+ _this.setState({
39712
+ ruleClassData: ruleClassData
39713
+ }, function () {
39714
+ callBack(ruleClassData);
39715
+ });
39716
+ };
39556
39717
  _this.state = {
39557
39718
  editNameIndex: 0,
39558
39719
  isEdit: false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bit-sun/business-component",
3
- "version": "4.2.1-alpha.17-aiwei",
3
+ "version": "4.2.1-alpha.18-aiwei",
4
4
  "scripts": {
5
5
  "start": "dumi dev",
6
6
  "docs:build": "dumi build",
@@ -0,0 +1,171 @@
1
+ # RuleObjectComponent 规则组件
2
+
3
+ ## 简介
4
+ `RuleObjectComponent` 是一个功能强大的规则构建器组件,支持可视化的条件组合(并且/或者逻辑嵌套)、动态参数插入、执行动作配置以及返回值配置。它广泛应用于需要灵活定义业务规则的场景。
5
+
6
+ ## 组件路径
7
+ `src/components/Solution/RuleComponent/index.js`
8
+
9
+ ## Props 属性说明
10
+
11
+ | 属性名 | 类型 | 必填 | 说明 |
12
+ |Ref | --- | --- | --- |
13
+ | regularDataList | `Array` | 是 | 规则左侧“对象”选择树的数据源。 |
14
+ | operationList | `Array` | 是 | 规则中间“操作符”下拉列表的数据源。 |
15
+ | ruleClassData | `Array` | 是 | 规则组件的核心数据模型,用于回显和存储规则配置。 |
16
+ | callBack | `Function` | 是 | 数据变更时的回调函数,返回最新的 `ruleClassData`。 |
17
+ | systemVariableList | `Array` | 否 | “插入参数”功能的数据源,允许用户选择系统变量而非固定值。 |
18
+ | initialThresholdQuery | `Object` | 否 | 用于获取规则值域(右侧输入框/选择框)的初始查询参数。 |
19
+ | ruleGroupInfo | `Object` | 否 | 规则组信息,用于规则组实例场景。 |
20
+ | ruleTypeData | `Array` | 否 | “动作”配置的数据源。 |
21
+ | ruleReturnConfig | `Array` | 否 | “返回值”配置的数据源。 |
22
+ | disabled | `Boolean` | 否 | 是否禁用(只读模式)。 |
23
+ | canDelete | `Boolean` | 否 | 是否显示删除规则按钮。 |
24
+ | onlyOneRule | `Boolean` | 否 | 是否限制为单条规则(不显示新增规则按钮)。 |
25
+ | onlyCondition | `Boolean` | 否 | 是否仅展示条件部分(隐藏动作和返回值)。 |
26
+ | onlyAction | `Boolean` | 否 | 是否仅展示动作部分。 |
27
+ | needShowInsertSQL | `Boolean` | 否 | 是否显示“插入SQL”功能按钮。 |
28
+ | headerButtonComponentFun | `Function` | 否 | 自定义头部按钮渲染函数。 |
29
+
30
+ ## 数据结构示例
31
+
32
+ ### ruleClassData 结构
33
+ ```json
34
+ [
35
+ {
36
+ "ruleName": "规则1",
37
+ "subExpression": [
38
+ {
39
+ "operationType": "logic", // logic 或 relation
40
+ "operationCode": "and", // logic时为 and/or
41
+ "subExpression": [ ... ] // 嵌套子条件
42
+ },
43
+ {
44
+ "operationType": "relation",
45
+ "elementId": "...", // 左侧对象ID
46
+ "operationCode": "...", // 操作符
47
+ "params": ["..."], // 右侧值
48
+ // 新增参数条件控制
49
+ "isReqCondition": true,
50
+ "reqConditionData": {
51
+ "reqParamName": "param1",
52
+ "dataTypeCode": "21",
53
+ "operationCode": "eq",
54
+ "params": ["value"]
55
+ }
56
+ }
57
+ ],
58
+ "extraInfo": {
59
+ "execute": [], // 动作
60
+ "response": [] // 返回值
61
+ }
62
+ }
63
+ ]
64
+ ```
65
+
66
+ ## 功能特性
67
+ 1. **多层级逻辑嵌套**:支持无限层级的“并且/或者”逻辑组合。
68
+ 2. **动态表单渲染**:根据选择的对象属性类型(`dataTypeCode`),自动渲染对应的输入组件(文本框、日期选择、业务选择器等)。
69
+ 3. **参数插入**:支持将系统变量作为条件值。
70
+ 4. **参数条件控制**:支持为特定条件配置请求参数名称、类型及校验规则。
71
+ 5. **动作与返回值**:支持配置规则命中后的执行动作及返回值。
72
+
73
+ ## 代码演示
74
+
75
+ ```tsx
76
+ import React, { useState } from 'react';
77
+ import { RuleComponent } from '../../../index';
78
+
79
+ export default () => {
80
+ const [ruleClassData, setRuleClassData] = useState([]);
81
+
82
+ // 模拟规则对象数据源
83
+ const regularDataList = [
84
+ {
85
+ id: 'user_info',
86
+ name: '用户信息',
87
+ code: 'user',
88
+ valueType: 'object',
89
+ propertyList: [
90
+ { id: 'age', name: '年龄', code: 'age', valueType: '22', inputType: 11, choiceType: 10, entityValueType: '20', entityInputType: 11 },
91
+ { id: 'name', name: '姓名', code: 'name', valueType: '21', inputType: 11, choiceType: 10, entityValueType: '10', entityInputType: 11 },
92
+ ]
93
+ },
94
+ {
95
+ id: 'order_info',
96
+ name: '订单信息',
97
+ code: 'order',
98
+ valueType: 'object',
99
+ propertyList: [
100
+ { id: 'amount', name: '金额', code: 'amount', valueType: '22', inputType: 11, choiceType: 10, entityValueType: '22', entityInputType: 11 },
101
+ ]
102
+ }
103
+ ];
104
+
105
+ // 模拟操作符数据源
106
+ const operationList = [
107
+ {
108
+ code: '21', // 字符串
109
+ operationList: [
110
+ { code: 'eq', name: '等于' },
111
+ { code: 'cn', name: '包含' },
112
+ ]
113
+ },
114
+ {
115
+ code: '22', // 数值
116
+ operationList: [
117
+ { code: 'eq', name: '等于' },
118
+ { code: 'gt', name: '大于' },
119
+ { code: 'lt', name: '小于' },
120
+ ]
121
+ }
122
+ ];
123
+
124
+ // 模拟系统变量
125
+ const systemVariableList = [
126
+ { code: 'sys_uid', name: '当前用户ID' },
127
+ { code: 'sys_time', name: '当前时间' },
128
+ ];
129
+
130
+ const handleSave = () => {
131
+ console.log('保存规则数据:', JSON.stringify(ruleClassData, null, 2));
132
+ alert('规则数据已输出到控制台,请查看!');
133
+ };
134
+
135
+ return (
136
+ <div style={{ background: '#f0f2f5', padding: 20, width: '1200px' }}>
137
+ <div style={{ marginBottom: 16, textAlign: 'right' }}>
138
+ <button
139
+ onClick={handleSave}
140
+ style={{
141
+ backgroundColor: '#1890ff',
142
+ color: '#fff',
143
+ border: 'none',
144
+ padding: '6px 15px',
145
+ borderRadius: '2px',
146
+ cursor: 'pointer'
147
+ }}
148
+ >
149
+ 保存规则
150
+ </button>
151
+ </div>
152
+ <RuleComponent
153
+ regularDataList={regularDataList}
154
+ operationList={operationList}
155
+ ruleClassData={ruleClassData}
156
+ needShowInsertSQL={true}
157
+ needShowReqCondition={true}
158
+ systemVariableList={systemVariableList}
159
+ callBack={(newData) => {
160
+ console.log('Rule Changed:', newData);
161
+ setRuleClassData([...newData]);
162
+ }}
163
+ />
164
+ <div style={{ marginTop: 20 }}>
165
+ <h4>当前规则数据:</h4>
166
+ <pre>{JSON.stringify(ruleClassData, null, 2)}</pre>
167
+ </div>
168
+ </div>
169
+ );
170
+ };
171
+ ```
@@ -0,0 +1,63 @@
1
+ # RuleField 规则字段组件
2
+
3
+ ## 简介
4
+ `RuleField` 是 `RuleObjectComponent` 内部使用的核心子组件,主要负责根据规则配置的**数据类型**和**操作符**,动态渲染出合适的输入控件(如输入框、下拉框、日期选择器、业务选择器等)。
5
+
6
+ ## 组件路径
7
+ `src/components/Solution/RuleComponent/ruleFiled.js`
8
+
9
+ ## Props 属性说明
10
+
11
+ | 属性名 | 类型 | 说明 |
12
+ | --- | --- | --- |
13
+ | selectOperation | `String` | 当前选中的操作符编码(如 `eq`, `in`, `be` 等)。 |
14
+ | dataTypeCode | `String` | 数据类型编码(21:字符串, 22:数值, 41:日期, 32:日期时间等)。 |
15
+ | dataChoiceBusinessType | `String`/`Number` | 业务数据选择类型(如 110:物理仓, 120:逻辑仓, 250:客户 等),用于决定渲染哪种业务选择器。 |
16
+ | dataInputBusinessType | `Number` | 输入交互类型(11:单选, 12:多选)。 |
17
+ | values | `Array` | 当前输入的值数组。 |
18
+ | valueNames | `Array` | 当前输入值的名称数组(用于回显)。 |
19
+ | callback | `Function` | 值发生变化时的回调,签名:`(newValues, newValueNames) => void`。 |
20
+ | disabled | `Boolean` | 是否禁用。 |
21
+ | customerWidth | `String` | 自定义控件宽度。 |
22
+ | queryIdentify | `String` | 字典或枚举的标识符,用于获取下拉选项数据。 |
23
+ | queryIdentifyType | `String` | 标识符类型(`dictCodeIdentify`, `dynamicDictCodeIdentify` 等)。 |
24
+ | initialThresholdQuery | `Object` | 初始查询参数。 |
25
+ | propertyCode | `String` | 属性编码。 |
26
+ | others | `Object` | 其他扩展配置,如 `customSelectorConfig`。 |
27
+
28
+ ## 支持的控件类型
29
+
30
+ 组件根据 `dataTypeCode` 和 `dataChoiceBusinessType` 自动匹配以下控件:
31
+
32
+ 1. **基础控件**:
33
+ * Input (文本/数值)
34
+ * DatePicker / RangePicker (日期/时间)
35
+ * Select (枚举/字典下拉)
36
+
37
+ 2. **区间控件**:
38
+ * 当操作符为区间类型(如 `be`, `bed`)时,自动渲染两个输入控件及中间的 `~` 符号。
39
+
40
+ 3. **业务选择器**:
41
+ * 物理仓 (`physicalWarehouse`)
42
+ * 逻辑仓 (`realWarehouse`)
43
+ * 虚拟仓 (`virtualWarehouse`)
44
+ * 渠道仓 (`channelWarehouse`)
45
+ * 商品SPU/SKU
46
+ * 省市区级联 (`BsCascader`)
47
+ * 行政/采购/销售/库存/结算组织 (`BusinessTreeSearchSelect`)
48
+ * 供应商/客户/店铺/员工 (`BusinessSearchSelect`)
49
+ * 品牌/类目
50
+ * 自定义选择器 (`CustomSelector`)
51
+
52
+ ## 使用示例
53
+
54
+ ```javascript
55
+ <RuleField
56
+ selectOperation="eq"
57
+ dataTypeCode="21"
58
+ values={['some value']}
59
+ valueNames={['some value']}
60
+ callback={(vals, names) => console.log(vals, names)}
61
+ disabled={false}
62
+ />
63
+ ```
@@ -35,12 +35,10 @@ import {
35
35
  } from './util';
36
36
  import { getDictionarySource, judgeIsEmpty, uuid } from '../../../utils/utils';
37
37
  import { coverToParallel } from '../../../utils/TreeUtils';
38
- import {
39
- BusinessSearchSelect,
40
- BusinessTreeSearchSelect,
41
- EllipsisTooltip,
42
- BsCascader,
43
- } from '../../../index';
38
+ import BusinessSearchSelect from '../../Business/SearchSelect';
39
+ import BusinessTreeSearchSelect from '../../Business/TreeSearchSelect';
40
+ import EllipsisTooltip from '../../Functional/EllipsisTooltip';
41
+ import { BsCascader } from '../../Functional/BsAntdSula/index';
44
42
  import { request } from 'bssula';
45
43
  import Formula from './Formula';
46
44
  import RenderSpecificAction from './renderSpecificAction';
@@ -48,6 +46,19 @@ import RenderCompItem from './RenderCompItem';
48
46
 
49
47
  const { RangePicker } = DatePicker;
50
48
 
49
+ const FIXED_DATA_TYPES = {
50
+ 10: '字符串',
51
+ 20: '短整数',
52
+ 21: '长整数',
53
+ 22: '小数',
54
+ 40: '数组',
55
+ 41: '布尔值',
56
+ 12: '富文本',
57
+ 30: '日期',
58
+ 31: '时间',
59
+ 32: '日期时间',
60
+ };
61
+
51
62
  class RuleObjectComponent extends Component {
52
63
  constructor(props) {
53
64
  super(props);
@@ -151,6 +162,8 @@ class RuleObjectComponent extends Component {
151
162
  value: element.id,
152
163
  id: element.id,
153
164
  dataTypeCode: element.valueType,
165
+ entityValueType: element.entityValueType,
166
+ entityInputType: element.entityInputType,
154
167
  dataChoiceBusinessType: element.choiceType,
155
168
  dataInputBusinessType: element.inputType,
156
169
  info: element.info,
@@ -178,6 +191,8 @@ class RuleObjectComponent extends Component {
178
191
  metaObjectCode: this.props.metaObjectCode || item.code,
179
192
  ...item,
180
193
  dataTypeCode: item.valueType,
194
+ entityValueType: item.entityValueType,
195
+ entityInputType: item.entityInputType,
181
196
  dataChoiceBusinessType: item.choiceType,
182
197
  dataInputBusinessType: item.inputType,
183
198
  }),
@@ -225,6 +240,8 @@ class RuleObjectComponent extends Component {
225
240
  value: element.id,
226
241
  id: element.id,
227
242
  dataTypeCode: element.valueType,
243
+ entityValueType: element.entityValueType,
244
+ entityInputType: element.entityInputType,
228
245
  dataChoiceBusinessType: element.choiceType,
229
246
  dataInputBusinessType: element.inputType,
230
247
  info: element.info,
@@ -689,6 +706,7 @@ class RuleObjectComponent extends Component {
689
706
  disabled,
690
707
  systemVariableList,
691
708
  needShowInsertSQL,
709
+ needShowReqCondition,
692
710
  } = this.props;
693
711
  let thresholdQuery = {
694
712
  ...initialThresholdQuery,
@@ -824,6 +842,8 @@ class RuleObjectComponent extends Component {
824
842
  itemDetail.elementName = nodeInfo.triggerNode.props.title;
825
843
  itemDetail.dataTypeCode =
826
844
  nodeInfo.triggerNode.props.dataTypeCode;
845
+ itemDetail.entityValueType = nodeInfo.triggerNode.props.entityValueType;
846
+ itemDetail.entityInputType = nodeInfo.triggerNode.props.entityInputType;
827
847
  itemDetail.metaObjectCode =
828
848
  nodeInfo.triggerNode.props.metaObjectCode;
829
849
  itemDetail.isInsertParam = false;
@@ -1070,6 +1090,97 @@ class RuleObjectComponent extends Component {
1070
1090
  />
1071
1091
  添加条件
1072
1092
  </span>
1093
+ {needShowReqCondition && (
1094
+ <span style={{ marginLeft: 10 }}>
1095
+ <Button
1096
+ type="link"
1097
+ style={{ padding: 0, height: 'auto' }}
1098
+ onClick={() => this.handleReqConditionToggle(itemDetail)}
1099
+ >
1100
+ {itemDetail.isReqCondition
1101
+ ? '取消参数条件控制'
1102
+ : '参数条件控制'}
1103
+ </Button>
1104
+ </span>
1105
+ )}
1106
+ {itemDetail.isReqCondition && itemDetail.reqConditionData && (
1107
+ <div
1108
+ style={{
1109
+ marginTop: 10,
1110
+ display: 'flex',
1111
+ alignItems: 'center',
1112
+ background: '#f5f5f5',
1113
+ padding: '10px',
1114
+ borderRadius: '4px',
1115
+ }}
1116
+ >
1117
+ <span style={{ marginRight: 8, flexShrink: 0 }}>
1118
+ 请求参数名称:
1119
+ </span>
1120
+ <Input
1121
+ style={{ width: 150, marginRight: 10 }}
1122
+ value={itemDetail.reqConditionData.reqParamName}
1123
+ onChange={(e) =>
1124
+ this.handleReqDataChange(
1125
+ itemDetail,
1126
+ 'reqParamName',
1127
+ e.target.value,
1128
+ )
1129
+ }
1130
+ />
1131
+
1132
+ <span style={{ marginRight: 8, flexShrink: 0 }}>类型:</span>
1133
+ <Select
1134
+ style={{ width: 120, marginRight: 10 }}
1135
+ value={itemDetail.reqConditionData.dataTypeCode}
1136
+ onChange={(val) =>
1137
+ this.handleReqDataChange(itemDetail, 'dataTypeCode', val)
1138
+ }
1139
+ >
1140
+ {Object.keys(FIXED_DATA_TYPES).map((code) => (
1141
+ <Select.Option key={code} value={code}>
1142
+ {FIXED_DATA_TYPES[code]}
1143
+ </Select.Option>
1144
+ ))}
1145
+ </Select>
1146
+
1147
+ <Select
1148
+ style={{ width: 120, marginRight: 10 }}
1149
+ value={itemDetail.reqConditionData.operationCode}
1150
+ onChange={(val) =>
1151
+ this.handleReqDataChange(itemDetail, 'operationCode', val)
1152
+ }
1153
+ >
1154
+ {[
1155
+ { 'code': 'eq', 'name': '等于' },
1156
+ { 'code': 'cn', 'name': '包含' },
1157
+ { code: 'gt', name: '大于' },
1158
+ { code: 'lt', name: '小于' },
1159
+ ].map((op) => (
1160
+ <Select.Option key={op.code} value={op.code}>
1161
+ {op.name}
1162
+ </Select.Option>
1163
+ ))}
1164
+ </Select>
1165
+
1166
+ <RuleField
1167
+ customerWidth={'180px'}
1168
+ selectOperation={itemDetail.reqConditionData.operationCode}
1169
+ dataTypeCode={itemDetail.reqConditionData.dataTypeCode}
1170
+ values={itemDetail.reqConditionData.params || []}
1171
+ valueNames={itemDetail.reqConditionData.paramNames || []}
1172
+ callback={(newValues, newValueNames) =>
1173
+ this.handleReqDataChange(
1174
+ itemDetail,
1175
+ 'params',
1176
+ newValues,
1177
+ newValueNames,
1178
+ )
1179
+ }
1180
+ disabled={disabled}
1181
+ />
1182
+ </div>
1183
+ )}
1073
1184
  </div>
1074
1185
  </div>
1075
1186
  </div>
@@ -1497,6 +1608,8 @@ class RuleObjectComponent extends Component {
1497
1608
  delete itemDetail.params;
1498
1609
  delete itemDetail.paramNames;
1499
1610
  delete itemDetail.dataTypeCode;
1611
+ delete itemDetail.entityValueType;
1612
+ delete itemDetail.entityInputType;
1500
1613
  delete itemDetail.elementId;
1501
1614
  delete itemDetail.elementName;
1502
1615
  delete itemDetail.metaObjectCode;
@@ -1562,6 +1675,8 @@ class RuleObjectComponent extends Component {
1562
1675
  parentDetail.elementName = parentDetail.subExpression[0].elementName;
1563
1676
  parentDetail.dataTypeCode =
1564
1677
  parentDetail.subExpression[0].dataTypeCode;
1678
+ parentDetail.entityValueType = parentDetail.subExpression[0].entityValueType;
1679
+ parentDetail.entityInputType = parentDetail.subExpression[0].entityInputType;
1565
1680
  delete parentDetail.subExpression;
1566
1681
  }
1567
1682
  }
@@ -1647,6 +1762,61 @@ class RuleObjectComponent extends Component {
1647
1762
  );
1648
1763
  };
1649
1764
 
1765
+ handleReqConditionToggle = (itemDetail) => {
1766
+ const { ruleClassData } = this.state;
1767
+ const { callBack } = this.props;
1768
+ itemDetail.isReqCondition = !itemDetail.isReqCondition;
1769
+ if (itemDetail.isReqCondition && !itemDetail.reqConditionData) {
1770
+ itemDetail.reqConditionData = {
1771
+ operationType: 'relation',
1772
+ dataTypeCode: '21',
1773
+ operationCode: '',
1774
+ reqParamName: '',
1775
+ params: [],
1776
+ paramNames: [],
1777
+ };
1778
+ }
1779
+ this.setState(
1780
+ {
1781
+ ruleClassData,
1782
+ },
1783
+ () => {
1784
+ callBack(ruleClassData);
1785
+ },
1786
+ );
1787
+ };
1788
+
1789
+ handleReqDataChange = (itemDetail, field, value, valueNames) => {
1790
+ const { ruleClassData } = this.state;
1791
+ const { callBack } = this.props;
1792
+ if (!itemDetail.reqConditionData) return;
1793
+
1794
+ if (field === 'dataTypeCode') {
1795
+ itemDetail.reqConditionData.dataTypeCode = value;
1796
+ itemDetail.reqConditionData.operationCode = '';
1797
+ itemDetail.reqConditionData.params = [];
1798
+ itemDetail.reqConditionData.paramNames = [];
1799
+ } else if (field === 'operationCode') {
1800
+ itemDetail.reqConditionData.operationCode = value;
1801
+ } else if (field === 'reqParamName') {
1802
+ itemDetail.reqConditionData.reqParamName = value;
1803
+ } else if (field === 'params') {
1804
+ itemDetail.reqConditionData.params = value;
1805
+ if (valueNames) {
1806
+ itemDetail.reqConditionData.paramNames = valueNames;
1807
+ }
1808
+ }
1809
+
1810
+ this.setState(
1811
+ {
1812
+ ruleClassData,
1813
+ },
1814
+ () => {
1815
+ callBack(ruleClassData);
1816
+ },
1817
+ );
1818
+ };
1819
+
1650
1820
  render() {
1651
1821
  const { onlyOneRule, callBack, disabled, headerButtonComponentFun } = this.props;
1652
1822
  const { ruleClassData, modalParams } = this.state;
@@ -8,11 +8,9 @@ import { handleError } from '../../../utils/requestUtils';
8
8
  import { queryIdentityInfo, findChangedThresholdQuery, setParams, dateFormat, fullDateFormat } from './util';
9
9
  import { request as SulaRequest } from 'bssula';
10
10
  import { stringify } from 'querystring';
11
- import {
12
- BusinessSearchSelect,
13
- BusinessTreeSearchSelect,
14
- BsCascader
15
- } from '../../../index';
11
+ import BusinessSearchSelect from '../../Business/SearchSelect';
12
+ import BusinessTreeSearchSelect from '../../Business/TreeSearchSelect';
13
+ import { BsCascader } from '../../Functional/BsAntdSula/index';
16
14
  import CustomSelector from './CustomPlugin/CustomSelector';
17
15
  const { RangePicker } = DatePicker;
18
16
 
@@ -0,0 +1,97 @@
1
+ # RuleSetter 规则设置器组件
2
+
3
+ ## 简介
4
+ `RuleSetter` 是一个封装了完整规则编辑逻辑的高级业务组件。它内部集成了 `RuleObjectComponent`,并内置了规则模板详情查询、规则对象树加载、操作符获取、规则实例数据回显以及规则保存等全套数据交互逻辑。
5
+
6
+ 开发者只需提供规则模板 ID (`id`) 和业务标识 (`extStrField01`),即可快速在页面中引入一个功能完备的规则编辑器。
7
+
8
+ ## 组件路径
9
+ `src/components/Solution/RuleSetter/index.tsx`
10
+
11
+ ## Props 属性说明
12
+
13
+ | 属性名 | 类型 | 必填 | 说明 |
14
+ |Ref | --- | --- | --- |
15
+ | id / sceneId | `String` | 是 | 规则模板 ID,用于加载规则元数据(对象树、操作符等)。 |
16
+ | extStrField01 | `String` | 否 | 业务关键字段(如业务单据ID、租户ID等),用于区分同一模板下的不同业务实例。 |
17
+ | name | `String` | 否 | 规则实例名称。 |
18
+ | type | `String` | 否 | 组件模式。`instance` 表示规则实例模式(加载并保存具体的业务规则);为空则通常用于模板设计模式。 |
19
+ | saveUrl | `String` | 否 | 自定义保存接口地址。默认为 `/basic/ruleDetail/addAndUpdate`。 |
20
+ | customerValidator | `Function` | 否 | 自定义校验函数。`(ruleResultList, ruleTypeData) => boolean`。 |
21
+ | parseCustomParams | `Function` | 否 | 自定义保存参数处理函数。`(params) => newParams`。 |
22
+ | RuleObjectComponentProps | `Object` | 否 | 透传给底层 `RuleObjectComponent` 的属性对象。可用于开启特定功能(如插入SQL)。 |
23
+
24
+ ## 开启“插入 SQL”功能
25
+
26
+ 通过 `RuleObjectComponentProps` 属性,可以将 `needShowInsertSQL` 参数传递给底层的规则组件,从而开启“插入 SQL”功能。
27
+
28
+ 开启后,在每条规则条件的右侧会新增一个“插入 SQL”按钮,允许用户直接输入 SQL 片段作为条件值。
29
+
30
+ ```javascript
31
+ <RuleSetter
32
+ id="template_123"
33
+ type="instance"
34
+ RuleObjectComponentProps={{
35
+ needShowInsertSQL: true
36
+ }}
37
+ />
38
+ ```
39
+
40
+ ## 代码演示
41
+
42
+ ```tsx
43
+ import React, { useRef } from 'react';
44
+ import { Button, message } from 'antd';
45
+ import { RuleSetter } from '../../../index';
46
+
47
+ export default () => {
48
+ const ruleSetterRef = useRef();
49
+
50
+ const handleSave = () => {
51
+ if (ruleSetterRef.current) {
52
+ // 调用组件内部的保存方法
53
+ ruleSetterRef.current.handleSave()
54
+ .then(() => {
55
+ message.success('规则保存成功');
56
+ })
57
+ .catch((err) => {
58
+ console.error('保存失败', err);
59
+ });
60
+ }
61
+ };
62
+
63
+ return (
64
+ <div style={{ background: '#f5f5f5', padding: 20 }}>
65
+ <div style={{ marginBottom: 16, textAlign: 'right' }}>
66
+ <Button type="primary" onClick={handleSave}>
67
+ 保存规则
68
+ </Button>
69
+ </div>
70
+
71
+ <RuleSetter
72
+ ref={ruleSetterRef}
73
+ id="100000132" // 示例模板ID,请替换为实际存在的ID
74
+ type="instance"
75
+ extStrField01="business_order_001" // 示例业务ID
76
+ name="订单审核规则"
77
+ // 开启插入SQL功能
78
+ RuleObjectComponentProps={{
79
+ needShowInsertSQL: true,
80
+ needShowReqCondition: true,
81
+ // 也可以传递其他 RuleObjectComponent 支持的属性
82
+ onlyCondition: false
83
+ }}
84
+ saveUrl="/api/custom/save/rule" // 可选:自定义保存接口
85
+ />
86
+ </div>
87
+ );
88
+ };
89
+ ```
90
+
91
+ ## 注意事项
92
+
93
+ 1. **数据依赖**:该组件强依赖后端接口(如 `/basic/ruleTemplate/`等),请确保后端服务正常且接口地址匹配。
94
+ 2. **Ref 引用**:组件暴露了 `handleSave` 方法,父组件需要通过 `ref` 来触发保存操作。
95
+ 3. **模式区别**:
96
+ * `type="instance"`:会根据 `id` 和 `extStrField01` 加载已保存的规则实例数据。
97
+ * `type` 为空:主要用于设计规则模板本身,加载的是模板定义数据。