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