From a3b9ff04f9669a80999228ce4362fa78645146ce Mon Sep 17 00:00:00 2001 From: 1455668754 <88491446+1455668754@users.noreply.github.com> Date: Fri, 6 Oct 2023 10:02:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=97=A5=E6=9C=9F=E5=8C=BA?= =?UTF-8?q?=E9=97=B4=E6=8B=86=E8=A7=A3=E6=97=B6=E6=95=B0=E6=8D=AE=E4=B8=BA?= =?UTF-8?q?null=E6=97=B6=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98/=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3validate|validateFields=E6=97=B6=EF=BC=8C=E6=9C=AA?= =?UTF-8?q?=E5=B0=86=E5=AF=B9=E8=B1=A1=E5=9E=8B=E6=95=B0=E6=8D=AE=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E8=BD=AC=E6=8D=A2=20(#3096)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 修正日期区间拆解时数据为null时异常问题 * fix: 修正validate|validateFields时,未将对象型数据进行转换 --- .../Form/src/hooks/useFormEvents.ts | 9 +++++---- .../Form/src/hooks/useFormValues.ts | 20 +++++++++++-------- src/utils/is.ts | 11 ++++++++++ 3 files changed, 28 insertions(+), 12 deletions(-) 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; }