username@email.com
2024-04-02 f326d51f25a45b57e7b8929976f28daa53ccaca3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
var deepClone = function(obj) {
  let result = Array.isArray(obj) ? [] : {}
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      if (typeof obj[key] === 'object') {
        result[key] = deepClone(obj[key]) //递归复制
      } else {
        result[key] = obj[key]
      }
    }
  }
  return result
}
Vue.component('layout', {
  template: '#layout',
  data() {
    return {
      pageData: [],
      selectWg: {}
    }
  },
  methods: {
    setSelectWg(data) {
      this.selectWg = data
      this.bus.$emit('changeSelectWg', data)
    },
    handleWidgetAdd: function(evt) {
      const newIndex = evt.newIndex
      const elKey = Date.now() + '_' + Math.ceil(Math.random() * 1000000)
      let newObj = deepClone(this.pageData[newIndex])
      newObj.key = this.pageData[newIndex].type + '_' + elKey
      this.$set(this.pageData, newIndex, newObj)
      this.setSelectWg(this.pageData[newIndex])
    },
    handleSelectWidget(index) {
      this.setSelectWg(this.pageData[index])
    },
    handleWidgetDelete(index) {
      if (this.pageData.length - 1 === index) {
        if (index === 0) {
          this.setSelectWg([])
        } else {
          this.setSelectWg(this.pageData[index - 1])
        }
      } else {
        this.setSelectWg(this.pageData[index + 1])
      }
      this.$nextTick(() => {
        this.pageData.splice(index, 1)
      })
    },
    handleWidgetClone(index) {
      let cloneData = deepClone(this.pageData[index])
      cloneData.key =
        this.pageData[index].type +
        '_' +
        Date.now() +
        '_' +
        Math.ceil(Math.random() * 1000000)
      this.pageData.splice(index, 0, cloneData)
      this.$nextTick(() => {
        this.setSelectWg(this.pageData[index + 1])
      })
    }
  },
  mounted() {}
})
Vue.component('layout-config', {
  template: '#layout-config',
  data: function() {
    return {
      selectWg: {}
    }
  },
  mounted() {
    var that = this
    this.bus.$on('changeSelectWg', function(data) {
      that.selectWg = data
    })
  },
  methods: {
    handleSlideRemove(index) {
      this.selectWg.value.splice(index, 1)
    },
    handleAddSlide() {
      this.selectWg.value.push({
        url: '',
        image: ''
      })
    }
  }
})