import { IconRotate } from "@/assets/icons"; import { CompToolbars } from "@/modules/editor/objects/Toolbars"; import { css } from "@linaria/core"; import { defineComponent, onMounted, onUnmounted } from "vue"; import { useEditor } from "../../../.."; export const Transfer = defineComponent({ setup() { const editor = useEditor(); const { controls, helper } = editor; const { transferCtrl } = controls; const { transferStyle } = transferCtrl; onMounted(() => { setTimeout(() => { const pageEl = helper.findRootComp()?.$el; if (pageEl) { transferCtrl.init(pageEl.firstChild as HTMLElement); } }); }); onUnmounted(() => { transferCtrl.destroy(); // console.log("transferCtrl.destroy========================"); }); return () => { const comp = transferCtrl.currComp; const toolbarOpts = CompToolbars[transferCtrl.currComp?.compKey] || CompToolbars.default; // const showTransfer = // store.isEditComp || store.pageCompIds.includes(comp.id); const showTransfer = true; return ( transferStyle.width && (
{showTransfer && (
{toolbarOpts.map((item) => { return item.getVisible.call(editor, comp) ? ( item.onClick.call(editor, comp)} /> ) : null; })}
)}
{showTransfer && ( <>
transferCtrl.mousedown( e, comp.compKey === "Image" ? "resizeXY" : "scale" ) } />
transferCtrl.mousedown(e, "rotate")} >
transferCtrl.mousedown(e, "resizeY")} />
transferCtrl.mousedown(e, "resizeX")} /> )}
) ); }; }, }); const borderStyle = css` position: absolute; top: 0; left: 0; width: 100%; height: 100%; outline: 2px solid @inf-primary-color; pointer-events: none; z-index: 999; `; const resizeStyle = css` position: absolute; bottom: 0; right: 0; width: 16px; height: 16px; border-radius: 50%; background-color: #fff; z-index: 999; transform: translate(50%, 50%); box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.2); cursor: nwse-resize; &:hover { border-color: @inf-primary-color; } `; const transformBtnsStyle = css` @apply space-x-10px whitespace-nowrap; position: absolute; bottom: 0; left: 50%; font-size: 16px; z-index: 999; transform: translate(-50%, 50px); `; const transBtnStyle = css` display: inline-block; width: 36px; height: 36px; border-radius: 50%; background-color: #fff; text-align: center; line-height: 36px; font-size: 20px; color: #333; @apply shadow cursor-move; &:hover { color: #fff; background-color: @inf-primary-color; } `; const toolbarStyle = css` @apply bg-white shadow rounded space-x-4px p-4px whitespace-nowrap; position: absolute; top: 0; left: 50%; transform: translate(-50%, -60px); z-index: 999; `; const resizeHeightBtnCls = css` position: absolute; width: 30px; height: 8px; border-radius: 4px; left: 50%; transform: translate(-50%, -4px); cursor: ns-resize; background: rgba(255, 255, 255, 0.3); &:hover { background: @inf-primary-color; } @apply shadow; z-index: 999; `; const resizeWidthBtnCls = css` position: absolute; width: 8px; height: 30px; border-radius: 4px; right: 0; transform: translate(4px, -50%); cursor: ew-resize; background: rgba(255, 255, 255, 0.3); &:hover { background: @inf-primary-color; } @apply shadow; z-index: 999; `;