usePage增加许多配置项,另外增加一些回调函数、插槽等等,修改逻辑增强配置灵活性
zk authored at 2023-11-21 17:42:23
1.30 KiB
NewLife.QuickVue
import { FormRule } from "@form-create/element-ui";
import { DefineComponent } from "vue";
import { forms } from '../component';

export type FormType = typeof forms;
export type InstanceProps<T extends DefineComponent> = InstanceType<T>['$props'];
export type ColumnProp<T> = T extends keyof FormType ? InstanceType<FormType[T]>['$props'] : undefined;

export interface ColumnConfig {
  /** 字段名 */
	prop: string | string[];
  /** 字段中文名称 */
  label?: string;
  /** 组件 */
	component?: keyof FormType;
  /** 是否渲染 */
	if?: boolean | ((data: EmptyObjectType) => boolean);
  /** 是否显示 */
	show?: boolean | ((data: EmptyObjectType) => boolean);
  /** 自定义组件插槽 */
  slot?: string;
  /** 必填 */
	required?: boolean;
  /** 组件参数 */
	props?: ColumnProp<ColumnConfig['component']>;
  /** 校验规则 */
  rules?: FormRule[];
  /** 排序下标 */
  index?: number;
  /** 所占列数 */
	col?: number | Col;
  /** 所属分组 */
	group?: string;
  // isCheck?: boolean;
}

export interface Col {
  xs: number;
  sm: number;
  md: number;
  lg: number;
  xl: number;
}

export interface FormProps {
  config: ColumnConfig[];
  modelValue: EmptyObjectType;
}
export interface FormEmits {
  (e: 'update:modelValue', val: EmptyObjectType): void;
  (e: 'change', ...val: any[] ): void;
}