widgetSubForm.js 3.8 KB

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