fan-standard-comp 4.0.3 → 4.0.4
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 +7 -0
- package/dist/fan-standard-comp.min.js +1 -1
- package/es/FormComp/RenderItemGroup/index.js +65 -35
- package/es/StandardFilter/index.d.ts +1 -0
- package/es/StandardFilter/index.js +129 -32
- package/lib/FormComp/RenderItemGroup/index.js +64 -34
- package/lib/StandardFilter/index.d.ts +1 -0
- package/lib/StandardFilter/index.js +129 -32
- package/package.json +1 -1
|
@@ -12,7 +12,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
|
|
|
12
12
|
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; } }
|
|
13
13
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
14
14
|
/* eslint-disable */
|
|
15
|
-
import React, { useCallback } from "react";
|
|
15
|
+
import React, { useEffect, useCallback } from "react";
|
|
16
16
|
import { Row, Col, Tooltip, Form, Space } from "antd";
|
|
17
17
|
import { general } from "../../data";
|
|
18
18
|
import Field from "../FieldComponent";
|
|
@@ -48,7 +48,53 @@ var RenderItemGroup = function RenderItemGroup(props) {
|
|
|
48
48
|
// // @ts-ignore
|
|
49
49
|
// return general.modalSize[size].columnNumber || 1
|
|
50
50
|
// }, [size, columnCount])
|
|
51
|
-
|
|
51
|
+
/*
|
|
52
|
+
// 当前需要显示的前几条表单项
|
|
53
|
+
// const [showItemNumber, setShowItemNumber] = useState(0)
|
|
54
|
+
// 计算当前栅格数量,及对应的size
|
|
55
|
+
const columnNumberAndSize = useMemo(() => {
|
|
56
|
+
// 当前栅栅数量
|
|
57
|
+
let itemGroupSize = size || (layout === 'horizontal' ? 'xxlg' : 'md')
|
|
58
|
+
if (columnCount) {
|
|
59
|
+
// 有配置栅格数 1,2,3,4
|
|
60
|
+
switch (columnCount) {
|
|
61
|
+
case 1:
|
|
62
|
+
itemGroupSize = 'sm'
|
|
63
|
+
break;
|
|
64
|
+
case 2:
|
|
65
|
+
itemGroupSize = 'md'
|
|
66
|
+
break;
|
|
67
|
+
case 3:
|
|
68
|
+
itemGroupSize = 'lg'
|
|
69
|
+
break;
|
|
70
|
+
case 4:
|
|
71
|
+
itemGroupSize = 'xxlg'
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
// @ts-ignore
|
|
77
|
+
columnNumber: general.modalSize[itemGroupSize].columnNumber,
|
|
78
|
+
itemGroupSize, columnCount
|
|
79
|
+
}
|
|
80
|
+
}, [size, columnCount, layout])
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
setShowItemNumber(columnNumberAndSize.columnNumber - 1)
|
|
83
|
+
}, [columnNumberAndSize, size])
|
|
84
|
+
|
|
85
|
+
// 判断是否隐藏结构, display:'none'
|
|
86
|
+
const setItemHiddenNode = (item: any, index: number, collapsed: boolean, showItemNumber: number) => {
|
|
87
|
+
// updateFormFields() // TODO 放这执行会报错,但是不加的话,切换栅格变化会导致收缩状态下隐藏的表单项未更新
|
|
88
|
+
if (item.filedName === 'filterAction') {
|
|
89
|
+
return {
|
|
90
|
+
isHidden: false
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
// 栅格列为1时,显示1个表单项
|
|
95
|
+
isHidden: collapsed ? false : (showItemNumber === 0 ? index !== 0 : !(index < showItemNumber))
|
|
96
|
+
}
|
|
97
|
+
}*/
|
|
52
98
|
var setColSpan = function setColSpan(display, modalSize, columnCount) {
|
|
53
99
|
if (_typeof(display) === 'object' || display === 'block') {
|
|
54
100
|
// 栅格数量为:1
|
|
@@ -72,13 +118,13 @@ var RenderItemGroup = function RenderItemGroup(props) {
|
|
|
72
118
|
return 12;
|
|
73
119
|
};
|
|
74
120
|
var updateFormFields = function updateFormFields() {
|
|
121
|
+
// console.log('用于触发更新表单实例赋值')
|
|
75
122
|
// if (newVal) form && form.setFieldsValue({ ...newVal })
|
|
76
123
|
if (doUpdateFormFields) doUpdateFormFields(); // 用于触发更新表单实例赋值
|
|
77
124
|
};
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
// }, [form])
|
|
125
|
+
useEffect(function () {
|
|
126
|
+
updateFormFields();
|
|
127
|
+
}, [form]);
|
|
82
128
|
|
|
83
129
|
// 渲染隐藏指定控件
|
|
84
130
|
var itemIsHide = function itemIsHide(isHide, getFieldsValue, FormInstance) {
|
|
@@ -205,9 +251,18 @@ var RenderItemGroup = function RenderItemGroup(props) {
|
|
|
205
251
|
customRender = item.customRender,
|
|
206
252
|
filedName = item.filedName; // 当前可传参的配置值
|
|
207
253
|
if (layout === "horizontal" || layout === "vertical") {
|
|
254
|
+
// if (collapseable && layout === "horizontal") {
|
|
255
|
+
// const { isHidden } = setItemHiddenNode(item, index, collapsed, showItemNumber)
|
|
256
|
+
// item.isHidden = isHidden
|
|
257
|
+
// item.style = { ...(item.style || {}), display: item.isHidden ? 'none' : 'block' }
|
|
258
|
+
// // if (index < showItemNumber) {
|
|
259
|
+
// // console.log('===>>>>当前显示【常规表单项】=>>', item.filedName, '序号', index, '可显示数量', showItemNumber, collapsed)
|
|
260
|
+
// // }
|
|
261
|
+
// }
|
|
208
262
|
return /*#__PURE__*/React.createElement(Col, {
|
|
209
263
|
key: index,
|
|
210
|
-
span: item.colSpan || setColSpan(item.display, size, columnCount)
|
|
264
|
+
span: item.colSpan || setColSpan(item.display, size, columnCount),
|
|
265
|
+
style: item.style
|
|
211
266
|
}, /*#__PURE__*/React.createElement(FormItem, _extends({
|
|
212
267
|
name: type !== 'custom' && filedName,
|
|
213
268
|
className: classNames(fieldStatus === 'viewOnly' ? 'form-item-view-only' : '', 'spec-item-group-form-item'),
|
|
@@ -244,34 +299,7 @@ var RenderItemGroup = function RenderItemGroup(props) {
|
|
|
244
299
|
type = item.type,
|
|
245
300
|
_item$display = item.display,
|
|
246
301
|
display = _item$display === void 0 ? 'side' : _item$display; // 当前可传参的配置值
|
|
247
|
-
|
|
248
302
|
var formLayout = calculateFormLayout(item);
|
|
249
|
-
// if (displayLayout) {
|
|
250
|
-
// // 如果未配置,则使用以下配置值
|
|
251
|
-
// formLayout = { ...displayLayout }
|
|
252
|
-
// }
|
|
253
|
-
// 优先级 displayLayout.side > displayLayout > general
|
|
254
|
-
// 优先级:若有displayLayout.block 则直接使用 general > displayLayout
|
|
255
|
-
// 还需要判断 layout为vertical还是horizontal
|
|
256
|
-
// @ts-ignore
|
|
257
|
-
// formLayout = displayLayout?.side || (displayLayout?.block ? general.modalSize[size].formLayout : ((!displayLayout || JSON.stringify(displayLayout) === '{}') ? general.modalSize[size].formLayout : displayLayout))
|
|
258
|
-
// if (item.hasOwnProperty('display')) {
|
|
259
|
-
// if (typeof display === 'string') {
|
|
260
|
-
// if (display === 'block') {
|
|
261
|
-
// // @ts-ignore
|
|
262
|
-
// formLayout = displayLayout?.block || general.modalSize[size].formBlockLayout
|
|
263
|
-
// } else {
|
|
264
|
-
// // 使用默认
|
|
265
|
-
// // formLayout = displayLayout?.side || (displayLayout?.block ? general.modalSize[size].formLayout : displayLayout) || general.modalSize[size].formLayout
|
|
266
|
-
// }
|
|
267
|
-
// } else {
|
|
268
|
-
// formLayout = item.display // 对象类型传值如: {labelCol: {span: 3},wrapperCol: {span: 8}} 优先级最高
|
|
269
|
-
// }
|
|
270
|
-
// }
|
|
271
|
-
// // 当布局为 'inline' 时,不配置栅格结构
|
|
272
|
-
// if (layout === 'inline') {
|
|
273
|
-
// formLayout = {}
|
|
274
|
-
// }
|
|
275
303
|
// title标题或html渲染
|
|
276
304
|
if (type === 'title' || type === 'html') {
|
|
277
305
|
return /*#__PURE__*/React.createElement(FormItem, {
|
|
@@ -282,7 +310,8 @@ var RenderItemGroup = function RenderItemGroup(props) {
|
|
|
282
310
|
var _item$protoConfig;
|
|
283
311
|
// isHide 返回为true则隐藏当前控件
|
|
284
312
|
return !itemIsHide(isHide, FormInstance.getFieldValue(), FormInstance) ? /*#__PURE__*/React.createElement(Col, {
|
|
285
|
-
span: item.colSpan || 24
|
|
313
|
+
span: item.colSpan || 24,
|
|
314
|
+
style: item.style
|
|
286
315
|
}, type === 'title' ? /*#__PURE__*/React.createElement("h3", _extends({}, item.protoConfig, {
|
|
287
316
|
className: "modalPanelTitle ".concat((item === null || item === void 0 || (_item$protoConfig = item.protoConfig) === null || _item$protoConfig === void 0 ? void 0 : _item$protoConfig.className) || '')
|
|
288
317
|
}), label) : label) : /*#__PURE__*/React.createElement(React.Fragment, null, null);
|
|
@@ -299,6 +328,7 @@ var RenderItemGroup = function RenderItemGroup(props) {
|
|
|
299
328
|
return !itemIsHide(isHide, FormInstance.getFieldValue(), FormInstance) ? renderColFormItem(item, index, formLayout) : null;
|
|
300
329
|
});
|
|
301
330
|
}
|
|
331
|
+
// 常规表单项结构
|
|
302
332
|
return renderColFormItem(item, index, formLayout);
|
|
303
333
|
});
|
|
304
334
|
};
|
|
@@ -22,6 +22,7 @@ export interface StandardFilterProps {
|
|
|
22
22
|
colon?: boolean;
|
|
23
23
|
dateFormatter?: 'dayjs' | 'string';
|
|
24
24
|
itemGroupConfig?: object;
|
|
25
|
+
collapseable?: boolean;
|
|
25
26
|
[k: string]: any;
|
|
26
27
|
}
|
|
27
28
|
declare const StandardFilter: React.ForwardRefExoticComponent<Omit<StandardFilterProps, "ref"> & React.RefAttributes<unknown>>;
|
|
@@ -21,8 +21,10 @@ import { general } from "../data/";
|
|
|
21
21
|
import "./style/index.less";
|
|
22
22
|
import { FanContext } from "../ConfigContext";
|
|
23
23
|
import useStyle from "./style/FilterStyle";
|
|
24
|
+
import SpecIcon from "../SpecIcon";
|
|
24
25
|
var FormItem = Form.Item;
|
|
25
26
|
var StandardFilter = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
27
|
+
var _filterFormRef$curren4;
|
|
26
28
|
var InitFanContext = useContext(FanContext);
|
|
27
29
|
var providerConfig = InitFanContext['StandardFilter'] || {}; // 使用上下文(全局配置)设置扩展的配置项
|
|
28
30
|
var _providerConfig$props = _objectSpread(_objectSpread({}, providerConfig), props),
|
|
@@ -56,7 +58,9 @@ var StandardFilter = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
56
58
|
filterBtnsStyle = _providerConfig$props.filterBtnsStyle,
|
|
57
59
|
_providerConfig$props7 = _providerConfig$props.colon,
|
|
58
60
|
colon = _providerConfig$props7 === void 0 ? true : _providerConfig$props7,
|
|
59
|
-
dateFormatter = _providerConfig$props.dateFormatter
|
|
61
|
+
dateFormatter = _providerConfig$props.dateFormatter,
|
|
62
|
+
_providerConfig$props8 = _providerConfig$props.collapseable,
|
|
63
|
+
collapseable = _providerConfig$props8 === void 0 ? false : _providerConfig$props8;
|
|
60
64
|
var filterFormRef = useRef();
|
|
61
65
|
// ref 的转发
|
|
62
66
|
useImperativeHandle(ref, function () {
|
|
@@ -70,7 +74,10 @@ var StandardFilter = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
70
74
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
71
75
|
isHideCount = _useState4[0],
|
|
72
76
|
setIsHideCount = _useState4[1]; // 表单隐藏项数量值
|
|
73
|
-
|
|
77
|
+
var _useState5 = useState(false),
|
|
78
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
79
|
+
collapsed = _useState6[0],
|
|
80
|
+
setCollapsed = _useState6[1];
|
|
74
81
|
var componentName = 'spec-standard-filter';
|
|
75
82
|
var _useStyle = useStyle(componentName),
|
|
76
83
|
_useStyle2 = _slicedToArray(_useStyle, 2),
|
|
@@ -79,8 +86,9 @@ var StandardFilter = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
79
86
|
var filterFormLayout = useMemo(function () {
|
|
80
87
|
return formLayout || 'inline';
|
|
81
88
|
}, [formLayout]);
|
|
82
|
-
|
|
83
|
-
|
|
89
|
+
|
|
90
|
+
// 计算当前栅格数量,及对应的size
|
|
91
|
+
var columnNumberAndSize = useMemo(function () {
|
|
84
92
|
// 当前栅栅数量
|
|
85
93
|
var itemGroupSize = (itemGroupConfig === null || itemGroupConfig === void 0 ? void 0 : itemGroupConfig.size) || (filterFormLayout === 'horizontal' ? 'xxlg' : 'md');
|
|
86
94
|
if (itemGroupConfig !== null && itemGroupConfig !== void 0 && itemGroupConfig.columnCount) {
|
|
@@ -100,8 +108,31 @@ var StandardFilter = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
100
108
|
break;
|
|
101
109
|
}
|
|
102
110
|
}
|
|
111
|
+
return {
|
|
112
|
+
columnNumber: general.modalSize[itemGroupSize].columnNumber,
|
|
113
|
+
itemGroupSize: itemGroupSize
|
|
114
|
+
};
|
|
115
|
+
}, [itemGroupConfig, filterFormLayout]);
|
|
116
|
+
|
|
117
|
+
// 计算表单隐藏项(开启展开与收缩)
|
|
118
|
+
var calculateHideCount = function calculateHideCount(filterFormRef, groups) {
|
|
119
|
+
var _filterFormRef$curren;
|
|
120
|
+
var formValues = filterFormRef === null || filterFormRef === void 0 || (_filterFormRef$curren = filterFormRef.current) === null || _filterFormRef$curren === void 0 ? void 0 : _filterFormRef$curren.getFieldValue();
|
|
121
|
+
setIsHideCount((groups || []).filter(function (item) {
|
|
122
|
+
return (item === null || item === void 0 ? void 0 : item.isHidden) || (item.hasOwnProperty('isHide') ? item.isHide(_objectSpread({}, formValues), filterFormRef) : false);
|
|
123
|
+
}).length);
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
// 配置筛选按钮(确认与取消)
|
|
127
|
+
var filterActionButtons = useMemo(function () {
|
|
128
|
+
var itemGroupSize = columnNumberAndSize.itemGroupSize,
|
|
129
|
+
columnNumber = columnNumberAndSize.columnNumber;
|
|
103
130
|
// 计算扣除栅格列数是否还有多余的项,用来判断筛选按钮的版式(初始化的时候,可能会受默认值内配置的isHide影响导致计算错误;或自定义表单控件组栅格影响)
|
|
104
|
-
|
|
131
|
+
// if (collapseable) {
|
|
132
|
+
// columnNumber = collapsed ? columnNumber : (columnNumber === 1 ? columnNumber = 2 : columnNumber)
|
|
133
|
+
// }
|
|
134
|
+
var calculateTimes = (reFormItemGroup.length - isHideCount) % columnNumber;
|
|
135
|
+
// console.log('当前多余的数量', calculateTimes, '当前隐藏的控件数量isHideCount==>', isHideCount, itemGroupSize, 'columnNumber', columnNumber)
|
|
105
136
|
// xs:1列 sm:1列 【span:24】
|
|
106
137
|
// md:2列 【span:12】
|
|
107
138
|
// lg:3列 xlg:3列 【span:8】
|
|
@@ -111,10 +142,11 @@ var StandardFilter = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
111
142
|
label: '',
|
|
112
143
|
type: 'custom',
|
|
113
144
|
// display: 'block',
|
|
145
|
+
filedName: 'filterAction',
|
|
114
146
|
display: {
|
|
115
147
|
wrapperCol: {
|
|
116
|
-
// 占用的格子数按对应size配置的formItem(md下额外再新增1)
|
|
117
|
-
span: general.modalSize[itemGroupSize].formLayout.labelCol.span + general.modalSize[itemGroupSize].formLayout.wrapperCol.span + (itemGroupSize === 'md' ? 1 : 0)
|
|
148
|
+
// 占用的格子数按对应size配置的formItem(md下额外再新增1, 忘了为什么额外加了,先去除.20240619)
|
|
149
|
+
span: general.modalSize[itemGroupSize].formLayout.labelCol.span + general.modalSize[itemGroupSize].formLayout.wrapperCol.span // + (itemGroupSize === 'md' ? 1 : 0)
|
|
118
150
|
}
|
|
119
151
|
},
|
|
120
152
|
protoFormItem: {
|
|
@@ -137,10 +169,23 @@ var StandardFilter = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
137
169
|
},
|
|
138
170
|
onClick: handleReset,
|
|
139
171
|
ghost: true
|
|
140
|
-
}, cancelButtonProps), cancelText || '重置')
|
|
172
|
+
}, cancelButtonProps), cancelText || '重置'), filterFormLayout === 'horizontal' && collapseable && reFormItemGroup.length > columnNumberAndSize.columnNumber - 1 ? /*#__PURE__*/React.createElement(Button, {
|
|
173
|
+
type: 'link',
|
|
174
|
+
onClick: function onClick() {
|
|
175
|
+
return setCollapsed(!collapsed);
|
|
176
|
+
},
|
|
177
|
+
style: {
|
|
178
|
+
marginLeft: 8,
|
|
179
|
+
paddingInlineStart: 0,
|
|
180
|
+
paddingInlineEnd: 0
|
|
181
|
+
}
|
|
182
|
+
}, collapsed ? '收起' : '展开', /*#__PURE__*/React.createElement(SpecIcon, {
|
|
183
|
+
noPrefix: true,
|
|
184
|
+
name: collapsed ? 'speci-up' : 'speci-down'
|
|
185
|
+
})) : null);
|
|
141
186
|
}
|
|
142
187
|
})];
|
|
143
|
-
}, [confirmText, cancelText, filterFormLayout, reFormItemGroup, onFilterSearch, onFilterReset,
|
|
188
|
+
}, [confirmText, cancelText, filterFormLayout, reFormItemGroup, onFilterSearch, onFilterReset, columnNumberAndSize, filterFormRef, isHideCount, collapseable, collapsed]);
|
|
144
189
|
|
|
145
190
|
// 更新表单控件值,用于外部获取当前表单实例(force是否强制清空表单)
|
|
146
191
|
var updateFormFields = function updateFormFields(newVal, force) {
|
|
@@ -175,37 +220,29 @@ var StandardFilter = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
175
220
|
})
|
|
176
221
|
} */
|
|
177
222
|
filterFormRef.current.setFieldsValue(_objectSpread(_objectSpread({}, resetValues), newVal || {})); // 直接清空表单的赋值
|
|
178
|
-
|
|
179
|
-
if (getFormFields) getFormFields(filterFormRef.current.getFieldsValue(), filterFormRef);
|
|
223
|
+
forceUpdateForm();
|
|
180
224
|
};
|
|
181
225
|
// 强制更新表单值,用于赋初始化实例值
|
|
182
226
|
var forceUpdateForm = useCallback(function () {
|
|
183
227
|
var formValues = filterFormRef.current.getFieldsValue();
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
if (getFormFields) getFormFields(
|
|
189
|
-
}, [dateFormatter, formItemGroup]);
|
|
190
|
-
// 计算表单隐藏项
|
|
191
|
-
var updateCalculate = useCallback(function (formValues) {
|
|
192
|
-
setIsHideCount(reFormItemGroup.filter(function (item) {
|
|
193
|
-
return item.hasOwnProperty('isHide') ? item.isHide(_objectSpread({}, formValues), filterFormRef) : false;
|
|
194
|
-
}).length);
|
|
228
|
+
if (Object.prototype.hasOwnProperty.call(formValues, false)) {
|
|
229
|
+
delete formValues.false; // 自定义结构会莫名的出来一个false字段
|
|
230
|
+
}
|
|
231
|
+
calculateHideCount(filterFormRef, reFormItemGroup); // 更新当前表单数量,排除被隐藏的值
|
|
232
|
+
if (getFormFields) getFormFields(formValues, filterFormRef);
|
|
195
233
|
}, [reFormItemGroup, filterFormRef]);
|
|
196
234
|
var handleSearch = function handleSearch(values) {
|
|
197
235
|
if (Object.prototype.hasOwnProperty.call(values, false)) {
|
|
198
|
-
delete values.false; //
|
|
236
|
+
delete values.false; // 自定义结构会莫名的出来一个false字段
|
|
199
237
|
}
|
|
200
|
-
var resultValues = dateFormatter === 'string' ? UtilValueFormat(values,
|
|
201
|
-
console.log('格式化前数据', values)
|
|
202
|
-
console.log('格式化后数据', resultValues)
|
|
238
|
+
var resultValues = dateFormatter === 'string' ? UtilValueFormat(values, reFormItemGroup) : values;
|
|
239
|
+
// console.log('格式化前数据', values)
|
|
240
|
+
// console.log('格式化后数据', resultValues)
|
|
203
241
|
if (onFilterSearch) {
|
|
204
242
|
onFilterSearch(_objectSpread({}, resultValues));
|
|
205
243
|
}
|
|
206
244
|
};
|
|
207
245
|
var handleReset = function handleReset() {
|
|
208
|
-
var _filterFormRef$curren;
|
|
209
246
|
// 使用此方法,表单校验无法清空掉
|
|
210
247
|
// const resetValues = this.filterFormRef.current.getFieldsValue()
|
|
211
248
|
// Object.keys(resetValues).forEach((item) => {
|
|
@@ -214,20 +251,78 @@ var StandardFilter = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
214
251
|
// this.filterFormRef.current.setFieldsValue({ ...resetValues }) // 直接清空表单的赋值
|
|
215
252
|
filterFormRef.current.resetFields();
|
|
216
253
|
setReFormItemGroup(formItemGroup); // 重新渲染列表
|
|
217
|
-
|
|
254
|
+
calculateHideCount(filterFormRef, reFormItemGroup);
|
|
218
255
|
if (onFilterReset) {
|
|
219
256
|
var _filterFormRef$curren2;
|
|
220
257
|
onFilterReset(filterFormRef === null || filterFormRef === void 0 || (_filterFormRef$curren2 = filterFormRef.current) === null || _filterFormRef$curren2 === void 0 ? void 0 : _filterFormRef$curren2.getFieldsValue());
|
|
221
258
|
}
|
|
222
259
|
};
|
|
260
|
+
|
|
261
|
+
// 判断是否隐藏结构, display:'none'
|
|
262
|
+
var setItemHiddenNode = function setItemHiddenNode(item, index, collapsed, showItemNumber) {
|
|
263
|
+
// console.log('判断是否隐藏结构==>当前执行序号', index, showItemNumber)
|
|
264
|
+
if (item.filedName === 'filterAction') {
|
|
265
|
+
return {
|
|
266
|
+
isHidden: false
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
return {
|
|
270
|
+
// 栅格列为1时,显示1个表单项
|
|
271
|
+
isHidden: collapsed ? false : showItemNumber === 0 ? index !== 0 : !(index < showItemNumber)
|
|
272
|
+
};
|
|
273
|
+
};
|
|
274
|
+
// 渲染隐藏指定控件
|
|
275
|
+
var itemIsHide = function itemIsHide(isHide, getFieldsValue, FormInstance) {
|
|
276
|
+
if (typeof isHide === 'function') {
|
|
277
|
+
return isHide(getFieldsValue, FormInstance, 'default');
|
|
278
|
+
}
|
|
279
|
+
return isHide || false;
|
|
280
|
+
};
|
|
281
|
+
var updateGroupByCollapsed = function updateGroupByCollapsed(groups, formValues) {
|
|
282
|
+
// console.log('判断当前是否需要按展开与收缩显示对应的表单项')
|
|
283
|
+
var showItemNumber = columnNumberAndSize.columnNumber - 1;
|
|
284
|
+
return new Promise(function (resolve, reject) {
|
|
285
|
+
if (Array.isArray(groups)) {
|
|
286
|
+
resolve(groups.map(function (item, index) {
|
|
287
|
+
if (collapseable && filterFormLayout === "horizontal") {
|
|
288
|
+
var _setItemHiddenNode = setItemHiddenNode(item, index, collapsed, showItemNumber),
|
|
289
|
+
isHidden = _setItemHiddenNode.isHidden;
|
|
290
|
+
item.isHidden = isHidden;
|
|
291
|
+
item.style = _objectSpread(_objectSpread({}, item.style || {}), {}, {
|
|
292
|
+
display: item.isHidden ? 'none' : 'block'
|
|
293
|
+
});
|
|
294
|
+
if (item.hasOwnProperty('isHide') && itemIsHide(item.isHide, formValues, filterFormRef)) {
|
|
295
|
+
showItemNumber++;
|
|
296
|
+
item.isHidden = true;
|
|
297
|
+
// console.log('当前是结构是隐藏未渲染,跳到下个序号', showItemNumber)
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return _objectSpread({}, item);
|
|
301
|
+
}));
|
|
302
|
+
} else {
|
|
303
|
+
resolve(groups);
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
};
|
|
307
|
+
useEffect(function () {
|
|
308
|
+
// 初始化表单数据数据
|
|
309
|
+
if (collapseable && filterFormLayout === "horizontal") {
|
|
310
|
+
var _filterFormRef$curren3;
|
|
311
|
+
var formValues = filterFormRef === null || filterFormRef === void 0 || (_filterFormRef$curren3 = filterFormRef.current) === null || _filterFormRef$curren3 === void 0 ? void 0 : _filterFormRef$curren3.getFieldValue();
|
|
312
|
+
updateGroupByCollapsed(formItemGroup, formValues).then(function (groups) {
|
|
313
|
+
setReFormItemGroup(groups);
|
|
314
|
+
calculateHideCount(filterFormRef, groups);
|
|
315
|
+
});
|
|
316
|
+
} else {
|
|
317
|
+
setReFormItemGroup(formItemGroup);
|
|
318
|
+
}
|
|
319
|
+
}, [formItemGroup, collapseable, filterFormLayout, collapsed, columnNumberAndSize === null || columnNumberAndSize === void 0 ? void 0 : columnNumberAndSize.columnNumber, itemGroupConfig, filterFormRef, filterFormRef === null || filterFormRef === void 0 || (_filterFormRef$curren4 = filterFormRef.current) === null || _filterFormRef$curren4 === void 0 ? void 0 : _filterFormRef$curren4.getFieldValue()]);
|
|
223
320
|
useEffect(function () {
|
|
224
321
|
if (initialValues && JSON.stringify(initialValues) !== '{}') {
|
|
225
322
|
updateFormFields(initialValues, true);
|
|
226
323
|
}
|
|
227
324
|
}, [initialValues]);
|
|
228
|
-
|
|
229
|
-
setReFormItemGroup(formItemGroup);
|
|
230
|
-
}, [formItemGroup]);
|
|
325
|
+
|
|
231
326
|
// / 表单列表组 formItemGroup 类型为数组或者React.Node
|
|
232
327
|
var renderFormItemGroup = function renderFormItemGroup() {
|
|
233
328
|
if (Array.isArray(reFormItemGroup)) {
|
|
@@ -237,7 +332,9 @@ var StandardFilter = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
237
332
|
size: filterFormLayout === 'horizontal' ? 'xxlg' : 'md' // size决定栅格排列数量(4列排版)
|
|
238
333
|
,
|
|
239
334
|
layout: filterFormLayout,
|
|
240
|
-
form: filterFormRef
|
|
335
|
+
form: filterFormRef,
|
|
336
|
+
collapseable: collapseable,
|
|
337
|
+
collapsed: collapsed
|
|
241
338
|
// displayLayout={{labelCol: { span: 8 }, wrapperCol: { span: 16 },}}
|
|
242
339
|
,
|
|
243
340
|
doUpdateFormFields: function doUpdateFormFields() {
|
|
@@ -56,7 +56,53 @@ var RenderItemGroup = function RenderItemGroup(props) {
|
|
|
56
56
|
// // @ts-ignore
|
|
57
57
|
// return general.modalSize[size].columnNumber || 1
|
|
58
58
|
// }, [size, columnCount])
|
|
59
|
-
|
|
59
|
+
/*
|
|
60
|
+
// 当前需要显示的前几条表单项
|
|
61
|
+
// const [showItemNumber, setShowItemNumber] = useState(0)
|
|
62
|
+
// 计算当前栅格数量,及对应的size
|
|
63
|
+
const columnNumberAndSize = useMemo(() => {
|
|
64
|
+
// 当前栅栅数量
|
|
65
|
+
let itemGroupSize = size || (layout === 'horizontal' ? 'xxlg' : 'md')
|
|
66
|
+
if (columnCount) {
|
|
67
|
+
// 有配置栅格数 1,2,3,4
|
|
68
|
+
switch (columnCount) {
|
|
69
|
+
case 1:
|
|
70
|
+
itemGroupSize = 'sm'
|
|
71
|
+
break;
|
|
72
|
+
case 2:
|
|
73
|
+
itemGroupSize = 'md'
|
|
74
|
+
break;
|
|
75
|
+
case 3:
|
|
76
|
+
itemGroupSize = 'lg'
|
|
77
|
+
break;
|
|
78
|
+
case 4:
|
|
79
|
+
itemGroupSize = 'xxlg'
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
// @ts-ignore
|
|
85
|
+
columnNumber: general.modalSize[itemGroupSize].columnNumber,
|
|
86
|
+
itemGroupSize, columnCount
|
|
87
|
+
}
|
|
88
|
+
}, [size, columnCount, layout])
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
setShowItemNumber(columnNumberAndSize.columnNumber - 1)
|
|
91
|
+
}, [columnNumberAndSize, size])
|
|
92
|
+
|
|
93
|
+
// 判断是否隐藏结构, display:'none'
|
|
94
|
+
const setItemHiddenNode = (item: any, index: number, collapsed: boolean, showItemNumber: number) => {
|
|
95
|
+
// updateFormFields() // TODO 放这执行会报错,但是不加的话,切换栅格变化会导致收缩状态下隐藏的表单项未更新
|
|
96
|
+
if (item.filedName === 'filterAction') {
|
|
97
|
+
return {
|
|
98
|
+
isHidden: false
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
// 栅格列为1时,显示1个表单项
|
|
103
|
+
isHidden: collapsed ? false : (showItemNumber === 0 ? index !== 0 : !(index < showItemNumber))
|
|
104
|
+
}
|
|
105
|
+
}*/
|
|
60
106
|
var setColSpan = function setColSpan(display, modalSize, columnCount) {
|
|
61
107
|
if (_typeof(display) === 'object' || display === 'block') {
|
|
62
108
|
// 栅格数量为:1
|
|
@@ -80,13 +126,13 @@ var RenderItemGroup = function RenderItemGroup(props) {
|
|
|
80
126
|
return 12;
|
|
81
127
|
};
|
|
82
128
|
var updateFormFields = function updateFormFields() {
|
|
129
|
+
// console.log('用于触发更新表单实例赋值')
|
|
83
130
|
// if (newVal) form && form.setFieldsValue({ ...newVal })
|
|
84
131
|
if (doUpdateFormFields) doUpdateFormFields(); // 用于触发更新表单实例赋值
|
|
85
132
|
};
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
// }, [form])
|
|
133
|
+
(0, _react.useEffect)(function () {
|
|
134
|
+
updateFormFields();
|
|
135
|
+
}, [form]);
|
|
90
136
|
|
|
91
137
|
// 渲染隐藏指定控件
|
|
92
138
|
var itemIsHide = function itemIsHide(isHide, getFieldsValue, FormInstance) {
|
|
@@ -213,9 +259,18 @@ var RenderItemGroup = function RenderItemGroup(props) {
|
|
|
213
259
|
customRender = item.customRender,
|
|
214
260
|
filedName = item.filedName; // 当前可传参的配置值
|
|
215
261
|
if (layout === "horizontal" || layout === "vertical") {
|
|
262
|
+
// if (collapseable && layout === "horizontal") {
|
|
263
|
+
// const { isHidden } = setItemHiddenNode(item, index, collapsed, showItemNumber)
|
|
264
|
+
// item.isHidden = isHidden
|
|
265
|
+
// item.style = { ...(item.style || {}), display: item.isHidden ? 'none' : 'block' }
|
|
266
|
+
// // if (index < showItemNumber) {
|
|
267
|
+
// // console.log('===>>>>当前显示【常规表单项】=>>', item.filedName, '序号', index, '可显示数量', showItemNumber, collapsed)
|
|
268
|
+
// // }
|
|
269
|
+
// }
|
|
216
270
|
return /*#__PURE__*/_react.default.createElement(_antd.Col, {
|
|
217
271
|
key: index,
|
|
218
|
-
span: item.colSpan || setColSpan(item.display, size, columnCount)
|
|
272
|
+
span: item.colSpan || setColSpan(item.display, size, columnCount),
|
|
273
|
+
style: item.style
|
|
219
274
|
}, /*#__PURE__*/_react.default.createElement(FormItem, _extends({
|
|
220
275
|
name: type !== 'custom' && filedName,
|
|
221
276
|
className: (0, _classnames.default)(fieldStatus === 'viewOnly' ? 'form-item-view-only' : '', 'spec-item-group-form-item'),
|
|
@@ -252,34 +307,7 @@ var RenderItemGroup = function RenderItemGroup(props) {
|
|
|
252
307
|
type = item.type,
|
|
253
308
|
_item$display = item.display,
|
|
254
309
|
display = _item$display === void 0 ? 'side' : _item$display; // 当前可传参的配置值
|
|
255
|
-
|
|
256
310
|
var formLayout = calculateFormLayout(item);
|
|
257
|
-
// if (displayLayout) {
|
|
258
|
-
// // 如果未配置,则使用以下配置值
|
|
259
|
-
// formLayout = { ...displayLayout }
|
|
260
|
-
// }
|
|
261
|
-
// 优先级 displayLayout.side > displayLayout > general
|
|
262
|
-
// 优先级:若有displayLayout.block 则直接使用 general > displayLayout
|
|
263
|
-
// 还需要判断 layout为vertical还是horizontal
|
|
264
|
-
// @ts-ignore
|
|
265
|
-
// formLayout = displayLayout?.side || (displayLayout?.block ? general.modalSize[size].formLayout : ((!displayLayout || JSON.stringify(displayLayout) === '{}') ? general.modalSize[size].formLayout : displayLayout))
|
|
266
|
-
// if (item.hasOwnProperty('display')) {
|
|
267
|
-
// if (typeof display === 'string') {
|
|
268
|
-
// if (display === 'block') {
|
|
269
|
-
// // @ts-ignore
|
|
270
|
-
// formLayout = displayLayout?.block || general.modalSize[size].formBlockLayout
|
|
271
|
-
// } else {
|
|
272
|
-
// // 使用默认
|
|
273
|
-
// // formLayout = displayLayout?.side || (displayLayout?.block ? general.modalSize[size].formLayout : displayLayout) || general.modalSize[size].formLayout
|
|
274
|
-
// }
|
|
275
|
-
// } else {
|
|
276
|
-
// formLayout = item.display // 对象类型传值如: {labelCol: {span: 3},wrapperCol: {span: 8}} 优先级最高
|
|
277
|
-
// }
|
|
278
|
-
// }
|
|
279
|
-
// // 当布局为 'inline' 时,不配置栅格结构
|
|
280
|
-
// if (layout === 'inline') {
|
|
281
|
-
// formLayout = {}
|
|
282
|
-
// }
|
|
283
311
|
// title标题或html渲染
|
|
284
312
|
if (type === 'title' || type === 'html') {
|
|
285
313
|
return /*#__PURE__*/_react.default.createElement(FormItem, {
|
|
@@ -290,7 +318,8 @@ var RenderItemGroup = function RenderItemGroup(props) {
|
|
|
290
318
|
var _item$protoConfig;
|
|
291
319
|
// isHide 返回为true则隐藏当前控件
|
|
292
320
|
return !itemIsHide(isHide, FormInstance.getFieldValue(), FormInstance) ? /*#__PURE__*/_react.default.createElement(_antd.Col, {
|
|
293
|
-
span: item.colSpan || 24
|
|
321
|
+
span: item.colSpan || 24,
|
|
322
|
+
style: item.style
|
|
294
323
|
}, type === 'title' ? /*#__PURE__*/_react.default.createElement("h3", _extends({}, item.protoConfig, {
|
|
295
324
|
className: "modalPanelTitle ".concat((item === null || item === void 0 || (_item$protoConfig = item.protoConfig) === null || _item$protoConfig === void 0 ? void 0 : _item$protoConfig.className) || '')
|
|
296
325
|
}), label) : label) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, null);
|
|
@@ -307,6 +336,7 @@ var RenderItemGroup = function RenderItemGroup(props) {
|
|
|
307
336
|
return !itemIsHide(isHide, FormInstance.getFieldValue(), FormInstance) ? renderColFormItem(item, index, formLayout) : null;
|
|
308
337
|
});
|
|
309
338
|
}
|
|
339
|
+
// 常规表单项结构
|
|
310
340
|
return renderColFormItem(item, index, formLayout);
|
|
311
341
|
});
|
|
312
342
|
};
|
|
@@ -22,6 +22,7 @@ export interface StandardFilterProps {
|
|
|
22
22
|
colon?: boolean;
|
|
23
23
|
dateFormatter?: 'dayjs' | 'string';
|
|
24
24
|
itemGroupConfig?: object;
|
|
25
|
+
collapseable?: boolean;
|
|
25
26
|
[k: string]: any;
|
|
26
27
|
}
|
|
27
28
|
declare const StandardFilter: React.ForwardRefExoticComponent<Omit<StandardFilterProps, "ref"> & React.RefAttributes<unknown>>;
|