This commit is contained in:
李志鹏
2026-01-09 17:05:46 +08:00
parent 3058adfdb7
commit 7b071bc585
2 changed files with 66 additions and 14 deletions

View File

@@ -24,6 +24,7 @@
O_BLENDMODE: "object.blendMode", O_BLENDMODE: "object.blendMode",
}; };
const ACTIONS = { const ACTIONS = {
ADD: "add",
SELECT: "select", SELECT: "select",
UPDATE: "update", UPDATE: "update",
DELETE: "delete", DELETE: "delete",
@@ -168,24 +169,25 @@
}; };
const setCanvasData = async () => { const setCanvasData = async () => {
canvas.clear(); canvas.clear();
const cwidth = canvas.width;
const cheight = canvas.height;
for (let i = 0; i < props.list.length; i++) { for (let i = 0; i < props.list.length; i++) {
let item = props.list[i]; let item = props.list[i];
let pattern = await setFill(item); await addObject(item);
let rect = new fabric.Rect({
id: item.id,
width: cwidth,
height: cheight,
fill: pattern,
...item.object,
});
canvas.add(rect);
} }
canvas.renderAll(); canvas.renderAll();
}; };
const addObject = async (item) => {
const cwidth = canvas.width;
const cheight = canvas.height;
let pattern = await setFill(item);
let rect = new fabric.Rect({
id: item.id,
width: cwidth,
height: cheight,
fill: pattern,
...item.object,
});
canvas.add(rect);
};
const setFill = async (item) => { const setFill = async (item) => {
if (!item) return null; if (!item) return null;
const cwidth = canvas.width; const cwidth = canvas.width;
@@ -280,6 +282,10 @@
canvas.add(object); canvas.add(object);
} }
canvas.renderAll(); canvas.renderAll();
} else if (item.action === ACTIONS.DELETE) {
canvas.remove(object);
} else if (item.action === ACTIONS.ADD) {
await addObject(item.data);
} }
} }
canvas.renderAll(); canvas.renderAll();

View File

@@ -21,6 +21,7 @@
> >
</button> </button>
<button @click.stop="onDelete(item.id)">删除</button>
</div> </div>
<div> <div>
<span>偏移X</span> <span>偏移X</span>
@@ -80,6 +81,7 @@
/> />
</div> </div>
</div> </div>
<button @click="onAdd">添加</button>
<div class="box"> <div class="box">
<pingpu <pingpu
:list="list" :list="list"
@@ -94,9 +96,10 @@
import { ref, onMounted, watch } from "vue"; import { ref, onMounted, watch } from "vue";
import pingpu from "./pingpu.vue"; import pingpu from "./pingpu.vue";
const ACTIONS = { const ACTIONS = {
SELECT: "select", ADD: "add",
UPDATE: "update", UPDATE: "update",
DELETE: "delete", DELETE: "delete",
SELECT: "select",
SORT: "sort", SORT: "sort",
}; };
@@ -211,6 +214,49 @@
}, },
]); ]);
}; };
const onDelete = (id) => {
list.value = list.value.filter((v) => v.id !== id);
pingpuRef.value.updataList([
{
id: id,
action: ACTIONS.DELETE,
},
]);
};
const onAdd = () => {
const obj = {
id: Date.now().toString(),
ifSingle: false,
level2Type: "Pattern",
designType: "Library",
path: "/src/assets/images/canvas/yinhua1.jpg",
location: [0, 0],
scale: [1, 1],
angle: 0,
name: "Print" + (list.value.length + 1),
priority: 1,
object: {
top: 0,
left: 0,
scaleX: 1,
scaleY: 1,
opacity: 1,
angle: 0,
flipX: false,
flipY: false,
blendMode: "multiply",
gapX: 10,
gapY: 20,
},
};
list.value.push(obj);
pingpuRef.value.updataList([
{
action: ACTIONS.ADD,
data: obj,
},
]);
};
watch( watch(
() => list.value, () => list.value,
() => updateList(), () => updateList(),