From 54b9338e52bd60be780c3baa7918d4f23dfab1af Mon Sep 17 00:00:00 2001 From: IchliebedichZhu <54796446@qq.com> Date: Wed, 20 Mar 2024 18:08:16 +0000 Subject: [PATCH] rebuilt: canvas design store to pinia --- .../business/save-download/CreateCover.vue | 14 +- .../modules/layout/designBoard/index.vue | 23 +- src/components/modules/layout/lineGuides.vue | 6 +- .../modules/layout/zoomControl/index.vue | 15 +- .../modules/panel/wrap/GraphListWrap.vue | 5 +- .../modules/panel/wrap/PhotoListWrap.vue | 5 +- .../modules/panel/wrap/UserWrap.vue | 5 +- .../modules/widgets/wImage/wImage.vue | 546 ++++++++++-------- .../modules/widgets/wImage/wImageSetting.ts | 67 +++ .../modules/widgets/wQrcode/wQrcode.vue | 2 +- src/mixins/methods/handlePaste.ts | 5 +- src/pinia/design/canvas/index.ts | 96 +++ src/pinia/design/page/index.ts | 8 + src/pinia/index.ts | 4 +- src/store/modules/design/actions.ts | 34 +- src/store/modules/design/index.ts | 80 +-- src/store/modules/design/mutations.ts | 22 +- src/store/pinia.ts | 0 src/views/Index.vue | 7 +- src/views/Psd.vue | 10 +- 20 files changed, 605 insertions(+), 349 deletions(-) create mode 100644 src/components/modules/widgets/wImage/wImageSetting.ts create mode 100644 src/pinia/design/canvas/index.ts delete mode 100644 src/store/pinia.ts diff --git a/src/components/business/save-download/CreateCover.vue b/src/components/business/save-download/CreateCover.vue index a08dd7a..e6b0234 100644 --- a/src/components/business/save-download/CreateCover.vue +++ b/src/components/business/save-download/CreateCover.vue @@ -13,11 +13,15 @@ import { useStore } from 'vuex' import html2canvas from 'html2canvas' import Qiniu from '@/common/methods/QiNiu' -import { useSetupMapGetters } from '@/common/hooks/mapGetters' +// import { useSetupMapGetters } from '@/common/hooks/mapGetters' +import { storeToRefs } from 'pinia'; +import { useCanvasStore } from '@/pinia'; const store = useStore(); -const { dZoom } = useSetupMapGetters(['dZoom']) +// const { dZoom } = useSetupMapGetters(['dZoom']) +const canvasStore = useCanvasStore() +const { dZoom } = storeToRefs(canvasStore) // props: ['modelValue'], @@ -29,7 +33,8 @@ async function createCover(cb: any) { store.dispatch('selectWidget', { uuid: '-1', }) - store.dispatch('updateZoom', 100) + canvasStore.updateZoom(100) + // store.dispatch('updateZoom', 100) const opts = { useCORS: true, // 跨域图片 @@ -51,7 +56,8 @@ async function createCover(cb: any) { 'image/jpeg', 0.15, ) - store.dispatch('updateZoom', nowZoom) + canvasStore.updateZoom(nowZoom) + // store.dispatch('updateZoom', nowZoom) clonePage.remove() }) }, 10) diff --git a/src/components/modules/layout/designBoard/index.vue b/src/components/modules/layout/designBoard/index.vue index 2403dcc..d9cd711 100644 --- a/src/components/modules/layout/designBoard/index.vue +++ b/src/components/modules/layout/designBoard/index.vue @@ -70,7 +70,7 @@ import getComponentsData from '@/common/methods/DesignFeatures/setComponents' import { debounce } from 'throttle-debounce' import { move, moveInit } from '@/mixins/move' import { useSetupMapGetters } from '@/common/hooks/mapGetters' -import { usePageStore } from '@/pinia' +import { useCanvasStore, usePageStore } from '@/pinia' import { storeToRefs } from 'pinia' // 页面设计组件 type TProps = { @@ -92,11 +92,12 @@ type TSetting = { const store = useStore() const { pageDesignCanvasId } = defineProps() const { - dPaddingTop, dZoom, dScreen, dWidgets, + dWidgets, dActiveElement, dSelectWidgets, dAltDown, dDraging, dHoverUuid, showRotatable -} = useSetupMapGetters(['dPaddingTop', 'dZoom', 'dScreen', 'dWidgets', 'dActiveElement', 'dHoverUuid', 'dSelectWidgets', 'dAltDown', 'dDraging', 'showRotatable']) +} = useSetupMapGetters(['dWidgets', 'dActiveElement', 'dHoverUuid', 'dSelectWidgets', 'dAltDown', 'dDraging', 'showRotatable']) const { dPage } = storeToRefs(usePageStore()) +const { dZoom, dPaddingTop, dScreen } = storeToRefs(useCanvasStore()) let _dropIn: string | null = '' @@ -188,24 +189,24 @@ async function drop(e: MouseEvent) { } }) const half = { - x: parent.width ? (parent.width * store.getters.dZoom) / 100 / 2 : 0, - y: parent.height ? (parent.height * store.getters.dZoom) / 100 / 2 : 0 + x: parent.width ? (parent.width * dZoom.value) / 100 / 2 : 0, + y: parent.height ? (parent.height * dZoom.value) / 100 / 2 : 0 } componentItem.forEach((element) => { - element.left += (lost ? lostX - half.x : e.layerX - half.x) * (100 / store.getters.dZoom) - element.top += (lost ? lostY - half.y : e.layerY - half.y) * (100 / store.getters.dZoom) + element.left += (lost ? lostX - half.x : e.layerX - half.x) * (100 / dZoom.value) + element.top += (lost ? lostY - half.y : e.layerY - half.y) * (100 / dZoom.value) }) store.dispatch('addGroup', componentItem) // addGroup(item) } // 设置坐标 const half = { - x: setting.width ? (setting.width * store.getters.dZoom) / 100 / 2 : 0, - y: setting.height ? (setting.height * store.getters.dZoom) / 100 / 2 : 0 + x: setting.width ? (setting.width * dZoom.value) / 100 / 2 : 0, + y: setting.height ? (setting.height * dZoom.value) / 100 / 2 : 0 } // const half = { x: (this.dDragInitData.offsetX * this.dZoom) / 100, y: (this.dDragInitData.offsetY * this.dZoom) / 100 } - setting.left = (lost ? lostX - half.x : e.layerX - half.x) * (100 / store.getters.dZoom) - setting.top = (lost ? lostY - half.y : e.layerY - half.y) * (100 / store.getters.dZoom) + setting.left = (lost ? lostX - half.x : e.layerX - half.x) * (100 / dZoom.value) + setting.top = (lost ? lostY - half.y : e.layerY - half.y) * (100 / dZoom.value) if (lost && type === 'image') { // 如果不从画布加入,且不是图片类型,则判断是否加入到svg中 const target = await getTarget(eventTarget) diff --git a/src/components/modules/layout/lineGuides.vue b/src/components/modules/layout/lineGuides.vue index fd399e3..5f88cc3 100644 --- a/src/components/modules/layout/lineGuides.vue +++ b/src/components/modules/layout/lineGuides.vue @@ -13,6 +13,7 @@ import { watch } from 'vue' import { useStore } from 'vuex' import Guides, { GuideOptions } from '@scena/guides' +import { useCanvasStore } from '@/pinia'; type TProps = { show: boolean @@ -35,6 +36,7 @@ const props = withDefaults(defineProps(), { }) const store = useStore() +const canvasStore = useCanvasStore() const container = 'page-design' // page-design out-page let guidesTop: TGuidesData | null = null let guidesLeft: TGuidesData | null = null @@ -47,7 +49,7 @@ watch( ) watch( - () => store.getters.dZoom, + () => canvasStore.dZoom, () => { changeScroll() }, @@ -113,7 +115,7 @@ function render() { function changeScroll() { if (guidesTop && guidesLeft) { - const zoom = store.getters.dZoom / 100 + const zoom = canvasStore.dZoom / 100 guidesTop.zoom = zoom guidesLeft.zoom = zoom if (zoom < 0.9) { diff --git a/src/components/modules/layout/zoomControl/index.vue b/src/components/modules/layout/zoomControl/index.vue index deb318a..5ff3161 100644 --- a/src/components/modules/layout/zoomControl/index.vue +++ b/src/components/modules/layout/zoomControl/index.vue @@ -27,7 +27,7 @@ import { OtherList, TZoomData, ZoomList } from './data'; import { useSetupMapGetters } from '@/common/hooks/mapGetters'; import { useRoute } from 'vue-router'; import { storeToRefs } from 'pinia'; -import { usePageStore } from '@/pinia'; +import { useCanvasStore, usePageStore } from '@/pinia'; const route = useRoute() const store = useStore() @@ -48,8 +48,10 @@ const otherIndex = ref(-1) const bestZoom = ref(0) const curAction = ref('') -const { dScreen, zoomScreenChange, dZoom } = useSetupMapGetters(['dScreen', 'zoomScreenChange', 'dZoom']) +const { zoomScreenChange } = useSetupMapGetters(['zoomScreenChange']) +const canvasStore = useCanvasStore() const { dPage } = storeToRefs(usePageStore()) +const { dZoom, dScreen } = storeToRefs(canvasStore) watch( @@ -79,7 +81,8 @@ watch( if (realValue === -1) { realValue = calcZoom() } - store.dispatch('updateZoom', realValue) + canvasStore.updateZoom(realValue) + // store.dispatch('updateZoom', realValue) // updateZoom(realValue) autoFixTop() } @@ -152,7 +155,8 @@ function changeScreen() { function screenChange() { // 弹性尺寸即时修改 if (activezoomIndex.value === zoomList.value.length - 1) { - store.dispatch('updateZoom', calcZoom()) + canvasStore.updateZoom(calcZoom()) + // store.dispatch('updateZoom', calcZoom()) // this.updateZoom(this.calcZoom()) autoFixTop() } @@ -221,7 +225,8 @@ function sub() { function mousewheelZoom(down: boolean) { const value = Number(dZoom.value.toFixed(0)) if (down && value <= 1) return - store.dispatch('updateZoom', down ? value - 1 : value + 1) + canvasStore.updateZoom(down ? value - 1 : value + 1) + // store.dispatch('updateZoom', down ? value - 1 : value + 1) // updateZoom(down ? value - 1 : value + 1) zoom.value.text = (value + '%') as any autoFixTop() diff --git a/src/components/modules/panel/wrap/GraphListWrap.vue b/src/components/modules/panel/wrap/GraphListWrap.vue index 9f1e3bc..bd0e4f9 100644 --- a/src/components/modules/panel/wrap/GraphListWrap.vue +++ b/src/components/modules/panel/wrap/GraphListWrap.vue @@ -41,7 +41,8 @@