This commit is contained in:
dap 2025-03-22 18:31:19 +08:00
commit 17e82fb766
10 changed files with 42 additions and 18 deletions

18
.github/CODEOWNERS vendored
View File

@ -1,14 +1,14 @@
# default onwer # 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 # vben core onwer
/.github/ 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 /.vscode/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com jinmao88@qq.com
/packages/ anncwb@126.com vince292007@gmail.com netfan@foxmail.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 /packages/@core/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com jinmao88@qq.com
/internal/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com /internal/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com jinmao88@qq.com
/scripts/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com /scripts/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com jinmao88@qq.com
# vben team onwer # vben team onwer
apps/ 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 docs/ anncwb@126.com vince292007@gmail.com netfan@foxmail.com @vbenjs/team-v5 jinmao88@qq.com

View File

@ -88,6 +88,7 @@
"lodash.clonedeep": "catalog:", "lodash.clonedeep": "catalog:",
"lodash.get": "catalog:", "lodash.get": "catalog:",
"lodash.isequal": "catalog:", "lodash.isequal": "catalog:",
"lodash.set": "catalog:",
"nprogress": "catalog:", "nprogress": "catalog:",
"tailwind-merge": "catalog:", "tailwind-merge": "catalog:",
"theme-colors": "catalog:" "theme-colors": "catalog:"
@ -96,6 +97,7 @@
"@types/lodash.clonedeep": "catalog:", "@types/lodash.clonedeep": "catalog:",
"@types/lodash.get": "catalog:", "@types/lodash.get": "catalog:",
"@types/lodash.isequal": "catalog:", "@types/lodash.isequal": "catalog:",
"@types/lodash.set": "catalog:",
"@types/nprogress": "catalog:" "@types/nprogress": "catalog:"
} }
} }

View File

@ -17,3 +17,4 @@ export * from './window';
export { default as cloneDeep } from 'lodash.clonedeep'; export { default as cloneDeep } from 'lodash.clonedeep';
export { default as get } from 'lodash.get'; export { default as get } from 'lodash.get';
export { default as isEqual } from 'lodash.isequal'; export { default as isEqual } from 'lodash.isequal';
export { default as set } from 'lodash.set';

View File

@ -290,6 +290,7 @@ onUnmounted(() => {
v-show="isShow" v-show="isShow"
:class="{ :class="{
'form-valid-error': isInValid, 'form-valid-error': isInValid,
'form-is-required': shouldRequired,
'flex-col': isVertical, 'flex-col': isVertical,
'flex-row items-center': !isVertical, 'flex-row items-center': !isVertical,
'pb-6': !compact, 'pb-6': !compact,
@ -320,7 +321,7 @@ onUnmounted(() => {
<VbenRenderContent :content="label" /> <VbenRenderContent :content="label" />
</template> </template>
</FormLabel> </FormLabel>
<div class="flex-auto overflow-hidden"> <div class="flex-auto overflow-hidden p-[1px]">
<div :class="cn('relative flex w-full items-center', wrapperClass)"> <div :class="cn('relative flex w-full items-center', wrapperClass)">
<FormControl :class="cn(controlClass)"> <FormControl :class="cn(controlClass)">
<slot <slot

View File

@ -7,7 +7,7 @@ import type { ExtendedFormApi, FormActions, VbenFormProps } from './types';
import { computed, unref, useSlots } from 'vue'; import { computed, unref, useSlots } from 'vue';
import { createContext } from '@vben-core/shadcn-ui'; import { createContext } from '@vben-core/shadcn-ui';
import { isString } from '@vben-core/shared/utils'; import { isString, mergeWithArrayOverride, set } from '@vben-core/shared/utils';
import { useForm } from 'vee-validate'; import { useForm } from 'vee-validate';
import { object } from 'zod'; import { object } from 'zod';
@ -50,7 +50,7 @@ export function useFormInitial(
const zodObject: ZodRawShape = {}; const zodObject: ZodRawShape = {};
(unref(props).schema || []).forEach((item) => { (unref(props).schema || []).forEach((item) => {
if (Reflect.has(item, 'defaultValue')) { if (Reflect.has(item, 'defaultValue')) {
initialValues[item.fieldName] = item.defaultValue; set(initialValues, item.fieldName, item.defaultValue);
} else if (item.rules && !isString(item.rules)) { } else if (item.rules && !isString(item.rules)) {
zodObject[item.fieldName] = item.rules; zodObject[item.fieldName] = item.rules;
} }
@ -58,7 +58,11 @@ export function useFormInitial(
const schemaInitialValues = getDefaultsForSchema(object(zodObject)); const schemaInitialValues = getDefaultsForSchema(object(zodObject));
return { ...initialValues, ...schemaInitialValues }; const zodDefaults: Record<string, any> = {};
for (const key in schemaInitialValues) {
set(zodDefaults, key, schemaInitialValues[key]);
}
return mergeWithArrayOverride(initialValues, zodDefaults);
} }
return { return {

View File

@ -34,4 +34,8 @@ const props = defineProps<Props>();
button[role='combobox'][data-placeholder] { button[role='combobox'][data-placeholder] {
color: hsl(var(--muted-foreground)); color: hsl(var(--muted-foreground));
} }
button {
--ring: var(--primary);
}
</style> </style>

View File

@ -30,3 +30,8 @@ const modelValue = useVModel(props, 'modelValue', emits, {
" "
/> />
</template> </template>
<style lang="scss" scoped>
input {
--ring: var(--primary);
}
</style>

View File

@ -29,7 +29,7 @@ import { usePriorityValues } from '@vben/hooks';
import { EmptyIcon } from '@vben/icons'; import { EmptyIcon } from '@vben/icons';
import { $t } from '@vben/locales'; import { $t } from '@vben/locales';
import { usePreferences } from '@vben/preferences'; 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'; import { VbenHelpTooltip, VbenLoading } from '@vben-core/shadcn-ui';
@ -81,10 +81,14 @@ const [Form, formApi] = useTableForm({
props.api.reload(formValues); props.api.reload(formValues);
}, },
handleReset: async () => { handleReset: async () => {
const prevValues = await formApi.getValues();
await formApi.resetForm(); await formApi.resetForm();
const formValues = await formApi.getValues(); const formValues = await formApi.getValues();
formApi.setLatestSubmissionValues(formValues); formApi.setLatestSubmissionValues(formValues);
// submitOnChangesubmitOnChangefalse
if (isEqual(prevValues, formValues) || !formOptions.value?.submitOnChange) {
props.api.reload(formValues); props.api.reload(formValues);
}
}, },
commonConfig: { commonConfig: {
componentProps: { componentProps: {

View File

@ -1,6 +1,7 @@
import type { ExRouteRecordRaw, MenuRecordRaw } from '@vben-core/typings';
import type { Router, RouteRecordRaw } from 'vue-router'; import type { Router, RouteRecordRaw } from 'vue-router';
import type { ExRouteRecordRaw, MenuRecordRaw } from '@vben-core/typings';
import { filterTree, mapTree } from '@vben-core/shared/utils'; import { filterTree, mapTree } from '@vben-core/shared/utils';
/** /**
@ -68,8 +69,8 @@ async function generateMenus(
}; };
}); });
// 对菜单进行排序 // 对菜单进行排序避免order=0时被替换成999的问题
menus = menus.sort((a, b) => (a.order || 999) - (b.order || 999)); menus = menus.sort((a, b) => (a?.order ?? 999) - (b?.order ?? 999));
const finalMenus = filterTree(menus, (menu) => { const finalMenus = filterTree(menus, (menu) => {
return !!menu.show; return !!menu.show;

View File

@ -45,6 +45,7 @@ catalog:
'@types/lodash.clonedeep': ^4.5.9 '@types/lodash.clonedeep': ^4.5.9
'@types/lodash.get': ^4.4.9 '@types/lodash.get': ^4.4.9
'@types/lodash.isequal': ^4.5.8 '@types/lodash.isequal': ^4.5.8
'@types/lodash.set': ^4.3.2
'@types/node': ^22.13.10 '@types/node': ^22.13.10
'@types/nprogress': ^0.2.3 '@types/nprogress': ^0.2.3
'@types/postcss-import': ^14.0.3 '@types/postcss-import': ^14.0.3
@ -116,6 +117,7 @@ catalog:
lint-staged: ^15.4.3 lint-staged: ^15.4.3
lodash.clonedeep: ^4.5.0 lodash.clonedeep: ^4.5.0
lodash.get: ^4.4.2 lodash.get: ^4.4.2
lodash.set: ^4.3.2
lodash.isequal: ^4.5.0 lodash.isequal: ^4.5.0
lucide-vue-next: ^0.469.0 lucide-vue-next: ^0.469.0
medium-zoom: ^1.1.0 medium-zoom: ^1.1.0