group.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. <!-- <ul class="component-group__list">-->
  7. <vue-draggable :model-value="group.components"
  8. item-key="type"
  9. tag="ul"
  10. :group="{name: 'components', pull: 'clone', put:false}"
  11. :sort="false"
  12. :clone="cloneComponent">
  13. <template #item="{element}">
  14. <form-component-item :item="element" @click="addComponent(element)"></form-component-item>
  15. </template>
  16. </vue-draggable>
  17. <!-- </ul>-->
  18. </div>
  19. </template>
  20. <script>
  21. import { defineComponent } from 'vue'
  22. import VueDraggable from 'vuedraggable'
  23. import FormComponentItem from './item'
  24. import { getCopyRow } from '../../util'
  25. export default defineComponent({
  26. components: { VueDraggable, FormComponentItem },
  27. props: {
  28. group: Object
  29. },
  30. emits: ['add'],
  31. setup (props, { emit }) {
  32. const cloneComponent = (component) => {
  33. return getCopyRow({ config: component })
  34. // const type = component.type
  35. // const sign = generateFieldKey(type)
  36. // const element = {
  37. // id: sign, // 选中标示
  38. // key: sign,
  39. // config: { ...component }
  40. // }
  41. // if (twoValueComponentList.includes(type)) {
  42. // element.config.otherKey = `other_${sign}`
  43. // }
  44. // return element
  45. }
  46. const addComponent = (component) => {
  47. emit('add', cloneComponent(component))
  48. }
  49. return {
  50. cloneComponent,
  51. addComponent
  52. }
  53. }
  54. })
  55. </script>
  56. <style lang="less">
  57. .component-group{
  58. &__label{
  59. font-size: 13px;
  60. color: rgb(102, 102, 102);
  61. padding: 8px 12px;
  62. }
  63. ul{
  64. margin:0;
  65. padding: 0 10px 10px;
  66. overflow: hidden;
  67. position: relative;
  68. }
  69. }
  70. </style>