group.vue 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <template>
  2. <div class="component-group" v-if="group.components.length>0">
  3. <div class="component-group__label">
  4. {{group.label}}
  5. </div>
  6. <vue-draggable :model-value="group.components"
  7. item-key="type"
  8. tag="ul"
  9. :group="{name: 'components', pull: 'clone', put:false}"
  10. :sort="false"
  11. :clone="cloneComponent">
  12. <template #item="{element}">
  13. <form-component-item :item="element"></form-component-item>
  14. </template>
  15. </vue-draggable>
  16. </div>
  17. </template>
  18. <script>
  19. import VueDraggable from 'vuedraggable'
  20. import FormComponentItem from '../form-components/item'
  21. import { getCopyRow } from '../util'
  22. export default {
  23. components: { VueDraggable, FormComponentItem },
  24. props: {
  25. group: Object
  26. },
  27. setup () {
  28. const cloneComponent = (component) => {
  29. return getCopyRow({ config: component })
  30. }
  31. return {
  32. cloneComponent
  33. }
  34. }
  35. }
  36. </script>
  37. <style lang="less">
  38. .component-group{
  39. &__label{
  40. font-size: 13px;
  41. color: rgb(102, 102, 102);
  42. padding: 8px 12px;
  43. }
  44. ul{
  45. margin:0;
  46. padding: 0 10px 10px;
  47. overflow: hidden;
  48. position: relative;
  49. }
  50. }
  51. </style>