fastlion-amis
Version:
一种MIS页面生成工具
202 lines (175 loc) • 3.9 kB
text/typescript
import { SchemaApi } from '../../Schema';
import { Api } from '../../types';
export type FieldTypes =
| 'text'
| 'number'
| 'boolean'
| 'date'
| 'time'
| 'datetime'
| 'select';
export type OperatorType =
| 'equal'
| 'not_equal'
| 'is_empty'
| 'is_not_empty'
| 'like'
| 'not_like'
| 'starts_with'
| 'ends_with'
| 'less'
| 'less_or_equal'
| 'greater'
| 'greater_or_equal'
| 'between'
| 'not_between'
| 'select_equals'
| 'select_not_equals'
| 'select_any_in'
| 'select_not_any_in';
export type FieldItem = {
type: 'text';
operators: Array<OperatorType>;
};
export type ExpressionSimple = string | number | object | undefined;
export type ExpressionValue =
| ExpressionSimple
| {
type: 'value';
value: ExpressionSimple;
};
export type ExpressionFunc = {
type: 'func';
func: string;
args: Array<ExpressionComplex>;
};
export type ExpressionField = {
type: 'field';
field: string;
};
export type ExpressionFormula = {
type: 'formula';
value: string;
};
export type ExpressionComplex =
| ExpressionValue
| ExpressionFunc
| ExpressionField
| ExpressionFormula;
export interface ConditionRule {
id: any;
left?: ExpressionComplex;
op?: OperatorType;
right?: ExpressionComplex | Array<ExpressionComplex>;
}
export interface ConditionGroupValue {
id: string;
conjunction: 'and' | 'or';
not?: boolean;
children?: Array<ConditionRule | ConditionGroupValue>;
}
export interface ConditionValue extends ConditionGroupValue { }
interface BaseField {
type: FieldTypes;
label: string;
valueTypes?: Array<'value' | 'field' | 'func' | 'formula'>;
operators?: Array<string>;
// valueTypes 里面配置 func 才有效。
funcs?: Array<string>;
defaultValue?: any;
placeholder?: string;
}
export type FieldGroup = {
label: string;
children: Array<FieldSimple>;
};
interface TextField extends BaseField {
name: string;
type: 'text';
minLength?: number;
maxLength?: number;
}
interface NumberField extends BaseField {
name: string;
type: 'number';
maximum?: number;
minimum?: number;
step?: number;
precision?: number;
}
interface DateField extends BaseField {
name: string;
type: 'date';
format?: string;
inputFormat?: string;
minDate?: any;
maxDate?: any;
}
interface TimeField extends BaseField {
name: string;
type: 'time';
minTime?: any;
maxTime?: any;
format?: string;
inputFormat?: string;
}
interface DatetimeField extends BaseField {
type: 'datetime';
name: string;
format?: string;
inputFormat?: string;
timeFormat?: string;
}
interface SelectField extends BaseField {
type: 'select';
name: string;
multiple?: boolean;
options?: Array<any>;
source?: SchemaApi;
searchable?: boolean;
/**
* 自动完成 API,当输入部分文字的时候,会将这些文字通过 ${term} 可以取到,发送给接口。
* 接口可以返回匹配到的选项,帮助用户输入。
*/
autoComplete?: SchemaApi;
}
interface BooleanField extends BaseField {
type: 'boolean';
name: string;
}
interface GroupField {
type: 'group';
label: string;
name: string;
children: Array<FieldSimple>;
}
export type FieldSimple =
| TextField
| NumberField
| DateField
| TimeField
| DatetimeField
| SelectField
| BooleanField;
export type Field = FieldSimple | FieldGroup | GroupField;
interface FuncGroup {
label: string;
children: Array<Func>;
}
export interface Func {
type: string;
returnType: FieldTypes;
args: Array<FuncArg>;
label: string;
}
export interface FuncArg extends BaseField {
isOptional?: boolean;
}
export type Funcs = Array<Func | FuncGroup>;
export type Fields = Array<Field>;
export type Type = {
defaultOp?: OperatorType;
operators: Array<OperatorType>;
placeholder?: string;
valueTypes?: Array<'value' | 'field' | 'func' | 'formula'>;
};