diff --git a/package.json b/package.json index 74c4601b..3dc85353 100644 --- a/package.json +++ b/package.json @@ -17,9 +17,9 @@ }, "scripts": { "bootstrap": "pnpm install", - "build": "cross-env NODE_ENV=production vite build && esno ./build/script/postBuild.ts", + "build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 NODE_ENV=production vite build && esno ./build/script/postBuild.ts", "build:no-cache": "pnpm clean:cache && npm run build", - "build:test": "cross-env vite build --mode test && esno ./build/script/postBuild.ts", + "build:test": "cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build --mode test && esno ./build/script/postBuild.ts", "clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite", "clean:lib": "rimraf node_modules", "commit": "czg", diff --git a/src/components/Form/src/hooks/useFormEvents.ts b/src/components/Form/src/hooks/useFormEvents.ts index deec7cbf..5981693e 100644 --- a/src/components/Form/src/hooks/useFormEvents.ts +++ b/src/components/Form/src/hooks/useFormEvents.ts @@ -14,7 +14,7 @@ import { import { deepMerge } from '/@/utils'; import { dateItemType, handleInputNumberValue, defaultValueComponents } from '../helper'; import { dateUtil } from '/@/utils/dateUtil'; -import { cloneDeep, set, uniqBy } from 'lodash-es'; +import { cloneDeep, set, uniqBy, get } from 'lodash-es'; import { error } from '/@/utils/log'; interface UseFormActionContext { @@ -112,9 +112,8 @@ export function useFormEvents({ const validKeys: string[] = []; fields.forEach((key) => { const schema = unref(getSchema).find((item) => item.field === key); - let value = values[key]; - - const hasKey = Reflect.has(values, key); + let value = get(values, key); + const hasKey = !!get(values, key); value = handleInputNumberValue(schema?.component, value); const { componentProps } = schema || {}; diff --git a/src/utils/index.ts b/src/utils/index.ts index 0ef6b074..945ed086 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -3,7 +3,7 @@ import type { App, Component } from 'vue'; import { unref } from 'vue'; import { isArray, isObject } from '/@/utils/is'; -import { cloneDeep, mergeWith } from 'lodash-es'; +import { cloneDeep, isEqual, mergeWith, unionWith } from 'lodash-es'; export const noop = () => {}; @@ -48,7 +48,8 @@ export function deepMerge { if (isObject(objValue) && isObject(srcValue)) { return mergeWith(cloneDeep(objValue), srcValue, (prevValue, nextValue) => { - return isArray(prevValue) ? prevValue.concat(nextValue) : undefined; + // 如果是数组,合并数组(去重) If it is an array, merge the array (remove duplicates) + return isArray(prevValue) ? unionWith(prevValue, nextValue, isEqual) : undefined; }); } }); diff --git a/src/utils/propTypes.ts b/src/utils/propTypes.ts index a5b0a47a..16cf9cd4 100644 --- a/src/utils/propTypes.ts +++ b/src/utils/propTypes.ts @@ -1,5 +1,5 @@ import { CSSProperties, VNodeChild } from 'vue'; -import { createTypes, VueTypeValidableDef, VueTypesInterface } from 'vue-types'; +import { createTypes, VueTypeValidableDef, VueTypesInterface, toValidableType } from 'vue-types'; export type VueNode = VNodeChild | JSX.Element; @@ -8,8 +8,7 @@ type PropTypes = VueTypesInterface & { readonly VNodeChild: VueTypeValidableDef; // readonly trueBool: VueTypeValidableDef; }; - -const propTypes = createTypes({ +const newPropTypes = createTypes({ func: undefined, bool: undefined, string: undefined, @@ -18,17 +17,19 @@ const propTypes = createTypes({ integer: undefined, }) as PropTypes; -propTypes.extend([ - { - name: 'style', - getter: true, - type: [String, Object], - default: undefined, - }, - { - name: 'VNodeChild', - getter: true, - type: undefined, - }, -]); +// 从 vue-types v5.0 开始,extend()方法已经废弃,当前已改为官方推荐的ES6+方法 https://dwightjack.github.io/vue-types/advanced/extending-vue-types.html#the-extend-method +class propTypes extends newPropTypes { + // a native-like validator that supports the `.validable` method + static get style() { + return toValidableType('style', { + type: [String, Object], + }); + } + + static get VNodeChild() { + return toValidableType('VNodeChild', { + type: undefined, + }); + } +} export { propTypes };