|
@@ -0,0 +1,158 @@
|
|
|
|
+<template>
|
|
|
|
+ <div class="layout-width">
|
|
|
|
+ <template v-if="record.type == 'tabs'">
|
|
|
|
+ <div class="grid-box" @click.stop="handleSelectItem(record)">
|
|
|
|
+ <el-tabs value="1">
|
|
|
|
+ <el-tab-pane
|
|
|
|
+ v-for="(tabItem, index) in record.columns"
|
|
|
|
+ :key="index"
|
|
|
|
+ :label="tabItem.label"
|
|
|
|
+ :name="index + ''"
|
|
|
|
+ >
|
|
|
|
+ <div class="grid-box-content">
|
|
|
|
+ <draggable
|
|
|
|
+ tag="div"
|
|
|
|
+ class="draggable-box"
|
|
|
|
+ v-bind="{
|
|
|
|
+ group: 'form-draggable',
|
|
|
|
+ ghostClass: 'moving',
|
|
|
|
+ animation: 180,
|
|
|
|
+ handle: '.drag-move',
|
|
|
|
+ }"
|
|
|
|
+ v-model="tabItem.list"
|
|
|
|
+ @start="$emit('dragStart', $event, tabItem.list)"
|
|
|
|
+ @add="$emit('handleColAdd', $event, tabItem.list)"
|
|
|
|
+ >
|
|
|
|
+ <!-- @start="$emit('dragStart', $event, tabItem.list)"
|
|
|
|
+ @add="$emit('handleColAdd', $event, tabItem.list)" -->
|
|
|
|
+ <transition-group tag="div" name="list" class="list-main">
|
|
|
|
+ <preViewItem
|
|
|
|
+ class="drag-move"
|
|
|
|
+ v-for="(item, index) in tabItem.list"
|
|
|
|
+ :key="index"
|
|
|
|
+ :record="item"
|
|
|
|
+ @handleDelete="handleDelete"
|
|
|
|
+ />
|
|
|
|
+ </transition-group>
|
|
|
|
+ </draggable>
|
|
|
|
+ </div>
|
|
|
|
+ </el-tab-pane>
|
|
|
|
+ </el-tabs>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ <template v-else-if="record.type == 'grid'">
|
|
|
|
+ <!-- 栅格布局 -->
|
|
|
|
+ <div class="grid-box" @click.stop="handleSelectItem(record)">
|
|
|
|
+ <el-row class="grid-row" :gutter="record.options.gutter">
|
|
|
|
+ <el-col
|
|
|
|
+ class="grid-col"
|
|
|
|
+ v-for="(colItem, idnex) in record.columns"
|
|
|
|
+ :key="idnex"
|
|
|
|
+ :span="colItem.span || 0"
|
|
|
|
+ >
|
|
|
|
+ <div class="grid-box-content">
|
|
|
|
+ <draggable
|
|
|
|
+ tag="div"
|
|
|
|
+ class="draggable-box"
|
|
|
|
+ v-bind="{
|
|
|
|
+ group: 'form-draggable',
|
|
|
|
+ ghostClass: 'moving',
|
|
|
|
+ animation: 180,
|
|
|
|
+ handle: '.drag-move',
|
|
|
|
+ }"
|
|
|
|
+ v-model="colItem.list"
|
|
|
|
+ @start="$emit('dragStart', $event, colItem.list)"
|
|
|
|
+ @add="$emit('handleColAdd', $event, colItem.list)"
|
|
|
|
+ >
|
|
|
|
+ <transition-group tag="div" name="list" class="list-main">
|
|
|
|
+ <preViewItem
|
|
|
|
+ class="drag-move"
|
|
|
|
+ v-for="(item, index) in colItem.list"
|
|
|
|
+ :key="index"
|
|
|
|
+ :record="item"
|
|
|
|
+ @handleDelete="handleDelete"
|
|
|
|
+ />
|
|
|
|
+ </transition-group>
|
|
|
|
+ </draggable>
|
|
|
|
+ </div>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ <template v-else-if="record.type == 'divider'">
|
|
|
|
+ <!-- 分割线 -->
|
|
|
|
+ <div class="grid-box divider-wrap" style="width: 100%">
|
|
|
|
+ <el-divider
|
|
|
|
+ @click.stop="handleSelectItem(record)"
|
|
|
|
+ :content-position="record.options.orientation"
|
|
|
|
+ >{{ record.options.title || "" }}</el-divider
|
|
|
|
+ >
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ <template v-else-if="record.type == 'form'">
|
|
|
|
+ <KFormDesign :jsonData="record.dfVueTemplate"></KFormDesign>
|
|
|
|
+ </template>
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script>
|
|
|
|
+import FormCard from "../component/FormCard.vue";
|
|
|
|
+import KFormDesign from "./KFormDesign.vue";
|
|
|
|
+import draggable from "vuedraggable";
|
|
|
|
+export default {
|
|
|
|
+ name: "preViewItem",
|
|
|
|
+ props: ["record"],
|
|
|
|
+ components: { FormCard, draggable, KFormDesign },
|
|
|
|
+ data() {
|
|
|
|
+ return {};
|
|
|
|
+ },
|
|
|
|
+ computed: {},
|
|
|
|
+ watch: {
|
|
|
|
+ record() {
|
|
|
|
+ console.log("record", this.record);
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ methods: {
|
|
|
|
+ // 删除
|
|
|
|
+ deleHandle(record) {
|
|
|
|
+ console.log("dele", record);
|
|
|
|
+ this.$emit("handleDelete", record);
|
|
|
|
+ },
|
|
|
|
+ handleSelectItem(record) {
|
|
|
|
+ this.$emit("handleSelectItem", record);
|
|
|
|
+ },
|
|
|
|
+ handleDelete(record) {
|
|
|
|
+ this.$emit("handleDelete", record);
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+<style scoped lang="scss">
|
|
|
|
+.grid-box-content {
|
|
|
|
+ min-height: 60px !important;
|
|
|
|
+ min-width: 50px !important;
|
|
|
|
+ border: 1px dashed #ccc;
|
|
|
|
+ background: #fff;
|
|
|
|
+}
|
|
|
|
+.layout-width {
|
|
|
|
+ position: relative;
|
|
|
|
+ .delete {
|
|
|
|
+ position: absolute;
|
|
|
|
+ top: 0;
|
|
|
|
+ right: 0;
|
|
|
|
+ width: 30px;
|
|
|
|
+ height: 30px;
|
|
|
|
+ line-height: 30px;
|
|
|
|
+ text-align: center;
|
|
|
|
+ color: #ee88e5;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+.divider-wrap {
|
|
|
|
+ height: 50px;
|
|
|
|
+ background: #fff;
|
|
|
|
+ display: flex;
|
|
|
|
+ border: 1px dashed #ccc;
|
|
|
|
+ justify-content: center;
|
|
|
|
+}
|
|
|
|
+</style>
|