UNPKG

hyb-naive

Version:

对naive-ui组件进行二次封装,主要包含Form表单组件,进行JSON化化配置处理,快速实现表单的录入和页面筛选器功能

206 lines (205 loc) 5.12 kB
import { ExtractPublicPropTypes } from 'vue'; import { FormItemRuleValidator as FormRuleValidator } from 'naive-ui/lib/form/src/interface'; import { datePickerProps } from 'naive-ui'; /** * 表单校验类型 */ export type HValidateType = 'string' | 'number' | 'boolean' | 'method' | 'regexp' | 'integer' | 'float' | 'array' | 'object' | 'enum' | 'date' | 'url' | 'hex' | 'email' | 'pattern' | 'any'; /** * 表单组件类型 */ export type HFormCompType = 'Input' | 'InputNumber' | 'Select' | 'TreeSelect' | 'RadioButtonGroup' | 'RadioGroup' | 'Radio' | 'Checkbox' | 'CheckboxGroup' | 'AutoComplete' | 'Cascader' | 'DatePicker' | 'Switch' | 'Upload' | 'Slider' | 'Rate' | 'Tree' | 'Transfer' | 'Slot' | 'TimePicker'; export interface HFormRule { /** * 表单字段名 */ field: string; /** * 标签名称 */ label?: string; /** * 标签对齐方式 */ labelAlign?: 'left' | 'center' | 'right'; /** * 是否必填项 */ required?: boolean | ((fApi: HFormApi) => boolean); /** * 组件类型 */ compType: HFormCompType | ((fApi: HFormApi) => HFormCompType); /** * 校验事件 */ trigger?: string | string[]; /** * 验证错误提示消息 */ message?: string; /** * 24栅格暂用的空间大小 */ span?: number | (() => number); /** * 默认值 */ defaultValue?: any; /** * 标签的宽度 */ labelWidth?: number | string; /** * 数据类型校验 */ validateType?: HValidateType; /** * 表单校验 */ validator?: FormRuleValidator; /** * 是否填充整个宽度 */ fullWidth?: boolean; /** * 忽略表单提交 */ ignoreCommit?: boolean; /** * 是否重置数据 */ restValue?: boolean; /** * 是否显示 */ show?: boolean | ((fApi: HFormApi) => boolean); /** * 组件参数 */ props?: object | ((fApi: HFormApi) => object); /** * 当组件类型为:RadioGroup RadioButtonGroup ,Select的选项内容 */ options?: Array<{ label?: string; value?: any; [key: string]: any; }> | ((fApi: HFormApi) => Array<{ label?: string; value?: any; [key: string]: any; }>); /** * 组件加载钩子函数 * @param params 表单相关操作参数 * @returns */ onLoad?: (fApi: HFormApi) => any; /** * 是否禁用 */ disabled?: boolean | ((fApi: HFormApi) => boolean); /** * 组件模式,edit编辑模式,text:文本模式 */ mode?: 'edit' | 'text'; } export interface HFormApi { /** * 表单数据 */ formData: Record<string, any>; /** * 设置表单数据 * @param formData * @returns */ setFormData: (formData: Record<string, any>) => void; /** * 设置表单数据 * @param field * @param value * @returns */ setValue: (field: string, value: any) => Promise<any>; /** * 设置表单数据 * @param values * @returns */ setValues: (values: Record<string, any>) => Promise<any>; /** * 设置表单规则 * @param field * @param rule * @returns */ setRule: (field: string, rule: HFormRule) => HFormRule; /** * 获取表单规则 * * @param field * @returns */ getRule: (field: string) => HFormRule | undefined; /** * 合并表单规则 * @param field * @param rule * @returns */ mergeRule: (field: string, rule: HFormRule) => HFormRule; /** * 设置表单数据选择项 * @param field * @param options * @returns */ setOptions: (field: string, options: Array<{ label?: string; value?: any; [key: string]: any; }>) => Promise<any>; /** * 校验表单 * @returns */ validate: () => Promise<Record<string, any>>; /** * 触发搜索 * @param formData * @returns */ search: (formData?: Record<string, any>) => void; /** * 重置表单 * @returns */ reset: () => void; /** * 表单规则 */ rules: HFormRule[]; /** * 表单数据 */ value?: any; /** * 表单规则 */ rule?: HFormRule; } /** * 日期选择器组件参数 */ export type HDatePickerFormProps = ExtractPublicPropTypes<typeof datePickerProps> & { rangeMappingToFields?: [string, string]; valDateFormat?: 'YYYY-MM-DD HH:mm:ss' | 'YYYY-MM-DD' | 'HH:mm:ss'; /** * 处理日期区间选择,结束时间时间戳,由于组件的bug导致,结束的时间戳是当天的开始时间,导致筛选数据异常 * eg: 组件原始数据:[2024-01-01,2024-01-01]对应时间戳为 [1672531200000,1672531200000] * 处理后为 [2024-01-01,2024-01-02]应该为2024-01-01 00:00:00 到 2024-01-02 23:59:59 时间戳为 [1672531200000,1672535999999] */ rangeEndTimeStamp?: boolean; };