WidgetInline.vue 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <template>
  2. <div
  3. class="widget-inline widget-view"
  4. :class="{
  5. active: selectWidget.key && selectWidget.key == element.key,
  6. 'is_hidden': element.options.hidden
  7. }"
  8. @click.stop="handleSelectWidget(index)"
  9. :size="element.options.size"
  10. @mouseover.stop="handleMouseover"
  11. @mouseout="handleMouseout"
  12. ref="widgetInline"
  13. >
  14. <div class="widget-inline-content">
  15. <draggable
  16. v-model="element.list"
  17. v-bind="{group:{name: 'people', put: handlePut}, ghostClass: 'ghost',animation: 200, handle: '.drag-widget'}"
  18. :no-transition-on-drag="true"
  19. @add="handleWidgetInlineAdd($event, element)"
  20. @update="handleWidgetInlineUpdate"
  21. @start="setDragging(true)"
  22. @end="setDragging(false)"
  23. class="widget-inline-list"
  24. :class="{
  25. [element.options && element.options.customClass]: element.options.customClass ? true : false
  26. }"
  27. item-key="key"
  28. :style="{
  29. display: element.options.flex ? 'flex' : 'block',
  30. 'flex-direction': 'row',
  31. 'flex-wrap': 'wrap',
  32. 'justify-content': element.options.flexJustify || 'normal',
  33. 'align-items': element.options.flexAlign || 'normal'
  34. }"
  35. >
  36. <template #item="{element:item, index}">
  37. <template v-if="item && item.key" >
  38. <widget-form-item
  39. :key="item.key"
  40. :element="item"
  41. v-model:select="selectWidget"
  42. :index="index" :data="element"
  43. @select-change="handleSelectChange($event, element)"
  44. :form-key="formKey"
  45. :style="{'margin-right': element.options.spaceSize+'px'}"
  46. >
  47. </widget-form-item>
  48. </template>
  49. </template>
  50. </draggable>
  51. </div>
  52. <div class="widget-view-action widget-inline-action" v-if="selectWidget.key == element.key">
  53. <i class="fm-iconfont icon-icon_clone" @click.stop="handleInlineClone(index)" :title="$t('fm.tooltip.clone')"></i>
  54. <i class="fm-iconfont icon-trash" @click.stop="handleWidgetDelete(index)" :title="$t('fm.tooltip.trash')"></i>
  55. </div>
  56. <div class="widget-view-drag widget-inline-drag" v-if="selectWidget.key == element.key">
  57. <i class="fm-iconfont icon-drag drag-widget"></i>
  58. </div>
  59. <div class="widget-view-model " :style="{'color': element.options.dataBind ? '' : '#666'}">
  60. <span>{{element.model}}</span>
  61. </div>
  62. <div class="widget-view-type ">
  63. <span>{{element.type ? this.$t('fm.components.fields.' + element.type) : ''}}</span>
  64. </div>
  65. </div>
  66. </template>
  67. <script>
  68. import WidgetFormItem from './WidgetFormItem.vue'
  69. import Draggable from 'vuedraggable/src/vuedraggable'
  70. import { widgetInlineMixin } from '../mixins/widgetInline.js'
  71. export default {
  72. name: 'widget-inline',
  73. components: {
  74. Draggable,
  75. WidgetFormItem
  76. },
  77. mixins: [widgetInlineMixin],
  78. }
  79. </script>