|
@@ -1,50 +1,62 @@
|
|
|
<script setup lang="ts">
|
|
|
-import { ref } from "vue"
|
|
|
+import { ref , computed} from "vue"
|
|
|
import Header from "./layouts/header.vue"
|
|
|
import Footer from "./layouts/footer.vue"
|
|
|
|
|
|
import Draggable from "vuedraggable"
|
|
|
+import { data, generateDataSource } from "./panel"
|
|
|
|
|
|
-import { data } from "./panel"
|
|
|
|
|
|
-const editable = ref(true)
|
|
|
+const editable = ref(false)
|
|
|
+const disabled = computed(() => !editable.value)
|
|
|
|
|
|
-function handleDrop(evt) {
|
|
|
- console.log(evt)
|
|
|
+const { currentData, record, undo } = generateDataSource(data)
|
|
|
+const leftPanels = ref<any[]>([])
|
|
|
+
|
|
|
+
|
|
|
+function handleEdit(){
|
|
|
+ record()
|
|
|
+ editable.value = true
|
|
|
+}
|
|
|
+
|
|
|
+function handleConfirm(){
|
|
|
+ editable.value = false
|
|
|
+}
|
|
|
+
|
|
|
+function handleCancel(){
|
|
|
+ undo()
|
|
|
+ editable.value = false
|
|
|
}
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
|
<div class="welcome">
|
|
|
<div :class="`border-1 box-border p-[5px] ${editable ? 'border-[#9fd2ff]' : 'border-transparent'}`">
|
|
|
- <!-- <Header v-model="editable" /> -->
|
|
|
-
|
|
|
+ <Header :editable="editable" @edit="handleEdit" />
|
|
|
<div class="flex w-full">
|
|
|
- <!-- left-start -->
|
|
|
- <div class="w-[1100px] h-full mr-[10px]">
|
|
|
- <Draggable :list="data.left" group="left" @change="handleDrop">
|
|
|
+ <div class="w-[1100px] h-full mr-[10px] flex-1">
|
|
|
+ <Draggable v-model="currentData.left" group="home" :animation="200" :disabled="disabled">
|
|
|
<template #item="{ element }">
|
|
|
- <div class="w-full h-[180px] mb-2">
|
|
|
- <component :editable="editable" :is="element.key" />
|
|
|
+ <div class="w-full mb-2">
|
|
|
+ <component :editable="editable" :is="element.key" ref="leftPanels" />
|
|
|
</div>
|
|
|
</template>
|
|
|
</Draggable>
|
|
|
</div>
|
|
|
- <!-- left-end -->
|
|
|
|
|
|
- <!-- right-start -->
|
|
|
- <div class="flex-1 h-full">
|
|
|
- <template v-for="item in data.right" :key="item.key">
|
|
|
- <div class="w-full h-[180px] mb-2">
|
|
|
- <component :editable="editable" :is="item.key" />
|
|
|
- </div>
|
|
|
- </template>
|
|
|
+ <div class="h-full w-[570px]">
|
|
|
+ <Draggable v-model="currentData.right" group="home" :animation="200" :disabled="disabled">
|
|
|
+ <template #item="{ element }">
|
|
|
+ <div class="w-full mb-2">
|
|
|
+ <component :editable="editable" :is="element.key" />
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </Draggable>
|
|
|
</div>
|
|
|
- <!-- right-end -->
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
- <Footer v-model="editable" />
|
|
|
+ <Footer :editable="editable" @confirm="handleConfirm" @cancel="handleCancel" />
|
|
|
</div>
|
|
|
</template>
|
|
|
|