From 12f216c0e7395caca21112064f0734c8ded424b3 Mon Sep 17 00:00:00 2001
From: leizhiyou <34797441+leizhiyou@users.noreply.github.com>
Date: Sun, 1 Dec 2024 21:48:54 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20form=20=E8=A1=A8=E5=8D=95=E4=B8=8D?=
 =?UTF-8?q?=E6=94=AF=E6=8C=81field.xxx.xx=E6=A0=BC=E5=BC=8F=E7=9A=84defaul?=
 =?UTF-8?q?tValue=E9=85=8D=E7=BD=AE=20(#4965)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* fix: form 表单不支持field.xxx.xx格式的defaultValue配置

* chore: 修复代码规范问题
---
 packages/@core/base/shared/package.json       |  2 ++
 packages/@core/base/shared/src/utils/index.ts |  1 +
 .../ui-kit/form-ui/src/use-form-context.ts    |  6 ++---
 playground/src/views/examples/form/basic.vue  |  6 +++++
 pnpm-lock.yaml                                | 24 +++++++++++++++++++
 pnpm-workspace.yaml                           |  2 ++
 6 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/packages/@core/base/shared/package.json b/packages/@core/base/shared/package.json
index 15ba9010..3c20f70f 100644
--- a/packages/@core/base/shared/package.json
+++ b/packages/@core/base/shared/package.json
@@ -86,12 +86,14 @@
     "dayjs": "catalog:",
     "defu": "catalog:",
     "lodash.clonedeep": "catalog:",
+    "lodash.set": "catalog:",
     "nprogress": "catalog:",
     "tailwind-merge": "catalog:",
     "theme-colors": "catalog:"
   },
   "devDependencies": {
     "@types/lodash.clonedeep": "catalog:",
+    "@types/lodash.set": "catalog:",
     "@types/nprogress": "catalog:"
   }
 }
diff --git a/packages/@core/base/shared/src/utils/index.ts b/packages/@core/base/shared/src/utils/index.ts
index 2f56c601..789895f4 100644
--- a/packages/@core/base/shared/src/utils/index.ts
+++ b/packages/@core/base/shared/src/utils/index.ts
@@ -15,3 +15,4 @@ export * from './update-css-variables';
 export * from './util';
 export * from './window';
 export { default as cloneDeep } from 'lodash.clonedeep';
+export { default as set } from 'lodash.set';
diff --git a/packages/@core/ui-kit/form-ui/src/use-form-context.ts b/packages/@core/ui-kit/form-ui/src/use-form-context.ts
index 05838fc3..7bce3f2e 100644
--- a/packages/@core/ui-kit/form-ui/src/use-form-context.ts
+++ b/packages/@core/ui-kit/form-ui/src/use-form-context.ts
@@ -3,7 +3,7 @@ import type { FormActions, VbenFormProps } from './types';
 import { computed, type ComputedRef, unref, useSlots } from 'vue';
 
 import { createContext } from '@vben-core/shadcn-ui';
-import { isString } from '@vben-core/shared/utils';
+import { isString, set } from '@vben-core/shared/utils';
 
 import { useForm } from 'vee-validate';
 import { object, type ZodRawShape } from 'zod';
@@ -41,9 +41,9 @@ export function useFormInitial(
     const zodObject: ZodRawShape = {};
     (unref(props).schema || []).forEach((item) => {
       if (Reflect.has(item, 'defaultValue')) {
-        initialValues[item.fieldName] = item.defaultValue;
+        set(initialValues, item.fieldName, item.defaultValue);
       } else if (item.rules && !isString(item.rules)) {
-        zodObject[item.fieldName] = item.rules;
+        set(zodObject, item.fieldName, item.defaultValue);
       }
     });
 
diff --git a/playground/src/views/examples/form/basic.vue b/playground/src/views/examples/form/basic.vue
index 5124a3cf..4f231b73 100644
--- a/playground/src/views/examples/form/basic.vue
+++ b/playground/src/views/examples/form/basic.vue
@@ -291,6 +291,12 @@ const [CustomLayoutForm] = useVbenForm({
       formItemClass: 'col-start-1',
       label: '字符串',
     },
+    {
+      component: 'Input',
+      defaultValue: 'field4.path',
+      fieldName: 'field4.path',
+      label: 'field4.path',
+    },
   ],
   // 一共三列
   wrapperClass: 'grid-cols-3',
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 28c4ad40..ccaac173 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -90,6 +90,9 @@ catalogs:
     '@types/lodash.clonedeep':
       specifier: ^4.5.9
       version: 4.5.9
+    '@types/lodash.set':
+      specifier: ^4.3.9
+      version: 4.3.9
     '@types/node':
       specifier: ^22.10.0
       version: 22.10.0
@@ -291,6 +294,9 @@ catalogs:
     lodash.clonedeep:
       specifier: ^4.5.0
       version: 4.5.0
+    lodash.set:
+      specifier: ^4.3.2
+      version: 4.3.2
     lucide-vue-next:
       specifier: ^0.461.0
       version: 0.461.0
@@ -1209,6 +1215,9 @@ importers:
       lodash.clonedeep:
         specifier: 'catalog:'
         version: 4.5.0
+      lodash.set:
+        specifier: 'catalog:'
+        version: 4.3.2
       nprogress:
         specifier: 'catalog:'
         version: 0.2.0
@@ -1222,6 +1231,9 @@ importers:
       '@types/lodash.clonedeep':
         specifier: 'catalog:'
         version: 4.5.9
+      '@types/lodash.set':
+        specifier: 'catalog:'
+        version: 4.3.9
       '@types/nprogress':
         specifier: 'catalog:'
         version: 0.2.3
@@ -4303,6 +4315,9 @@ packages:
   '@types/lodash.clonedeep@4.5.9':
     resolution: {integrity: sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==}
 
+  '@types/lodash.set@4.3.9':
+    resolution: {integrity: sha512-KOxyNkZpbaggVmqbpr82N2tDVTx05/3/j0f50Es1prxrWB0XYf9p3QNxqcbWb7P1Q9wlvsUSlCFnwlPCIJ46PQ==}
+
   '@types/lodash@4.17.13':
     resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==}
 
@@ -7298,6 +7313,9 @@ packages:
   lodash.once@4.1.1:
     resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
 
+  lodash.set@4.3.2:
+    resolution: {integrity: sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==}
+
   lodash.snakecase@4.1.1:
     resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
 
@@ -13085,6 +13103,10 @@ snapshots:
     dependencies:
       '@types/lodash': 4.17.13
 
+  '@types/lodash.set@4.3.9':
+    dependencies:
+      '@types/lodash': 4.17.13
+
   '@types/lodash@4.17.13': {}
 
   '@types/markdown-it@14.1.2':
@@ -16498,6 +16520,8 @@ snapshots:
 
   lodash.once@4.1.1: {}
 
+  lodash.set@4.3.2: {}
+
   lodash.snakecase@4.1.1: {}
 
   lodash.sortby@4.7.0: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 1f7a5ad3..91b261ac 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -43,6 +43,7 @@ catalog:
   '@types/html-minifier-terser': ^7.0.2
   '@types/jsonwebtoken': ^9.0.7
   '@types/lodash.clonedeep': ^4.5.9
+  '@types/lodash.set': ^4.3.9
   '@types/node': ^22.10.0
   '@types/nprogress': ^0.2.3
   '@types/postcss-import': ^14.0.3
@@ -112,6 +113,7 @@ catalog:
   jsonwebtoken: ^9.0.2
   lint-staged: ^15.2.10
   lodash.clonedeep: ^4.5.0
+  lodash.set: ^4.3.2
   lucide-vue-next: ^0.461.0
   medium-zoom: ^1.1.0
   naive-ui: ^2.40.2