mirror of
https://github.com/dataease/dataease.git
synced 2025-02-27 22:15:43 +08:00
101 lines
3.0 KiB
JavaScript
101 lines
3.0 KiB
JavaScript
import store from '@/store/index'
|
|
import generateID from '@/components/canvas/utils/generateID'
|
|
import eventBus from '@/components/canvas/utils/eventBus'
|
|
import decomposeComponent from '@/components/canvas/utils/decomposeComponent'
|
|
import { $ } from '@/components/canvas/utils/utils'
|
|
import { commonStyle, commonAttr } from '@/components/canvas/custom-component/component-list'
|
|
|
|
export default {
|
|
state: {
|
|
areaData: { // 选中区域包含的组件以及区域位移信息
|
|
style: {
|
|
top: 0,
|
|
left: 0,
|
|
width: 0,
|
|
height: 0
|
|
},
|
|
components: []
|
|
},
|
|
editor: null
|
|
},
|
|
mutations: {
|
|
getEditor(state) {
|
|
state.editor = $('#editor')
|
|
},
|
|
|
|
setAreaData(state, data) {
|
|
state.areaData = data
|
|
},
|
|
|
|
compose({ componentData, areaData, editor }) {
|
|
const components = []
|
|
areaData.components.forEach(component => {
|
|
if (component.component !== 'Group') {
|
|
components.push(component)
|
|
} else {
|
|
// 如果要组合的组件中,已经存在组合数据,则需要提前拆分
|
|
const parentStyle = { ...component.style }
|
|
const subComponents = component.propValue
|
|
const editorRect = editor.getBoundingClientRect()
|
|
|
|
store.commit('deleteComponent')
|
|
subComponents.forEach(component => {
|
|
decomposeComponent(component, editorRect, parentStyle)
|
|
store.commit('addComponent', { component })
|
|
})
|
|
|
|
components.push(...component.propValue)
|
|
store.commit('batchDeleteComponent', component.propValue)
|
|
}
|
|
})
|
|
|
|
store.commit('addComponent', {
|
|
component: {
|
|
id: generateID(),
|
|
component: 'Group',
|
|
...commonAttr,
|
|
style: {
|
|
...commonStyle,
|
|
...areaData.style
|
|
},
|
|
propValue: components
|
|
}
|
|
})
|
|
|
|
eventBus.$emit('hideArea')
|
|
|
|
store.commit('batchDeleteComponent', areaData.components)
|
|
store.commit('setCurComponent', {
|
|
component: componentData[componentData.length - 1],
|
|
index: componentData.length - 1
|
|
})
|
|
|
|
areaData.components = []
|
|
},
|
|
|
|
// 将已经放到 Group 组件数据删除,也就是在 componentData 中删除,因为它们已经放到 Group 组件中了
|
|
batchDeleteComponent({ componentData }, deleteData) {
|
|
deleteData.forEach(component => {
|
|
for (let i = 0, len = componentData.length; i < len; i++) {
|
|
if (component.id === componentData[i].id) {
|
|
componentData.splice(i, 1)
|
|
break
|
|
}
|
|
}
|
|
})
|
|
},
|
|
|
|
decompose({ curComponent, editor }) {
|
|
const parentStyle = { ...curComponent.style }
|
|
const components = curComponent.propValue
|
|
const editorRect = editor.getBoundingClientRect()
|
|
|
|
store.commit('deleteComponent')
|
|
components.forEach(component => {
|
|
decomposeComponent(component, editorRect, parentStyle)
|
|
store.commit('addComponent', { component })
|
|
})
|
|
}
|
|
}
|
|
}
|