UNPKG

@farris/ui-vue

Version:

Farris Vue, a Farris Design based Vue3 component library.

144 lines (143 loc) 5.58 kB
import { DesignFormVariable, DesignViewModelField, FormSchemaEntity, FormSchemaEntityField } from '../../../common'; import { Ref } from "vue"; import { ComponentSchema, DesignerComponentButton, DesignerComponentInstance, DesignerItemContext } from "../types"; export interface DesignerHTMLElement extends HTMLElement { /** 记录各子元素对应的控件schema json的集合,用于container类dom节点 */ contents?: ComponentSchema[]; /** 记录element对应的component实例,用于单个component节点 */ componentInstance: Ref<DesignerComponentInstance>; schema: ComponentSchema; } export interface UseDragula { attachComponents: (element: HTMLElement, component: ComponentSchema) => void; initializeDragula: (containerElement: DesignerHTMLElement) => void; getDragulaInstance: () => any; } export interface DesignerHostService { eventsEditorUtils: any; formSchemaUtils: any; formMetadataConverter: any; designViewModelUtils: any; controlCreatorUtils: any; metadataService?: any; formStateMachineUtils: any; schemaService?: any; designerContext?: any; [key: string]: any; } /** * 绑定上下文 */ export interface ComponentBindingSourceContext { /** 控件绑定类型:字段|实体 */ bindingType: 'field' | 'entity'; /** 控件绑定的实体schema字段 */ entityFieldNode?: FormSchemaEntityField; /** 控件绑定的实体schema字段若是关联带出字段,此属性记录关联字段所属的根字段 */ entityRootFieldNode?: FormSchemaEntityField; /** 实体schema字段对应的DesignViewModel结构 */ designViewModelField?: DesignViewModelField; /** 变量字段节点 */ variableFieldNode?: DesignFormVariable; /** 要绑定的实体 */ bindingEntity?: FormSchemaEntity; /** 要绑定的字段集合 */ bindingEntityFields?: FormSchemaEntityField[]; /** 实体在视图模型中的绑定信息 */ bindTo?: string; /** 生成控件的标题 */ entityTitle?: string; } /** * 拖拽上下文 */ export interface DraggingResolveContext { /** 拖拽的源元素 */ sourceElement: DesignerHTMLElement; /** 拖拽的源元素父容器 */ sourceContainer: DesignerHTMLElement; /** 拖拽的目标容器 */ targetContainer: DesignerHTMLElement; /** 拖拽的控件类型 */ componentType: string; /** 拖拽的控件名称 */ label: string; /** 拖拽目标区域的组件实例 */ parentComponentInstance: DesignerComponentInstance; /** 拖拽位置在目标区域的索引值 */ targetPosition?: number; /** 拖拽控件的类别 */ componentCategory?: string; /** 拖拽来源:控件工具箱control / 实体树字段field / 实体树实体entity / 现有控件移动位置move */ sourceType: string; /** 工具箱中的控件,启用的特性 */ componentFeature?: string; /** 要添加的控件Schema */ componentSchema?: any; /** 绑定信息 */ bindingSourceContext?: ComponentBindingSourceContext | null; /** 绑定的目标字段或实体id */ bindingTargetId?: string; } export interface UseDesignerRules { /** * 判断是否可以接收拖拽新增的子级控件 */ canAccepts(draggingContext: DraggingResolveContext): boolean; /** * 判断当前容器是否是固定的上下文的中间层级 */ checkIsInFixedContextRules?(): boolean; getStyles?(): string; getDesignerClass?(): string; /** * 容器接收新创建的子控件 */ onResolveNewComponentSchema?: (resolveContext: DraggingResolveContext, componentSchema: ComponentSchema) => ComponentSchema; /** * 移动控件后事件:在可视化设计器中,容器接收控件后调用此事件 */ onAcceptMovedChildElement?: (sourceElement: DesignerHTMLElement, sourceContainer: DesignerHTMLElement) => void; /** * 移动内部控件后事件:在可视化设计器中,容器中的控件被移出后调用此事件 */ onChildElementMovedOut?: (sourceElement: DesignerHTMLElement) => void; /** * 判断是否支持移动组件 */ checkCanMoveComponent?(): boolean; /** * 判断是否支持删除组件 */ checkCanDeleteComponent?(): boolean; /** * 判断是否支持增加组件 */ checkCanAddComponent?(): boolean; /** * 判断是否隐藏组件间距和线条 */ hideNestedPaddingInDesginerView?(): boolean; /** 接收控件属性信息 */ getPropsConfig?(schema?: any, componentInstance?: any): any; /** * 组件在拖拽时是否需要将所属的Component一起拖拽,用于form、data-grid等控件的拖拽 */ triggerBelongedComponentToMoveWhenMoved?: Ref<boolean>; /** * 组件在被移除时是否需要将所属的Component一起移除,用于form、data-grid等控件的拖拽 */ triggerBelongedComponentToDeleteWhenDeleted?: Ref<boolean>; /** 组件删除后事件 */ onRemoveComponent?(): void; /** 获取控件自定义操作按钮 */ getCustomButtons?: () => DesignerComponentButton[]; /** 控件属性变更后事件 */ onPropertyChanged?: (event: any) => void; /** 获取可拖拽的上层容器 */ getDraggableDesignItemElement?: (context: DesignerItemContext) => Ref<any> | null; /** 获取组件的展示标题 */ getComponentTitle?: () => string; /** 配置组件的基础信息(展示标题、路径) */ setComponentBasicInfoMap?: () => void; }