widgetDialog.js 3.8 KB

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