import type { CustomValidateResolveType, Data, FormInstanceFunctions, FormRule, FormValidateParams, FormValidateResult, SizeEnum, SubmitContext, TdFormItemProps, TdFormProps, TdLoadingProps, TNodeReturnValue, ValueType } from 'tdesign-vue-next'; import type { AllowedComponentProps } from 'vue'; import type { QdComputeFunction, QdConfigRendererProps, QdConfigValue } from '../config-renderer'; import type { QdGridItemProps, QdGridProps } from '../grid'; export interface QdFormRule extends Omit { validator?: (val: ValueType, data: FD) => CustomValidateResolveType | Promise; } export type QdFormBeforeSubmitQueueResult = boolean | { success: boolean; message?: string; }; export type QdFormBeforeSubmitQueueItem = () => Promise | QdFormBeforeSubmitQueueResult; export interface QdFormItemProps extends Omit, AllowedComponentProps, QdGridItemProps, Pick { context?: QdConfigRendererProps['context']; component?: QdConfigRendererProps['config']; required?: boolean | string; ifRender?: QdConfigValue; help?: TdFormItemProps['help'] | QdComputeFunction; rules?: QdFormRule[]; size?: SizeEnum; trimOnBlur?: boolean; } export interface QdFormSubmitContext extends SubmitContext, Pick { showErrorMessage: boolean; formData: FD; } export interface QdFormProps extends Omit, 'layout' | 'onSubmit' | 'size'>, QdGridProps { crudMode?: 'add' | 'view' | 'edit'; size?: SizeEnum | 'mini'; items?: QdFormItemProps[]; loading?: boolean; loadingProps?: TdLoadingProps; defaultClearable?: boolean; descriptions?: boolean; onSubmit?: (context: QdFormSubmitContext) => void; } export interface QdFormInstanceFunctions extends Omit { submit: (params?: { showErrorMessage?: boolean; scrollToFirstError?: QdFormProps['scrollToFirstError']; }) => Promise>; validate: (params?: FormValidateParams & { scrollToFirstError?: QdFormProps['scrollToFirstError']; }) => Promise>; }