import { Slot } from 'vue'; import { FilterOptionsType } from '../page/FilterField'; export declare type FormCommonType = TypeScriptType | [] | { value: TypeScriptType; disabled: boolean; }; export declare type TypeScriptType = string | number | boolean | Date | null; export declare type FormOptionsType = TextFieldOptions | NumberFieldOptions | DateFieldOptions | RangeFieldOptions | TimeFieldOptions | TimeRangeFieldOptions | RateFieldOptions | RadioFieldOptions | RadioGroupFieldOptions | SelectFieldOptions | SliderFieldOptions | TextareaFieldOptions | CheckboxFieldOptions | CheckboxGroupFieldOptions | SwitchFieldOptions | SlotFieldOptions | TreeSelectFieldOptions; export declare interface FormFieldOptions { /************************************************* 以下是全局属性 *****************************************************/ /** * 字段名 */ fieldName?: string; /** * 分类 */ category?: string; /** * 当前控件在一行中的布局,默认为一行两个控件,也就是一个控件默认占半行位置 * single:Item占100%、控件均占100%,一行一个控件; double:Item与控件均占50%,一行两个控件; whole:Item占100%、控件均占50% */ lineMode?: 'single' | 'double' | 'whole'; /** * 字段显示名称 */ label?: string; /** * 配合 label 属性使用,表示是否显示 label 后面的冒号 */ colon?: boolean; /** * 控件类型 */ type?: 'text' | 'textarea' | 'number' | 'number-range' | 'password' | 'date' | 'time' | 'date-range' | 'time-range' | 'switch' | 'rate' | 'radio' | 'radio-group' | 'checkbox' | 'checkbox-group' | 'slot' | 'dynamic-select' | 'select' | 'tree-select' | 'slider' | 'search-select' | null; /** * 是否必填 */ required?: boolean; /** * 控件校验是否反馈 */ feedback?: boolean; /** * 输入提示 */ placeholder?: string | string[]; /** * 输入提示 */ tooltip?: string; /** * 是否隐藏 */ hidden?: boolean; /** * 是否禁用状态,默认为 false */ disabled?: boolean; /** * 分隔线 */ divider?: { enabled: boolean; text: string; }; /** * 自定义错误信息 */ errorMessageArgs?: { [key: string]: string; }; allowClear?: boolean; /** * (ngModelChange) 事件 * @param $event 事件参数 */ modelChange?($event: any): void; } /** * 文本输入控件 */ export declare interface TextFieldOptions extends FormFieldOptions { type?: 'text' | null; /** * 是否使用 input-group */ group?: boolean; /** * 是否是密码框 */ password?: boolean; /** * 可以点击清除图标删除内容 */ allowClear?: boolean; /** * 最大长度 */ maxlength?: number; /** * 是否显示切换按钮 */ visibilityToggle?: boolean; /** * 是否有边框 */ bordered?: boolean; /** * 带有前缀图标的 input */ prefix?: string | Slot; suffix?: string | Slot; addonBefore?: string | Slot; addonAfter?: string | Slot; search?: boolean; } /** * 数字型控件 */ export declare interface NumberFieldOptions extends FormFieldOptions { /** * 控件类型 */ type: 'number'; /** * 是否使用 input-group */ group?: boolean; /** * 仅用于数字控件 * default = Number.MIN_VALUE */ min?: number; /** * 仅用于数字控件 * default = Number.MAX_VALUE */ max?: number; /** * 仅用于数字控件 * default = 1 */ step?: number; /** * 仅用于数字控件 精度 * default = 2 */ precision?: number; /** * 指定输入框展示值的格式 * formatterPercent = (value: number) => `${value} %`; */ formatter?: (value: number | string) => string | number; /** * 指定输入框展示值的格式 * 使用改方法时会覆盖默认的数字格式化,例如输入中文或者其他字符时,输入框不会自动格式化为数字 * 举例:parserPercent = (value: string) => value.replace(' %', ''); * default (value: string) => value.trim().replace(/。/g, '.').replace(/[^\w\.-]+/g, '') */ parser?: (value: number | string) => string | number; } export declare interface NumberRangeFieldOptions extends FormFieldOptions { /** * 控件类型 */ type: 'number-range'; /** * 第二个控件表单字段名 */ fieldName2: string; /** * 仅用于数字控件 * default = Number.MIN_VALUE */ min?: number; /** * 仅用于数字控件 * default = Number.MAX_VALUE */ max?: number; /** * 仅用于数字控件 * default = 1 */ step?: number; /** * 仅用于数字控件 精度 * default = 2 */ precision?: number; /** * 指定输入框展示值的格式 * formatterPercent = (value: number) => `${value} %`; */ formatter?: (value: number | string) => string | number; /** * 指定输入框展示值的格式 * 使用改方法时会覆盖默认的数字格式化,例如输入中文或者其他字符时,输入框不会自动格式化为数字 * 举例:parserPercent = (value: string) => value.replace(' %', ''); * default (value: string) => value.trim().replace(/。/g, '.').replace(/[^\w\.-]+/g, '') */ parser?: (value: number | string) => string | number; } export declare interface DateFieldOptions extends FormFieldOptions { /** * 控件类型 */ type: 'date'; /** * 日期面板的状态 */ mode?: 'decade' | 'year' | 'month' | 'date' | 'time'; /** * 设置选择器类型 */ picker?: 'quarter' | 'year' | 'month' | 'week' | 'date'; /** * 设置日期格式,为数组时支持多格式匹配,展示以第一个为准。配置参考 dayjs,支持自定义格式 */ format?: string; /** *是否显示清除按钮 */ allowClear?: boolean; /** * 禁用的时间 * export const MIN_TIME = (current: Date): boolean => { * return moment().isAfter(current); * }; */ disabledDate?: any; /** * 增加时间选择功能 */ showTime: never | boolean; /** * 禁用 */ disabled?: boolean; } export declare interface RangeFieldOptions extends FormFieldOptions { /** * 控件类型 */ type: 'date-range'; /** * 模式,默认date */ mode?: 'decade' | 'year' | 'month' | 'week' | 'date' | 'time'; /** * 日期展示格式 */ format?: string; /** * 是否显示时间 */ showTime?: never | boolean; /** * 禁用的时间 * export const MIN_TIME = (current: Date): boolean => { * return moment().isAfter(current); * }; */ disabledDate?: any; } export declare interface TimeFieldOptions extends FormFieldOptions { type: 'time'; /** * 展示的时间格式 */ format?: string; } export declare interface TimeRangeFieldOptions extends FormFieldOptions { type: 'time-range'; /** * 展示的时间格式 */ format?: string; } export declare interface RateFieldOptions extends FormFieldOptions { type: 'rate'; /** * 是否允许再次点击后清除 */ allowClear?: boolean; /** * 是否允许半选 */ allowHalf?: boolean; /** * 自动获取焦点 */ autofocus?: boolean; /** * 自定义字符 */ character?: string; /** * star 总数 */ count?: number; /** * 自定义每项的提示信息 */ tooltips?: string[]; } export declare interface RadioFieldOptions extends FormFieldOptions { type: 'radio'; /** * 选择器、radio的值 */ label?: string; /** * radio 按钮样式 一个是点一个是按钮 */ buttonStyle?: 'outline' | 'solid'; } export declare interface RadioGroupFieldOptions extends FormFieldOptions { type: 'radio-group'; /** * 选择器、radio的值 */ optionItems?: OptionItem[]; /** * radio 按钮样式 一个是点一个是按钮 */ buttonStyle?: 'outline' | 'solid'; } export declare interface SelectFieldOptions extends FormFieldOptions { type: 'select'; /** * 允许清除,默认 false */ allowClear?: boolean; /** * select 显示搜索 */ showSearch?: boolean; /** * 设置 Select 的模式为多选或标签 */ mode?: 'combobox' | 'multiple' | 'tags'; /** * 在 tags 和 multiple 模式下自动分词的分隔符 */ tokenSeparators?: string[]; /** * 选择器、radio的值 */ optionItems?: OptionItem[]; /** * 比较器 * 比较函数 * 或者 对比字段, 对比字段只能是基本类型 */ compare?: (o1: any, o2: any) => boolean | string; /** * 选中 option,或 input 的 value 变化(combobox 模式下)时,调用此函数 * @param $event 事件参数 */ change?(value: any, option: any): void; /** * 文本框值变化时回调 * @param value */ search?(value: string): void; } export declare interface SliderFieldOptions extends FormFieldOptions { type: 'slider'; /** * 用于slider 数值展示 默认是如:39% */ tipFormatter?(value: number): string; } export declare interface TextareaFieldOptions extends FormFieldOptions { type: 'textarea'; /** * 只可以用于 textarea,自适应内容高度,可设置为 boolean 或对象:{ minRows: 2, maxRows: 6 } */ autoSize?: string | boolean | { minRows: number; maxRows: number; }; /** * textarea 数字提示显示的最大值 */ maxTextCount?: number; /** * 行数 */ rows?: number; } export declare interface CheckboxFieldOptions extends FormFieldOptions { type: 'checkbox'; /** * 选择 */ label?: string; } export declare interface CheckboxGroupFieldOptions extends FormFieldOptions { type: 'checkbox-group'; /** * 选择器、radio的值 */ optionItems?: OptionItem[]; } export declare interface SwitchFieldOptions extends FormFieldOptions { type: 'switch'; /** * 选中时的内容 */ checkedChildren: string | Slot; /** * 非选中时的内容 */ unCheckedChildren: string | Slot; /** * 选中时的值 */ checkedValue: boolean | string | number; /** * 非选中时的值 */ unCheckedValue: boolean | string | number; } export declare interface TreeSelectFieldOptions extends FormFieldOptions { type: 'tree-select'; /** * 树,是否默认展开所有 */ expandAll?: boolean; /** * 树选择器或者其他树组件的值 */ nodes?: any[]; } /** * 使用外部组件 */ export declare interface SlotFieldOptions extends FormFieldOptions { type: 'slot'; /** * 组件名字 */ name: string; } export declare interface OptionItem { value?: any; label: string; disabled?: boolean; } export declare function setFieldDefaultValue(formField: FormOptionsType | FilterOptionsType): void; /** * 单选或多选组件的选项对象 */ export declare interface OptionItem { value?: any; label: string; disabled?: boolean; }