Skip to content

Commit b75a8e6

Browse files
authored
fix: form setValues not support dayjs and Date value (#5064)
* fix: setFormValues not support `dayjs object` value * fix: setFormValues not support `Date` value * chore: remove console log
1 parent 68ab73b commit b75a8e6

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

packages/@core/base/shared/src/utils/date.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,11 @@ export function formatDate(time: number | string, format = 'YYYY-MM-DD') {
1616
export function formatDateTime(time: number | string) {
1717
return formatDate(time, 'YYYY-MM-DD HH:mm:ss');
1818
}
19+
20+
export function isDate(value: any): value is Date {
21+
return value instanceof Date;
22+
}
23+
24+
export function isDayjsObject(value: any): value is dayjs.Dayjs {
25+
return dayjs.isDayjs(value);
26+
}

packages/@core/ui-kit/form-ui/src/form-api.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import { Store } from '@vben-core/shared/store';
1414
import {
1515
bindMethods,
1616
createMerge,
17+
isDate,
18+
isDayjsObject,
1719
isFunction,
1820
isObject,
1921
mergeWithArrayOverride,
@@ -252,10 +254,19 @@ export class FormApi {
252254
return;
253255
}
254256

257+
/**
258+
* 合并算法有待改进,目前的算法不支持object类型的值。
259+
* antd的日期时间相关组件的值类型为dayjs对象
260+
* element-plus的日期时间相关组件的值类型可能为Date对象
261+
* 以上两种类型需要排除深度合并
262+
*/
255263
const fieldMergeFn = createMerge((obj, key, value) => {
256264
if (key in obj) {
257265
obj[key] =
258-
!Array.isArray(obj[key]) && isObject(obj[key])
266+
!Array.isArray(obj[key]) &&
267+
isObject(obj[key]) &&
268+
!isDayjsObject(obj[key]) &&
269+
!isDate(obj[key])
259270
? fieldMergeFn(obj[key], value)
260271
: value;
261272
}

0 commit comments

Comments
 (0)