Commit f6ceedddfccd8c9bc917d58ebb688de2c7351917

Authored by ly525
1 parent a43ae787

fix: change element zindex on edit canvas

front-end/h5/src/components/core/editor/canvas/edit.js
@@ -12,11 +12,11 @@ const contextmenuOptions = [ @@ -12,11 +12,11 @@ const contextmenuOptions = [
12 }, 12 },
13 { 13 {
14 label: '置顶', 14 label: '置顶',
15 - value: 'bring2Top' 15 + value: 'move2Top'
16 }, 16 },
17 { 17 {
18 label: '置底', 18 label: '置底',
19 - value: 'bring2Bottom' 19 + value: 'move2Bottom'
20 }, 20 },
21 { 21 {
22 label: '上移', 22 label: '上移',
@@ -203,6 +203,7 @@ export default { @@ -203,6 +203,7 @@ export default {
203 }} 203 }}
204 > 204 >
205 {h(element.name, data)} 205 {h(element.name, data)}
  206 + {element.commonStyle.zindex}
206 </Shape> 207 </Shape>
207 ) 208 )
208 }) 209 })
front-end/h5/src/components/core/models/element.js
@@ -28,7 +28,12 @@ class Element { @@ -28,7 +28,12 @@ class Element {
28 * element.pluginProps 和 elementcommonStyle 是引用类型,如果不做 deep_clone 可能会出现意外错误 28 * element.pluginProps 和 elementcommonStyle 是引用类型,如果不做 deep_clone 可能会出现意外错误
29 */ 29 */
30 this.pluginProps = (typeof ele.pluginProps === 'object' && clone(ele.pluginProps)) || this.getDefaultPluginProps(ele.editorConfig || {}) 30 this.pluginProps = (typeof ele.pluginProps === 'object' && clone(ele.pluginProps)) || this.getDefaultPluginProps(ele.editorConfig || {})
31 - this.commonStyle = (typeof ele.commonStyle === 'object' && clone(ele.commonStyle)) || this.getDefaultCommonStyle() 31 + const commonStyle = (typeof ele.commonStyle === 'object' && clone(ele.commonStyle)) || this.getDefaultCommonStyle()
  32 + this.commonStyle = {
  33 + ...commonStyle,
  34 + zindex: ele.zindex
  35 + }
  36 +
32 this.events = [] 37 this.events = []
33 } 38 }
34 39
@@ -76,8 +81,9 @@ class Element { @@ -76,8 +81,9 @@ class Element {
76 81
77 } 82 }
78 83
79 - clone () { 84 + clone ({ zindex }) {
80 return new Element({ 85 return new Element({
  86 + zindex,
81 name: this.name, 87 name: this.name,
82 pluginProps: this.pluginProps, 88 pluginProps: this.pluginProps,
83 commonStyle: { 89 commonStyle: {
front-end/h5/src/store/modules/element.js
1 import Element from '../../components/core/models/element' 1 import Element from '../../components/core/models/element'
2 -import { getEditorConfigForEditingElement } from '../../utils/element' 2 +import { getEditorConfigForEditingElement, swapZindex } from '../../utils/element'
3 3
4 // actions 4 // actions
5 export const actions = { 5 export const actions = {
@@ -38,23 +38,54 @@ export const mutations = { @@ -38,23 +38,54 @@ export const mutations = {
38 } 38 }
39 }, 39 },
40 elementManager (state, { type, value }) { 40 elementManager (state, { type, value }) {
  41 + const { editingPage, editingElement } = state
  42 + const elements = editingPage.elements
  43 + const len = elements.length
  44 +
41 switch (type) { 45 switch (type) {
42 case 'add': 46 case 'add':
  47 + value = {
  48 + ...value,
  49 + zindex: len + 1
  50 + }
43 const element = new Element(value) 51 const element = new Element(value)
44 - state.editingPage.elements.push(element) 52 + elements.push(element)
45 break 53 break
46 case 'copy': 54 case 'copy':
47 - state.editingPage.elements.push(state.editingElement.clone()) 55 + elements.push(state.editingElement.clone())
48 break 56 break
49 case 'delete': 57 case 'delete':
50 - const { editingPage, editingElement } = state  
51 - let index = editingPage.elements.findIndex(e => e.uuid === editingElement.uuid)  
52 - if (index !== -1) {  
53 - let newElements = editingPage.elements.slice()  
54 - newElements.splice(index, 1) 58 + {
  59 + const index = elements.findIndex(e => e.uuid === editingElement.uuid)
  60 + if (index !== -1) {
  61 + let newElements = elements.slice()
  62 + newElements.splice(index, 1)
  63 + state.editingPage.elements = newElements
  64 + }
  65 + }
  66 + break
  67 + case 'move2Top':
  68 + case 'move2Bottom':
  69 + {
  70 + const index = elements.findIndex(e => e.uuid === editingElement.uuid)
  71 + elements.splice(index, 1)
  72 + const newElements = type === 'move2Top' ? [...elements, editingElement] : [editingElement, ...elements]
  73 + newElements.forEach((ele, i, arr) => {
  74 + ele.commonStyle.zindex = i + 1
  75 + })
55 state.editingPage.elements = newElements 76 state.editingPage.elements = newElements
56 } 77 }
57 break 78 break
  79 + case 'addZindex':
  80 + case 'minusZindex':
  81 + const maxZindex = elements.length
  82 + const eleZindex = editingElement.commonStyle.zindex
  83 + if (eleZindex === maxZindex || eleZindex === 1) return
  84 +
  85 + const flag = type === 'addZindex' ? 1 : -1
  86 + const swapElement = elements.find(ele => ele.commonStyle.zindex === eleZindex + flag * 1)
  87 + swapZindex(editingElement, swapElement)
  88 + break
58 default: 89 default:
59 } 90 }
60 }, 91 },
front-end/h5/src/utils/element.js
@@ -5,3 +5,10 @@ export function getEditorConfigForEditingElement (elementName) { @@ -5,3 +5,10 @@ export function getEditorConfigForEditingElement (elementName) {
5 // TODO 为何直接 return new Ctor() 并将其赋值给 vuex 的 state 会报错:Cannot convert a Symbol value to a string 5 // TODO 为何直接 return new Ctor() 并将其赋值给 vuex 的 state 会报错:Cannot convert a Symbol value to a string
6 return new Ctor().$options.editorConfig 6 return new Ctor().$options.editorConfig
7 } 7 }
  8 +
  9 +const styleKey = 'commonStyle'
  10 +export function swapZindex (x, y) {
  11 + const tmp = y[styleKey].zindex
  12 + y[styleKey].zindex = x[styleKey].zindex
  13 + x[styleKey].zindex = tmp
  14 +}