| 对比新文件 |
| | |
| | | <template> |
| | | <el-col :span="element.span" :class="className" @click.stop="activeItem(element)"> |
| | | <el-form-item :label="element.label" :label-width="element.labelWidth ? element.labelWidth + 'px' : null" |
| | | :required="element.required" v-if="element.layout === 'colFormItem'"> |
| | | <render :key="element.tag" :conf="element" v-model="element.defaultValue" /> |
| | | </el-form-item> |
| | | <el-row :gutter="element.gutter" :class="element.class" @click.stop="activeItem(element)" v-else> |
| | | <span class="component-name"> {{ element.componentName }} </span> |
| | | <draggable group="componentsGroup" :animation="340" :list="element.children" class="drag-wrapper" item-key="label" |
| | | ref="draggableItemRef" :component-data="getComponentData()"> |
| | | <template #item="scoped"> |
| | | <draggable-item :key="scoped.element.renderKey" :drawing-list="element.children" :element="scoped.element" |
| | | :index="index" :active-id="activeId" :form-conf="formConf" @activeItem="activeItem(scoped.element)" |
| | | @copyItem="copyItem(scoped.element, element.children)" |
| | | @deleteItem="deleteItem(scoped.index, element.children)" /> |
| | | </template> |
| | | </draggable> |
| | | </el-row> |
| | | <span class="drawing-item-copy" title="澶嶅埗" @click.stop="copyItem(element)"> |
| | | <el-icon><CopyDocument /></el-icon> |
| | | </span> |
| | | <span class="drawing-item-delete" title="鍒犻櫎" @click.stop="deleteItem(index)"> |
| | | <el-icon><Delete /></el-icon> |
| | | </span> |
| | | </el-col> |
| | | </template> |
| | | <script setup name="DraggableItem"> |
| | | import draggable from "vuedraggable/dist/vuedraggable.common" |
| | | import render from '@/utils/generator/render' |
| | | |
| | | const props = defineProps({ |
| | | element: Object, |
| | | index: Number, |
| | | drawingList: Array, |
| | | activeId: { |
| | | type: [String, Number] |
| | | }, |
| | | formConf: Object |
| | | }) |
| | | const className = ref('') |
| | | const draggableItemRef = ref(null) |
| | | const emits = defineEmits(['activeItem', 'copyItem', 'deleteItem']) |
| | | |
| | | function activeItem(item) { |
| | | emits('activeItem', item) |
| | | } |
| | | function copyItem(item, parent) { |
| | | emits('copyItem', item, parent ?? props.drawingList) |
| | | } |
| | | function deleteItem(item, parent) { |
| | | emits('deleteItem', item, parent ?? props.drawingList) |
| | | } |
| | | |
| | | function getComponentData() { |
| | | return { |
| | | gutter: props.element.gutter, |
| | | justify: props.element.justify, |
| | | align: props.element.align |
| | | } |
| | | } |
| | | |
| | | watch(() => props.activeId, (val) => { |
| | | className.value = (props.element.layout === 'rowFormItem' ? 'drawing-row-item' : 'drawing-item') + (val === props.element.formId ? ' active-from-item' : '') |
| | | if (props.formConf.unFocusedComponentBorder) { |
| | | className.value += ' unfocus-bordered' |
| | | } |
| | | }, { immediate: true }) |
| | | </script> |