@cqsjjb/jjb-react-admin-component 3.3.6 → 3.3.7
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/PageLayout/index.less +2 -2
- package/SearchForm/index.d.ts +3 -1
- package/SearchForm/index.js +17 -81
- package/TableAction/index.js +3 -1
- package/package.json +1 -1
package/PageLayout/index.less
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
.@{com-prefix-cls}-layout-container-tools {
|
|
23
23
|
margin-top: 0;
|
|
24
24
|
margin-bottom: 0;
|
|
25
|
-
padding: 0 20px
|
|
25
|
+
padding: 0 20px 16px 20px;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
.@{com-prefix-cls}-layout-container-content {
|
|
@@ -44,4 +44,4 @@
|
|
|
44
44
|
padding: 20px;
|
|
45
45
|
border-top: 1px #f0f0f0 solid;
|
|
46
46
|
}
|
|
47
|
-
}
|
|
47
|
+
}
|
package/SearchForm/index.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export interface SearchFormProps {
|
|
|
11
11
|
expand?: boolean;
|
|
12
12
|
// 内部默认展开状态,仅在 expand 未传入时生效 默认-false
|
|
13
13
|
defaultExpand?: boolean;
|
|
14
|
+
// 列数 默认-3
|
|
15
|
+
colSize?: number;
|
|
14
16
|
// 查询 loading 状态 默认-false
|
|
15
17
|
loading?: boolean;
|
|
16
18
|
// 表单行节点数组 默认-[]
|
|
@@ -29,4 +31,4 @@ export interface SearchFormProps {
|
|
|
29
31
|
|
|
30
32
|
declare const SearchForm: React.FC<SearchFormProps>;
|
|
31
33
|
|
|
32
|
-
export default SearchForm;
|
|
34
|
+
export default SearchForm;
|
package/SearchForm/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
1
|
import React, { useState, useRef, useEffect } from 'react';
|
|
3
2
|
import { Form, Button, Space, Row, Col } from 'antd';
|
|
4
3
|
import { SearchOutlined, DoubleRightOutlined, UndoOutlined } from '@ant-design/icons';
|
|
@@ -9,6 +8,7 @@ const SearchForm = ({
|
|
|
9
8
|
// 受控
|
|
10
9
|
defaultExpand = false,
|
|
11
10
|
// 内部默认展开
|
|
11
|
+
colSize = 3,
|
|
12
12
|
loading = false,
|
|
13
13
|
formLine = [],
|
|
14
14
|
initialValues = {},
|
|
@@ -17,45 +17,14 @@ const SearchForm = ({
|
|
|
17
17
|
onFinish = () => {},
|
|
18
18
|
onExpand
|
|
19
19
|
}) => {
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
const internalFormRef = useRef(internalFormInstance);
|
|
23
|
-
|
|
24
|
-
// 判断外部传入的是 ref 还是 form 实例
|
|
25
|
-
// ref 对象有 current 属性,form 实例没有
|
|
26
|
-
const isExternalRef = externalForm && 'current' in externalForm;
|
|
27
|
-
|
|
28
|
-
// 警告:ref 用法将在后续版本中移除
|
|
29
|
-
useEffect(() => {
|
|
30
|
-
if (isExternalRef) {
|
|
31
|
-
console.warn('[SearchForm] 警告:通过 ref 传入 form 的方式已废弃,将在后续版本中移除。' + '请使用 Form.useForm() 创建 form 实例并直接传入,例如:\n' + ' const [form] = Form.useForm();\n' + ' <SearchForm form={form} />');
|
|
32
|
-
}
|
|
33
|
-
}, [isExternalRef]);
|
|
34
|
-
|
|
35
|
-
// 获取实际的 form 实例(兼容 ref 和直接传入实例两种情况)
|
|
36
|
-
const getFormInstance = () => {
|
|
37
|
-
if (externalForm) {
|
|
38
|
-
return isExternalRef ? externalForm.current : externalForm;
|
|
39
|
-
}
|
|
40
|
-
return internalFormInstance;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
// 兼容性处理:用于 form.current 访问方式的 ref
|
|
44
|
-
const formRef = externalForm && isExternalRef ? externalForm : internalFormRef;
|
|
45
|
-
|
|
46
|
-
// 更新内部 ref,确保 formRef.current 始终指向正确的实例
|
|
47
|
-
useEffect(() => {
|
|
48
|
-
if (!isExternalRef && externalForm) {
|
|
49
|
-
// 如果外部传入的是实例,将其赋值给内部 ref 的 current
|
|
50
|
-
internalFormRef.current = externalForm;
|
|
51
|
-
}
|
|
52
|
-
}, [externalForm, isExternalRef]);
|
|
20
|
+
const internalForm = useRef();
|
|
21
|
+
const form = externalForm || internalForm;
|
|
53
22
|
const [internalOpen, setInternalOpen] = useState(defaultExpand);
|
|
54
23
|
useEffect(() => {
|
|
55
24
|
if (onRef) {
|
|
56
|
-
onRef(
|
|
25
|
+
onRef(form);
|
|
57
26
|
}
|
|
58
|
-
}, [
|
|
27
|
+
}, [form, onRef]);
|
|
59
28
|
const isControlled = expand !== undefined;
|
|
60
29
|
const isOpen = isControlled ? expand : internalOpen;
|
|
61
30
|
const handleToggle = () => {
|
|
@@ -78,11 +47,10 @@ const SearchForm = ({
|
|
|
78
47
|
icon: /*#__PURE__*/React.createElement(UndoOutlined, null),
|
|
79
48
|
loading: loading,
|
|
80
49
|
onClick: () => {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
onReset(formInstance.getFieldsValue());
|
|
50
|
+
form.current.resetFields();
|
|
51
|
+
onReset(form.current.getFieldsValue());
|
|
84
52
|
}
|
|
85
|
-
}, "\u91CD\u7F6E"), formLine.length >
|
|
53
|
+
}, "\u91CD\u7F6E"), formLine.length / colSize > 1 && /*#__PURE__*/React.createElement(Button, {
|
|
86
54
|
icon: /*#__PURE__*/React.createElement(DoubleRightOutlined, {
|
|
87
55
|
style: {
|
|
88
56
|
transform: isOpen ? 'rotate(-90deg)' : 'rotate(90deg)'
|
|
@@ -90,70 +58,38 @@ const SearchForm = ({
|
|
|
90
58
|
}),
|
|
91
59
|
onClick: handleToggle
|
|
92
60
|
}, isOpen ? '收起' : '展开'));
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* 处理 formLine,确保所有 Form.Item 都有 noStyle 属性
|
|
96
|
-
* @param {ReactNode[]} nodes - 表单节点数组
|
|
97
|
-
* @returns {ReactNode[]} - 处理后的节点数组
|
|
98
|
-
*/
|
|
99
|
-
const processFormLine = nodes => {
|
|
100
|
-
return nodes.map(node => {
|
|
101
|
-
// 检查是否是 Form.Item 组件
|
|
102
|
-
if (/*#__PURE__*/React.isValidElement(node) && node.type === Form.Item) {
|
|
103
|
-
// 如果没有 noStyle 属性,则克隆并添加
|
|
104
|
-
if (!node.props.noStyle) {
|
|
105
|
-
return /*#__PURE__*/React.cloneElement(node, {
|
|
106
|
-
noStyle: true
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return node;
|
|
111
|
-
});
|
|
112
|
-
};
|
|
113
61
|
const groupsList = () => {
|
|
114
|
-
|
|
115
|
-
const processedFormLine = processFormLine(formLine);
|
|
116
|
-
const arr = processedFormLine.map(node => ({
|
|
62
|
+
const arr = formLine.map(node => ({
|
|
117
63
|
show: true,
|
|
118
64
|
node
|
|
119
65
|
}));
|
|
120
|
-
if (isOpen || arr.length <=
|
|
66
|
+
if (isOpen || arr.length <= 3) {
|
|
121
67
|
return arr;
|
|
122
68
|
}
|
|
123
|
-
return arr.map((item, index) => index >
|
|
69
|
+
return arr.map((item, index) => index > 2 ? {
|
|
124
70
|
...item,
|
|
125
71
|
show: false
|
|
126
72
|
} : item);
|
|
127
73
|
};
|
|
128
74
|
const formItemList = groupsList();
|
|
129
75
|
if (formItemList.length === 0) return null;
|
|
130
|
-
return /*#__PURE__*/React.createElement(Form,
|
|
131
|
-
ref:
|
|
132
|
-
} : {
|
|
133
|
-
form: externalForm || internalFormInstance
|
|
134
|
-
}, {
|
|
76
|
+
return /*#__PURE__*/React.createElement(Form, {
|
|
77
|
+
ref: form,
|
|
135
78
|
style: style,
|
|
136
79
|
initialValues: initialValues,
|
|
137
80
|
onFinish: values => onFinish(values)
|
|
138
|
-
}
|
|
81
|
+
}, /*#__PURE__*/React.createElement(Row, {
|
|
139
82
|
gutter: [16, 16]
|
|
140
83
|
}, formItemList.map((item, index) => /*#__PURE__*/React.createElement(Col, {
|
|
141
84
|
key: index,
|
|
142
|
-
span:
|
|
85
|
+
span: 24 / colSize,
|
|
143
86
|
style: {
|
|
144
87
|
display: item.show ? 'block' : 'none'
|
|
145
88
|
}
|
|
146
89
|
}, item.node)), /*#__PURE__*/React.createElement(Col, {
|
|
147
|
-
span:
|
|
148
|
-
style: {
|
|
149
|
-
display: 'flex',
|
|
150
|
-
alignItems: 'flex-start'
|
|
151
|
-
}
|
|
90
|
+
span: 24 / colSize
|
|
152
91
|
}, /*#__PURE__*/React.createElement(Form.Item, {
|
|
153
|
-
noStyle: true
|
|
154
|
-
style: {
|
|
155
|
-
marginBottom: 0
|
|
156
|
-
}
|
|
92
|
+
noStyle: true
|
|
157
93
|
}, getButtons()))));
|
|
158
94
|
};
|
|
159
95
|
export default SearchForm;
|
package/TableAction/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { tools } from '@cqsjjb/jjb-common-lib';
|
|
3
|
+
import { MoreOutlined } from '@ant-design/icons';
|
|
3
4
|
import { Dropdown, Space } from 'antd';
|
|
4
5
|
export default function TableAction({
|
|
5
6
|
maximum = 3,
|
|
6
7
|
children,
|
|
7
8
|
space,
|
|
9
|
+
icon: Icon = MoreOutlined,
|
|
8
10
|
placement = 'bottomRight',
|
|
9
11
|
// 下拉菜单位置,默认 bottomRight
|
|
10
12
|
trigger = ['hover'] // 下拉触发方式,默认 hover
|
|
@@ -24,5 +26,5 @@ export default function TableAction({
|
|
|
24
26
|
},
|
|
25
27
|
placement: placement,
|
|
26
28
|
trigger: trigger
|
|
27
|
-
}, /*#__PURE__*/React.createElement("a", null,
|
|
29
|
+
}, /*#__PURE__*/React.createElement("a", null, /*#__PURE__*/React.createElement(Icon, null))));
|
|
28
30
|
}
|