WidgetTableItem.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <template>
  2. <div
  3. v-if="element && element.key"
  4. class="widget-table-view"
  5. :class="{
  6. active: selectWidget.key == element.key,
  7. 'is_req': element.options.required,
  8. 'is_hidden': element.options.hidden,
  9. 'mobile': platform == 'mobile'
  10. }"
  11. @click.stop="handleSelectWidget(index)"
  12. @mouseover.stop="handleMouseover"
  13. @mouseout="handleMouseout"
  14. ref="widgetTableItem"
  15. :style="{
  16. width: platform != 'mobile' ? (!element.options.width ? '200px' : element.options.width) : ''
  17. }"
  18. >
  19. <el-table
  20. v-if="platform != 'mobile'"
  21. row-class-name="widget-table-row"
  22. :data="[{}]">
  23. <el-table-column :label="element.options.hideLabel ? '' : element.name"
  24. :class-name="element.options?.customClass"
  25. :label-class-name="element.options.required ? 'required' : ''">
  26. <widget-element-item :element="element" :is-table="true"></widget-element-item>
  27. </el-table-column>
  28. </el-table>
  29. <el-form-item v-if="platform == 'mobile'"
  30. :label="element.options.hideLabel ? '' : element.name"
  31. :label-width="element.options.hideLabel ? '0px' : (element.options.isLabelWidth ? element.options.labelWidth + 'px' : '')"
  32. :class="{
  33. [element.options && element.options.customClass]: element.options.customClass ? true : false,
  34. 'fm-label-wrap': element.options.labelWrap
  35. }"
  36. >
  37. <widget-element-item :element="element" :is-table="true"></widget-element-item>
  38. </el-form-item>
  39. <div class="widget-view-action" v-if="selectWidget.key == element.key">
  40. <i class="fm-iconfont icon-icon_clone" @click.stop="handleWidgetClone(index)" :title="$t('fm.tooltip.clone')"></i>
  41. <i class="fm-iconfont icon-trash" @click.stop="handleWidgetDelete(index)" :title="$t('fm.tooltip.trash')"></i>
  42. </div>
  43. <div class="widget-view-drag" v-if="selectWidget.key == element.key">
  44. <i class="fm-iconfont icon-drag drag-widget"></i>
  45. </div>
  46. <div class="widget-view-model" :style="{'color': element.options.dataBind ? '' : '#666'}">
  47. <span>{{element.model}}</span>
  48. </div>
  49. <div class="widget-view-type ">
  50. <span>{{element.type ? this.$t('fm.components.fields.' + element.type) : ''}}</span>
  51. </div>
  52. </div>
  53. </template>
  54. <script>
  55. import WidgetElementItem from './WidgetElementItem'
  56. import _ from 'lodash'
  57. import { EventBus } from '../util/event-bus.js'
  58. import { addClass, removeClass } from '../util'
  59. export default {
  60. components: {
  61. WidgetElementItem
  62. },
  63. props: ['element', 'select', 'index', 'data', 'platform', 'formKey'],
  64. data () {
  65. return {
  66. selectWidget: this.select || {}
  67. }
  68. },
  69. methods: {
  70. handleMouseover (e) {
  71. addClass(this.$refs['widgetTableItem'], 'is-hover')
  72. },
  73. handleMouseout (e) {
  74. removeClass(this.$refs['widgetTableItem'], 'is-hover')
  75. },
  76. handleSelectWidget (index) {
  77. this.selectWidget = this.data[index]
  78. },
  79. handleWidgetDelete (index) {
  80. if (this.data.length == 1) {
  81. this.$emit('select-change', -1)
  82. } else {
  83. if (this.data.length - 1 == index) {
  84. this.$emit('select-change', index - 1)
  85. } else {
  86. this.$emit('select-change', index)
  87. }
  88. }
  89. this.$nextTick(() => {
  90. this.data.splice(index, 1)
  91. setTimeout(() => {
  92. EventBus.$emit('on-history-add-' + this.formKey)
  93. }, 20)
  94. })
  95. },
  96. handleWidgetClone (index) {
  97. const key = Math.random().toString(36).slice(-8)
  98. let cloneData = {
  99. ..._.cloneDeep(this.data[index]),
  100. key,
  101. model: this.data[index].type + '_' + key,
  102. }
  103. this.data.splice(index + 1, 0, cloneData)
  104. this.$nextTick(() => {
  105. this.selectWidget = this.data[index + 1]
  106. this.$nextTick(() => { EventBus.$emit('on-history-add-' + this.formKey) })
  107. })
  108. },
  109. },
  110. watch: {
  111. select (val) {
  112. this.selectWidget = val
  113. },
  114. selectWidget: {
  115. handler (val) {
  116. this.$emit('update:select', val)
  117. },
  118. deep: false
  119. }
  120. }
  121. }
  122. </script>