From c8789d22efd1679b71c08b8fb710338a2e1861fa Mon Sep 17 00:00:00 2001 From: qianmoQ Date: Tue, 19 Nov 2024 19:49:36 +0800 Subject: [PATCH] feat(data builder): support component slot --- docs/components/data-builder.md | 79 ++++++++++++++ src/App.vue | 21 +++- .../data-builder/ShadcnDataBuilderCanvas.vue | 13 ++- .../ShadcnDataBuilderConfigure.vue | 3 +- .../data-builder/ShadcnDataBuilderEditor.vue | 7 +- .../ShadcnDataBuilderRenderer.vue | 102 ++++++++++++++++++ 6 files changed, 219 insertions(+), 6 deletions(-) create mode 100644 src/ui/data-builder/ShadcnDataBuilderRenderer.vue diff --git a/docs/components/data-builder.md b/docs/components/data-builder.md index 3c311518..8268f0e4 100644 --- a/docs/components/data-builder.md +++ b/docs/components/data-builder.md @@ -205,6 +205,38 @@ const items = ref([ ::: +## Slot + +::: raw + + + + + + + +::: + +::: details Show code + +```vue + +``` + +::: + ## DataBuilder Props +## DataBuilder Slots + + + + ## DataBuilder Events { + if (!configure) { + return null + } + const group = configure.find(g => g.group === groupName) + if (!group) { + return null + } + const item = group.items?.find(item => item.label === label) + return item?.value +} diff --git a/src/App.vue b/src/App.vue index 877f6db5..fabe6021 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,10 +1,15 @@ @@ -66,4 +71,16 @@ const panels = ref([ ] } ]) + +const getConfigValue = (configure, groupName, label) => { + if (!configure) { + return null + } + const group = configure.find(g => g.group === groupName) + if (!group) { + return null + } + const item = group.items?.find(item => item.label === label) + return item?.value +} diff --git a/src/ui/data-builder/ShadcnDataBuilderCanvas.vue b/src/ui/data-builder/ShadcnDataBuilderCanvas.vue index e6b16534..e887898d 100644 --- a/src/ui/data-builder/ShadcnDataBuilderCanvas.vue +++ b/src/ui/data-builder/ShadcnDataBuilderCanvas.vue @@ -161,7 +161,17 @@ ]" :style="getComponentStyle(item)" @mousedown="onComponentMouseDown($event, item)"> - {{ item.label }} + + + + + + + +
() const props = withDefaults(defineProps(), { diff --git a/src/ui/data-builder/ShadcnDataBuilderConfigure.vue b/src/ui/data-builder/ShadcnDataBuilderConfigure.vue index c286815e..df3cb217 100644 --- a/src/ui/data-builder/ShadcnDataBuilderConfigure.vue +++ b/src/ui/data-builder/ShadcnDataBuilderConfigure.vue @@ -264,8 +264,7 @@ watch(() => props.selectedComponent, (newVal) => { x: newVal.x, y: newVal.y, width: newVal.width, - height: newVal.height, - configure: newVal.configure + height: newVal.height } } }, { deep: true }) diff --git a/src/ui/data-builder/ShadcnDataBuilderEditor.vue b/src/ui/data-builder/ShadcnDataBuilderEditor.vue index 6a221fe2..99a92ed9 100644 --- a/src/ui/data-builder/ShadcnDataBuilderEditor.vue +++ b/src/ui/data-builder/ShadcnDataBuilderEditor.vue @@ -19,7 +19,12 @@ :canvas-style="canvasStyle" :show-guidelines="showGuidelines" @select="onSelect" - @update:selected-id="selectedId = $event"/> + @update:selected-id="selectedId = $event"> + + + + +
+ + + + + + + + +
+ + + +