|
@@ -5,85 +5,40 @@
|
|
|
<a-layout>
|
|
|
<!-- {{tableDefaultData}} -->
|
|
|
<a-layout-header>
|
|
|
- <a-modal
|
|
|
- v-model:visible="addSvgVisible"
|
|
|
- title="模拟添加组件"
|
|
|
- @ok="addSvgHandleOk"
|
|
|
- >
|
|
|
+ <a-modal v-model:visible="addSvgVisible" title="模拟添加组件" @ok="addSvgHandleOk">
|
|
|
<a-form layout="horizontal">
|
|
|
<a-form-item label="类型">
|
|
|
- <a-input
|
|
|
- v-model:value="testAddSvg.type"
|
|
|
- placeholder="请输入组件类型"
|
|
|
- />
|
|
|
+ <a-input v-model:value="testAddSvg.type" placeholder="请输入组件类型" />
|
|
|
</a-form-item>
|
|
|
<a-form-item label="标题">
|
|
|
- <a-input
|
|
|
- v-model:value="testAddSvg.title"
|
|
|
- placeholder="请输入组件标题"
|
|
|
- />
|
|
|
+ <a-input v-model:value="testAddSvg.title" placeholder="请输入组件标题" />
|
|
|
</a-form-item>
|
|
|
<a-form-item label="svg代码">
|
|
|
- <a-input
|
|
|
- v-model:value="testAddSvg.template"
|
|
|
- placeholder="请输入svg代码"
|
|
|
- />
|
|
|
+ <a-input v-model:value="testAddSvg.template" placeholder="请输入svg代码" />
|
|
|
</a-form-item>
|
|
|
<a-form-item label="默认颜色">
|
|
|
<input type="color" v-model="testAddSvg.default_attr.color" />
|
|
|
</a-form-item>
|
|
|
<a-form-item label="预览图像">
|
|
|
- <a-input
|
|
|
- v-model:value="testAddSvg.priviewImg"
|
|
|
- placeholder="请输入预览图像地址"
|
|
|
- />
|
|
|
+ <a-input v-model:value="testAddSvg.priviewImg" placeholder="请输入预览图像地址" />
|
|
|
</a-form-item>
|
|
|
</a-form>
|
|
|
</a-modal>
|
|
|
|
|
|
- <a-button type="primary" @click="home" style="margin-left: 50px"
|
|
|
- >返回
|
|
|
- </a-button>
|
|
|
+ <a-button type="primary" @click="home" style="margin-left: 50px">返回 </a-button>
|
|
|
+ <a-button type="primary" @click="testD" style="margin-left: 100px">保存</a-button>
|
|
|
+ <a-button type="primary" @click="testH" style="margin-left: 20px">预览</a-button>
|
|
|
+ <a-button type="primary" @click="deleteSvg" style="margin-left: 20px">删除元器件</a-button>
|
|
|
|
|
|
- <a-button type="primary" style="margin-left: 100px" @click="testD"
|
|
|
- >保存</a-button
|
|
|
- >
|
|
|
- <a-button type="primary" @click="testH" style="margin-left: 20px"
|
|
|
- >预览</a-button
|
|
|
- >
|
|
|
- <a-button type="primary" style="margin-left: 20px" @click="deleteSvg"
|
|
|
- >删除元器件</a-button
|
|
|
- >
|
|
|
-
|
|
|
- <!-- <a-button type="primary" @click="testA" style="margin-left: 20px"
|
|
|
- >载入模板</a-button
|
|
|
- > -->
|
|
|
-
|
|
|
- <!--
|
|
|
- <a style="margin-left: 20px">
|
|
|
- <a-button type="primary" @click="showAddSvgModal">
|
|
|
- 添加组件
|
|
|
- </a-button>
|
|
|
- </a>
|
|
|
-
|
|
|
- <a style="margin-left: 20px">
|
|
|
- <a-button type="primary" @click="exportSvg">导出svg</a-button>
|
|
|
- </a>
|
|
|
- <a style="margin-left: 20px">
|
|
|
- <a-button type="primary" @click="exportData">导出数据</a-button>
|
|
|
- </a> -->
|
|
|
+ <!-- <a-button type="primary" @click="testA" style="margin-left: 20px">载入模板</a-button>
|
|
|
+ <a-button type="primary" @click="showAddSvgModal" style="margin-left: 20px"> 添加组件 </a-button>
|
|
|
+ <a-button type="primary" @click="exportSvg" style="margin-left: 20px">导出svg</a-button>
|
|
|
+ <a-button type="primary" @click="exportData" style="margin-left: 20px">导出数据</a-button> -->
|
|
|
|
|
|
<div class="zoonStyle">
|
|
|
<div style="text-color: black; display: flex">
|
|
|
缩放:
|
|
|
- <a-slider
|
|
|
- :default-value="1"
|
|
|
- :min="0.1"
|
|
|
- :max="2"
|
|
|
- :step="0.1"
|
|
|
- @change="scaleValueChange"
|
|
|
- style="width: 200px"
|
|
|
- />
|
|
|
+ <a-slider :default-value="1" :min="0.1" :max="2" :step="0.1" @change="scaleValueChange" style="width: 200px" />
|
|
|
</div>
|
|
|
</div>
|
|
|
</a-layout-header>
|
|
@@ -104,26 +59,10 @@
|
|
|
@mousewheel="MouseWheel"
|
|
|
>
|
|
|
<!--拖动辅助线-->
|
|
|
- <div
|
|
|
- id="guide-x"
|
|
|
- ref="guidex_dom"
|
|
|
- :style="'border-top: ' + 1 / scaleValue + 'px dashed #55f'"
|
|
|
- ></div>
|
|
|
- <div
|
|
|
- id="guide-y"
|
|
|
- ref="guidey_dom"
|
|
|
- :style="'border-left: ' + 1 / scaleValue + 'px dashed #55f'"
|
|
|
- ></div>
|
|
|
+ <div id="guide-x" ref="guidex_dom" :style="'border-top: ' + 1 / scaleValue + 'px dashed #55f'"></div>
|
|
|
+ <div id="guide-y" ref="guidey_dom" :style="'border-left: ' + 1 / scaleValue + 'px dashed #55f'"></div>
|
|
|
<!-- 画布 -->
|
|
|
- <svg
|
|
|
- version="1.1"
|
|
|
- xmlns="http://www.w3.org/2000/svg"
|
|
|
- xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
|
- style="background-color: #000000"
|
|
|
- width="1920"
|
|
|
- height="1080"
|
|
|
- id="svgCanvas"
|
|
|
- >
|
|
|
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="background-color: #000000" width="1920" height="1080" id="svgCanvas">
|
|
|
<defs />
|
|
|
<filter x="0" y="0" width="1" height="1" id="solid">
|
|
|
<feFlood flood-color="rgb(255,255,255)" />
|
|
@@ -134,48 +73,18 @@
|
|
|
v-for="(item, index) in svgLists"
|
|
|
:key="item"
|
|
|
:id="item.id"
|
|
|
- :class="
|
|
|
- selectSvgInfo.id == item.id
|
|
|
- ? 'topo-layer-view-selected'
|
|
|
- : ''
|
|
|
- "
|
|
|
- @mousedown="
|
|
|
- MousedownSvg(
|
|
|
- item.id,
|
|
|
- index,
|
|
|
- item.svgPositionX,
|
|
|
- item.svgPositionY,
|
|
|
- $event
|
|
|
- )
|
|
|
- "
|
|
|
+ :class="selectSvgInfo.id == item.id ? 'topo-layer-view-selected' : ''"
|
|
|
+ @mousedown="MousedownSvg(item.id, index, item.svgPositionX, item.svgPositionY, $event)"
|
|
|
:title="item.title"
|
|
|
- :transform="
|
|
|
- 'translate(' +
|
|
|
- item.svgPositionX +
|
|
|
- ',' +
|
|
|
- item.svgPositionY +
|
|
|
- ')' +
|
|
|
- 'rotate(' +
|
|
|
- item.angle +
|
|
|
- ')' +
|
|
|
- 'scale(' +
|
|
|
- item.size +
|
|
|
- ')'
|
|
|
- "
|
|
|
+ :transform="'translate(' + item.svgPositionX + ',' + item.svgPositionY + ')' + 'rotate(' + item.angle + ')' + 'scale(' + item.size + ')'"
|
|
|
>
|
|
|
- <SvgComponents
|
|
|
- :component_prop="item"
|
|
|
- :svgInfoData="svgInfoData"
|
|
|
- ></SvgComponents>
|
|
|
+ <SvgComponents :component_prop="item" :svgInfoData="svgInfoData"></SvgComponents>
|
|
|
</g>
|
|
|
</svg>
|
|
|
</div>
|
|
|
</a-layout-content>
|
|
|
<a-layout-sider width="300px">
|
|
|
- <RightToolBar
|
|
|
- :svgInfo="selectSvgInfo"
|
|
|
- @setTableAttr="setTableAttr"
|
|
|
- ></RightToolBar>
|
|
|
+ <RightToolBar :svgInfo="selectSvgInfo" @setTableAttr="setTableAttr"></RightToolBar>
|
|
|
</a-layout-sider>
|
|
|
</a-layout>
|
|
|
</a-layout>
|
|
@@ -237,21 +146,17 @@ export default {
|
|
|
this.svgInfoData[this.svgInfoData.length] = this.testAddSvg;
|
|
|
this.addSvgVisible = false;
|
|
|
},
|
|
|
-
|
|
|
//鼠标移动事件
|
|
|
MouseMove(e) {
|
|
|
let _this = this;
|
|
|
|
|
|
if (this.clickType == "draggable") {
|
|
|
- if (this.mouseStatus == 0) {
|
|
|
- return;
|
|
|
- }
|
|
|
+ if (this.mouseStatus == 0) return;
|
|
|
+
|
|
|
const { clientX, clientY } = e;
|
|
|
- // console.log(e.offsetX,e.offsetY);
|
|
|
- // let svgID = this.svgLists[this.selectSvg.Index].id;
|
|
|
let svgID = this.selectSvg.ID;
|
|
|
//排除当前元素剩下的所有svg元素的列表
|
|
|
- let anyPositionList = this.svgLists.filter(function (list) {
|
|
|
+ let anyPositionList = this.svgLists.filter(function(list) {
|
|
|
return list.id != svgID;
|
|
|
});
|
|
|
//将要移动的元素坐标设备为鼠标坐标
|
|
@@ -259,24 +164,18 @@ export default {
|
|
|
let svgPositionY = this.selectSvg.pointY;
|
|
|
svgPositionX += (clientX - this.selectSvg.mPositionX) / this.scaleValue;
|
|
|
svgPositionY += (clientY - this.selectSvg.mPositionY) / this.scaleValue;
|
|
|
- setTimeout(function () {
|
|
|
+ setTimeout(function() {
|
|
|
//少于十个像素自动吸附
|
|
|
//从所有的x坐标列表中查与当前坐标少于10个像素的组件是否存在
|
|
|
- let exitsAdsorbX = anyPositionList.filter(function (list) {
|
|
|
- return (
|
|
|
- -10 < list.svgPositionX - svgPositionX &&
|
|
|
- list.svgPositionX - svgPositionX < 10
|
|
|
- );
|
|
|
+ let exitsAdsorbX = anyPositionList.filter(function(list) {
|
|
|
+ return -10 < list.svgPositionX - svgPositionX && list.svgPositionX - svgPositionX < 10;
|
|
|
});
|
|
|
if (exitsAdsorbX.length > 0) {
|
|
|
svgPositionX = exitsAdsorbX[0].svgPositionX;
|
|
|
}
|
|
|
//y轴相同 横向坐标自动吸附
|
|
|
- let exitsAdsorbY = anyPositionList.filter(function (list) {
|
|
|
- return (
|
|
|
- -10 < list.svgPositionY - svgPositionY &&
|
|
|
- list.svgPositionY - svgPositionY < 10
|
|
|
- );
|
|
|
+ let exitsAdsorbY = anyPositionList.filter(function(list) {
|
|
|
+ return -10 < list.svgPositionY - svgPositionY && list.svgPositionY - svgPositionY < 10;
|
|
|
});
|
|
|
if (exitsAdsorbY.length > 0) {
|
|
|
svgPositionY = exitsAdsorbY[0].svgPositionY;
|
|
@@ -284,49 +183,36 @@ export default {
|
|
|
_this.svgLists[_this.selectSvg.Index].svgPositionX = svgPositionX;
|
|
|
_this.svgLists[_this.selectSvg.Index].svgPositionY = svgPositionY;
|
|
|
//从所有的x坐标列表中查当前坐标是否存在
|
|
|
- let exitsNowX = anyPositionList.filter(function (list) {
|
|
|
+ let exitsNowX = anyPositionList.filter(function(list) {
|
|
|
return list.svgPositionX === svgPositionX;
|
|
|
});
|
|
|
if (exitsNowX.length > 0) {
|
|
|
- _this.$refs.guidey_dom.style.setProperty(
|
|
|
- "left",
|
|
|
- svgPositionX - 1 / _this.scaleValue + "px"
|
|
|
- );
|
|
|
+ _this.$refs.guidey_dom.style.setProperty("left", svgPositionX - 1 / _this.scaleValue + "px");
|
|
|
_this.$refs.guidey_dom.style.display = "inline";
|
|
|
} else {
|
|
|
_this.$refs.guidey_dom.style.display = "none";
|
|
|
}
|
|
|
//从所有的y坐标列表中查当前坐标是否存在
|
|
|
- let exitsNowY = anyPositionList.filter(function (list) {
|
|
|
+ let exitsNowY = anyPositionList.filter(function(list) {
|
|
|
return list.svgPositionY === svgPositionY;
|
|
|
});
|
|
|
if (exitsNowY.length > 0) {
|
|
|
- _this.$refs.guidex_dom.style.setProperty(
|
|
|
- "top",
|
|
|
- svgPositionY - 1 / _this.scaleValue + "px"
|
|
|
- );
|
|
|
+ _this.$refs.guidex_dom.style.setProperty("top", svgPositionY - 1 / _this.scaleValue + "px");
|
|
|
_this.$refs.guidex_dom.style.display = "inline";
|
|
|
} else {
|
|
|
_this.$refs.guidex_dom.style.display = "none";
|
|
|
}
|
|
|
}, 1);
|
|
|
} else if (this.clickType == "click") {
|
|
|
- if (this.mouseStatus == 0) {
|
|
|
- return;
|
|
|
- }
|
|
|
+ if (this.mouseStatus == 0) return;
|
|
|
this.selectSvgInfo.mPoint.endX = e.offsetX;
|
|
|
this.selectSvgInfo.mPoint.endY = e.offsetY;
|
|
|
}
|
|
|
},
|
|
|
//鼠标点击画板事件
|
|
|
MousedownCanvas(e) {
|
|
|
- if (this.clickType == "draggable") {
|
|
|
- return;
|
|
|
- }
|
|
|
- if (
|
|
|
- this.$store.state.CurrentlySelectedToolBar &&
|
|
|
- this.$store.state.CurrentlySelectedToolBar.CreateType == "click"
|
|
|
- ) {
|
|
|
+ if (this.clickType == "draggable") return;
|
|
|
+ if (this.$store.state.CurrentlySelectedToolBar && this.$store.state.CurrentlySelectedToolBar.CreateType == "click") {
|
|
|
this.$store.commit("setSvgItem", {
|
|
|
uuid: this.$UCore.GenUUid(),
|
|
|
offsetX: e.offsetX,
|
|
@@ -357,9 +243,7 @@ export default {
|
|
|
},
|
|
|
//鼠标抬起事件
|
|
|
MouseupCanvas() {
|
|
|
- if (this.mouseStatus == 0) {
|
|
|
- return;
|
|
|
- }
|
|
|
+ if (this.mouseStatus == 0) return;
|
|
|
this.$refs.guidex_dom.style.display = "none";
|
|
|
this.$refs.guidey_dom.style.display = "none";
|
|
|
|
|
@@ -368,14 +252,9 @@ export default {
|
|
|
this.clickType = "";
|
|
|
}
|
|
|
if (this.clickType == "click") {
|
|
|
- if (
|
|
|
- this.selectSvgInfo.mPoint.startX == this.selectSvgInfo.mPoint.endX &&
|
|
|
- this.selectSvgInfo.mPoint.startY == this.selectSvgInfo.mPoint.endY
|
|
|
- ) {
|
|
|
+ if (this.selectSvgInfo.mPoint.startX == this.selectSvgInfo.mPoint.endX && this.selectSvgInfo.mPoint.startY == this.selectSvgInfo.mPoint.endY) {
|
|
|
//根据当前id找到当前元素的index
|
|
|
- let selectSvgIndex = this.svgLists.indexOf(
|
|
|
- this.svgLists.filter((f) => f.id == this.selectSvgInfo.id)[0]
|
|
|
- );
|
|
|
+ let selectSvgIndex = this.svgLists.indexOf(this.svgLists.filter((f) => f.id == this.selectSvgInfo.id)[0]);
|
|
|
this.svgLists.splice(selectSvgIndex, 1);
|
|
|
this.selectSvg = {};
|
|
|
this.selectSvgInfo = {};
|
|
@@ -388,15 +267,14 @@ export default {
|
|
|
let _this = this;
|
|
|
this.$axios
|
|
|
.get("/example.json")
|
|
|
- .then(function (response) {
|
|
|
+ .then(function(response) {
|
|
|
_this.svgLists = response.data;
|
|
|
// console.log(response.data);
|
|
|
})
|
|
|
- .catch(function (error) {
|
|
|
+ .catch(function(error) {
|
|
|
console.log(error);
|
|
|
});
|
|
|
},
|
|
|
-
|
|
|
//预览事件
|
|
|
testH() {
|
|
|
localStorage.setItem("svginfo", JSON.stringify(this.svgLists));
|
|
@@ -405,7 +283,6 @@ export default {
|
|
|
name: "power_diagram",
|
|
|
});
|
|
|
},
|
|
|
-
|
|
|
//保存事件
|
|
|
testD() {
|
|
|
var array = JSON.parse(JSON.stringify(this.svgLists));
|
|
@@ -430,22 +307,19 @@ export default {
|
|
|
ElMessage.error(requset.msg);
|
|
|
}
|
|
|
})
|
|
|
- .catch(function (error) {
|
|
|
+ .catch(function(error) {
|
|
|
console.log(error);
|
|
|
});
|
|
|
} else {
|
|
|
ElMessage("请先添加元器件!");
|
|
|
}
|
|
|
},
|
|
|
-
|
|
|
//删除元器件事件
|
|
|
deleteSvg() {
|
|
|
let _this = this;
|
|
|
let selectSvgInfo = _this.selectSvgInfo;
|
|
|
//根据当前id找到当前元素的index
|
|
|
- let selectSvgIndex = _this.svgLists.indexOf(
|
|
|
- _this.svgLists.filter((f) => f.id == selectSvgInfo.id)[0]
|
|
|
- );
|
|
|
+ let selectSvgIndex = _this.svgLists.indexOf(_this.svgLists.filter((f) => f.id == selectSvgInfo.id)[0]);
|
|
|
_this.svgLists.splice(selectSvgIndex, 1);
|
|
|
if (_this.svgLists.length <= 0) {
|
|
|
_this.selectSvgInfo = "";
|
|
@@ -459,13 +333,7 @@ export default {
|
|
|
MouseWheel(e) {
|
|
|
//获取当前选中组件
|
|
|
let selectSvgInfo = this.selectSvgInfo;
|
|
|
- if (
|
|
|
- selectSvgInfo == undefined ||
|
|
|
- selectSvgInfo == null ||
|
|
|
- selectSvgInfo == ""
|
|
|
- ) {
|
|
|
- return;
|
|
|
- }
|
|
|
+ if (selectSvgInfo == undefined || selectSvgInfo == null || selectSvgInfo == "") return;
|
|
|
e.preventDefault();
|
|
|
//判断滚轮方向 -100是往上滑 100是下滑
|
|
|
let svgZoom = e.deltaY < 0 ? 0.1 : -0.1;
|
|
@@ -483,9 +351,7 @@ export default {
|
|
|
//导出svg
|
|
|
exportSvg() {
|
|
|
let exportStr = document.querySelector("#svgCanvas").outerHTML;
|
|
|
- exportStr = exportStr
|
|
|
- .replace('width="100%"', 'width="1920"')
|
|
|
- .replace('height="100%"', 'height="1080"');
|
|
|
+ exportStr = exportStr.replace('width="100%"', 'width="1920"').replace('height="100%"', 'height="1080"');
|
|
|
let datastr = "data:text;charset=utf-8," + encodeURIComponent(exportStr);
|
|
|
let download = document.createElement("a");
|
|
|
download.setAttribute("href", datastr);
|
|
@@ -497,9 +363,7 @@ export default {
|
|
|
//导出数据 json文件
|
|
|
exportData() {
|
|
|
localStorage.setItem("svginfo", JSON.stringify(this.svgLists));
|
|
|
- let datastr =
|
|
|
- "data:text/json;charset=utf-8," +
|
|
|
- encodeURIComponent(JSON.stringify(this.svgLists));
|
|
|
+ let datastr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(this.svgLists));
|
|
|
let download = document.createElement("a");
|
|
|
download.setAttribute("href", datastr);
|
|
|
download.setAttribute("download", "download.json");
|
|
@@ -507,10 +371,117 @@ export default {
|
|
|
download.remove();
|
|
|
console.log(JSON.stringify(this.svgLists));
|
|
|
},
|
|
|
- //画布缩放change事件
|
|
|
+ /**
|
|
|
+ * @画布缩放change事件
|
|
|
+ */
|
|
|
scaleValueChange(newValue) {
|
|
|
this.scaleValue = newValue;
|
|
|
},
|
|
|
+ /**
|
|
|
+ * @获取左侧组件数据
|
|
|
+ */
|
|
|
+ GetLeftComponent() {
|
|
|
+ var _this = this;
|
|
|
+
|
|
|
+ if (process.env.NODE_ENV == "development") {
|
|
|
+ //请求接口获取组件
|
|
|
+ this.$axios
|
|
|
+ .get("/InterfaceReturn1.json")
|
|
|
+ .then(function(response) {
|
|
|
+ _this.svgInfoData = response.data;
|
|
|
+ })
|
|
|
+ .catch(function(error) {
|
|
|
+ console.log(error);
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ //请求接口获取组件---->左侧基础数据
|
|
|
+ api
|
|
|
+ .gethookupComponentBasics()
|
|
|
+ .then((requset) => {
|
|
|
+ if (requset.status === "SUCCESS") {
|
|
|
+ _this.svgInfoData = requset.data;
|
|
|
+ } else {
|
|
|
+ ElMessage.error(requset.msg);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(function(error) {
|
|
|
+ console.log(error);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * @获取中心组件数据
|
|
|
+ */
|
|
|
+ GetCenterComponent() {
|
|
|
+ let _this = this;
|
|
|
+ //请求接口获取组件---->list数据
|
|
|
+ setTimeout(() => {
|
|
|
+ api
|
|
|
+ .getHookupComponentComplete({ siteId: this.$store.state.siteId })
|
|
|
+ .then((requset) => {
|
|
|
+ if (requset.data.length > 0) {
|
|
|
+ // console.log(requset);
|
|
|
+ _this.svgLists = requset.data;
|
|
|
+ } else {
|
|
|
+ ElMessage.error(requset.msg);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(function(error) {
|
|
|
+ console.log(error);
|
|
|
+ });
|
|
|
+ }, 1000);
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * @页面键盘监听事件
|
|
|
+ */
|
|
|
+ onkeydown() {
|
|
|
+ let _this = this;
|
|
|
+ //当前页面监视键盘输入
|
|
|
+ document.onkeydown = function(e) {
|
|
|
+ //获取当前选中组件
|
|
|
+ let selectSvgInfo = _this.selectSvgInfo;
|
|
|
+ if (selectSvgInfo == undefined || selectSvgInfo == null || selectSvgInfo == "") {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //事件对象兼容
|
|
|
+ let e1 = e || window.event || arguments.callee.caller.arguments[0];
|
|
|
+ //键盘按键判断:左箭头-37;上箭头-38;右箭头-39;下箭头-40
|
|
|
+ if (e1 && e1.keyCode == 37) {
|
|
|
+ e.preventDefault();
|
|
|
+ selectSvgInfo.svgPositionX -= 1;
|
|
|
+ } else if (e1 && e1.keyCode == 38) {
|
|
|
+ e.preventDefault();
|
|
|
+ selectSvgInfo.svgPositionY -= 1;
|
|
|
+ } else if (e1 && e1.keyCode == 39) {
|
|
|
+ e.preventDefault();
|
|
|
+ selectSvgInfo.svgPositionX += 1;
|
|
|
+ } else if (e1 && e1.keyCode == 40) {
|
|
|
+ e.preventDefault();
|
|
|
+ selectSvgInfo.svgPositionY += 1;
|
|
|
+ }
|
|
|
+ //ctrl c
|
|
|
+ else if (e1 && e1.ctrlKey && e1.keyCode == 67) {
|
|
|
+ e.preventDefault();
|
|
|
+ let copySvgInfoStr = JSON.stringify(selectSvgInfo);
|
|
|
+ let copySvgInfo = JSON.parse(copySvgInfoStr);
|
|
|
+ copySvgInfo.id = _this.$UCore.GenUUid();
|
|
|
+ copySvgInfo.svgPositionX = selectSvgInfo.svgPositionX + 10;
|
|
|
+ copySvgInfo.svgPositionY = selectSvgInfo.svgPositionY + 10;
|
|
|
+ _this.svgLists.push(copySvgInfo);
|
|
|
+ _this.selectSvgInfo = copySvgInfo;
|
|
|
+ }
|
|
|
+ //deleted
|
|
|
+ else if (e1 && e1.keyCode == 46) {
|
|
|
+ e.preventDefault();
|
|
|
+ //根据当前id找到当前元素的index
|
|
|
+ let selectSvgIndex = _this.svgLists.indexOf(_this.svgLists.filter((f) => f.id == selectSvgInfo.id)[0]);
|
|
|
+ _this.svgLists.splice(selectSvgIndex, 1);
|
|
|
+ if (_this.svgLists.length <= 0) {
|
|
|
+ _this.selectSvgInfo = "";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ },
|
|
|
},
|
|
|
mounted() {
|
|
|
let _this = this;
|
|
@@ -518,22 +489,16 @@ export default {
|
|
|
let canvasdiv = _this.$refs.canvas;
|
|
|
canvasdiv.addEventListener(
|
|
|
"dragover",
|
|
|
- function (e) {
|
|
|
+ function(e) {
|
|
|
e.preventDefault();
|
|
|
},
|
|
|
false
|
|
|
);
|
|
|
canvasdiv.addEventListener(
|
|
|
"drop",
|
|
|
- function (e) {
|
|
|
+ function(e) {
|
|
|
e.preventDefault();
|
|
|
- if (
|
|
|
- _this.$store.state.CurrentlySelectedToolBar.Type == "" ||
|
|
|
- _this.$store.state.CurrentlySelectedToolBar.CreateType !=
|
|
|
- "draggable"
|
|
|
- ) {
|
|
|
- return;
|
|
|
- }
|
|
|
+ if (_this.$store.state.CurrentlySelectedToolBar.Type == "" || _this.$store.state.CurrentlySelectedToolBar.CreateType != "draggable") return;
|
|
|
|
|
|
_this.$store.commit("setSvgItem", {
|
|
|
uuid: _this.$UCore.GenUUid(),
|
|
@@ -554,100 +519,9 @@ export default {
|
|
|
window.onbeforeunload = null;
|
|
|
},
|
|
|
created() {
|
|
|
- let _this = this;
|
|
|
- //当前页面监视键盘输入
|
|
|
- document.onkeydown = function (e) {
|
|
|
- //获取当前选中组件
|
|
|
- let selectSvgInfo = _this.selectSvgInfo;
|
|
|
- if (
|
|
|
- selectSvgInfo == undefined ||
|
|
|
- selectSvgInfo == null ||
|
|
|
- selectSvgInfo == ""
|
|
|
- ) {
|
|
|
- return;
|
|
|
- }
|
|
|
- //事件对象兼容
|
|
|
- let e1 = e || window.event || arguments.callee.caller.arguments[0];
|
|
|
- //键盘按键判断:左箭头-37;上箭头-38;右箭头-39;下箭头-40
|
|
|
- if (e1 && e1.keyCode == 37) {
|
|
|
- e.preventDefault();
|
|
|
- selectSvgInfo.svgPositionX -= 1;
|
|
|
- } else if (e1 && e1.keyCode == 38) {
|
|
|
- e.preventDefault();
|
|
|
- selectSvgInfo.svgPositionY -= 1;
|
|
|
- } else if (e1 && e1.keyCode == 39) {
|
|
|
- e.preventDefault();
|
|
|
- selectSvgInfo.svgPositionX += 1;
|
|
|
- } else if (e1 && e1.keyCode == 40) {
|
|
|
- e.preventDefault();
|
|
|
- selectSvgInfo.svgPositionY += 1;
|
|
|
- }
|
|
|
- //ctrl c
|
|
|
- else if (e1 && e1.ctrlKey && e1.keyCode == 67) {
|
|
|
- e.preventDefault();
|
|
|
- let copySvgInfoStr = JSON.stringify(selectSvgInfo);
|
|
|
- let copySvgInfo = JSON.parse(copySvgInfoStr);
|
|
|
- copySvgInfo.id = _this.$UCore.GenUUid();
|
|
|
- copySvgInfo.svgPositionX = selectSvgInfo.svgPositionX + 10;
|
|
|
- copySvgInfo.svgPositionY = selectSvgInfo.svgPositionY + 10;
|
|
|
- _this.svgLists.push(copySvgInfo);
|
|
|
- _this.selectSvgInfo = copySvgInfo;
|
|
|
- }
|
|
|
- //deleted
|
|
|
- else if (e1 && e1.keyCode == 46) {
|
|
|
- e.preventDefault();
|
|
|
- //根据当前id找到当前元素的index
|
|
|
- let selectSvgIndex = _this.svgLists.indexOf(
|
|
|
- _this.svgLists.filter((f) => f.id == selectSvgInfo.id)[0]
|
|
|
- );
|
|
|
- _this.svgLists.splice(selectSvgIndex, 1);
|
|
|
- if (_this.svgLists.length <= 0) {
|
|
|
- _this.selectSvgInfo = "";
|
|
|
- }
|
|
|
- }
|
|
|
- };
|
|
|
- //请求接口获取组件
|
|
|
- // this.$axios
|
|
|
- // .get("/InterfaceReturn1.json")
|
|
|
- // .then(function (response) {
|
|
|
- // _this.svgInfoData = response.data;
|
|
|
- // // console.log(response.data);
|
|
|
- // })
|
|
|
- // .catch(function (error) {
|
|
|
- // console.log(error);
|
|
|
- // });
|
|
|
-
|
|
|
- //请求接口获取组件---->左侧基础数据
|
|
|
- api
|
|
|
- .gethookupComponentBasics()
|
|
|
- .then((requset) => {
|
|
|
- if (requset.status === "SUCCESS") {
|
|
|
- // console.log(requset.data);
|
|
|
- _this.svgInfoData = requset.data;
|
|
|
- } else {
|
|
|
- ElMessage.error(requset.msg);
|
|
|
- }
|
|
|
- })
|
|
|
- .catch(function (error) {
|
|
|
- console.log(error);
|
|
|
- });
|
|
|
-
|
|
|
- //请求接口获取组件---->list数据
|
|
|
- setTimeout(() => {
|
|
|
- api
|
|
|
- .getHookupComponentComplete({ siteId: this.$store.state.siteId })
|
|
|
- .then((requset) => {
|
|
|
- if (requset.data.length > 0) {
|
|
|
- // console.log(requset);
|
|
|
- _this.svgLists = requset.data;
|
|
|
- } else {
|
|
|
- ElMessage.error(requset.msg);
|
|
|
- }
|
|
|
- })
|
|
|
- .catch(function (error) {
|
|
|
- console.log(error);
|
|
|
- });
|
|
|
- }, 1000);
|
|
|
+ this.onkeydown(); //开启键盘监听事件
|
|
|
+ this.GetLeftComponent(); //获取左侧组件数据
|
|
|
+ this.GetCenterComponent(); //获取中心组件数据
|
|
|
},
|
|
|
watch: {
|
|
|
svgLists: {
|
|
@@ -660,7 +534,7 @@ export default {
|
|
|
// console.log(val.length != requset.data.length);
|
|
|
if (val.length != requset.data.length) {
|
|
|
//浏览器(刷新、关闭、跳转)
|
|
|
- window.onbeforeunload = function (e) {
|
|
|
+ window.onbeforeunload = function(e) {
|
|
|
e = e || window.event;
|
|
|
// 兼容IE8和Firefox 4之前的版本
|
|
|
if (e) {
|
|
@@ -671,7 +545,7 @@ export default {
|
|
|
};
|
|
|
}
|
|
|
})
|
|
|
- .catch(function (error) {
|
|
|
+ .catch(function(error) {
|
|
|
console.log(error);
|
|
|
});
|
|
|
},
|
|
@@ -679,8 +553,6 @@ export default {
|
|
|
},
|
|
|
};
|
|
|
</script>
|
|
|
-
|
|
|
-<!-- Add "scoped" attribute to limit CSS to this component only -->
|
|
|
<style scoped lang="less">
|
|
|
::-webkit-scrollbar {
|
|
|
width: 8px;
|
|
@@ -793,22 +665,7 @@ export default {
|
|
|
transform-origin: left top;
|
|
|
overflow: auto;
|
|
|
|
|
|
- background-image: linear-gradient(
|
|
|
- 45deg,
|
|
|
- #ccc 25%,
|
|
|
- transparent 25%,
|
|
|
- transparent 75%,
|
|
|
- #ccc 75%,
|
|
|
- #ccc
|
|
|
- ),
|
|
|
- linear-gradient(
|
|
|
- 45deg,
|
|
|
- #ccc 25%,
|
|
|
- transparent 25%,
|
|
|
- transparent 75%,
|
|
|
- #ccc 75%,
|
|
|
- #ccc
|
|
|
- );
|
|
|
+ background-image: linear-gradient(45deg, #ccc 25%, transparent 25%, transparent 75%, #ccc 75%, #ccc), linear-gradient(45deg, #ccc 25%, transparent 25%, transparent 75%, #ccc 75%, #ccc);
|
|
|
background-size: 20px 20px;
|
|
|
background-position: 0 0, 10px 10px;
|
|
|
}
|