|
@@ -14,6 +14,7 @@ export function useMapEditor() {
|
|
|
// let initHeight; // 默认高度
|
|
// let initHeight; // 默认高度
|
|
|
let stage: Konva.Stage | null = null;
|
|
let stage: Konva.Stage | null = null;
|
|
|
let layer: Konva.Layer | null = null;
|
|
let layer: Konva.Layer | null = null;
|
|
|
|
|
+ let copyLayer: Konva.Layer | null = null;
|
|
|
let defaultIcon: Konva.Image | null = null; // 默认相机的图标shape
|
|
let defaultIcon: Konva.Image | null = null; // 默认相机的图标shape
|
|
|
const addedCameras = ref<string[]>([]); // 已添加相机列表
|
|
const addedCameras = ref<string[]>([]); // 已添加相机列表
|
|
|
const activeGroup = ref<Konva.Group | null>(null); // transformer激活的相机
|
|
const activeGroup = ref<Konva.Group | null>(null); // transformer激活的相机
|
|
@@ -32,8 +33,11 @@ export function useMapEditor() {
|
|
|
// initHeight = opt.height || 0;
|
|
// initHeight = opt.height || 0;
|
|
|
stage = new Konva.Stage(opt);
|
|
stage = new Konva.Stage(opt);
|
|
|
stage.on('click tap', handleStageClick);
|
|
stage.on('click tap', handleStageClick);
|
|
|
|
|
+ window.stage = stage;
|
|
|
layer = new Konva.Layer();
|
|
layer = new Konva.Layer();
|
|
|
|
|
+ copyLayer = new Konva.Layer();
|
|
|
stage.add(layer);
|
|
stage.add(layer);
|
|
|
|
|
+ stage.add(copyLayer);
|
|
|
addDefaultIcon();
|
|
addDefaultIcon();
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -334,7 +338,11 @@ export function useMapEditor() {
|
|
|
};
|
|
};
|
|
|
});
|
|
});
|
|
|
const layout = {
|
|
const layout = {
|
|
|
- bgImg: bgImgUrl.value,
|
|
|
|
|
|
|
+ bgInfo: {
|
|
|
|
|
+ bgImg: bgImgUrl.value,
|
|
|
|
|
+ width: layer?.find('#bgImg')[0].width(),
|
|
|
|
|
+ height: layer?.find('#bgImg')[0].height(),
|
|
|
|
|
+ },
|
|
|
defaultCameraId: defaultCameraId.value,
|
|
defaultCameraId: defaultCameraId.value,
|
|
|
cameraList: cameras,
|
|
cameraList: cameras,
|
|
|
};
|
|
};
|
|
@@ -345,7 +353,7 @@ export function useMapEditor() {
|
|
|
/** 导入布局json */
|
|
/** 导入布局json */
|
|
|
const createMap = (layout) => {
|
|
const createMap = (layout) => {
|
|
|
// const layout = JSON.parse(json);
|
|
// const layout = JSON.parse(json);
|
|
|
- bgImgUrl.value = layout.bgImg;
|
|
|
|
|
|
|
+ bgImgUrl.value = layout.bgInfo.bgImg;
|
|
|
addBg();
|
|
addBg();
|
|
|
layout.cameraList.forEach((camera) => {
|
|
layout.cameraList.forEach((camera) => {
|
|
|
const group = new Konva.Group({
|
|
const group = new Konva.Group({
|
|
@@ -373,6 +381,7 @@ export function useMapEditor() {
|
|
|
|
|
|
|
|
if (camera.cameraId === layout.defaultCameraId) {
|
|
if (camera.cameraId === layout.defaultCameraId) {
|
|
|
setDefaultCamera(group);
|
|
setDefaultCamera(group);
|
|
|
|
|
+ defaultIcon?.show();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (addedCameras.value.length === layout.cameraList.length) {
|
|
if (addedCameras.value.length === layout.cameraList.length) {
|
|
@@ -384,7 +393,10 @@ export function useMapEditor() {
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const resetMap = () => {
|
|
const resetMap = () => {
|
|
|
|
|
+ defaultIcon?.moveTo(copyLayer);
|
|
|
layer?.clear();
|
|
layer?.clear();
|
|
|
|
|
+ layer?.removeChildren();
|
|
|
|
|
+ defaultIcon?.moveTo(layer);
|
|
|
addedCameras.value = [];
|
|
addedCameras.value = [];
|
|
|
activeGroup.value = null;
|
|
activeGroup.value = null;
|
|
|
defaultCameraId.value = '';
|
|
defaultCameraId.value = '';
|