From 842f32c35c186ed61242dcc3882287a648f2de9c Mon Sep 17 00:00:00 2001 From: z9130 <984661593@qq.com> Date: Fri, 25 Oct 2024 11:25:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E4=B8=8D=E5=90=8C=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B9=E7=9B=B4=E6=8E=A5=E7=9A=84=E6=8B=96=E6=8B=BD?= =?UTF-8?q?=E6=95=88=E6=9E=9Cing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-test/src/store/canvas.ts | 19 +++ apps/web-test/src/store/index.ts | 3 +- apps/web-test/src/store/tiles.ts | 26 ++-- .../home/components/GridGroup/index.vue | 22 +++- .../home/components/Output5/index.vue | 10 +- .../src/views/dashboard/home/index.vue | 116 +++++++++++++++--- .../src/views/dashboard/home/utils.ts | 59 +++++++++ 7 files changed, 218 insertions(+), 37 deletions(-) create mode 100644 apps/web-test/src/store/canvas.ts diff --git a/apps/web-test/src/store/canvas.ts b/apps/web-test/src/store/canvas.ts new file mode 100644 index 00000000..f40021ff --- /dev/null +++ b/apps/web-test/src/store/canvas.ts @@ -0,0 +1,19 @@ +import { ref } from 'vue'; + +import { defineStore } from 'pinia'; + +export const useCanvasStore = defineStore('canvas', () => { + // 存储孙组件的 gridLayoutRef,以id为key + const gridLayoutRefs = ref(new Map()); + + // 设置 gridLayoutRef + const setGridLayoutRef = (id: string, refValue: any) => { + // id 格式化为字符串格式 + gridLayoutRefs.value.set(`${id}`, refValue); + }; + + return { + gridLayoutRefs, + setGridLayoutRef, + }; +}); diff --git a/apps/web-test/src/store/index.ts b/apps/web-test/src/store/index.ts index a5b6a2f5..2ba45505 100644 --- a/apps/web-test/src/store/index.ts +++ b/apps/web-test/src/store/index.ts @@ -1,2 +1,3 @@ export * from './auth'; -export * from './tiles' +export * from './canvas'; +export * from './tiles'; diff --git a/apps/web-test/src/store/tiles.ts b/apps/web-test/src/store/tiles.ts index 6ed43666..50387e4b 100644 --- a/apps/web-test/src/store/tiles.ts +++ b/apps/web-test/src/store/tiles.ts @@ -1,14 +1,14 @@ -import {defineStore} from 'pinia' -export const UseTilesStore = defineStore('tiles',{ - state: () => { - return { - tilesIsMove : !1, // 磁贴是否是可编辑状态 - - } +import { defineStore } from 'pinia'; + +export const UseTilesStore = defineStore('tiles', { + state: () => { + return { + tilesIsMove: !1, // 磁贴是否是可编辑状态 + }; + }, + actions: { + setTilesIsMove(data: boolean) { + this.tilesIsMove = data; }, - actions: { - setTilesIsMove(data: boolean){ - this.tilesIsMove = data - } - } -}) \ No newline at end of file + }, +}); diff --git a/apps/web-test/src/views/dashboard/home/components/GridGroup/index.vue b/apps/web-test/src/views/dashboard/home/components/GridGroup/index.vue index da5196b5..478bf8ce 100644 --- a/apps/web-test/src/views/dashboard/home/components/GridGroup/index.vue +++ b/apps/web-test/src/views/dashboard/home/components/GridGroup/index.vue @@ -14,7 +14,7 @@ import { import { CloseCircleFilled } from '@ant-design/icons-vue'; import { storeToRefs } from 'pinia'; -import { UseTilesStore } from '#/store'; +import { useCanvasStore, UseTilesStore } from '#/store'; import { debounce, @@ -23,6 +23,10 @@ import { } from '../../utils'; const props = defineProps({ + i: { + type: String, + default: '', + }, list: { type: Object, default: [], @@ -31,6 +35,7 @@ const props = defineProps({ const emit = defineEmits(['provideGridLayoutRef']); +const canvasStore = useCanvasStore(); const tilesStore = UseTilesStore(); const { list } = toRefs(props); @@ -336,8 +341,21 @@ onMounted(() => { nextTick(() => { console.log('我是孙组件', gridLayoutRef.value); - emit('provideGridLayoutRef', gridLayoutRef); + canvasStore.setGridLayoutRef(props.i, gridLayoutRef.value); }); + + // const boxes = document.querySelectorAll(`#${domId}`); + + // // 为每个 box 绑定鼠标悬停和离开事件 + // boxes.forEach((box) => { + // box.addEventListener('mouseover', () => { + // console.log(`鼠标进入: ${box.id}`); + // }); + + // box.addEventListener('mouseout', () => { + // console.log(`鼠标离开: ${box.id}`); + // }); + // }); }); defineExpose({ gridLayoutRef: gridLayoutRef.value, diff --git a/apps/web-test/src/views/dashboard/home/components/Output5/index.vue b/apps/web-test/src/views/dashboard/home/components/Output5/index.vue index eab10fd9..de12f1c8 100644 --- a/apps/web-test/src/views/dashboard/home/components/Output5/index.vue +++ b/apps/web-test/src/views/dashboard/home/components/Output5/index.vue @@ -11,12 +11,18 @@ import { Input, Space } from 'ant-design-vue'; import GridGroup from '../GridGroup/index.vue'; const props = defineProps({ + // 标识 + i: { + type: String, + default: '', + }, data: { type: Object, default: {}, }, }); -const emits = defineEmits(['editGroupName']); +const emits = defineEmits(['editGroupName', 'provideGridLayoutRef']); + const cardName = ref(props.data.name); const newCardName = ref(cardName.value); const isEdit = ref(true); @@ -37,6 +43,7 @@ setTimeout(() => { const handleGridLayoutRef = (ref) => { // 这里可以处理孙组件传递过来的 ref console.log('子组件 B 收到孙组件的 ref:', ref.value); + emits('provideGridLayoutRef', ref.value); }; defineExpose({ @@ -70,6 +77,7 @@ defineExpose({ +