group.vue 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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 { inject } from 'vue'
  20. import VueDraggable from 'vuedraggable'
  21. import FormComponentItem from '../form-components/item'
  22. import { getCopyRow } from '../util'
  23. export default {
  24. components: { VueDraggable, FormComponentItem },
  25. props: {
  26. group: Object
  27. },
  28. setup (props) {
  29. const cloneMethod = inject('cloneMethod', getCopyRow)
  30. const cloneComponent = (component) => {
  31. return cloneMethod({ config: component })
  32. }
  33. return {
  34. cloneComponent
  35. }
  36. }
  37. }
  38. </script>
  39. <style lang="less">
  40. .component-group{
  41. &__label{
  42. font-size: 13px;
  43. color: rgb(102, 102, 102);
  44. padding: 8px 12px;
  45. }
  46. ul{
  47. margin:0;
  48. padding: 0 10px 10px;
  49. overflow: hidden;
  50. position: relative;
  51. }
  52. }
  53. </style>