feat(form): add valueFormat for schema (#3873)

This commit is contained in:
Electrolux
2024-05-31 09:53:50 +08:00
committed by GitHub
parent 5d36b1a560
commit 0bc01d8528
3 changed files with 30 additions and 2 deletions

View File

@@ -64,6 +64,7 @@
import { useDesign } from '@/hooks/web/useDesign';
import { cloneDeep } from 'lodash-es';
import { TableActionType } from '@/components/Table';
import { isFunction } from '@/utils/is';
defineOptions({ name: 'BasicForm' });
@@ -130,6 +131,9 @@
component,
componentProps = {},
isHandleDateDefaultValue = true,
field,
isHandleDefaultValue = true,
valueFormat,
} = schema;
// handle date type
if (
@@ -161,6 +165,21 @@
schema.defaultValue = def;
}
}
// handle schema.valueFormat
if (
isHandleDefaultValue &&
defaultValue &&
component &&
isFunction(valueFormat)
) {
schema.defaultValue = valueFormat({
value: defaultValue,
schema,
model: formModel,
field,
});
}
}
if (unref(getProps).showAdvancedButton) {
return schemas.filter(

View File

@@ -277,6 +277,7 @@
field,
changeEvent = 'change',
valueField,
valueFormat,
} = props.schema;
const isCheck = component && ['Switch', 'Checkbox'].includes(component);
@@ -286,9 +287,12 @@
const on = {
[eventKey]: (...args: Nullable<Recordable<any>>[]) => {
const [e] = args;
const target = e ? e.target : null;
const value = target ? (isCheck ? target.checked : target.value) : e;
let value = target ? (isCheck ? target.checked : target.value) : e;
if(isFunction(valueFormat)){
value = valueFormat({...unref(getValues),value});
}
props.setFormModel(field, value, props.schema);
if (propsData[eventKey]) {

View File

@@ -197,6 +197,9 @@ interface BaseFormSchema<T extends ComponentType = any> {
// 是否自动处理与时间相关组件的默认值
isHandleDateDefaultValue?: boolean;
// 是否使用valueFormat自动处理默认值
isHandleDefaultValue?: boolean;
isAdvanced?: boolean;
// Matching details components
@@ -232,6 +235,8 @@ interface BaseFormSchema<T extends ComponentType = any> {
dynamicReadonly?: boolean | ((renderCallbackParams: RenderCallbackParams) => boolean);
dynamicRules?: (renderCallbackParams: RenderCallbackParams) => Rule[];
valueFormat?: (arg: Partial<RenderCallbackParams> & { value: any }) => any;
}
export interface ComponentFormSchema<T extends ComponentType = any> extends BaseFormSchema<T> {
// render component