@nokecy/qc-ui 1.0.63 → 1.0.66
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/cjs/RuleBuilder/LogicSelector.d.ts +23 -0
- package/dist/cjs/RuleBuilder/LogicSelector.js +54 -0
- package/dist/cjs/RuleBuilder/RuleBuilderContainer.d.ts +20 -0
- package/dist/cjs/RuleBuilder/RuleBuilderContainer.js +209 -0
- package/dist/cjs/RuleBuilder/RuleCard.d.ts +20 -0
- package/dist/cjs/RuleBuilder/RuleCard.js +196 -0
- package/dist/cjs/RuleBuilder/RuleGroupEditor.d.ts +25 -0
- package/dist/cjs/RuleBuilder/RuleGroupEditor.js +191 -0
- package/dist/cjs/RuleBuilder/constants/operators.d.ts +47 -0
- package/dist/cjs/RuleBuilder/constants/operators.js +172 -0
- package/dist/cjs/RuleBuilder/context/RuleBuilderContext.d.ts +72 -0
- package/dist/cjs/RuleBuilder/context/RuleBuilderContext.js +286 -0
- package/dist/cjs/RuleBuilder/index.d.ts +25 -0
- package/dist/cjs/RuleBuilder/index.js +308 -0
- package/dist/cjs/RuleBuilder/inputs/BetweenValueInput.d.ts +23 -0
- package/dist/cjs/RuleBuilder/inputs/BetweenValueInput.js +80 -0
- package/dist/cjs/RuleBuilder/inputs/MultiValueInput.d.ts +21 -0
- package/dist/cjs/RuleBuilder/inputs/MultiValueInput.js +128 -0
- package/dist/cjs/RuleBuilder/inputs/SingleValueInput.d.ts +25 -0
- package/dist/cjs/RuleBuilder/inputs/SingleValueInput.js +81 -0
- package/dist/cjs/RuleBuilder/inputs/ValueInput.d.ts +29 -0
- package/dist/cjs/RuleBuilder/inputs/ValueInput.js +80 -0
- package/dist/cjs/RuleBuilder/selectors/FieldSelector.d.ts +22 -0
- package/dist/cjs/RuleBuilder/selectors/FieldSelector.js +45 -0
- package/dist/cjs/RuleBuilder/selectors/OperatorSelector.d.ts +22 -0
- package/dist/cjs/RuleBuilder/selectors/OperatorSelector.js +51 -0
- package/dist/cjs/RuleBuilder/styles/index.module.less +443 -0
- package/dist/cjs/RuleBuilder/styles/index.module.less.d.ts +43 -0
- package/dist/cjs/RuleBuilder/types/index.d.ts +232 -0
- package/dist/cjs/RuleBuilder/types/index.js +83 -0
- package/dist/cjs/RuleBuilder/utils/pathHelpers.d.ts +65 -0
- package/dist/cjs/RuleBuilder/utils/pathHelpers.js +241 -0
- package/dist/cjs/RuleBuilder/utils/ruleHelpers.d.ts +47 -0
- package/dist/cjs/RuleBuilder/utils/ruleHelpers.js +154 -0
- package/dist/cjs/RuleBuilder/utils/validation.d.ts +25 -0
- package/dist/cjs/RuleBuilder/utils/validation.js +241 -0
- package/dist/cjs/generatedListPage/_utils/defaultHandlers.js +24 -11
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +7 -0
- package/dist/cjs/standardFormDialog/StandardFormDialog.js +26 -5
- package/dist/cjs/standardFormDialog/withStandardForm.js +6 -1
- package/dist/esm/RuleBuilder/LogicSelector.d.ts +23 -0
- package/dist/esm/RuleBuilder/LogicSelector.js +47 -0
- package/dist/esm/RuleBuilder/RuleBuilderContainer.d.ts +20 -0
- package/dist/esm/RuleBuilder/RuleBuilderContainer.js +203 -0
- package/dist/esm/RuleBuilder/RuleCard.d.ts +20 -0
- package/dist/esm/RuleBuilder/RuleCard.js +191 -0
- package/dist/esm/RuleBuilder/RuleGroupEditor.d.ts +25 -0
- package/dist/esm/RuleBuilder/RuleGroupEditor.js +184 -0
- package/dist/esm/RuleBuilder/constants/operators.d.ts +47 -0
- package/dist/esm/RuleBuilder/constants/operators.js +169 -0
- package/dist/esm/RuleBuilder/context/RuleBuilderContext.d.ts +72 -0
- package/dist/esm/RuleBuilder/context/RuleBuilderContext.js +271 -0
- package/dist/esm/RuleBuilder/index.d.ts +25 -0
- package/dist/esm/RuleBuilder/index.js +42 -0
- package/dist/esm/RuleBuilder/inputs/BetweenValueInput.d.ts +23 -0
- package/dist/esm/RuleBuilder/inputs/BetweenValueInput.js +73 -0
- package/dist/esm/RuleBuilder/inputs/MultiValueInput.d.ts +21 -0
- package/dist/esm/RuleBuilder/inputs/MultiValueInput.js +121 -0
- package/dist/esm/RuleBuilder/inputs/SingleValueInput.d.ts +25 -0
- package/dist/esm/RuleBuilder/inputs/SingleValueInput.js +74 -0
- package/dist/esm/RuleBuilder/inputs/ValueInput.d.ts +29 -0
- package/dist/esm/RuleBuilder/inputs/ValueInput.js +73 -0
- package/dist/esm/RuleBuilder/selectors/FieldSelector.d.ts +22 -0
- package/dist/esm/RuleBuilder/selectors/FieldSelector.js +38 -0
- package/dist/esm/RuleBuilder/selectors/OperatorSelector.d.ts +22 -0
- package/dist/esm/RuleBuilder/selectors/OperatorSelector.js +44 -0
- package/dist/esm/RuleBuilder/styles/index.module.less +443 -0
- package/dist/esm/RuleBuilder/styles/index.module.less.d.ts +43 -0
- package/dist/esm/RuleBuilder/types/index.d.ts +232 -0
- package/dist/esm/RuleBuilder/types/index.js +91 -0
- package/dist/esm/RuleBuilder/utils/pathHelpers.d.ts +65 -0
- package/dist/esm/RuleBuilder/utils/pathHelpers.js +228 -0
- package/dist/esm/RuleBuilder/utils/ruleHelpers.d.ts +47 -0
- package/dist/esm/RuleBuilder/utils/ruleHelpers.js +145 -0
- package/dist/esm/RuleBuilder/utils/validation.d.ts +25 -0
- package/dist/esm/RuleBuilder/utils/validation.js +236 -0
- package/dist/esm/generatedListPage/_utils/defaultHandlers.js +24 -11
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/standardFormDialog/StandardFormDialog.js +26 -5
- package/dist/esm/standardFormDialog/withStandardForm.js +7 -2
- package/dist/umd/qc-ui.min.css +1 -1
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 区间值输入组件
|
|
3
|
+
*
|
|
4
|
+
* 用于 Between 操作符,渲染两个输入框(最小值和最大值)
|
|
5
|
+
* 支持数值和日期类型
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import { InputNumber, DatePicker, Space } from 'antd';
|
|
10
|
+
import dayjs from 'dayjs';
|
|
11
|
+
export var BetweenValueInput = function BetweenValueInput(_ref) {
|
|
12
|
+
var value = _ref.value,
|
|
13
|
+
value2 = _ref.value2,
|
|
14
|
+
_onChange = _ref.onChange,
|
|
15
|
+
dataType = _ref.dataType,
|
|
16
|
+
_ref$disabled = _ref.disabled,
|
|
17
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
18
|
+
_ref$size = _ref.size,
|
|
19
|
+
size = _ref$size === void 0 ? 'middle' : _ref$size;
|
|
20
|
+
// 根据数据类型渲染不同的输入组件
|
|
21
|
+
if (dataType === 'number') {
|
|
22
|
+
return /*#__PURE__*/React.createElement(Space, null, /*#__PURE__*/React.createElement(InputNumber, {
|
|
23
|
+
value: value,
|
|
24
|
+
onChange: function onChange(val) {
|
|
25
|
+
return _onChange(val, value2);
|
|
26
|
+
},
|
|
27
|
+
disabled: disabled,
|
|
28
|
+
size: size,
|
|
29
|
+
placeholder: "\u6700\u5C0F\u503C",
|
|
30
|
+
style: {
|
|
31
|
+
width: 120
|
|
32
|
+
}
|
|
33
|
+
}), /*#__PURE__*/React.createElement("span", null, "~"), /*#__PURE__*/React.createElement(InputNumber, {
|
|
34
|
+
value: value2,
|
|
35
|
+
onChange: function onChange(val) {
|
|
36
|
+
return _onChange(value, val);
|
|
37
|
+
},
|
|
38
|
+
disabled: disabled,
|
|
39
|
+
size: size,
|
|
40
|
+
placeholder: "\u6700\u5927\u503C",
|
|
41
|
+
style: {
|
|
42
|
+
width: 120
|
|
43
|
+
}
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
if (dataType === 'date') {
|
|
47
|
+
return /*#__PURE__*/React.createElement(Space, null, /*#__PURE__*/React.createElement(DatePicker, {
|
|
48
|
+
value: value ? dayjs(value) : null,
|
|
49
|
+
onChange: function onChange(date) {
|
|
50
|
+
return _onChange(date === null || date === void 0 ? void 0 : date.format('YYYY-MM-DD'), value2);
|
|
51
|
+
},
|
|
52
|
+
disabled: disabled,
|
|
53
|
+
size: size,
|
|
54
|
+
placeholder: "\u5F00\u59CB\u65E5\u671F",
|
|
55
|
+
style: {
|
|
56
|
+
width: 140
|
|
57
|
+
}
|
|
58
|
+
}), /*#__PURE__*/React.createElement("span", null, "~"), /*#__PURE__*/React.createElement(DatePicker, {
|
|
59
|
+
value: value2 ? dayjs(value2) : null,
|
|
60
|
+
onChange: function onChange(date) {
|
|
61
|
+
return _onChange(value, date === null || date === void 0 ? void 0 : date.format('YYYY-MM-DD'));
|
|
62
|
+
},
|
|
63
|
+
disabled: disabled,
|
|
64
|
+
size: size,
|
|
65
|
+
placeholder: "\u7ED3\u675F\u65E5\u671F",
|
|
66
|
+
style: {
|
|
67
|
+
width: 140
|
|
68
|
+
}
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
};
|
|
73
|
+
export default BetweenValueInput;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 多值输入组件
|
|
3
|
+
*
|
|
4
|
+
* 用于 In/NotIn 操作符,支持添加和删除多个值
|
|
5
|
+
* 支持字符串和数值类型
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react';
|
|
8
|
+
export interface MultiValueInputProps {
|
|
9
|
+
/** 值数组 */
|
|
10
|
+
values: any[];
|
|
11
|
+
/** 值变更回调 */
|
|
12
|
+
onChange: (values: any[]) => void;
|
|
13
|
+
/** 字段数据类型 */
|
|
14
|
+
dataType: 'string' | 'number';
|
|
15
|
+
/** 是否禁用 */
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
/** 尺寸 */
|
|
18
|
+
size?: 'small' | 'middle' | 'large';
|
|
19
|
+
}
|
|
20
|
+
export declare const MultiValueInput: React.FC<MultiValueInputProps>;
|
|
21
|
+
export default MultiValueInput;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
2
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
4
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
5
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
6
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
7
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
8
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
9
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
10
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
11
|
+
/**
|
|
12
|
+
* 多值输入组件
|
|
13
|
+
*
|
|
14
|
+
* 用于 In/NotIn 操作符,支持添加和删除多个值
|
|
15
|
+
* 支持字符串和数值类型
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import React, { useState } from 'react';
|
|
19
|
+
import { Input, InputNumber, Button, Space, Tag } from 'antd';
|
|
20
|
+
import { PlusOutlined, CloseOutlined } from '@ant-design/icons';
|
|
21
|
+
export var MultiValueInput = function MultiValueInput(_ref) {
|
|
22
|
+
var _ref$values = _ref.values,
|
|
23
|
+
values = _ref$values === void 0 ? [] : _ref$values,
|
|
24
|
+
onChange = _ref.onChange,
|
|
25
|
+
dataType = _ref.dataType,
|
|
26
|
+
_ref$disabled = _ref.disabled,
|
|
27
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
28
|
+
_ref$size = _ref.size,
|
|
29
|
+
size = _ref$size === void 0 ? 'middle' : _ref$size;
|
|
30
|
+
var _useState = useState(''),
|
|
31
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
32
|
+
inputValue = _useState2[0],
|
|
33
|
+
setInputValue = _useState2[1];
|
|
34
|
+
var _useState3 = useState(false),
|
|
35
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
36
|
+
isAdding = _useState4[0],
|
|
37
|
+
setIsAdding = _useState4[1];
|
|
38
|
+
|
|
39
|
+
// 添加值
|
|
40
|
+
var handleAdd = function handleAdd() {
|
|
41
|
+
if (inputValue !== '' && inputValue !== null && inputValue !== undefined) {
|
|
42
|
+
var newValues = [].concat(_toConsumableArray(values), [inputValue]);
|
|
43
|
+
onChange(newValues);
|
|
44
|
+
setInputValue('');
|
|
45
|
+
setIsAdding(false);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// 删除值
|
|
50
|
+
var handleRemove = function handleRemove(index) {
|
|
51
|
+
var newValues = values.filter(function (_, i) {
|
|
52
|
+
return i !== index;
|
|
53
|
+
});
|
|
54
|
+
onChange(newValues);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
// 渲染输入框
|
|
58
|
+
var renderInput = function renderInput() {
|
|
59
|
+
if (dataType === 'number') {
|
|
60
|
+
return /*#__PURE__*/React.createElement(InputNumber, {
|
|
61
|
+
value: inputValue,
|
|
62
|
+
onChange: setInputValue,
|
|
63
|
+
disabled: disabled,
|
|
64
|
+
size: size,
|
|
65
|
+
placeholder: "\u8BF7\u8F93\u5165\u6570\u503C",
|
|
66
|
+
style: {
|
|
67
|
+
width: 150
|
|
68
|
+
},
|
|
69
|
+
onPressEnter: handleAdd
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return /*#__PURE__*/React.createElement(Input, {
|
|
73
|
+
value: inputValue,
|
|
74
|
+
onChange: function onChange(e) {
|
|
75
|
+
return setInputValue(e.target.value);
|
|
76
|
+
},
|
|
77
|
+
disabled: disabled,
|
|
78
|
+
size: size,
|
|
79
|
+
placeholder: "\u8BF7\u8F93\u5165\u503C",
|
|
80
|
+
style: {
|
|
81
|
+
width: 150
|
|
82
|
+
},
|
|
83
|
+
onPressEnter: handleAdd
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
return /*#__PURE__*/React.createElement(Space, {
|
|
87
|
+
direction: "vertical",
|
|
88
|
+
style: {
|
|
89
|
+
width: '100%'
|
|
90
|
+
}
|
|
91
|
+
}, /*#__PURE__*/React.createElement(Space, {
|
|
92
|
+
wrap: true
|
|
93
|
+
}, values.map(function (val, index) {
|
|
94
|
+
return /*#__PURE__*/React.createElement(Tag, {
|
|
95
|
+
key: index,
|
|
96
|
+
closable: !disabled,
|
|
97
|
+
onClose: function onClose() {
|
|
98
|
+
return handleRemove(index);
|
|
99
|
+
},
|
|
100
|
+
closeIcon: /*#__PURE__*/React.createElement(CloseOutlined, null)
|
|
101
|
+
}, String(val));
|
|
102
|
+
})), isAdding ? /*#__PURE__*/React.createElement(Space, null, renderInput(), /*#__PURE__*/React.createElement(Button, {
|
|
103
|
+
type: "primary",
|
|
104
|
+
size: "small",
|
|
105
|
+
onClick: handleAdd
|
|
106
|
+
}, "\u786E\u5B9A"), /*#__PURE__*/React.createElement(Button, {
|
|
107
|
+
size: "small",
|
|
108
|
+
onClick: function onClick() {
|
|
109
|
+
return setIsAdding(false);
|
|
110
|
+
}
|
|
111
|
+
}, "\u53D6\u6D88")) : /*#__PURE__*/React.createElement(Button, {
|
|
112
|
+
type: "dashed",
|
|
113
|
+
size: "small",
|
|
114
|
+
icon: /*#__PURE__*/React.createElement(PlusOutlined, null),
|
|
115
|
+
onClick: function onClick() {
|
|
116
|
+
return setIsAdding(true);
|
|
117
|
+
},
|
|
118
|
+
disabled: disabled
|
|
119
|
+
}, "\u6DFB\u52A0\u503C"));
|
|
120
|
+
};
|
|
121
|
+
export default MultiValueInput;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 单值输入组件
|
|
3
|
+
*
|
|
4
|
+
* 根据字段数据类型渲染对应的输入控件:
|
|
5
|
+
* - string: Input
|
|
6
|
+
* - number: InputNumber
|
|
7
|
+
* - date: DatePicker
|
|
8
|
+
* - boolean: Switch
|
|
9
|
+
*/
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import type { FieldDataType } from '../types';
|
|
12
|
+
export interface SingleValueInputProps {
|
|
13
|
+
/** 当前值 */
|
|
14
|
+
value: any;
|
|
15
|
+
/** 值变更回调 */
|
|
16
|
+
onChange: (value: any) => void;
|
|
17
|
+
/** 字段数据类型 */
|
|
18
|
+
dataType: FieldDataType;
|
|
19
|
+
/** 是否禁用 */
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
/** 尺寸 */
|
|
22
|
+
size?: 'small' | 'middle' | 'large';
|
|
23
|
+
}
|
|
24
|
+
export declare const SingleValueInput: React.FC<SingleValueInputProps>;
|
|
25
|
+
export default SingleValueInput;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 单值输入组件
|
|
3
|
+
*
|
|
4
|
+
* 根据字段数据类型渲染对应的输入控件:
|
|
5
|
+
* - string: Input
|
|
6
|
+
* - number: InputNumber
|
|
7
|
+
* - date: DatePicker
|
|
8
|
+
* - boolean: Switch
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import React from 'react';
|
|
12
|
+
import { Input, InputNumber, DatePicker, Switch } from 'antd';
|
|
13
|
+
import dayjs from 'dayjs';
|
|
14
|
+
export var SingleValueInput = function SingleValueInput(_ref) {
|
|
15
|
+
var value = _ref.value,
|
|
16
|
+
_onChange = _ref.onChange,
|
|
17
|
+
dataType = _ref.dataType,
|
|
18
|
+
_ref$disabled = _ref.disabled,
|
|
19
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
20
|
+
_ref$size = _ref.size,
|
|
21
|
+
size = _ref$size === void 0 ? 'middle' : _ref$size;
|
|
22
|
+
// 根据数据类型渲染不同的输入组件
|
|
23
|
+
switch (dataType) {
|
|
24
|
+
case 'string':
|
|
25
|
+
return /*#__PURE__*/React.createElement(Input, {
|
|
26
|
+
value: value,
|
|
27
|
+
onChange: function onChange(e) {
|
|
28
|
+
return _onChange(e.target.value);
|
|
29
|
+
},
|
|
30
|
+
disabled: disabled,
|
|
31
|
+
size: size,
|
|
32
|
+
placeholder: "\u8BF7\u8F93\u5165\u503C",
|
|
33
|
+
style: {
|
|
34
|
+
width: 200
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
case 'number':
|
|
38
|
+
return /*#__PURE__*/React.createElement(InputNumber, {
|
|
39
|
+
value: value,
|
|
40
|
+
onChange: _onChange,
|
|
41
|
+
disabled: disabled,
|
|
42
|
+
size: size,
|
|
43
|
+
placeholder: "\u8BF7\u8F93\u5165\u6570\u503C",
|
|
44
|
+
style: {
|
|
45
|
+
width: 200
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
case 'date':
|
|
49
|
+
return /*#__PURE__*/React.createElement(DatePicker, {
|
|
50
|
+
value: value ? dayjs(value) : null,
|
|
51
|
+
onChange: function onChange(date) {
|
|
52
|
+
return _onChange(date === null || date === void 0 ? void 0 : date.format('YYYY-MM-DD'));
|
|
53
|
+
},
|
|
54
|
+
disabled: disabled,
|
|
55
|
+
size: size,
|
|
56
|
+
placeholder: "\u8BF7\u9009\u62E9\u65E5\u671F",
|
|
57
|
+
style: {
|
|
58
|
+
width: 200
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
case 'boolean':
|
|
62
|
+
return /*#__PURE__*/React.createElement(Switch, {
|
|
63
|
+
checked: value,
|
|
64
|
+
onChange: _onChange,
|
|
65
|
+
disabled: disabled,
|
|
66
|
+
size: size === 'small' ? 'small' : 'default',
|
|
67
|
+
checkedChildren: "\u662F",
|
|
68
|
+
unCheckedChildren: "\u5426"
|
|
69
|
+
});
|
|
70
|
+
default:
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
export default SingleValueInput;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 值输入分发组件
|
|
3
|
+
*
|
|
4
|
+
* 根据操作符类型自动选择合适的输入组件:
|
|
5
|
+
* - IsNull/IsNotNull: 不渲染任何输入
|
|
6
|
+
* - Between: 渲染 BetweenValueInput
|
|
7
|
+
* - In/NotIn: 渲染 MultiValueInput
|
|
8
|
+
* - 其他: 渲染 SingleValueInput
|
|
9
|
+
*/
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import type { MatchOperator, FieldDataType } from '../types';
|
|
12
|
+
export interface ValueInputProps {
|
|
13
|
+
/** 操作符 */
|
|
14
|
+
operator: MatchOperator;
|
|
15
|
+
/** 字段数据类型 */
|
|
16
|
+
dataType: FieldDataType;
|
|
17
|
+
/** 主值 */
|
|
18
|
+
value: any;
|
|
19
|
+
/** 第二个值(用于 Between) */
|
|
20
|
+
value2?: any;
|
|
21
|
+
/** 值变更回调 */
|
|
22
|
+
onChange: (value: any, value2?: any) => void;
|
|
23
|
+
/** 是否禁用 */
|
|
24
|
+
disabled?: boolean;
|
|
25
|
+
/** 尺寸 */
|
|
26
|
+
size?: 'small' | 'middle' | 'large';
|
|
27
|
+
}
|
|
28
|
+
export declare const ValueInput: React.FC<ValueInputProps>;
|
|
29
|
+
export default ValueInput;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 值输入分发组件
|
|
3
|
+
*
|
|
4
|
+
* 根据操作符类型自动选择合适的输入组件:
|
|
5
|
+
* - IsNull/IsNotNull: 不渲染任何输入
|
|
6
|
+
* - Between: 渲染 BetweenValueInput
|
|
7
|
+
* - In/NotIn: 渲染 MultiValueInput
|
|
8
|
+
* - 其他: 渲染 SingleValueInput
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import React from 'react';
|
|
12
|
+
import { operatorRequiresValue, operatorRequiresValue2, operatorRequiresMultiValue } from "../constants/operators";
|
|
13
|
+
import SingleValueInput from "./SingleValueInput";
|
|
14
|
+
import BetweenValueInput from "./BetweenValueInput";
|
|
15
|
+
import MultiValueInput from "./MultiValueInput";
|
|
16
|
+
export var ValueInput = function ValueInput(_ref) {
|
|
17
|
+
var operator = _ref.operator,
|
|
18
|
+
dataType = _ref.dataType,
|
|
19
|
+
value = _ref.value,
|
|
20
|
+
value2 = _ref.value2,
|
|
21
|
+
_onChange = _ref.onChange,
|
|
22
|
+
_ref$disabled = _ref.disabled,
|
|
23
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
24
|
+
_ref$size = _ref.size,
|
|
25
|
+
size = _ref$size === void 0 ? 'middle' : _ref$size;
|
|
26
|
+
// 不需要值输入的操作符(IsNull/IsNotNull)
|
|
27
|
+
if (!operatorRequiresValue(operator) && !operatorRequiresValue2(operator) && !operatorRequiresMultiValue(operator)) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Between 操作符:渲染区间输入
|
|
32
|
+
if (operatorRequiresValue2(operator)) {
|
|
33
|
+
if (dataType !== 'number' && dataType !== 'date') {
|
|
34
|
+
return null; // Between 只支持数值和日期
|
|
35
|
+
}
|
|
36
|
+
return /*#__PURE__*/React.createElement(BetweenValueInput, {
|
|
37
|
+
value: value,
|
|
38
|
+
value2: value2,
|
|
39
|
+
onChange: _onChange,
|
|
40
|
+
dataType: dataType,
|
|
41
|
+
disabled: disabled,
|
|
42
|
+
size: size
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// In/NotIn 操作符:渲染多值输入
|
|
47
|
+
if (operatorRequiresMultiValue(operator)) {
|
|
48
|
+
if (dataType !== 'string' && dataType !== 'number') {
|
|
49
|
+
return null; // In/NotIn 只支持字符串和数值
|
|
50
|
+
}
|
|
51
|
+
return /*#__PURE__*/React.createElement(MultiValueInput, {
|
|
52
|
+
values: Array.isArray(value) ? value : [],
|
|
53
|
+
onChange: function onChange(values) {
|
|
54
|
+
return _onChange(values);
|
|
55
|
+
},
|
|
56
|
+
dataType: dataType,
|
|
57
|
+
disabled: disabled,
|
|
58
|
+
size: size
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// 其他操作符:渲染单值输入
|
|
63
|
+
return /*#__PURE__*/React.createElement(SingleValueInput, {
|
|
64
|
+
value: value,
|
|
65
|
+
onChange: function onChange(val) {
|
|
66
|
+
return _onChange(val);
|
|
67
|
+
},
|
|
68
|
+
dataType: dataType,
|
|
69
|
+
disabled: disabled,
|
|
70
|
+
size: size
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
export default ValueInput;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 字段选择器组件
|
|
3
|
+
* 用于选择规则匹配的字段
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import type { FieldDefinition } from '../types';
|
|
7
|
+
export interface FieldSelectorProps {
|
|
8
|
+
/** 当前选中的字段名 */
|
|
9
|
+
value?: string;
|
|
10
|
+
/** 值变更回调 */
|
|
11
|
+
onChange?: (fieldName: string) => void;
|
|
12
|
+
/** 字段定义列表 */
|
|
13
|
+
fields: FieldDefinition[];
|
|
14
|
+
/** 是否禁用 */
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
/** 尺寸 */
|
|
17
|
+
size?: 'small' | 'middle' | 'large';
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 字段选择器
|
|
21
|
+
*/
|
|
22
|
+
export declare const FieldSelector: React.FC<FieldSelectorProps>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 字段选择器组件
|
|
3
|
+
* 用于选择规则匹配的字段
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import { Select } from 'antd';
|
|
8
|
+
/**
|
|
9
|
+
* 字段选择器
|
|
10
|
+
*/
|
|
11
|
+
export var FieldSelector = function FieldSelector(_ref) {
|
|
12
|
+
var value = _ref.value,
|
|
13
|
+
onChange = _ref.onChange,
|
|
14
|
+
fields = _ref.fields,
|
|
15
|
+
_ref$disabled = _ref.disabled,
|
|
16
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
17
|
+
_ref$size = _ref.size,
|
|
18
|
+
size = _ref$size === void 0 ? 'middle' : _ref$size;
|
|
19
|
+
return /*#__PURE__*/React.createElement(Select, {
|
|
20
|
+
value: value,
|
|
21
|
+
onChange: onChange,
|
|
22
|
+
placeholder: "\u8BF7\u9009\u62E9\u5B57\u6BB5",
|
|
23
|
+
disabled: disabled,
|
|
24
|
+
size: size,
|
|
25
|
+
showSearch: true,
|
|
26
|
+
optionFilterProp: "label",
|
|
27
|
+
style: {
|
|
28
|
+
width: '100%'
|
|
29
|
+
},
|
|
30
|
+
options: fields.map(function (field) {
|
|
31
|
+
return {
|
|
32
|
+
value: field.name,
|
|
33
|
+
label: field.displayName,
|
|
34
|
+
title: field.description // 鼠标悬停时显示字段说明
|
|
35
|
+
};
|
|
36
|
+
})
|
|
37
|
+
});
|
|
38
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 操作符选择器组件
|
|
3
|
+
* 根据字段数据类型动态显示可用的操作符
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import type { MatchOperator, FieldDataType } from '../types';
|
|
7
|
+
export interface OperatorSelectorProps {
|
|
8
|
+
/** 当前选中的操作符 */
|
|
9
|
+
value?: MatchOperator;
|
|
10
|
+
/** 值变更回调 */
|
|
11
|
+
onChange?: (operator: MatchOperator) => void;
|
|
12
|
+
/** 字段数据类型(用于过滤可用操作符) */
|
|
13
|
+
dataType?: FieldDataType;
|
|
14
|
+
/** 是否禁用 */
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
/** 尺寸 */
|
|
17
|
+
size?: 'small' | 'middle' | 'large';
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 操作符选择器
|
|
21
|
+
*/
|
|
22
|
+
export declare const OperatorSelector: React.FC<OperatorSelectorProps>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 操作符选择器组件
|
|
3
|
+
* 根据字段数据类型动态显示可用的操作符
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import { Select } from 'antd';
|
|
8
|
+
import { getOperatorsByDataType, getOperatorInfo, OPERATOR_INFO_MAP } from "../constants/operators";
|
|
9
|
+
/**
|
|
10
|
+
* 操作符选择器
|
|
11
|
+
*/
|
|
12
|
+
export var OperatorSelector = function OperatorSelector(_ref) {
|
|
13
|
+
var value = _ref.value,
|
|
14
|
+
onChange = _ref.onChange,
|
|
15
|
+
dataType = _ref.dataType,
|
|
16
|
+
_ref$disabled = _ref.disabled,
|
|
17
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
18
|
+
_ref$size = _ref.size,
|
|
19
|
+
size = _ref$size === void 0 ? 'middle' : _ref$size;
|
|
20
|
+
// 根据数据类型获取可用操作符
|
|
21
|
+
var availableOperators = dataType ? getOperatorsByDataType(dataType) : Object.keys(OPERATOR_INFO_MAP).map(Number);
|
|
22
|
+
return /*#__PURE__*/React.createElement(Select, {
|
|
23
|
+
value: value,
|
|
24
|
+
onChange: onChange,
|
|
25
|
+
placeholder: "\u8BF7\u9009\u62E9\u64CD\u4F5C\u7B26",
|
|
26
|
+
disabled: disabled,
|
|
27
|
+
size: size,
|
|
28
|
+
style: {
|
|
29
|
+
width: '100%'
|
|
30
|
+
},
|
|
31
|
+
options: availableOperators.map(function (operator) {
|
|
32
|
+
var info = getOperatorInfo(operator);
|
|
33
|
+
return {
|
|
34
|
+
value: operator,
|
|
35
|
+
label: /*#__PURE__*/React.createElement("span", null, info.label, " ", /*#__PURE__*/React.createElement("span", {
|
|
36
|
+
style: {
|
|
37
|
+
color: '#999'
|
|
38
|
+
}
|
|
39
|
+
}, "(", info.symbol, ")")),
|
|
40
|
+
title: info.description // 鼠标悬停时显示操作符说明
|
|
41
|
+
};
|
|
42
|
+
})
|
|
43
|
+
});
|
|
44
|
+
};
|