diff --git a/apps/web-naive/src/views/demos/form/basic.vue b/apps/web-naive/src/views/demos/form/basic.vue index 7d04ff4d9..fe26624cc 100644 --- a/apps/web-naive/src/views/demos/form/basic.vue +++ b/apps/web-naive/src/views/demos/form/basic.vue @@ -40,6 +40,7 @@ const [Form, formApi] = useVbenForm({ fieldName: 'api', // 界面显示的label label: 'ApiSelect', + rules: 'required', }, { component: 'ApiTreeSelect', @@ -56,16 +57,19 @@ const [Form, formApi] = useVbenForm({ fieldName: 'apiTree', // 界面显示的label label: 'ApiTreeSelect', + rules: 'required', }, { component: 'Input', fieldName: 'string', label: 'String', + rules: 'required', }, { component: 'InputNumber', fieldName: 'number', label: 'Number', + rules: 'required', }, { component: 'RadioGroup', @@ -80,6 +84,7 @@ const [Form, formApi] = useVbenForm({ { value: 'E', label: 'E' }, ], }, + rules: 'selectRequired', }, { component: 'RadioGroup', @@ -94,9 +99,9 @@ const [Form, formApi] = useVbenForm({ { value: 'C', label: '选项C' }, { value: 'D', label: '选项D' }, { value: 'E', label: '选项E' }, - { value: 'F', label: '选项F' }, ], }, + rules: 'selectRequired', }, { component: 'CheckboxGroup', @@ -109,11 +114,22 @@ const [Form, formApi] = useVbenForm({ { value: 'C', label: '选项C' }, ], }, + rules: 'selectRequired', }, { component: 'DatePicker', fieldName: 'date', label: 'Date', + rules: 'required', + }, + { + component: 'Input', + fieldName: 'textArea', + label: 'TextArea', + componentProps: { + type: 'textarea', + }, + rules: 'required', }, ], }); diff --git a/packages/effects/layouts/src/widgets/preferences/blocks/theme/builtin.vue b/packages/effects/layouts/src/widgets/preferences/blocks/theme/builtin.vue index d4b265ee1..8a41763a1 100644 --- a/packages/effects/layouts/src/widgets/preferences/blocks/theme/builtin.vue +++ b/packages/effects/layouts/src/widgets/preferences/blocks/theme/builtin.vue @@ -2,7 +2,7 @@ import type { BuiltinThemePreset } from '@vben/preferences'; import type { BuiltinThemeType } from '@vben/types'; -import { computed, ref } from 'vue'; +import { computed, ref, watch } from 'vue'; import { UserRoundPen } from '@vben/icons'; import { $t } from '@vben/locales'; @@ -80,11 +80,6 @@ function typeView(name: BuiltinThemeType) { function handleSelect(theme: BuiltinThemePreset) { modelValue.value = theme.type; - const primaryColor = props.isDark - ? theme.darkPrimaryColor || theme.primaryColor - : theme.primaryColor; - - themeColorPrimary.value = primaryColor || theme.color; } function handleInputChange(e: Event) { @@ -95,6 +90,22 @@ function handleInputChange(e: Event) { function selectColor() { colorInput.value?.[0]?.click?.(); } + +watch( + () => [modelValue.value, props.isDark] as [BuiltinThemeType, boolean], + ([themeType, isDark]) => { + const theme = builtinThemePresets.value.find( + (item) => item.type === themeType, + ); + if (theme) { + const primaryColor = isDark + ? theme.darkPrimaryColor || theme.primaryColor + : theme.primaryColor; + + themeColorPrimary.value = primaryColor || theme.color; + } + }, +);