diff --git a/packages/form-schema/src/base.ts b/packages/form-schema/src/base.ts index 0447fad2..f10e2307 100644 --- a/packages/form-schema/src/base.ts +++ b/packages/form-schema/src/base.ts @@ -761,7 +761,7 @@ export interface TableConfig extends FormItem { titleTip?: FilterFunction; rowKey?: string; /** table 新增行时前置回调 */ - beforeAddRow?: (mForm: FormState | undefined, data: any) => boolean; + beforeAddRow?: (mForm: FormState | undefined, data: any) => boolean | Promise; addButtonConfig?: { props?: Record; text?: string; @@ -804,6 +804,9 @@ export interface GroupListConfig extends FormItem { props?: Record; text?: string; }; + /** 最大行数 */ + max?: number; + beforeAddRow?: (mForm: FormState | undefined, data: any) => boolean | Promise; } interface StepItemConfig extends FormItem, ContainerCommonConfig { diff --git a/packages/form/src/containers/GroupList.vue b/packages/form/src/containers/GroupList.vue index 8ac4aa71..ad2d3973 100644 --- a/packages/form/src/containers/GroupList.vue +++ b/packages/form/src/containers/GroupList.vue @@ -50,7 +50,7 @@ import { computed, inject } from 'vue'; import { Grid, Plus } from '@element-plus/icons-vue'; import { cloneDeep } from 'lodash-es'; -import { TMagicButton } from '@tmagic/design'; +import { TMagicButton, tMagicMessage } from '@tmagic/design'; import type { ContainerChangeEventData, FormState, GroupListConfig } from '../schema'; import { initValue } from '../utils/form'; @@ -102,6 +102,20 @@ const changeHandler = (v: any, eventData: ContainerChangeEventData) => { const addHandler = async () => { if (!props.name) return false; + if (props.config.max && props.model[props.name].length >= props.config.max) { + tMagicMessage.error(`最多新增配置不能超过${props.config.max}条`); + return; + } + + if (typeof props.config.beforeAddRow === 'function') { + const beforeCheckRes = await props.config.beforeAddRow(mForm, { + model: props.model[props.name], + formValue: mForm?.values, + prop: props.prop, + }); + if (!beforeCheckRes) return; + } + let initValues = {}; if (typeof props.config.defaultAdd === 'function') { diff --git a/packages/form/src/table/useAdd.ts b/packages/form/src/table/useAdd.ts index 78a05c60..2152e083 100644 --- a/packages/form/src/table/useAdd.ts +++ b/packages/form/src/table/useAdd.ts @@ -37,7 +37,7 @@ export const useAdd = ( } if (typeof props.config.beforeAddRow === 'function') { - const beforeCheckRes = props.config.beforeAddRow(mForm, { + const beforeCheckRes = await props.config.beforeAddRow(mForm, { model: props.model[modelName], formValue: mForm?.values, prop: props.prop,