From c208b104011e0bbdc824960ed025b597d081c78f Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期六, 18 六月 2022 01:56:31 +0800 Subject: [PATCH] 摄像机配置: 修复国标刷底图api --- src/components/canvas/index.vue | 392 ++++++++++++++++++++++++++------------------------------ 1 files changed, 182 insertions(+), 210 deletions(-) diff --git a/src/components/canvas/index.vue b/src/components/canvas/index.vue index 7e4e217..aec91a9 100644 --- a/src/components/canvas/index.vue +++ b/src/components/canvas/index.vue @@ -1,23 +1,21 @@ <template> - <div class="s-cavas" :style="{width:canvasWidth+'px',height:canvasHeight+'px'}"> + <div class="s-cavas" :style="{ width: canvasWidth + 'px', height: canvasHeight + 'px' }"> <canvas ref="myCanvas" :width="canvasWidth" :height="canvasHeight" - :style="`background:url(${canvasBg}) center / ${canvasWidth}px ${canvasHeight}px no-repeat; background-size: contain;`" + :style=" + `background:url(${canvasBg}) center / ${canvasWidth}px ${canvasHeight}px no-repeat; background-size: contain;` + " ></canvas> <el-tooltip content="鍒锋柊搴曞浘" placement="bottom" popper-class="atooltip" v-if="isShowRefresh"> <span class="iconfont icongengxin" @click="refresh"></span> </el-tooltip> - <p class="tip" :style="disabled ? `display:block;` : `display:none;`">鎵归噺閰嶇疆鏂瑰紡涓嶅厑璁哥粯鍒跺尯鍩燂紝璇烽�夋嫨鎽勫儚鏈鸿繘琛屽尯鍩熺粯鍒�</p> - <el-dialog - title - :visible.sync="visible" - width="1150px" - append-to-body - :before-close="cancelFunc" - > + <p class="tip" :style="disabled ? `display:block;` : `display:none;`"> + 鎵归噺閰嶇疆鏂瑰紡涓嶅厑璁哥粯鍒跺尯鍩燂紝璇烽�夋嫨鎽勫儚鏈鸿繘琛屽尯鍩熺粯鍒� + </p> + <el-dialog title :visible.sync="visible" width="1150px" append-to-body :before-close="cancelFunc"> <canvas-dialog ref="bigCanvas" :canvasDataToChild="canvasData" @@ -32,8 +30,8 @@ </div> </template> <script> -import canvasDialog from "./Dialog"; -import { updateSnapshot } from "@/api/camera"; +import canvasDialog from "./Dialog" +import { updateSnapshot } from "@/api/camera" export default { name: "myCanvas", components: { @@ -66,7 +64,7 @@ }, canvasDataShow: { default: () => { - return { line: [], rect: [], arrow: [], polygon: [] }; + return { line: [], rect: [], arrow: [], polygon: [] } }, type: Object }, @@ -104,17 +102,16 @@ if (this.snapshot_url) { // 鏁版嵁鏍堣嚜鍔ㄤ笂浼犲鐞� if (this.snapshot_url.indexOf("/opt/vasystem") == 0) { - return this.snapshot_url.replace("/opt/vasystem", ""); + return this.snapshot_url.replace("/opt/vasystem", "") } if (this.sourceType == 2) { - return `${this.snapshot_url}`; + return `${this.snapshot_url}` } else { - return `/httpImage/${this.snapshot_url}`; + return `/httpImage/${this.snapshot_url}` } - } else { - return this.blackImg; + return this.blackImg } } }, @@ -133,17 +130,17 @@ c: null, ctx: null, visible: false, - baseImg: undefined, + baseImg: undefined //showProportion: 1.666 - }; + } }, watch: { loading: { handler(newVal, oldVal) { // console.log(newVal,'loading') if (newVal) { - this.baseImg = ""; - this.refresh(); + this.baseImg = "" + this.refresh() } }, deep: true @@ -151,11 +148,11 @@ canvasDataShow: { handler(newVal, oldVal) { // console.log(newVal, "canvasDataShow newVal"); - this.canvasData.line = newVal.line; - this.canvasData.rect = newVal.rect; - this.canvasData.arrow = newVal.arrow; - this.canvasData.polygon = newVal.polygon; - this.clickSelect(this.canvasData); + this.canvasData.line = newVal.line + this.canvasData.rect = newVal.rect + this.canvasData.arrow = newVal.arrow + this.canvasData.polygon = newVal.polygon + this.clickSelect(this.canvasData) }, deep: true } @@ -163,156 +160,139 @@ mounted() { this.$nextTick(() => { // this.c = document.querySelector("#" + this.divId); - this.c = this.$refs.myCanvas; - this.ctx = this.c.getContext("2d"); - this.canvasData = JSON.parse(JSON.stringify(this.canvasDataShow)); - this.clickSelect(this.canvasData); - }); + this.c = this.$refs.myCanvas + this.ctx = this.c.getContext("2d") + this.canvasData = JSON.parse(JSON.stringify(this.canvasDataShow)) + this.clickSelect(this.canvasData) + }) }, methods: { // 鑾峰彇canvas搴曞浘 async getCanvasPic() { // this.$emit('changeBaseImg',this.currentCameraId) - this.$emit('changeLoading', true) + this.$emit("changeLoading", true) if (this.currentCameraId) { - let _this = this; - await updateSnapshot(this.currentCameraId) - .then(res => { + let _this = this + await updateSnapshot(this.currentCameraId, this.isGB28181) + .then((res) => { if (res.data.cameraId === _this.currentCameraId) { - this.baseImg = res.data.snapshotUrl; - this.$emit('refresh', res.data.snapshotUrl, _this.currentCameraId) + this.baseImg = res.data.snapshotUrl + this.$emit("refresh", res.data.snapshotUrl, _this.currentCameraId) this.$forceUpdate() this.$notify({ type: "success", message: "搴曞浘宸插埛鏂�" - }); + }) } }) - .catch(err => { + .catch((err) => { this.$notify({ type: "error", message: "搴曞浘鍒锋柊澶辫触" - }); - }); - this.$emit('changeLoading', false) + }) + }) + this.$emit("changeLoading", false) } }, showModal() { // console.log(this.canvasData, "鐐瑰嚮缁樺埗鐨勬椂鍊欎紶閫掕繃鍘荤殑鏁版嵁"); - this.visible = true; + this.visible = true this.$nextTick(() => { // this.$refs.bigCanvas.delCursor = {} }) - }, cancelFunc() { - this.visible = false; - this.$refs.bigCanvas.cancel(); + this.visible = false + this.$refs.bigCanvas.cancel() // console.log("鍏抽棴浜�"); }, handleOk() { // 鍒ゆ柇鍥惧舰鐨勫悕瀛楁槸鍚﹂噸澶� // console.log("ok"); - this.$refs.bigCanvas.changeType('0') - let repeatName = this.isRepeat(); + this.$refs.bigCanvas.changeType("0") + let repeatName = this.isRepeat() if (repeatName !== "") { this.$notify({ type: "error", message: repeatName + "鍥惧舰鍚嶇О閲嶅锛岃鏇存锛�" - }); - return; + }) + return } this.$notify({ type: "success", message: "宸蹭繚瀛樼粯鍒讹紒" - }); + }) // 姣忔淇濆瓨鍏抽棴妯℃�佺獥鏃堕兘瑕佹妸妯℃�佺獥鐨勬暟鎹啓鍒扮埗缁勪欢閲屾潵 - this.canvasData = this.$refs.bigCanvas.canvasData; + this.canvasData = this.$refs.bigCanvas.canvasData // 椤轰究鐢╁埌鏇村灞傚幓 - this.$emit("fromCanvas", this.$refs.bigCanvas.canvasData); + this.$emit("fromCanvas", this.$refs.bigCanvas.canvasData) // console.log("浣犲ソ", this.canvasData); - this.clickSelect(this.canvasData); - this.visible = false; + this.clickSelect(this.canvasData) + this.visible = false }, // 鍥炴樉cavas鏁版嵁 // 鐐瑰嚮閫変腑鍙樿壊 灏嗗綋鍓嶉〉闈㈡墍鏈夎矾寰勯噸缁樺垽鏂綋鍓嶉紶鏍囩殑鍧愭爣鍦ㄥ摢涓浘褰㈠唴 濡傛灉涓嶄紶鍧愭爣鍙傛暟灏辨槸鍥炴樉鐨勬柟娉� clickSelect(e) { - this.ctx.clearRect(0, 0, this.c.width, this.c.height); - let _this = this; // 闆嗗悎涓亶鍘嗛渶瑕佸皢this杞瓨涓�涓嬩娇鐢� - _this.canvasData.line.forEach(function (v, i) { - _this.ctx.strokeStyle = "yellow"; - _this.ctx.beginPath(); - _this.ctx.moveTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion); - _this.ctx.lineTo(v.location[1].x / _this.showProportion, v.location[1].y / _this.showProportion); - _this.ctx.stroke(); - _this.showRemarks( - v.location[0].x / _this.showProportion, - v.location[0].y / _this.showProportion, - v.name - ); - _this.c.style.cursor = "default"; + this.ctx.clearRect(0, 0, this.c.width, this.c.height) + let _this = this // 闆嗗悎涓亶鍘嗛渶瑕佸皢this杞瓨涓�涓嬩娇鐢� + _this.canvasData.line.forEach(function(v, i) { + _this.ctx.strokeStyle = "yellow" + _this.ctx.beginPath() + _this.ctx.moveTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion) + _this.ctx.lineTo(v.location[1].x / _this.showProportion, v.location[1].y / _this.showProportion) + _this.ctx.stroke() + _this.showRemarks(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion, v.name) + _this.c.style.cursor = "default" if (e && _this.ctx.isPointInStroke(e.offsetX, e.offsetY)) { // 濡傛灉浼犲叆浜嗕簨浠跺潗鏍囷紝灏辩敤isPointInStroke鍒ゆ柇涓�涓� // 濡傛灉褰撳墠鐜瑕嗙洊浜嗚鍧愭爣锛屽氨灏嗗浘褰㈢殑index鏀惧埌鏁扮粍閲� // 褰撻紶鏍囩Щ鍏ヤ箣鍚庡皢褰撳墠鐨勬ā寮忓垏鎹负閫変腑妯″紡 - _this.type = "0"; - _this.delCursor.type = "1"; - _this.delCursor.index = i; + _this.type = "0" + _this.delCursor.type = "1" + _this.delCursor.index = i // 灏嗗綋鍓嶅厓绱犳爣绾� - _this.ctx.strokeStyle = "red"; - _this.ctx.beginPath(); - _this.ctx.moveTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion); - _this.ctx.lineTo(v.location[1].x / _this.showProportion, v.location[1].y / _this.showProportion); - _this.ctx.stroke(); - _this.showRemarks( - v.location[0].x / _this.showProportion, - v.location[0].y / _this.showProportion, - v.name - ); - _this.c.style.cursor = "pointer"; + _this.ctx.strokeStyle = "red" + _this.ctx.beginPath() + _this.ctx.moveTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion) + _this.ctx.lineTo(v.location[1].x / _this.showProportion, v.location[1].y / _this.showProportion) + _this.ctx.stroke() + _this.showRemarks(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion, v.name) + _this.c.style.cursor = "pointer" } - }); - _this.canvasData.rect.forEach(function (v, i) { - _this.ctx.strokeStyle = "yellow"; - _this.ctx.beginPath(); - _this.ctx.moveTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion); - _this.ctx.lineTo(v.location[1].x / _this.showProportion, v.location[1].y / _this.showProportion); - _this.ctx.lineTo(v.location[2].x / _this.showProportion, v.location[2].y / _this.showProportion); - _this.ctx.lineTo(v.location[3].x / _this.showProportion, v.location[3].y / _this.showProportion); - _this.ctx.lineTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion); - _this.ctx.stroke(); - _this.showRemarks( - v.location[0].x / _this.showProportion, - v.location[0].y / _this.showProportion, - v.name - ); - _this.c.style.cursor = "default"; + }) + _this.canvasData.rect.forEach(function(v, i) { + _this.ctx.strokeStyle = "yellow" + _this.ctx.beginPath() + _this.ctx.moveTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion) + _this.ctx.lineTo(v.location[1].x / _this.showProportion, v.location[1].y / _this.showProportion) + _this.ctx.lineTo(v.location[2].x / _this.showProportion, v.location[2].y / _this.showProportion) + _this.ctx.lineTo(v.location[3].x / _this.showProportion, v.location[3].y / _this.showProportion) + _this.ctx.lineTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion) + _this.ctx.stroke() + _this.showRemarks(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion, v.name) + _this.c.style.cursor = "default" if (e && _this.ctx.isPointInPath(e.offsetX, e.offsetY)) { // 濡傛灉浼犲叆浜嗕簨浠跺潗鏍囷紝灏辩敤isPointInStroke鍒ゆ柇涓�涓� // 褰撻紶鏍囩Щ鍏ヤ箣鍚庡皢褰撳墠鐨勬ā寮忓垏鎹负閫変腑妯″紡 - _this.type = "0"; - _this.delCursor.type = "2"; - _this.delCursor.index = i; + _this.type = "0" + _this.delCursor.type = "2" + _this.delCursor.index = i // 灏嗗綋鍓嶅厓绱犳爣绾� - _this.ctx.strokeStyle = "red"; - _this.ctx.beginPath(); - _this.ctx.moveTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion); - _this.ctx.lineTo(v.location[1].x / _this.showProportion, v.location[1].y / _this.showProportion); - _this.ctx.lineTo(v.location[2].x / _this.showProportion, v.location[2].y / _this.showProportion); - _this.ctx.lineTo(v.location[3].x / _this.showProportion, v.location[3].y / _this.showProportion); - _this.ctx.lineTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion); - _this.ctx.stroke(); - _this.showRemarks( - v.location[0].x / _this.showProportion, - v.location[0].y / _this.showProportion, - v.name - ); - _this.c.style.cursor = "pointer"; + _this.ctx.strokeStyle = "red" + _this.ctx.beginPath() + _this.ctx.moveTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion) + _this.ctx.lineTo(v.location[1].x / _this.showProportion, v.location[1].y / _this.showProportion) + _this.ctx.lineTo(v.location[2].x / _this.showProportion, v.location[2].y / _this.showProportion) + _this.ctx.lineTo(v.location[3].x / _this.showProportion, v.location[3].y / _this.showProportion) + _this.ctx.lineTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion) + _this.ctx.stroke() + _this.showRemarks(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion, v.name) + _this.c.style.cursor = "pointer" } - }); - _this.canvasData.arrow.forEach(function (v, i) { - _this.ctx.strokeStyle = "yellow"; + }) + _this.canvasData.arrow.forEach(function(v, i) { + _this.ctx.strokeStyle = "yellow" // _this.ctx.beginPath() // _this.ctx.moveTo(v.location[0].x / 2, v.location[0].y / 2) // _this.ctx.lineTo(v.location[1].x / 2, v.location[1].y / 2) @@ -326,22 +306,18 @@ 20, 30, "yellow" - ); // 缁樺埗鏂规硶 - _this.showRemarks( - v.location[0].x / _this.showProportion, - v.location[0].y / _this.showProportion, - v.name - ); - _this.c.style.cursor = "default"; + ) // 缁樺埗鏂规硶 + _this.showRemarks(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion, v.name) + _this.c.style.cursor = "default" if (e && _this.ctx.isPointInStroke(e.offsetX, e.offsetY)) { // 濡傛灉浼犲叆浜嗕簨浠跺潗鏍囷紝灏辩敤isPointInStroke鍒ゆ柇涓�涓� // 濡傛灉褰撳墠鐜瑕嗙洊浜嗚鍧愭爣锛屽氨灏嗗浘褰㈢殑index鏀惧埌鏁扮粍閲� // 褰撻紶鏍囩Щ鍏ヤ箣鍚庡皢褰撳墠鐨勬ā寮忓垏鎹负閫変腑妯″紡 - _this.type = "0"; - _this.delCursor.type = "4"; - _this.delCursor.index = i; + _this.type = "0" + _this.delCursor.type = "4" + _this.delCursor.index = i // 灏嗗綋鍓嶅厓绱犳爣绾� - _this.ctx.strokeStyle = "red"; + _this.ctx.strokeStyle = "red" // _this.ctx.beginPath() // _this.ctx.moveTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion) // _this.ctx.lineTo(v.location[1].x / _this.showProportion, v.location[1].y / _this.showProportion) @@ -355,66 +331,62 @@ 20, 30, "red" - ); // 缁樺埗鏂规硶 - _this.showRemarks( - v.location[0].x / _this.showProportion, - v.location[0].y / _this.showProportion, - v.name - ); - _this.c.style.cursor = "pointer"; + ) // 缁樺埗鏂规硶 + _this.showRemarks(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion, v.name) + _this.c.style.cursor = "pointer" } - }); - _this.canvasData.polygon.forEach(function (v, i) { + }) + _this.canvasData.polygon.forEach(function(v, i) { if (v.location.length === 0) { - return; + return } - _this.ctx.strokeStyle = "yellow"; - _this.ctx.beginPath(); - _this.ctx.moveTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion); + _this.ctx.strokeStyle = "yellow" + _this.ctx.beginPath() + _this.ctx.moveTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion) for (let i = 1; i < v.location.length; i++) { - _this.ctx.lineTo(v.location[i].x / _this.showProportion, v.location[i].y / _this.showProportion); + _this.ctx.lineTo(v.location[i].x / _this.showProportion, v.location[i].y / _this.showProportion) } - _this.ctx.closePath(); - _this.ctx.stroke(); + _this.ctx.closePath() + _this.ctx.stroke() _this.showRemarks( v.location[v.location.length - 1].x / _this.showProportion, v.location[v.location.length - 1].y / _this.showProportion, v.name - ); - _this.c.style.cursor = "default"; + ) + _this.c.style.cursor = "default" if (e && _this.ctx.isPointInPath(e.offsetX, e.offsetY)) { // 濡傛灉浼犲叆浜嗕簨浠跺潗鏍囷紝灏辩敤isPointInStroke鍒ゆ柇涓�涓� // 濡傛灉褰撳墠鐜瑕嗙洊浜嗚鍧愭爣锛屽氨灏嗗浘褰㈢殑index鏀惧埌鏁扮粍閲� // 褰撻紶鏍囩Щ鍏ヤ箣鍚庡皢褰撳墠鐨勬ā寮忓垏鎹负閫変腑妯″紡 - _this.type = "0"; - _this.delCursor.type = "5"; - _this.delCursor.index = i; + _this.type = "0" + _this.delCursor.type = "5" + _this.delCursor.index = i // 灏嗗綋鍓嶅厓绱犳爣绾� - _this.ctx.strokeStyle = "red"; - _this.ctx.beginPath(); - _this.ctx.moveTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion); + _this.ctx.strokeStyle = "red" + _this.ctx.beginPath() + _this.ctx.moveTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion) for (let i = 1; i < v.location.length; i++) { - _this.ctx.lineTo(v.location[i].x / _this.showProportion, v.location[i].y / _this.showProportion); + _this.ctx.lineTo(v.location[i].x / _this.showProportion, v.location[i].y / _this.showProportion) } - _this.ctx.closePath(); - _this.ctx.stroke(); + _this.ctx.closePath() + _this.ctx.stroke() _this.showRemarks( v.location[v.location.length - 1].x / _this.showProportion, v.location[v.location.length - 1].y / _this.showProportion, v.name - ); - _this.c.style.cursor = "pointer"; + ) + _this.c.style.cursor = "pointer" } - }); + }) }, // 鍥炴樉鍥惧舰澶囨敞 showRemarks(x, y, remarks) { - this.ctx.moveTo(x, y - 10); // 鍥犱负鏀惧ぇ涔嬪悗鏄痽-20锛屾墍浠ョ缉灏忕増鐨勪负y-10 - this.ctx.fillStyle = "green"; // 璁剧疆濉厖棰滆壊涓虹豢鑹� - this.ctx.font = '10px "寰蒋闆呴粦"'; // 璁剧疆瀛椾綋 - this.ctx.textBaseline = "bottom"; // 璁剧疆瀛椾綋搴曠嚎瀵归綈缁樺埗鍩虹嚎 - this.ctx.textAlign = "left"; // 璁剧疆瀛椾綋瀵归綈鐨勬柟寮� - this.ctx.fillText(remarks, x, y - 10); // 濉厖鏂囧瓧 + this.ctx.moveTo(x, y - 10) // 鍥犱负鏀惧ぇ涔嬪悗鏄痽-20锛屾墍浠ョ缉灏忕増鐨勪负y-10 + this.ctx.fillStyle = "green" // 璁剧疆濉厖棰滆壊涓虹豢鑹� + this.ctx.font = '10px "寰蒋闆呴粦"' // 璁剧疆瀛椾綋 + this.ctx.textBaseline = "bottom" // 璁剧疆瀛椾綋搴曠嚎瀵归綈缁樺埗鍩虹嚎 + this.ctx.textAlign = "left" // 璁剧疆瀛椾綋瀵归綈鐨勬柟寮� + this.ctx.fillText(remarks, x, y - 10) // 濉厖鏂囧瓧 }, // 绠ご缁樺埗鍑芥暟 drawArrow(ctx, fromX, fromY, toX, toY, theta, headlen, width, color) { @@ -425,86 +397,86 @@ // headlen锛氫笁瑙掓枩杈归暱搴� // width锛氱澶寸嚎瀹藉害 // color锛氱澶撮鑹� - theta = typeof theta !== "undefined" ? theta : 30; - headlen = typeof theta !== "undefined" ? headlen : 10; - width = typeof width !== "undefined" ? width : 1; - color = typeof color !== "undefined" ? color : "yellow"; + theta = typeof theta !== "undefined" ? theta : 30 + headlen = typeof theta !== "undefined" ? headlen : 10 + width = typeof width !== "undefined" ? width : 1 + color = typeof color !== "undefined" ? color : "yellow" // 璁$畻鍚勮搴﹀拰瀵瑰簲鐨凱2,P3鍧愭爣 - let angle = (Math.atan2(fromY - toY, fromX - toX) * 180) / Math.PI; - let angle1 = ((angle + theta) * Math.PI) / 180; - let angle2 = ((angle - theta) * Math.PI) / 180; - let topX = headlen * Math.cos(angle1); - let topY = headlen * Math.sin(angle1); - let botX = headlen * Math.cos(angle2); - let botY = headlen * Math.sin(angle2); + let angle = (Math.atan2(fromY - toY, fromX - toX) * 180) / Math.PI + let angle1 = ((angle + theta) * Math.PI) / 180 + let angle2 = ((angle - theta) * Math.PI) / 180 + let topX = headlen * Math.cos(angle1) + let topY = headlen * Math.sin(angle1) + let botX = headlen * Math.cos(angle2) + let botY = headlen * Math.sin(angle2) - ctx.save(); - ctx.beginPath(); - let arrowX = fromX - topX; - let arrowY = fromY - topY; - ctx.moveTo(arrowX, arrowY); - ctx.moveTo(fromX, fromY); - ctx.lineTo(toX, toY); - arrowX = toX + topX; - arrowY = toY + topY; - ctx.moveTo(arrowX, arrowY); - ctx.lineTo(toX, toY); - arrowX = toX + botX; - arrowY = toY + botY; - ctx.lineTo(arrowX, arrowY); - ctx.strokeStyle = color; - ctx.lineWidth = width; - ctx.stroke(); - ctx.restore(); + ctx.save() + ctx.beginPath() + let arrowX = fromX - topX + let arrowY = fromY - topY + ctx.moveTo(arrowX, arrowY) + ctx.moveTo(fromX, fromY) + ctx.lineTo(toX, toY) + arrowX = toX + topX + arrowY = toY + topY + ctx.moveTo(arrowX, arrowY) + ctx.lineTo(toX, toY) + arrowX = toX + botX + arrowY = toY + botY + ctx.lineTo(arrowX, arrowY) + ctx.strokeStyle = color + ctx.lineWidth = width + ctx.stroke() + ctx.restore() }, async refresh() { // console.log(this.loading,'鍒锋柊搴曞浘',this.snapshot_url) if (!this.currentCameraId) { - return false; + return false } // await this.$emit('changeLoading', true) - this.getCanvasPic(); + this.getCanvasPic() }, // 鍒ゆ柇鍥惧舰鍚嶇О鏄惁閲嶅 isRepeat() { - let _this = this; // 闆嗗悎涓亶鍘嗛渶瑕佸皢this杞瓨涓�涓嬩娇鐢� - let nameArray = []; + let _this = this // 闆嗗悎涓亶鍘嗛渶瑕佸皢this杞瓨涓�涓嬩娇鐢� + let nameArray = [] for (const v of _this.$refs.bigCanvas.canvasData.line) { for (const item of nameArray) { if (v.name === item) { - return v.name; + return v.name } } - nameArray.push(v.name); + nameArray.push(v.name) } for (const v of _this.$refs.bigCanvas.canvasData.arrow) { for (const item of nameArray) { if (v.name === item) { - return v.name; + return v.name } } - nameArray.push(v.name); + nameArray.push(v.name) } for (const v of _this.$refs.bigCanvas.canvasData.rect) { for (const item of nameArray) { if (v.name === item) { - return v.name; + return v.name } } - nameArray.push(v.name); + nameArray.push(v.name) } for (const v of _this.$refs.bigCanvas.canvasData.polygon) { for (const item of nameArray) { if (v.name === item) { - return v.name; + return v.name } } - nameArray.push(v.name); + nameArray.push(v.name) } - return ""; + return "" } } -}; +} </script> <style lang="scss" scoped> canvas { -- Gitblit v1.8.0