import { ComponentRef, Type, ViewRef } from '@angular/core'; import { Observable } from 'rxjs'; import { LayoutHostDirective } from '../components/layout-host.directive'; import { ControlShared, ControlTranslate } from '../utils'; import { DynamicFormDataConfig } from './designer.types'; import { ControlValidatorModel } from './validator.types'; import { SelectConditionViewModel } from './query-condition'; /** * * @description 抽象控件 * @export */ export interface AbstractControl { /** * @description 控件类型 * * @memberof AbstractControl */ type: string; /** * @description 是否是设计时 * * @memberof AbstractControl */ isDesign: boolean; /** * @description 是否是容器 * * @memberof AbstractControl */ isContainer: boolean; /** * @description 仅查看 * * @memberof AbstractControl */ viewOnly?: boolean; /** * @description 启用查看时编辑 * * @memberof AbstractControl */ enableEditAtView?: boolean; /** * @description 启用查看时编辑的控件名称列表 * * @memberof AbstractControl */ enableEditNameList?: string[]; /** * @description 设计时host样式类 * * @memberof AbstractControl */ designHostClass: string; /** * @description 控件model * * @memberof AbstractControl */ model: T; /** * 子控件 * * @memberof AbstractControl */ children: AbstractControl[]; /** * 父节点 */ parent: AbstractControl; /** * @description 是否有效,当控件验证器都验证通过 返回true * * @memberof AbstractControl */ valid: boolean; /** * 数据配置信息 * * TODO @deprecated 请使用控件本身的数据,直接放在control控件本身上 * @memberof AbstractControl */ dataConfig: DynamicFormDataConfig; /** * 控件共享事件 * */ controlShared: ControlShared; /** * 是否隐藏 */ hidden: boolean; propertyValueChanged$: Observable<{ name: string; value: any; }>; /** * @description 获取控件DataModel * * @memberof AbstractControl */ getDataModel(): ControlDataModel; /** * @description 设置控件的值 * * @param any value * @memberof AbstractControl */ setModelValue(value: any): void; /** * @description 获取model的value * * @returns model值 * @memberof AbstractControl */ getModelValue(): any; /** * @description 绑定事件 * * @memberof AbstractControl */ bindEvents(): void; /** * @description 验证验证器 * * @memberof AbstractControl */ validate(): void; propertyValueChanged(name: string, value: any): void; } /** * 布局控件 * */ export interface ControlLayoutHost { layoutHost: LayoutHostDirective; } /** * 动态控件容器 * */ export interface DynamicControlContainer extends ControlLayoutHost { controlTranslate: ControlTranslate; addControl?(control: ControlLayoutModel): Observable>; addControls?(controls: Array): Observable[]>; moveUpView?(hostView: ViewRef): void; moveDownView?(hostView: ViewRef): void; removeControl?(index?: number): void; } /** * 布局容器控件 * */ export interface LayoutControlContainer extends DynamicControlContainer { isContainer: boolean; control: AbstractContainer; } /** * 设计布局Host容器 * */ export interface DesignHostContainer extends LayoutControlContainer { selected: boolean; disableOperateControl: boolean; parentHost: DynamicControlContainer; componentRef: ComponentRef; moveUp(index?: number): void; moveDown(index?: number): void; getViewIndex(): number; remove(): void; } /** * @description 抽象容器 * * @export */ export interface AbstractContainer extends AbstractControl, DynamicControlContainer { } /** * @description 控件实体属性模型 * * @export */ export declare class ControlEntityAttributeDataModel { /** * @description 关联实体 * * @memberof ControlPublishDataModel */ associatedEntities: string; /** * @deprecated * @description 实体属性 1.3.6以后,此能更好的表示此属性升级为entityAttributes */ entityAttribute: string; /** * @description 实体属性 * * @memberof ControlPublishDataModel */ associatedEntityAttributes?: EntityAttributeDataModel[]; } /** * 属性数据模型 */ export interface EntityAttributeDataModel { /** * 源属性 */ source: string; /** * 关联属性 */ target: string; /** * 如果是JSON字段,json的key */ jsonKey?: string; } /** * 控件视图模型 * */ export declare class ControlViewModel extends ControlEntityAttributeDataModel { /** * 验证器 * * @memberof ControlViewModel */ validators: { [key: string]: ControlValidatorModel; }; /** * 关联实体名称 * * @memberof ControlViewModel */ associatedEntities: string; /** * 关联实体属性 * * @memberof ControlViewModel */ entityAttribute: string; /** * 展示列设置 * * @memberof ControlViewModel */ showCondition?: any; /** * 查询条件设置 * * @memberof ControlViewModel */ selectCondition?: SelectConditionViewModel; /** * 选项值设置 * * @memberof ControlViewModel */ option?: any; /** * 列宽 * * @memberof ControlViewModel */ columnLength?: number; /** * @description 标题内容 * * @memberof ControlViewModel */ caption: string; /** * id * * @memberof ControlViewModel */ id: string; /** * 样式类 * * @memberof ControlViewModel */ class: string; /** * 样式 * * @memberof ControlViewModel */ style: string; /** * 是否隐藏,默认false * * @memberof ControlViewModel */ isHidden: boolean; /** * 名称 * */ name: string; /** * 级联上级名称 * */ cascadeParentName: OptionProperty[]; /** * 根据Url获取级联防抖时间 * */ cascadeDataByUrlDebounceDueTime?: number; /** * 唯一标识 * */ __identityCode: string; } export declare class ContainerViewModel extends ControlViewModel { } export declare class ValueControlViewModel extends ControlViewModel { /** * @description 是否显示标题label * * @memberof ValueControlViewModel */ showLabel: boolean; /** * @description 值 * * @memberof ValueControlViewModel */ value: T; /** * 使用级联值 * * @memberof ValueControlViewModel */ useCascadeValueOfChild: boolean; /** * 级联值 */ cascadeValueOfChild: any; /** * 是否只读 * * @memberof ValueControlViewModel */ readonly: boolean; /** * 隐藏时是否清空值 * */ clearDataWhenHidden: boolean; /** * 查看时显示文本内容 * */ showContentAtView?: boolean; /** * 启用查看时编辑 * */ enableEditAtView?: boolean; /** * @description 启用查看时编辑的控件名称列表 * * @memberof ValueControlViewModel */ enableEditNameList?: string[]; /** * @description 控件id * * @memberof ValueControlViewModel */ id: string; /** * 是否广播事件 * */ isBroadCastEvent?: boolean; /** * 提示信息 */ placeholder?: string; /** * 是否默认触发级联 */ defaultTriggerCascade: boolean; constructor(caption: string); } export declare class LabelViewModel extends ValueControlViewModel { text: string; } export declare class TextBoxViewModel extends ValueControlViewModel { /** * @description 提示信息 * * @memberof TextBoxViewModel */ placeholder: string; constructor(caption: string, showLabel?: boolean); } /** * 级联父组件值通知器 * */ export interface CascadeParentValueNotification { /** * 级联上级值改变 */ onCascadeParentValueChange?: (values: any[]) => any; } /** * @description 控件DataModel * * @export */ export interface ControlDataModel { /** * 类型名称 * * @memberof ControlDataModel */ type: string; /** * 值 * * @memberof ControlDataModel */ model: ControlViewModel; /** * 子控件DataModel * * @memberof ControlDataModel */ children?: Array; } /** * @description 控件布局model * * @export */ export interface ControlLayoutModel { /** * @description 控件类型 * * @memberof ControlLayoutModel */ component: Type; /** * @description 类型名称 * * @memberof ControlLayoutModel */ type: string; /** * 控件model * * @memberof ControlLayoutModel */ model: ControlViewModel; /** * @description 子控件 * * @memberof ControlLayoutModel */ children?: Array; } /** * @description 控件事件 * * @export */ export interface ControlEvent { /** * @description 分组名称 * * @memberof ControlEvent */ groupName: string; /** * @description 名称 * * @memberof ControlEvent */ name: string; /** * 脚本,脚本是JavaScript原生脚本,或者是jquery脚本 * * @memberof ControlEvent */ script: string; /** * 描述 * * @memberof ControlEvent */ description?: string; } /** * @description 选项值变化,控件的数据源选项值发生变化时触发 * * @export */ export interface OptionValueChange { /** * 选项值变化,控件的数据源选项值发生变化时触发 * * @memberof OptionValueChange */ optionValueChange(): void; } /** * @description 数据源选项属性 * * @export */ export interface OptionProperty { /** * @description 是否选中 * * @memberof OptionProperty */ selected: boolean; /** * @description 显示内容 * * @memberof OptionProperty */ text: string; /** * @description 选项id * * @memberof OptionProperty */ id: string; /** * @description 选项值 * * @memberof OptionProperty */ value: any; /** * @description 数据显示成员 * * @memberof OptionProperty */ displayMember?: string; /** * @description 数据值成员 * * @memberof OptionProperty */ valueMember?: string; } export interface OptionItem { /** * 存储字段 */ id: string; /** * 显示字段 */ text: string; /** * 原始数据 */ data?: any; } /** * 级联控件父级值 */ export interface CascadeParentValue { /** * 控件名称 */ name: string; /** * 控件属性名称 */ property: string; /** * 控件值 */ value: any; /** * 操作 */ operate?: string; } /** * 控件操作模式 * */ export declare enum ControlOperateMode { /** * 初始 */ Initial = 0, /** * 添加 */ Add = 1, /** * 编辑 */ Edit = 2, /** * 只查看 */ View = 3 }