vue3-free-layout
Version:
[vue3+ts]拖动布局,自由拖动,标尺,放大缩小,控件之间的标尺
77 lines (76 loc) • 3.07 kB
TypeScript
import { DesignWidget, Point, Widget } from "../types";
import { Component, InjectionKey, Ref } from "vue";
import AlignmentLineService from "@/services/alignmentLine.service";
import SynchronizeService, { YWidget } from "@/services/synchronize.service";
import UtilsService from "@/services/utils.service";
import { Publisher } from "@/utils/publisher";
export interface Modal {
newWidget?: DesignWidget;
rect: {
x: number;
y: number;
width: number;
height: number;
};
canvaseRect: {
x: number;
y: number;
width: number;
height: number;
};
pageRect: {
x: number;
y: number;
width: number;
height: number;
cwidth: number;
cheight: number;
padding: [number, number, number, number];
};
scrollLeft: number;
scrollTop: number;
scale: number;
selecteds: Array<YWidget>;
widgets: Array<DesignWidget>;
}
export default class DesignService {
props: any;
emit: (event: 'page-resized' | 'drag-start' | 'drag-moving' | 'drag-end' | 'selected-change' | 'deleted' | 'addNewWidget' | 'delNewWidget' | 'addHeight', ...args: any) => void;
static token: InjectionKey<DesignService>;
static itemSlot: InjectionKey<(widget: DesignWidget) => Component>;
static SPAN: number;
drawerRef: Ref<HTMLElement | null>;
selectedNewWidget?: Widget;
selectedMousePoint?: Point;
selectedNewOrgState?: DesignWidget;
modal: Modal;
utils: UtilsService;
boundaryLine: import("vue").ComputedRef<import("@/services/alignmentLine.service").BoundaryLine[]>;
syncService: SynchronizeService<DesignWidget>;
alignLineService: AlignmentLineService;
isNotOverlapInGridPublisher: Publisher<(widgets: Array<DesignWidget>) => boolean, DesignWidget[]>;
canvase2PanelRect: import("vue").ComputedRef<{
x: number;
y: number;
ex: number;
ey: number;
}>;
emitter: import("mitt").Emitter<Record<string, any>>;
handlerSelectedChange: () => void;
constructor(props: any, emit: (event: 'page-resized' | 'drag-start' | 'drag-moving' | 'drag-end' | 'selected-change' | 'deleted' | 'addNewWidget' | 'delNewWidget' | 'addHeight', ...args: any) => void, slots: any);
initWidgets(widgets: Array<Widget>): void;
handlerSelecteds(): () => void;
createWidgetHandler(widget: Widget): void;
newWidgetDragingRegistHandler: (event: MouseEvent) => void;
newWidgetDropRegistHandler: (event: MouseEvent) => void;
deleteWidget(id: string): void;
addScale(value: number): void;
setScale(newscale: number): void;
setSelectedArea(begin: Point, end: Point): void;
addSelected(widget: YWidget): void;
setSelected(widgets: Array<YWidget>): void;
clearnSelected(): void;
deleteSelected(id: string): void;
changePageSize(width: number, height: number, padding: [number, number, number, number]): void;
getPageWidgets(): DesignWidget[];
}