瀏覽代碼

Merge branch 'main' of https://github.com/anncwb/vue-vben-admin

vben 2 年之前
父節點
當前提交
c2590cbfb5
共有 4 個文件被更改,包括 25 次插入24 次删除
  1. 2 2
      package.json
  2. 3 4
      src/components/Form/src/hooks/useFormEvents.ts
  3. 3 2
      src/utils/index.ts
  4. 17 16
      src/utils/propTypes.ts

+ 2 - 2
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",

+ 3 - 4
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 || {};

+ 3 - 2
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<T extends object | null | undefined, U extends object
   return mergeWith(cloneDeep(target), source, (objValue, srcValue) => {
     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;
       });
     }
   });

+ 17 - 16
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<VueNode>;
   // readonly trueBool: VueTypeValidableDef<boolean>;
 };
-
-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 };