|
|
@@ -88,7 +88,10 @@ export default {
|
|
|
//获取排序后的图层
|
|
|
getLayers(updateCanvasState = true){
|
|
|
let layers = this.fcanvas.getObjects().sort(this.DescSort)
|
|
|
- this.layers = this.computedLayerSort(layers).sort(this.AscSort)
|
|
|
+ // Vue3 下避免 Proxy 影响 Fabric 对象的引用比较,统一 markRaw
|
|
|
+ this.layers = this.computedLayerSort(layers)
|
|
|
+ .sort(this.AscSort)
|
|
|
+ .map(obj => markRaw(obj))
|
|
|
if(updateCanvasState) this.updateCanvasState();
|
|
|
this.$emit('update:isEmpty', this.layers.length === 0)
|
|
|
},
|
|
|
@@ -146,6 +149,7 @@ export default {
|
|
|
}
|
|
|
this.islayerSelect = true;
|
|
|
this.fcanvas.remove(item)
|
|
|
+ this.fcanvas.requestRenderAll()
|
|
|
this.undoAfterSelectLayers();
|
|
|
this.getLayers()
|
|
|
},
|
|
|
@@ -304,7 +308,33 @@ export default {
|
|
|
this.layersSort = sort;
|
|
|
return layers;
|
|
|
|
|
|
- }
|
|
|
+ },
|
|
|
+
|
|
|
+ //复制
|
|
|
+ copy(item){
|
|
|
+ const editLayer = item
|
|
|
+ const self = this;
|
|
|
+ const name = editLayer.name
|
|
|
+ const sort = editLayer.sort
|
|
|
+ editLayer.clone((cloned)=> {
|
|
|
+ cloned.clone((clonedObj)=> {
|
|
|
+ self.fcanvas.discardActiveObject();
|
|
|
+ clonedObj.set({
|
|
|
+ left: clonedObj.left + 10,
|
|
|
+ top: clonedObj.top + 10,
|
|
|
+ sort:sort+1,
|
|
|
+ name:name,
|
|
|
+ id:self.getNextLayersId(),
|
|
|
+ evented: true,
|
|
|
+ });
|
|
|
+ self.fcanvas.add(clonedObj);
|
|
|
+ self.fcanvas.setActiveObject(clonedObj);
|
|
|
+ self.getLayers()
|
|
|
+ self.updateCanvasState()
|
|
|
+ self.fcanvas.requestRenderAll()
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
}
|
|
|
|
|
|
}
|