diff --git a/src/components/Form/src/hooks/useFormEvents.ts b/src/components/Form/src/hooks/useFormEvents.ts index 3dcf37e84..b27d4e05b 100644 --- a/src/components/Form/src/hooks/useFormEvents.ts +++ b/src/components/Form/src/hooks/useFormEvents.ts @@ -340,7 +340,8 @@ export function useFormEvents({ } async function validateFields(nameList?: NamePath[] | undefined) { - return unref(formElRef)?.validateFields(nameList); + const values = unref(formElRef)?.validateFields(nameList); + return handleFormValues(values); } async function validate(nameList?: NamePath[] | false | undefined) { @@ -350,7 +351,8 @@ export function useFormEvents({ } else { _nameList = nameList === Array.isArray(nameList) ? nameList : undefined; } - return await unref(formElRef)?.validate(_nameList); + const values = await unref(formElRef)?.validate(_nameList); + return handleFormValues(values); } async function clearValidate(name?: string | string[]) { @@ -375,8 +377,7 @@ export function useFormEvents({ if (!formEl) return; try { const values = await validate(); - const res = handleFormValues(values); - emit('submit', res); + emit('submit', values); } catch (error: any) { if (error?.outOfDate === false && error?.errorFields) { return; diff --git a/src/components/Form/src/hooks/useFormValues.ts b/src/components/Form/src/hooks/useFormValues.ts index 4317287ee..e37f43425 100644 --- a/src/components/Form/src/hooks/useFormValues.ts +++ b/src/components/Form/src/hooks/useFormValues.ts @@ -1,9 +1,9 @@ -import { isArray, isFunction, isObject, isString, isNullOrUnDef } from '/@/utils/is'; +import { isArray, isFunction, isNotEmpty, isObject, isString, isNullOrUnDef } from '/@/utils/is'; import { dateUtil } from '/@/utils/dateUtil'; import { unref } from 'vue'; import type { Ref, ComputedRef } from 'vue'; import type { FormProps, FormSchema } from '../types/form'; -import { cloneDeep, set } from 'lodash-es'; +import { cloneDeep, get, set, unset } from 'lodash-es'; interface UseFormValuesContext { defaultValueRef: Ref; @@ -106,18 +106,22 @@ export function useFormValues({ continue; } // If the value to be converted is empty, remove the field - if (!values[field]) { - Reflect.deleteProperty(values, field); + if (!get(values, field)) { + unset(values, field); continue; } - const [startTime, endTime]: string[] = values[field]; + const [startTime, endTime]: string[] = get(values, field); const [startTimeFormat, endTimeFormat] = Array.isArray(format) ? format : [format, format]; - values[startTimeKey] = formatTime(startTime, startTimeFormat); - values[endTimeKey] = formatTime(endTime, endTimeFormat); - Reflect.deleteProperty(values, field); + if (isNotEmpty(startTime)) { + set(values, startTimeKey, formatTime(startTime, startTimeFormat)); + } + if (isNotEmpty(endTime)) { + set(values, endTimeKey, formatTime(endTime, endTimeFormat)); + } + unset(values, field); } return values; diff --git a/src/utils/is.ts b/src/utils/is.ts index 3a5c4a6f4..b9cf4b0ff 100644 --- a/src/utils/is.ts +++ b/src/utils/is.ts @@ -1,3 +1,4 @@ +import { isNil } from 'lodash-es'; const toString = Object.prototype.toString; export function is(val: unknown, type: string) { @@ -16,7 +17,15 @@ export function isObject(val: any): val is Record { return val !== null && is(val, 'Object'); } +export function isNotEmpty(val: any): boolean { + return !isNil(val) && !isEmpty(val); +} + export function isEmpty(val: T): val is T { + if (isNil(val)) { + return true; + } + if (isArray(val) || isString(val)) { return val.length === 0; } @@ -36,6 +45,8 @@ export function isDate(val: unknown): val is Date { return is(val, 'Date'); } + + export function isNull(val: unknown): val is null { return val === null; }