import { ComponentNames, ViewLinkageEventsType } from '../index'; import { Component } from 'vue'; import { EventPrefixEnum } from './constants'; /** * 表单数据模型 */ export type FormModels = Array; export interface IRenderModel { id: string; label?: string; labelWidth?: string | number; component: Component | (ComponentNames | string); componentType?: string; layout: T & { parent: string; container?: boolean; suffix?: string; }; display?: boolean; disabled?: boolean; readonly?: boolean; required?: boolean; } export interface IFormModelItem extends IRenderModel { dataKey: string; /** * 当前字段数据, * @example 非虚拟 key 时,dataKey 对应的数据: * { * dataKey: 'value' * } * @example 虚拟 key 时,value 将会以对象返回,数据格式如下: * { * key1: 'value1', * key2: 'value2' * } */ value: TValue; /** * 是否为虚拟 key,默认为 false * @example true 时,数据以多个属性存在,格式如下: * { * key1: 'value1', * key2: 'value2' * } * @example false 时,数据以单个属性存在,格式如下: * { * dataKey: { * key1: 'value1', * key2: 'value2' * } * } */ isVirtualKey?: boolean; /** * 当 isVirtualKey 为 true 时,需要指定虚拟 key 的值,否则 value 将获取不到数据 * @example ['key1', 'key2'] */ valueItems?: string[]; detailTableId?: string; hideLabel?: boolean; rules?: string; errorMessage?: string; description?: string; [key: string]: any; } export interface IDetailTableItem extends IRenderModel { detailTableId: string; componentType: 'DetailTable'; } export type OnFormChange = (value: Record, model: IFormModelItem, rowId?: string) => void; type EventType = 'change' | 'blur' | 'focus'; type FormEventType = `${EventPrefixEnum.FORM}.ready`; type FieldEventType = `${EventPrefixEnum.FIELD}.change` | `${EventPrefixEnum.FIELD}.${string}.${EventType}`; export type EventsType = FormEventType | FieldEventType | ViewLinkageEventsType | string; export {};