diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 9fd86547..b95ff946 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1,14 +1,14 @@
# default onwer
-* anncwb@126.com vince292007@gmail.com netfan@foxmail.com
+* anncwb@126.com vince292007@gmail.com netfan@foxmail.com jinmao88@qq.com
# vben core onwer
-/.github/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com
-/.vscode/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com
-/packages/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com
-/packages/@core/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com
-/internal/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com
-/scripts/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com
+/.github/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com jinmao88@qq.com
+/.vscode/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com jinmao88@qq.com
+/packages/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com jinmao88@qq.com
+/packages/@core/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com jinmao88@qq.com
+/internal/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com jinmao88@qq.com
+/scripts/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com jinmao88@qq.com
# vben team onwer
-apps/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com @vbenjs/team-v5
-docs/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com @vbenjs/team-v5
+apps/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com @vbenjs/team-v5 jinmao88@qq.com
+docs/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com @vbenjs/team-v5 jinmao88@qq.com
diff --git a/packages/@core/base/shared/package.json b/packages/@core/base/shared/package.json
index ebf481bf..70ad17c3 100644
--- a/packages/@core/base/shared/package.json
+++ b/packages/@core/base/shared/package.json
@@ -88,6 +88,7 @@
"lodash.clonedeep": "catalog:",
"lodash.get": "catalog:",
"lodash.isequal": "catalog:",
+ "lodash.set": "catalog:",
"nprogress": "catalog:",
"tailwind-merge": "catalog:",
"theme-colors": "catalog:"
@@ -96,6 +97,7 @@
"@types/lodash.clonedeep": "catalog:",
"@types/lodash.get": "catalog:",
"@types/lodash.isequal": "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 1bf09c71..925af1c1 100644
--- a/packages/@core/base/shared/src/utils/index.ts
+++ b/packages/@core/base/shared/src/utils/index.ts
@@ -17,3 +17,4 @@ export * from './window';
export { default as cloneDeep } from 'lodash.clonedeep';
export { default as get } from 'lodash.get';
export { default as isEqual } from 'lodash.isequal';
+export { default as set } from 'lodash.set';
diff --git a/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue b/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue
index bdb27528..61852aae 100644
--- a/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue
+++ b/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue
@@ -290,6 +290,7 @@ onUnmounted(() => {
v-show="isShow"
:class="{
'form-valid-error': isInValid,
+ 'form-is-required': shouldRequired,
'flex-col': isVertical,
'flex-row items-center': !isVertical,
'pb-6': !compact,
@@ -320,7 +321,7 @@ onUnmounted(() => {
-
+
{
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;
}
@@ -58,7 +58,11 @@ export function useFormInitial(
const schemaInitialValues = getDefaultsForSchema(object(zodObject));
- return { ...initialValues, ...schemaInitialValues };
+ const zodDefaults: Record = {};
+ for (const key in schemaInitialValues) {
+ set(zodDefaults, key, schemaInitialValues[key]);
+ }
+ return mergeWithArrayOverride(initialValues, zodDefaults);
}
return {
diff --git a/packages/@core/ui-kit/shadcn-ui/src/components/select/select.vue b/packages/@core/ui-kit/shadcn-ui/src/components/select/select.vue
index c18c172f..1b1bab3f 100644
--- a/packages/@core/ui-kit/shadcn-ui/src/components/select/select.vue
+++ b/packages/@core/ui-kit/shadcn-ui/src/components/select/select.vue
@@ -34,4 +34,8 @@ const props = defineProps();
button[role='combobox'][data-placeholder] {
color: hsl(var(--muted-foreground));
}
+
+button {
+ --ring: var(--primary);
+}
diff --git a/packages/@core/ui-kit/shadcn-ui/src/ui/input/Input.vue b/packages/@core/ui-kit/shadcn-ui/src/ui/input/Input.vue
index 55321566..6ef914ff 100644
--- a/packages/@core/ui-kit/shadcn-ui/src/ui/input/Input.vue
+++ b/packages/@core/ui-kit/shadcn-ui/src/ui/input/Input.vue
@@ -30,3 +30,8 @@ const modelValue = useVModel(props, 'modelValue', emits, {
"
/>
+
diff --git a/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue b/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue
index 50f453b0..1536e2a3 100644
--- a/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue
+++ b/packages/effects/plugins/src/vxe-table/use-vxe-grid.vue
@@ -29,7 +29,7 @@ import { usePriorityValues } from '@vben/hooks';
import { EmptyIcon } from '@vben/icons';
import { $t } from '@vben/locales';
import { usePreferences } from '@vben/preferences';
-import { cloneDeep, cn, mergeWithArrayOverride } from '@vben/utils';
+import { cloneDeep, cn, isEqual, mergeWithArrayOverride } from '@vben/utils';
import { VbenHelpTooltip, VbenLoading } from '@vben-core/shadcn-ui';
@@ -81,10 +81,14 @@ const [Form, formApi] = useTableForm({
props.api.reload(formValues);
},
handleReset: async () => {
+ const prevValues = await formApi.getValues();
await formApi.resetForm();
const formValues = await formApi.getValues();
formApi.setLatestSubmissionValues(formValues);
- props.api.reload(formValues);
+ // 如果值发生了变化,submitOnChange会触发刷新。所以只在submitOnChange为false或者值没有发生变化时,手动刷新
+ if (isEqual(prevValues, formValues) || !formOptions.value?.submitOnChange) {
+ props.api.reload(formValues);
+ }
},
commonConfig: {
componentProps: {
diff --git a/packages/utils/src/helpers/generate-menus.ts b/packages/utils/src/helpers/generate-menus.ts
index 48c30fd6..5df0653b 100644
--- a/packages/utils/src/helpers/generate-menus.ts
+++ b/packages/utils/src/helpers/generate-menus.ts
@@ -1,6 +1,7 @@
-import type { ExRouteRecordRaw, MenuRecordRaw } from '@vben-core/typings';
import type { Router, RouteRecordRaw } from 'vue-router';
+import type { ExRouteRecordRaw, MenuRecordRaw } from '@vben-core/typings';
+
import { filterTree, mapTree } from '@vben-core/shared/utils';
/**
@@ -68,8 +69,8 @@ async function generateMenus(
};
});
- // 对菜单进行排序
- menus = menus.sort((a, b) => (a.order || 999) - (b.order || 999));
+ // 对菜单进行排序,避免order=0时被替换成999的问题
+ menus = menus.sort((a, b) => (a?.order ?? 999) - (b?.order ?? 999));
const finalMenus = filterTree(menus, (menu) => {
return !!menu.show;
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index edb6b828..f7f77cfd 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -45,6 +45,7 @@ catalog:
'@types/lodash.clonedeep': ^4.5.9
'@types/lodash.get': ^4.4.9
'@types/lodash.isequal': ^4.5.8
+ '@types/lodash.set': ^4.3.2
'@types/node': ^22.13.10
'@types/nprogress': ^0.2.3
'@types/postcss-import': ^14.0.3
@@ -116,6 +117,7 @@ catalog:
lint-staged: ^15.4.3
lodash.clonedeep: ^4.5.0
lodash.get: ^4.4.2
+ lodash.set: ^4.3.2
lodash.isequal: ^4.5.0
lucide-vue-next: ^0.469.0
medium-zoom: ^1.1.0