widgetCard.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import _ from 'lodash'
  2. import { CloneLayout } from '../util/layout-clone.js'
  3. import { EventBus } from '../util/event-bus.js'
  4. import { generateKeyToTD, generateKeyToTH, generateKeyToCol, fixDraggbleList, addClass, removeClass } from '../util'
  5. export const widgetCardMixin = {
  6. props: ['element', 'select', 'index', 'data', 'platform', 'formKey', 'subform'],
  7. emits: ['select-change', 'update:select'],
  8. inject: ['getDragging', 'setDragging'],
  9. data () {
  10. return {
  11. selectWidget: this.select || {}
  12. }
  13. },
  14. computed: {
  15. padding () {
  16. return this.element.options.padding || '20px'
  17. }
  18. },
  19. methods: {
  20. handleMouseover (e) {
  21. !this.getDragging() && addClass(this.$refs['widgetCard'], 'is-hover')
  22. },
  23. handleMouseout (e) {
  24. removeClass(this.$refs['widgetCard'], 'is-hover')
  25. },
  26. handlePut (a, b, c) {
  27. if (
  28. c.className.split(' ').indexOf('widget-dialog') >= 0 ||
  29. c.className.split(' ').indexOf('dialog-put') >= 0 ||
  30. c.children[0].className.split(' ').indexOf('dialog-put') >= 0) {
  31. return false
  32. }
  33. return true
  34. },
  35. handleSelectWidget (index) {
  36. this.$emit('update:select', this.data.list[index])
  37. },
  38. handleSelectChange (index, item) {
  39. setTimeout(() => {
  40. index >=0 ? (
  41. this.$emit('update:select', this.element.list[index])
  42. ) : (
  43. this.$emit('update:select', this.data.list[this.index])
  44. )
  45. })
  46. },
  47. handleWidgetClone (index) {
  48. let cloneData = _.cloneDeep(this.data.list[index])
  49. this.data.list.splice(index + 1, 0, CloneLayout(cloneData))
  50. this.$nextTick(() => {
  51. this.$emit('update:select', this.data.list[index + 1])
  52. this.$nextTick(() => { EventBus.$emit('on-history-add-' + this.formKey) })
  53. })
  54. },
  55. handleWidgetDelete (index) {
  56. if (this.data.list.length == 1) {
  57. this.$emit('select-change', -1)
  58. } else {
  59. if (this.data.list.length - 1 == index) {
  60. this.$emit('select-change', index - 1)
  61. } else {
  62. this.$emit('select-change', index)
  63. }
  64. }
  65. this.data.list.splice(index, 1)
  66. setTimeout(() => {
  67. EventBus.$emit('on-history-add-' + this.formKey)
  68. }, 20)
  69. },
  70. handleWidgetCardAdd ($event, element) {
  71. const newIndex = $event.newIndex
  72. const key = Math.random().toString(36).slice(-8)
  73. fixDraggbleList(element.list, newIndex)
  74. element.list[newIndex] = _.cloneDeep(element.list[newIndex])
  75. element.list[newIndex] = {
  76. ...element.list[newIndex],
  77. options: {
  78. ...element.list[newIndex].options,
  79. remoteFunc: element.list[newIndex].options.remoteFunc || 'func_'+key,
  80. remoteOption: element.list[newIndex].options.remoteOption || 'option_'+key,
  81. tableColumn: false,
  82. subform: false
  83. },
  84. key: element.list[newIndex].key ? element.list[newIndex].key : key,
  85. model: element.list[newIndex].model ? element.list[newIndex].model : element.list[newIndex].type + '_' + key,
  86. rules: element.list[newIndex].rules ? [...element.list[newIndex].rules] : []
  87. }
  88. if (element.list[newIndex].type == 'report') {
  89. element.list[newIndex].rows = generateKeyToTD(element.list[newIndex].rows)
  90. element.list[newIndex].headerRow = generateKeyToTH(element.list[newIndex].headerRow)
  91. }
  92. if (element.list[newIndex].type == 'grid') {
  93. element.list[newIndex].columns = generateKeyToCol(element.list[newIndex].columns)
  94. }
  95. this.$nextTick(() => {
  96. this.selectWidget = element.list[newIndex]
  97. EventBus.$emit('on-history-add-' + this.formKey)
  98. })
  99. },
  100. handleWidgetCardUpdate () {
  101. EventBus.$emit('on-history-add-' + this.formKey)
  102. },
  103. },
  104. watch: {
  105. select (val) {
  106. this.selectWidget = val
  107. },
  108. selectWidget (val) {
  109. this.$emit('update:select', val)
  110. }
  111. }
  112. }