Browse Source
fix: naive ui form reset does not meet expectations (#4569)
* fix: naive ui form reset does not meet expectations
* fix: typo
pull/4573/head
Vben
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with
34 additions and
19 deletions
-
apps/web-antd/src/api/core/auth.ts
-
apps/web-ele/src/api/core/auth.ts
-
apps/web-naive/src/adapter/form.ts
-
apps/web-naive/src/api/core/auth.ts
-
packages/@core/ui-kit/form-ui/src/config.ts
-
packages/@core/ui-kit/form-ui/src/form-render/form-field.vue
-
packages/@core/ui-kit/form-ui/src/form-render/form.vue
-
packages/@core/ui-kit/form-ui/src/types.ts
-
packages/effects/common-ui/src/ui/authentication/types.ts
-
packages/effects/plugins/src/vxe-table/use-vxe-grid.vue
-
packages/stores/src/modules/user.ts
-
packages/utils/src/index.ts
-
playground/src/api/core/auth.ts
|
|
|
@ -3,8 +3,8 @@ import { baseRequestClient, requestClient } from '#/api/request'; |
|
|
|
export namespace AuthApi { |
|
|
|
/** 登录接口参数 */ |
|
|
|
export interface LoginParams { |
|
|
|
password: string; |
|
|
|
username: string; |
|
|
|
password?: string; |
|
|
|
username?: string; |
|
|
|
} |
|
|
|
|
|
|
|
/** 登录接口返回值 */ |
|
|
|
|
|
|
|
@ -3,8 +3,8 @@ import { baseRequestClient, requestClient } from '#/api/request'; |
|
|
|
export namespace AuthApi { |
|
|
|
/** 登录接口参数 */ |
|
|
|
export interface LoginParams { |
|
|
|
password: string; |
|
|
|
username: string; |
|
|
|
password?: string; |
|
|
|
username?: string; |
|
|
|
} |
|
|
|
|
|
|
|
/** 登录接口返回值 */ |
|
|
|
|
|
|
|
@ -84,7 +84,10 @@ setupVbenForm<FormComponentType>({ |
|
|
|
Upload: NUpload, |
|
|
|
}, |
|
|
|
config: { |
|
|
|
// naive-ui组件不接受onChang事件,所以需要禁用
|
|
|
|
disabledOnChangeListener: true, |
|
|
|
// naive-ui组件的空值为null,不能是undefined,否则重置表单时不生效
|
|
|
|
emptyStateValue: null, |
|
|
|
baseModelPropName: 'value', |
|
|
|
modelPropNameMap: { |
|
|
|
Checkbox: 'checked', |
|
|
|
|
|
|
|
@ -3,8 +3,8 @@ import { baseRequestClient, requestClient } from '#/api/request'; |
|
|
|
export namespace AuthApi { |
|
|
|
/** 登录接口参数 */ |
|
|
|
export interface LoginParams { |
|
|
|
password: string; |
|
|
|
username: string; |
|
|
|
password?: string; |
|
|
|
username?: string; |
|
|
|
} |
|
|
|
|
|
|
|
/** 登录接口返回值 */ |
|
|
|
|
|
|
|
@ -43,8 +43,13 @@ export function setupVbenForm< |
|
|
|
>(options: VbenFormAdapterOptions<T>) { |
|
|
|
const { components, config, defineRules } = options; |
|
|
|
|
|
|
|
DEFAULT_FORM_COMMON_CONFIG.disabledOnChangeListener = |
|
|
|
config?.disabledOnChangeListener ?? false; |
|
|
|
const { disabledOnChangeListener = false, emptyStateValue = undefined } = |
|
|
|
(config || {}) as FormCommonConfig; |
|
|
|
|
|
|
|
Object.assign(DEFAULT_FORM_COMMON_CONFIG, { |
|
|
|
disabledOnChangeListener, |
|
|
|
emptyStateValue, |
|
|
|
}); |
|
|
|
|
|
|
|
if (defineRules) { |
|
|
|
for (const key of Object.keys(defineRules)) { |
|
|
|
|
|
|
|
@ -33,6 +33,7 @@ const { |
|
|
|
description, |
|
|
|
disabled, |
|
|
|
disabledOnChangeListener, |
|
|
|
emptyStateValue, |
|
|
|
fieldName, |
|
|
|
formFieldProps, |
|
|
|
label, |
|
|
|
@ -55,7 +56,7 @@ const formApi = formRenderProps.form; |
|
|
|
|
|
|
|
const isInValid = computed(() => errors.value?.length > 0); |
|
|
|
|
|
|
|
const fieldComponent = computed(() => { |
|
|
|
const FieldComponent = computed(() => { |
|
|
|
const finalComponent = isString(component) |
|
|
|
? componentMap.value[component] |
|
|
|
: component; |
|
|
|
@ -213,7 +214,7 @@ function fieldBindEvent(slotProps: Record<string, any>) { |
|
|
|
if (bindEventField) { |
|
|
|
return { |
|
|
|
[`onUpdate:${bindEventField}`]: handler, |
|
|
|
[bindEventField]: value, |
|
|
|
[bindEventField]: value === undefined ? emptyStateValue : value, |
|
|
|
onChange: disabledOnChangeListener |
|
|
|
? undefined |
|
|
|
: (e: Record<string, any>) => { |
|
|
|
@ -300,7 +301,7 @@ function autofocus() { |
|
|
|
}" |
|
|
|
> |
|
|
|
<component |
|
|
|
:is="fieldComponent" |
|
|
|
:is="FieldComponent" |
|
|
|
ref="fieldComponentRef" |
|
|
|
:class="{ |
|
|
|
'border-destructive focus:border-destructive hover:border-destructive/80 focus:shadow-[0_0_0_2px_rgba(255,38,5,0.06)]': |
|
|
|
|
|
|
|
@ -87,6 +87,7 @@ const computedSchema = computed( |
|
|
|
controlClass = '', |
|
|
|
disabled, |
|
|
|
disabledOnChangeListener = false, |
|
|
|
emptyStateValue = undefined, |
|
|
|
formFieldProps = {}, |
|
|
|
formItemClass = '', |
|
|
|
hideLabel = false, |
|
|
|
@ -107,6 +108,7 @@ const computedSchema = computed( |
|
|
|
return { |
|
|
|
disabled, |
|
|
|
disabledOnChangeListener, |
|
|
|
emptyStateValue, |
|
|
|
hideLabel, |
|
|
|
hideRequiredMark, |
|
|
|
labelWidth, |
|
|
|
|
|
|
|
@ -153,6 +153,10 @@ export interface FormCommonConfig { |
|
|
|
* @default false |
|
|
|
*/ |
|
|
|
disabledOnChangeListener?: boolean; |
|
|
|
/** |
|
|
|
* 所有表单项的空状态值,默认都是undefined,naive-ui的空状态值是null |
|
|
|
*/ |
|
|
|
emptyStateValue?: null | undefined; |
|
|
|
/** |
|
|
|
* 所有表单项的控件样式 |
|
|
|
* @default {} |
|
|
|
@ -341,6 +345,7 @@ export interface VbenFormAdapterOptions< |
|
|
|
config?: { |
|
|
|
baseModelPropName?: string; |
|
|
|
disabledOnChangeListener?: boolean; |
|
|
|
emptyStateValue?: null | undefined; |
|
|
|
modelPropNameMap?: Partial<Record<T, string>>; |
|
|
|
}; |
|
|
|
defineRules?: { |
|
|
|
|
|
|
|
@ -67,10 +67,7 @@ interface AuthenticationProps { |
|
|
|
submitButtonText?: string; |
|
|
|
} |
|
|
|
|
|
|
|
interface LoginAndRegisterParams { |
|
|
|
password: string; |
|
|
|
username: string; |
|
|
|
} |
|
|
|
type LoginAndRegisterParams = Record<string, any>; |
|
|
|
|
|
|
|
interface LoginCodeParams { |
|
|
|
code: string; |
|
|
|
|
|
|
|
@ -193,8 +193,8 @@ async function init() { |
|
|
|
} |
|
|
|
|
|
|
|
// form 由 vben-form代替,所以不适配formConfig,这里给出警告 |
|
|
|
const formConfig = defaultGridOptions.formConfig; |
|
|
|
if (formConfig?.enabled) { |
|
|
|
const formConfig = options.value.formConfig; |
|
|
|
if (formConfig) { |
|
|
|
console.warn( |
|
|
|
'[Vben Vxe Table]: The formConfig in the grid is not supported, please use the `formOptions` props', |
|
|
|
); |
|
|
|
|
|
|
|
@ -1,6 +1,7 @@ |
|
|
|
import { acceptHMRUpdate, defineStore } from 'pinia'; |
|
|
|
|
|
|
|
interface BasicUserInfo { |
|
|
|
[key: string]: any; |
|
|
|
/** |
|
|
|
* 头像 |
|
|
|
*/ |
|
|
|
|
|
|
|
@ -1,3 +1,4 @@ |
|
|
|
export * from './helpers'; |
|
|
|
export * from '@vben-core/shared/cache'; |
|
|
|
export * from '@vben-core/shared/color'; |
|
|
|
export * from '@vben-core/shared/utils'; |
|
|
|
|
|
|
|
@ -3,8 +3,8 @@ import { baseRequestClient, requestClient } from '#/api/request'; |
|
|
|
export namespace AuthApi { |
|
|
|
/** 登录接口参数 */ |
|
|
|
export interface LoginParams { |
|
|
|
password: string; |
|
|
|
username: string; |
|
|
|
password?: string; |
|
|
|
username?: string; |
|
|
|
} |
|
|
|
|
|
|
|
/** 登录接口返回值 */ |
|
|
|
|