@zat-design/sisyphus-react 3.13.16-beta.1 → 3.13.16-beta.3
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/es/ProEditTable/components/RenderField/ListChangedWrapper.js +12 -2
- package/es/ProEditTable/propsType.d.ts +1 -1
- package/es/ProEditTable/utils/diffOriginal.d.ts +1 -0
- package/es/ProEditTable/utils/diffOriginal.js +55 -1
- package/es/ProEnum/hooks/useEnum.js +4 -0
- package/es/ProForm/components/render/ChangedWrapper.js +2 -2
- package/es/ProForm/utils/diffOriginal.d.ts +1 -0
- package/es/ProForm/utils/diffOriginal.js +54 -1
- package/es/ProSelect/utils/index.js +58 -1
- package/lib/ProEditTable/components/RenderField/ListChangedWrapper.js +12 -2
- package/lib/ProEditTable/propsType.d.ts +1 -1
- package/lib/ProEditTable/utils/diffOriginal.d.ts +1 -0
- package/lib/ProEditTable/utils/diffOriginal.js +55 -1
- package/lib/ProEnum/hooks/useEnum.js +4 -0
- package/lib/ProForm/components/render/ChangedWrapper.js +2 -2
- package/lib/ProForm/utils/diffOriginal.d.ts +1 -0
- package/lib/ProForm/utils/diffOriginal.js +54 -1
- package/lib/ProSelect/utils/index.js +58 -1
- package/package.json +1 -1
@@ -133,7 +133,8 @@ var ListChangedWrapper = function ListChangedWrapper(props) {
|
|
133
133
|
onDiff: onDiff,
|
134
134
|
originRecord: originalDTO === null || originalDTO === void 0 ? void 0 : originalDTO.originRecord,
|
135
135
|
record: originalDTO === null || originalDTO === void 0 ? void 0 : originalDTO.record,
|
136
|
-
index: index
|
136
|
+
index: index,
|
137
|
+
type: props.type
|
137
138
|
});
|
138
139
|
}, [props[valuePropName], originalValue]);
|
139
140
|
var isAdd = diffType === 'add';
|
@@ -154,10 +155,18 @@ var ListChangedWrapper = function ListChangedWrapper(props) {
|
|
154
155
|
}
|
155
156
|
_children = viewRender;
|
156
157
|
}
|
158
|
+
// 对于ProNumberRange类型,需要将字符串数组转换为数字数组
|
159
|
+
var processedValue = orgValue;
|
160
|
+
if (type === 'ProNumberRange' && Array.isArray(orgValue)) {
|
161
|
+
processedValue = orgValue.map(function (item) {
|
162
|
+
var num = Number(item);
|
163
|
+
return Number.isNaN(num) ? item : num;
|
164
|
+
});
|
165
|
+
}
|
157
166
|
return /*#__PURE__*/React.isValidElement(children) ? /*#__PURE__*/React.cloneElement(children, _objectSpread(_objectSpread({}, children), {}, _defineProperty(_defineProperty({
|
158
167
|
// @ts-ignore
|
159
168
|
isView: true
|
160
|
-
}, valuePropName,
|
169
|
+
}, valuePropName, processedValue), "checked", type === 'Switch' ? originalValue : undefined))) : undefined;
|
161
170
|
}, [originalValue, children]);
|
162
171
|
if (!isWatch || noChange) {
|
163
172
|
return /*#__PURE__*/React.isValidElement(children) && /*#__PURE__*/React.cloneElement(children, _objectSpread(_objectSpread({}, children.props), rest));
|
@@ -180,6 +189,7 @@ var ListChangedWrapper = function ListChangedWrapper(props) {
|
|
180
189
|
'pro-form-item-add': isAdd
|
181
190
|
});
|
182
191
|
var open = tipOpenCalc();
|
192
|
+
// debugger;
|
183
193
|
return _jsx(_Tooltip, {
|
184
194
|
open: open,
|
185
195
|
getPopupContainer: function getPopupContainer(trigger) {
|
@@ -7,7 +7,7 @@ import type { NamePath } from 'antd/es/form/interface';
|
|
7
7
|
import type { ColumnType, TableProps } from 'antd/es/table';
|
8
8
|
import type { FormInstance, FormItemProps } from 'antd/es/form';
|
9
9
|
import type { ProFormValueType, FunctionArgs, ProRule } from '../ProForm/components/render/propsType';
|
10
|
-
import type { DiffOriginalParams } from '
|
10
|
+
import type { DiffOriginalParams } from './utils/diffOriginal';
|
11
11
|
/**
|
12
12
|
* 操作类型定义
|
13
13
|
*/
|
@@ -3,6 +3,54 @@ import _isFunction from "lodash/isFunction";
|
|
3
3
|
import _isEqual from "lodash/isEqual";
|
4
4
|
import { validate } from '@zat-design/utils';
|
5
5
|
var isEmpty = validate.isEmpty;
|
6
|
+
// 数字类型标准化函数
|
7
|
+
var normalizeNumberValue = function normalizeNumberValue(value) {
|
8
|
+
if (value === null || value === undefined || value === '') return null;
|
9
|
+
var num = Number(value);
|
10
|
+
return Number.isNaN(num) ? null : num;
|
11
|
+
};
|
12
|
+
// InputNumber 比较策略
|
13
|
+
var inputNumberStrategy = {
|
14
|
+
compare: function compare(val1, val2) {
|
15
|
+
var num1 = normalizeNumberValue(val1);
|
16
|
+
var num2 = normalizeNumberValue(val2);
|
17
|
+
return num1 === num2;
|
18
|
+
}
|
19
|
+
};
|
20
|
+
// ProNumberRange 比较策略
|
21
|
+
var proNumberRangeStrategy = {
|
22
|
+
compare: function compare(val1, val2) {
|
23
|
+
if (!Array.isArray(val1) || !Array.isArray(val2)) return false;
|
24
|
+
if (val1.length !== val2.length) return false;
|
25
|
+
return val1.every(function (item, index) {
|
26
|
+
var num1 = normalizeNumberValue(item);
|
27
|
+
var num2 = normalizeNumberValue(val2[index]);
|
28
|
+
return num1 === num2;
|
29
|
+
});
|
30
|
+
}
|
31
|
+
};
|
32
|
+
// 数字类型处理函数
|
33
|
+
var handleNumberTypeDiff = function handleNumberTypeDiff(params) {
|
34
|
+
var originalValue = params.originalValue,
|
35
|
+
value = params.value,
|
36
|
+
type = params.type;
|
37
|
+
var isEmptyVal = isEmpty(value);
|
38
|
+
var isEmptyOrg = isEmpty(originalValue);
|
39
|
+
// 都为空视为相等
|
40
|
+
if (isEmptyOrg && isEmptyVal) return 'same';
|
41
|
+
// 如果原始值为空 且当前有值的话 视为新增
|
42
|
+
if (isEmptyOrg && !isEmptyVal) return 'add';
|
43
|
+
// 根据类型选择对应的比较策略
|
44
|
+
var compareStrategy;
|
45
|
+
if (type === 'InputNumber') {
|
46
|
+
compareStrategy = inputNumberStrategy;
|
47
|
+
} else if (type === 'ProNumberRange') {
|
48
|
+
compareStrategy = proNumberRangeStrategy;
|
49
|
+
} else {
|
50
|
+
return 'changed'; // 未知类型视为已改变
|
51
|
+
}
|
52
|
+
return compareStrategy.compare(value, originalValue) ? 'same' : 'changed';
|
53
|
+
};
|
6
54
|
// 过滤对象中undefined字段
|
7
55
|
// 防止{a: '1'} {a: '1', b: undefined | null}被认为不相等
|
8
56
|
var filterObject = function filterObject(data) {
|
@@ -36,7 +84,8 @@ export var diffOriginal = function diffOriginal(params) {
|
|
36
84
|
onDiff = params.onDiff,
|
37
85
|
originRecord = params.originRecord,
|
38
86
|
record = params.record,
|
39
|
-
index = params.index
|
87
|
+
index = params.index,
|
88
|
+
type = params.type;
|
40
89
|
// 支持传入自定义比较事件
|
41
90
|
if (_isFunction(onDiff)) {
|
42
91
|
var diffRes = onDiff({
|
@@ -54,6 +103,11 @@ export var diffOriginal = function diffOriginal(params) {
|
|
54
103
|
return diffRes;
|
55
104
|
}
|
56
105
|
}
|
106
|
+
// 数字类型特殊处理
|
107
|
+
if (['InputNumber', 'ProNumberRange'].includes(type)) {
|
108
|
+
return handleNumberTypeDiff(params);
|
109
|
+
}
|
110
|
+
// 其他类型使用原有逻辑
|
57
111
|
var _value = filterObject(value);
|
58
112
|
var _originalValue = filterObject(originalValue);
|
59
113
|
var isEmptyVal = isEmpty(_value);
|
@@ -21,6 +21,10 @@ function useEnum(codes, value, compose) {
|
|
21
21
|
fieldNames = _ref3$fieldNames === void 0 ? {} : _ref3$fieldNames,
|
22
22
|
_ref3$clear = _ref3.clear,
|
23
23
|
clear = _ref3$clear === void 0 ? true : _ref3$clear;
|
24
|
+
// 存在子应用自管理枚举时,需要根据其指定的cacheKey进行缓存
|
25
|
+
if (cacheKey !== 'zat-design-pro-component-cacheKey') {
|
26
|
+
baseEnumStorage = null;
|
27
|
+
}
|
24
28
|
var catchData = getEnumData(storage, cacheKey, baseEnumStorage);
|
25
29
|
// 默认枚举缓存数据
|
26
30
|
baseEnumStorage = catchData;
|
@@ -58,8 +58,8 @@ var ChangedWrapper = function ChangedWrapper(props) {
|
|
58
58
|
value: _value,
|
59
59
|
originalValue: _originalValue,
|
60
60
|
form: form,
|
61
|
-
onDiff: onDiff
|
62
|
-
|
61
|
+
onDiff: onDiff,
|
62
|
+
type: props.type
|
63
63
|
});
|
64
64
|
}, [isWatch, noChange, props[valuePropName], originalValue, _typeof(onDiff)]);
|
65
65
|
var isAdd = diffType === 'add';
|
@@ -2,6 +2,54 @@ import _isObject from "lodash/isObject";
|
|
2
2
|
import _isFunction from "lodash/isFunction";
|
3
3
|
import _isEqual from "lodash/isEqual";
|
4
4
|
import { isEmpty } from '../../utils';
|
5
|
+
// 数字类型标准化函数
|
6
|
+
var normalizeNumberValue = function normalizeNumberValue(value) {
|
7
|
+
if (value === null || value === undefined || value === '') return null;
|
8
|
+
var num = Number(value);
|
9
|
+
return Number.isNaN(num) ? null : num;
|
10
|
+
};
|
11
|
+
// InputNumber 比较策略
|
12
|
+
var inputNumberStrategy = {
|
13
|
+
compare: function compare(val1, val2) {
|
14
|
+
var num1 = normalizeNumberValue(val1);
|
15
|
+
var num2 = normalizeNumberValue(val2);
|
16
|
+
return num1 === num2;
|
17
|
+
}
|
18
|
+
};
|
19
|
+
// ProNumberRange 比较策略
|
20
|
+
var proNumberRangeStrategy = {
|
21
|
+
compare: function compare(val1, val2) {
|
22
|
+
if (!Array.isArray(val1) || !Array.isArray(val2)) return false;
|
23
|
+
if (val1.length !== val2.length) return false;
|
24
|
+
return val1.every(function (item, index) {
|
25
|
+
var num1 = normalizeNumberValue(item);
|
26
|
+
var num2 = normalizeNumberValue(val2[index]);
|
27
|
+
return num1 === num2;
|
28
|
+
});
|
29
|
+
}
|
30
|
+
};
|
31
|
+
// 数字类型处理函数
|
32
|
+
var handleNumberTypeDiff = function handleNumberTypeDiff(params) {
|
33
|
+
var originalValue = params.originalValue,
|
34
|
+
value = params.value,
|
35
|
+
type = params.type;
|
36
|
+
var isEmptyVal = isEmpty(value);
|
37
|
+
var isEmptyOrg = isEmpty(originalValue);
|
38
|
+
// 都为空视为相等
|
39
|
+
if (isEmptyOrg && isEmptyVal) return 'same';
|
40
|
+
// 如果原始值为空 且当前有值的话 视为新增
|
41
|
+
if (isEmptyOrg && !isEmptyVal) return 'add';
|
42
|
+
// 根据类型选择对应的比较策略
|
43
|
+
var compareStrategy;
|
44
|
+
if (type === 'InputNumber') {
|
45
|
+
compareStrategy = inputNumberStrategy;
|
46
|
+
} else if (type === 'ProNumberRange') {
|
47
|
+
compareStrategy = proNumberRangeStrategy;
|
48
|
+
} else {
|
49
|
+
return 'changed'; // 未知类型视为已改变
|
50
|
+
}
|
51
|
+
return compareStrategy.compare(value, originalValue) ? 'same' : 'changed';
|
52
|
+
};
|
5
53
|
// 过滤对象中undefined字段
|
6
54
|
// 防止{a: '1'} {a: '1', b: undefined | null}被认为不相等
|
7
55
|
var filterObject = function filterObject(data) {
|
@@ -32,7 +80,8 @@ var filterObject = function filterObject(data) {
|
|
32
80
|
export var diffOriginal = function diffOriginal(params) {
|
33
81
|
var originalValue = params.originalValue,
|
34
82
|
value = params.value,
|
35
|
-
onDiff = params.onDiff
|
83
|
+
onDiff = params.onDiff,
|
84
|
+
type = params.type;
|
36
85
|
// 支持传入自定义比较事件
|
37
86
|
if (_isFunction(onDiff)) {
|
38
87
|
var diffRes = onDiff(originalValue, value);
|
@@ -44,6 +93,10 @@ export var diffOriginal = function diffOriginal(params) {
|
|
44
93
|
return diffRes;
|
45
94
|
}
|
46
95
|
}
|
96
|
+
if (['InputNumber', 'ProNumberRange'].includes(type)) {
|
97
|
+
return handleNumberTypeDiff(params);
|
98
|
+
}
|
99
|
+
// 其他类型使用原有逻辑
|
47
100
|
var _value = filterObject(value);
|
48
101
|
var _originalValue = filterObject(originalValue);
|
49
102
|
var isEmptyVal = isEmpty(_value);
|
@@ -48,9 +48,66 @@ var findSelectNameValues = function findSelectNameValues(_ref) {
|
|
48
48
|
}
|
49
49
|
});
|
50
50
|
var diffList = _difference(selectValues, mode === 'multiple' ? value : [value]);
|
51
|
-
|
51
|
+
var result = dataSource.filter(function (item) {
|
52
52
|
return !diffList.includes(labelInValue ? item : item[fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.value] || (item === null || item === void 0 ? void 0 : item.value));
|
53
53
|
});
|
54
|
+
var isSingle = list === null || list === void 0 ? void 0 : list.find(function (item) {
|
55
|
+
return item === null || item === void 0 ? void 0 : item._isEditing;
|
56
|
+
});
|
57
|
+
// 修复单行编辑模式下,选择器无法过滤的问题
|
58
|
+
if (mode === 'multiple' && isSingle) {
|
59
|
+
// 找到当前编辑行
|
60
|
+
var editingRow = list.find(function (item) {
|
61
|
+
return item === null || item === void 0 ? void 0 : item._isEditing;
|
62
|
+
});
|
63
|
+
// 收集其他行的已选择值
|
64
|
+
var otherRowsValues = [];
|
65
|
+
list.forEach(function (item) {
|
66
|
+
if (item !== editingRow) {
|
67
|
+
// 排除当前编辑行
|
68
|
+
var _result = item;
|
69
|
+
var _iterator2 = _createForOfIteratorHelper(selectName),
|
70
|
+
_step2;
|
71
|
+
try {
|
72
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
73
|
+
var key = _step2.value;
|
74
|
+
_result = _result[key];
|
75
|
+
}
|
76
|
+
} catch (err) {
|
77
|
+
_iterator2.e(err);
|
78
|
+
} finally {
|
79
|
+
_iterator2.f();
|
80
|
+
}
|
81
|
+
if (_result) {
|
82
|
+
otherRowsValues.push.apply(otherRowsValues, _toConsumableArray(Array.isArray(_result) ? _result : [_result]));
|
83
|
+
}
|
84
|
+
}
|
85
|
+
});
|
86
|
+
// 获取当前编辑行的已选择值
|
87
|
+
var currentRowValues = [];
|
88
|
+
if (editingRow) {
|
89
|
+
var _result2 = editingRow;
|
90
|
+
var _iterator3 = _createForOfIteratorHelper(selectName),
|
91
|
+
_step3;
|
92
|
+
try {
|
93
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
94
|
+
var key = _step3.value;
|
95
|
+
_result2 = _result2[key];
|
96
|
+
}
|
97
|
+
} catch (err) {
|
98
|
+
_iterator3.e(err);
|
99
|
+
} finally {
|
100
|
+
_iterator3.f();
|
101
|
+
}
|
102
|
+
currentRowValues = Array.isArray(_result2) ? _result2 : _result2 ? [_result2] : [];
|
103
|
+
}
|
104
|
+
// 从dataSource中过滤掉其他行的值,但保留当前行的值
|
105
|
+
var _diffList = _difference(otherRowsValues, currentRowValues);
|
106
|
+
return dataSource.filter(function (item) {
|
107
|
+
return !_diffList.includes(labelInValue ? item : item[fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.value] || (item === null || item === void 0 ? void 0 : item.value));
|
108
|
+
});
|
109
|
+
}
|
110
|
+
return result;
|
54
111
|
};
|
55
112
|
/**
|
56
113
|
* 返回当前组件可以显示的数据源
|
@@ -141,7 +141,8 @@ var ListChangedWrapper = function ListChangedWrapper(props) {
|
|
141
141
|
onDiff: onDiff,
|
142
142
|
originRecord: originalDTO === null || originalDTO === void 0 ? void 0 : originalDTO.originRecord,
|
143
143
|
record: originalDTO === null || originalDTO === void 0 ? void 0 : originalDTO.record,
|
144
|
-
index: index
|
144
|
+
index: index,
|
145
|
+
type: props.type
|
145
146
|
});
|
146
147
|
}, [props[valuePropName], originalValue]);
|
147
148
|
var isAdd = diffType === 'add';
|
@@ -162,10 +163,18 @@ var ListChangedWrapper = function ListChangedWrapper(props) {
|
|
162
163
|
}
|
163
164
|
_children = viewRender;
|
164
165
|
}
|
166
|
+
// 对于ProNumberRange类型,需要将字符串数组转换为数字数组
|
167
|
+
var processedValue = orgValue;
|
168
|
+
if (type === 'ProNumberRange' && Array.isArray(orgValue)) {
|
169
|
+
processedValue = orgValue.map(function (item) {
|
170
|
+
var num = Number(item);
|
171
|
+
return Number.isNaN(num) ? item : num;
|
172
|
+
});
|
173
|
+
}
|
165
174
|
return /*#__PURE__*/_react.default.isValidElement(children) ? /*#__PURE__*/_react.default.cloneElement(children, (0, _objectSpread3.default)((0, _objectSpread3.default)({}, children), {}, (0, _defineProperty2.default)((0, _defineProperty2.default)({
|
166
175
|
// @ts-ignore
|
167
176
|
isView: true
|
168
|
-
}, valuePropName,
|
177
|
+
}, valuePropName, processedValue), "checked", type === 'Switch' ? originalValue : undefined))) : undefined;
|
169
178
|
}, [originalValue, children]);
|
170
179
|
if (!isWatch || noChange) {
|
171
180
|
return /*#__PURE__*/_react.default.isValidElement(children) && /*#__PURE__*/_react.default.cloneElement(children, (0, _objectSpread3.default)((0, _objectSpread3.default)({}, children.props), rest));
|
@@ -188,6 +197,7 @@ var ListChangedWrapper = function ListChangedWrapper(props) {
|
|
188
197
|
'pro-form-item-add': isAdd
|
189
198
|
});
|
190
199
|
var open = tipOpenCalc();
|
200
|
+
// debugger;
|
191
201
|
return (0, _jsxRuntime.jsx)(_tooltip.default, {
|
192
202
|
open: open,
|
193
203
|
getPopupContainer: function getPopupContainer(trigger) {
|
@@ -7,7 +7,7 @@ import type { NamePath } from 'antd/es/form/interface';
|
|
7
7
|
import type { ColumnType, TableProps } from 'antd/es/table';
|
8
8
|
import type { FormInstance, FormItemProps } from 'antd/es/form';
|
9
9
|
import type { ProFormValueType, FunctionArgs, ProRule } from '../ProForm/components/render/propsType';
|
10
|
-
import type { DiffOriginalParams } from '
|
10
|
+
import type { DiffOriginalParams } from './utils/diffOriginal';
|
11
11
|
/**
|
12
12
|
* 操作类型定义
|
13
13
|
*/
|
@@ -10,6 +10,54 @@ var _isFunction2 = _interopRequireDefault(require("lodash/isFunction"));
|
|
10
10
|
var _isEqual2 = _interopRequireDefault(require("lodash/isEqual"));
|
11
11
|
var _utils = require("@zat-design/utils");
|
12
12
|
var isEmpty = _utils.validate.isEmpty;
|
13
|
+
// 数字类型标准化函数
|
14
|
+
var normalizeNumberValue = function normalizeNumberValue(value) {
|
15
|
+
if (value === null || value === undefined || value === '') return null;
|
16
|
+
var num = Number(value);
|
17
|
+
return Number.isNaN(num) ? null : num;
|
18
|
+
};
|
19
|
+
// InputNumber 比较策略
|
20
|
+
var inputNumberStrategy = {
|
21
|
+
compare: function compare(val1, val2) {
|
22
|
+
var num1 = normalizeNumberValue(val1);
|
23
|
+
var num2 = normalizeNumberValue(val2);
|
24
|
+
return num1 === num2;
|
25
|
+
}
|
26
|
+
};
|
27
|
+
// ProNumberRange 比较策略
|
28
|
+
var proNumberRangeStrategy = {
|
29
|
+
compare: function compare(val1, val2) {
|
30
|
+
if (!Array.isArray(val1) || !Array.isArray(val2)) return false;
|
31
|
+
if (val1.length !== val2.length) return false;
|
32
|
+
return val1.every(function (item, index) {
|
33
|
+
var num1 = normalizeNumberValue(item);
|
34
|
+
var num2 = normalizeNumberValue(val2[index]);
|
35
|
+
return num1 === num2;
|
36
|
+
});
|
37
|
+
}
|
38
|
+
};
|
39
|
+
// 数字类型处理函数
|
40
|
+
var handleNumberTypeDiff = function handleNumberTypeDiff(params) {
|
41
|
+
var originalValue = params.originalValue,
|
42
|
+
value = params.value,
|
43
|
+
type = params.type;
|
44
|
+
var isEmptyVal = isEmpty(value);
|
45
|
+
var isEmptyOrg = isEmpty(originalValue);
|
46
|
+
// 都为空视为相等
|
47
|
+
if (isEmptyOrg && isEmptyVal) return 'same';
|
48
|
+
// 如果原始值为空 且当前有值的话 视为新增
|
49
|
+
if (isEmptyOrg && !isEmptyVal) return 'add';
|
50
|
+
// 根据类型选择对应的比较策略
|
51
|
+
var compareStrategy;
|
52
|
+
if (type === 'InputNumber') {
|
53
|
+
compareStrategy = inputNumberStrategy;
|
54
|
+
} else if (type === 'ProNumberRange') {
|
55
|
+
compareStrategy = proNumberRangeStrategy;
|
56
|
+
} else {
|
57
|
+
return 'changed'; // 未知类型视为已改变
|
58
|
+
}
|
59
|
+
return compareStrategy.compare(value, originalValue) ? 'same' : 'changed';
|
60
|
+
};
|
13
61
|
// 过滤对象中undefined字段
|
14
62
|
// 防止{a: '1'} {a: '1', b: undefined | null}被认为不相等
|
15
63
|
var filterObject = function filterObject(data) {
|
@@ -43,7 +91,8 @@ var diffOriginal = exports.diffOriginal = function diffOriginal(params) {
|
|
43
91
|
onDiff = params.onDiff,
|
44
92
|
originRecord = params.originRecord,
|
45
93
|
record = params.record,
|
46
|
-
index = params.index
|
94
|
+
index = params.index,
|
95
|
+
type = params.type;
|
47
96
|
// 支持传入自定义比较事件
|
48
97
|
if ((0, _isFunction2.default)(onDiff)) {
|
49
98
|
var diffRes = onDiff({
|
@@ -61,6 +110,11 @@ var diffOriginal = exports.diffOriginal = function diffOriginal(params) {
|
|
61
110
|
return diffRes;
|
62
111
|
}
|
63
112
|
}
|
113
|
+
// 数字类型特殊处理
|
114
|
+
if (['InputNumber', 'ProNumberRange'].includes(type)) {
|
115
|
+
return handleNumberTypeDiff(params);
|
116
|
+
}
|
117
|
+
// 其他类型使用原有逻辑
|
64
118
|
var _value = filterObject(value);
|
65
119
|
var _originalValue = filterObject(originalValue);
|
66
120
|
var isEmptyVal = isEmpty(_value);
|
@@ -27,6 +27,10 @@ function useEnum(codes, value, compose) {
|
|
27
27
|
fieldNames = _ref3$fieldNames === void 0 ? {} : _ref3$fieldNames,
|
28
28
|
_ref3$clear = _ref3.clear,
|
29
29
|
clear = _ref3$clear === void 0 ? true : _ref3$clear;
|
30
|
+
// 存在子应用自管理枚举时,需要根据其指定的cacheKey进行缓存
|
31
|
+
if (cacheKey !== 'zat-design-pro-component-cacheKey') {
|
32
|
+
baseEnumStorage = null;
|
33
|
+
}
|
30
34
|
var catchData = (0, _utils.getEnumData)(storage, cacheKey, baseEnumStorage);
|
31
35
|
// 默认枚举缓存数据
|
32
36
|
baseEnumStorage = catchData;
|
@@ -66,8 +66,8 @@ var ChangedWrapper = function ChangedWrapper(props) {
|
|
66
66
|
value: _value,
|
67
67
|
originalValue: _originalValue,
|
68
68
|
form: form,
|
69
|
-
onDiff: onDiff
|
70
|
-
|
69
|
+
onDiff: onDiff,
|
70
|
+
type: props.type
|
71
71
|
});
|
72
72
|
}, [isWatch, noChange, props[valuePropName], originalValue, (0, _typeof2.default)(onDiff)]);
|
73
73
|
var isAdd = diffType === 'add';
|
@@ -9,6 +9,54 @@ var _isObject2 = _interopRequireDefault(require("lodash/isObject"));
|
|
9
9
|
var _isFunction2 = _interopRequireDefault(require("lodash/isFunction"));
|
10
10
|
var _isEqual2 = _interopRequireDefault(require("lodash/isEqual"));
|
11
11
|
var _utils = require("../../utils");
|
12
|
+
// 数字类型标准化函数
|
13
|
+
var normalizeNumberValue = function normalizeNumberValue(value) {
|
14
|
+
if (value === null || value === undefined || value === '') return null;
|
15
|
+
var num = Number(value);
|
16
|
+
return Number.isNaN(num) ? null : num;
|
17
|
+
};
|
18
|
+
// InputNumber 比较策略
|
19
|
+
var inputNumberStrategy = {
|
20
|
+
compare: function compare(val1, val2) {
|
21
|
+
var num1 = normalizeNumberValue(val1);
|
22
|
+
var num2 = normalizeNumberValue(val2);
|
23
|
+
return num1 === num2;
|
24
|
+
}
|
25
|
+
};
|
26
|
+
// ProNumberRange 比较策略
|
27
|
+
var proNumberRangeStrategy = {
|
28
|
+
compare: function compare(val1, val2) {
|
29
|
+
if (!Array.isArray(val1) || !Array.isArray(val2)) return false;
|
30
|
+
if (val1.length !== val2.length) return false;
|
31
|
+
return val1.every(function (item, index) {
|
32
|
+
var num1 = normalizeNumberValue(item);
|
33
|
+
var num2 = normalizeNumberValue(val2[index]);
|
34
|
+
return num1 === num2;
|
35
|
+
});
|
36
|
+
}
|
37
|
+
};
|
38
|
+
// 数字类型处理函数
|
39
|
+
var handleNumberTypeDiff = function handleNumberTypeDiff(params) {
|
40
|
+
var originalValue = params.originalValue,
|
41
|
+
value = params.value,
|
42
|
+
type = params.type;
|
43
|
+
var isEmptyVal = (0, _utils.isEmpty)(value);
|
44
|
+
var isEmptyOrg = (0, _utils.isEmpty)(originalValue);
|
45
|
+
// 都为空视为相等
|
46
|
+
if (isEmptyOrg && isEmptyVal) return 'same';
|
47
|
+
// 如果原始值为空 且当前有值的话 视为新增
|
48
|
+
if (isEmptyOrg && !isEmptyVal) return 'add';
|
49
|
+
// 根据类型选择对应的比较策略
|
50
|
+
var compareStrategy;
|
51
|
+
if (type === 'InputNumber') {
|
52
|
+
compareStrategy = inputNumberStrategy;
|
53
|
+
} else if (type === 'ProNumberRange') {
|
54
|
+
compareStrategy = proNumberRangeStrategy;
|
55
|
+
} else {
|
56
|
+
return 'changed'; // 未知类型视为已改变
|
57
|
+
}
|
58
|
+
return compareStrategy.compare(value, originalValue) ? 'same' : 'changed';
|
59
|
+
};
|
12
60
|
// 过滤对象中undefined字段
|
13
61
|
// 防止{a: '1'} {a: '1', b: undefined | null}被认为不相等
|
14
62
|
var filterObject = function filterObject(data) {
|
@@ -39,7 +87,8 @@ var filterObject = function filterObject(data) {
|
|
39
87
|
var diffOriginal = exports.diffOriginal = function diffOriginal(params) {
|
40
88
|
var originalValue = params.originalValue,
|
41
89
|
value = params.value,
|
42
|
-
onDiff = params.onDiff
|
90
|
+
onDiff = params.onDiff,
|
91
|
+
type = params.type;
|
43
92
|
// 支持传入自定义比较事件
|
44
93
|
if ((0, _isFunction2.default)(onDiff)) {
|
45
94
|
var diffRes = onDiff(originalValue, value);
|
@@ -51,6 +100,10 @@ var diffOriginal = exports.diffOriginal = function diffOriginal(params) {
|
|
51
100
|
return diffRes;
|
52
101
|
}
|
53
102
|
}
|
103
|
+
if (['InputNumber', 'ProNumberRange'].includes(type)) {
|
104
|
+
return handleNumberTypeDiff(params);
|
105
|
+
}
|
106
|
+
// 其他类型使用原有逻辑
|
54
107
|
var _value = filterObject(value);
|
55
108
|
var _originalValue = filterObject(originalValue);
|
56
109
|
var isEmptyVal = (0, _utils.isEmpty)(_value);
|
@@ -55,9 +55,66 @@ var findSelectNameValues = function findSelectNameValues(_ref) {
|
|
55
55
|
}
|
56
56
|
});
|
57
57
|
var diffList = (0, _difference2.default)(selectValues, mode === 'multiple' ? value : [value]);
|
58
|
-
|
58
|
+
var result = dataSource.filter(function (item) {
|
59
59
|
return !diffList.includes(labelInValue ? item : item[fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.value] || (item === null || item === void 0 ? void 0 : item.value));
|
60
60
|
});
|
61
|
+
var isSingle = list === null || list === void 0 ? void 0 : list.find(function (item) {
|
62
|
+
return item === null || item === void 0 ? void 0 : item._isEditing;
|
63
|
+
});
|
64
|
+
// 修复单行编辑模式下,选择器无法过滤的问题
|
65
|
+
if (mode === 'multiple' && isSingle) {
|
66
|
+
// 找到当前编辑行
|
67
|
+
var editingRow = list.find(function (item) {
|
68
|
+
return item === null || item === void 0 ? void 0 : item._isEditing;
|
69
|
+
});
|
70
|
+
// 收集其他行的已选择值
|
71
|
+
var otherRowsValues = [];
|
72
|
+
list.forEach(function (item) {
|
73
|
+
if (item !== editingRow) {
|
74
|
+
// 排除当前编辑行
|
75
|
+
var _result = item;
|
76
|
+
var _iterator2 = (0, _createForOfIteratorHelper2.default)(selectName),
|
77
|
+
_step2;
|
78
|
+
try {
|
79
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
80
|
+
var key = _step2.value;
|
81
|
+
_result = _result[key];
|
82
|
+
}
|
83
|
+
} catch (err) {
|
84
|
+
_iterator2.e(err);
|
85
|
+
} finally {
|
86
|
+
_iterator2.f();
|
87
|
+
}
|
88
|
+
if (_result) {
|
89
|
+
otherRowsValues.push.apply(otherRowsValues, (0, _toConsumableArray2.default)(Array.isArray(_result) ? _result : [_result]));
|
90
|
+
}
|
91
|
+
}
|
92
|
+
});
|
93
|
+
// 获取当前编辑行的已选择值
|
94
|
+
var currentRowValues = [];
|
95
|
+
if (editingRow) {
|
96
|
+
var _result2 = editingRow;
|
97
|
+
var _iterator3 = (0, _createForOfIteratorHelper2.default)(selectName),
|
98
|
+
_step3;
|
99
|
+
try {
|
100
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
101
|
+
var key = _step3.value;
|
102
|
+
_result2 = _result2[key];
|
103
|
+
}
|
104
|
+
} catch (err) {
|
105
|
+
_iterator3.e(err);
|
106
|
+
} finally {
|
107
|
+
_iterator3.f();
|
108
|
+
}
|
109
|
+
currentRowValues = Array.isArray(_result2) ? _result2 : _result2 ? [_result2] : [];
|
110
|
+
}
|
111
|
+
// 从dataSource中过滤掉其他行的值,但保留当前行的值
|
112
|
+
var _diffList = (0, _difference2.default)(otherRowsValues, currentRowValues);
|
113
|
+
return dataSource.filter(function (item) {
|
114
|
+
return !_diffList.includes(labelInValue ? item : item[fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.value] || (item === null || item === void 0 ? void 0 : item.value));
|
115
|
+
});
|
116
|
+
}
|
117
|
+
return result;
|
61
118
|
};
|
62
119
|
/**
|
63
120
|
* 返回当前组件可以显示的数据源
|