|
|
|
@ -42,7 +42,73 @@ export class GetOutOfLineDetailsComponent implements OnInit {
|
|
|
|
|
isLicenseWarning = false; |
|
|
|
|
|
|
|
|
|
isSubmit; |
|
|
|
|
|
|
|
|
|
// 标注安信框选区
|
|
|
|
|
isAnxin = false; |
|
|
|
|
coordinate = []; //完整坐标点信息
|
|
|
|
|
currentCoordinate = []; //当前需要标绘坐标点信息
|
|
|
|
|
legendList: any = []; |
|
|
|
|
typeArr = [ |
|
|
|
|
{ id: 0, name: "工装", color: "#91CCFF" }, |
|
|
|
|
{ id: 2, name: "便装", color: "#46DFFF" }, |
|
|
|
|
{ id: 2, name: "抽烟", color: "#36A2FF" }, |
|
|
|
|
{ id: 3, name: "打电话", color: "#FF6181" }, |
|
|
|
|
{ id: 4, name: "隔离锥", color: "#000000" }, |
|
|
|
|
{ id: 5, name: "手持灭火器", color: "#ffffff" }, |
|
|
|
|
{ id: 6, name: "推车灭火器", color: "#B4C3FF" }, |
|
|
|
|
{ id: 7, name: "静电接地", color: "#FF9963" }, |
|
|
|
|
{ id: 8, name: "输油管(连接)", color: "#5A9CFF" }, |
|
|
|
|
{ id: 9, name: "输油管连接车", color: "#4BFFD4" }, |
|
|
|
|
{ id: 10, name: "输油管连接卸油口", color: "red" }, |
|
|
|
|
{ id: 11, name: "卸油口盖子", color: "green" }, |
|
|
|
|
{ id: 12, name: "卸油车", color: "yellow" }, |
|
|
|
|
{ id: 13, name: "私家车", color: "black" }, |
|
|
|
|
{ id: 14, name: "断开的卸油管", color: "blue" }, |
|
|
|
|
]; |
|
|
|
|
userName; //登录账号的用户名
|
|
|
|
|
isShowAxOtherRegion; //控制哪些用户可以看到ax全部
|
|
|
|
|
ngOnInit(): void { |
|
|
|
|
|
|
|
|
|
// 安信框选
|
|
|
|
|
this.userName = JSON.parse(sessionStorage.getItem("userdata")).userName; |
|
|
|
|
if (this.userName === "admin" || this.userName === "superadmin") { |
|
|
|
|
this.isShowAxOtherRegion = true; |
|
|
|
|
} else { |
|
|
|
|
this.isShowAxOtherRegion = false; |
|
|
|
|
} |
|
|
|
|
if ( |
|
|
|
|
this.data.violatedItemSnapshot && |
|
|
|
|
this.data.violation.eventSystemName.indexOf("证照") == -1 && |
|
|
|
|
this.data.violation.eventSystemName.indexOf("设备") == -1 |
|
|
|
|
) { |
|
|
|
|
this.isAnxin = true; |
|
|
|
|
} |
|
|
|
|
if (this.isAnxin) { |
|
|
|
|
let dataArr = []; |
|
|
|
|
for (const key in JSON.parse(this.data.violatedItemSnapshot)) { |
|
|
|
|
const element = JSON.parse(this.data.violatedItemSnapshot)[key]; |
|
|
|
|
dataArr.push(element); |
|
|
|
|
} |
|
|
|
|
this.coordinate = dataArr; |
|
|
|
|
this.currentCoordinate = JSON.parse(JSON.stringify(this.coordinate)); |
|
|
|
|
console.log("坐标信息", this.coordinate); |
|
|
|
|
|
|
|
|
|
let checkboxArr = []; |
|
|
|
|
this.coordinate.forEach((element) => { |
|
|
|
|
checkboxArr.push({ id: element.id, checked: true }); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
for (let i = 0; i < checkboxArr.length; i++) { |
|
|
|
|
if (!this.legendList.some((e) => e.id == checkboxArr[i].id)) |
|
|
|
|
this.legendList.push(checkboxArr[i]); |
|
|
|
|
} |
|
|
|
|
setTimeout(() => { |
|
|
|
|
this.canvasLabel(); |
|
|
|
|
}, 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 安信框选
|
|
|
|
|
|
|
|
|
|
console.log("预警信息", this.data); |
|
|
|
|
|
|
|
|
|
if (this.data.violation.violationType == "证照资质") { |
|
|
|
@ -106,6 +172,122 @@ export class GetOutOfLineDetailsComponent implements OnInit {
|
|
|
|
|
this.isMisinformation = false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
canvasWidth = 0; |
|
|
|
|
canvasHeight = 0; |
|
|
|
|
ctx; |
|
|
|
|
canvasLabel() { |
|
|
|
|
let imgBg: any = document.getElementById("img"); |
|
|
|
|
imgBg.onload = () => { |
|
|
|
|
this.canvasWidth = imgBg.offsetWidth; |
|
|
|
|
this.canvasHeight = imgBg.offsetHeight; |
|
|
|
|
const img = new Image(); |
|
|
|
|
img.src = imgBg.src; |
|
|
|
|
img.onload = () => { |
|
|
|
|
const canvas: any = document.querySelector("#canvas"); |
|
|
|
|
this.ctx = canvas.getContext("2d"); |
|
|
|
|
const cWidth = canvas.width, |
|
|
|
|
cHeight = canvas.height; |
|
|
|
|
// 以图画底
|
|
|
|
|
this.ctx.drawImage(img, 0, 0, cWidth, cHeight); |
|
|
|
|
this.strokeRect(this.currentCoordinate); |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
strokeRect(data) { |
|
|
|
|
data.forEach((item) => { |
|
|
|
|
let startPoint = [ |
|
|
|
|
Math.round(this.canvasWidth * item.box[0]), |
|
|
|
|
Math.round(this.canvasHeight * item.box[1]), |
|
|
|
|
]; |
|
|
|
|
let endPoint = [ |
|
|
|
|
Math.round(this.canvasWidth * item.box[2]), |
|
|
|
|
Math.round(this.canvasHeight * item.box[3]), |
|
|
|
|
]; |
|
|
|
|
if (this.isShowAxOtherRegion) { |
|
|
|
|
this.ctx.strokeStyle = this.typeArr[item.id].color; |
|
|
|
|
this.ctx.lineWidth = 3; |
|
|
|
|
this.ctx.strokeRect( |
|
|
|
|
startPoint[0], |
|
|
|
|
startPoint[1], |
|
|
|
|
endPoint[0] - startPoint[0], |
|
|
|
|
endPoint[1] - startPoint[1] |
|
|
|
|
); |
|
|
|
|
//如果当前矩形区域为错误区域,则左上角增加色块
|
|
|
|
|
if (item.error) { |
|
|
|
|
this.ctx.fillStyle = this.typeArr[item.id].color; |
|
|
|
|
this.ctx.fillRect(startPoint[0], startPoint[1], 10, 10); |
|
|
|
|
} |
|
|
|
|
this.ctx.fillStyle = this.typeArr[item.id].color; |
|
|
|
|
this.ctx.font = "16px Verdana"; |
|
|
|
|
let name = ""; |
|
|
|
|
if (this.isShowAxOtherRegion) { |
|
|
|
|
name = this.typeArr[item.id].name + item.scores; |
|
|
|
|
} else { |
|
|
|
|
name = this.typeArr[item.id].name; |
|
|
|
|
} |
|
|
|
|
this.ctx.fillText( |
|
|
|
|
name, |
|
|
|
|
startPoint[0], |
|
|
|
|
startPoint[1] < 20 || item.id === 2 || item.id === 3 |
|
|
|
|
? endPoint[1] + 18 |
|
|
|
|
: startPoint[1] - 5 |
|
|
|
|
); |
|
|
|
|
} else { |
|
|
|
|
if (item.error) { |
|
|
|
|
this.ctx.strokeStyle = this.typeArr[item.id].color; |
|
|
|
|
this.ctx.lineWidth = 3; |
|
|
|
|
this.ctx.strokeRect( |
|
|
|
|
startPoint[0], |
|
|
|
|
startPoint[1], |
|
|
|
|
endPoint[0] - startPoint[0], |
|
|
|
|
endPoint[1] - startPoint[1] |
|
|
|
|
); |
|
|
|
|
this.ctx.fillStyle = this.typeArr[item.id].color; |
|
|
|
|
this.ctx.fillRect(startPoint[0], startPoint[1], 10, 10); |
|
|
|
|
this.ctx.fillStyle = this.typeArr[item.id].color; |
|
|
|
|
this.ctx.font = "16px Verdana"; |
|
|
|
|
let name = this.typeArr[item.id].name; |
|
|
|
|
// this.ctx.fillText(
|
|
|
|
|
// name,
|
|
|
|
|
// startPoint[0],
|
|
|
|
|
// startPoint[1] < 20 || item.id === 2 || item.id === 3
|
|
|
|
|
// ? endPoint[1] + 18
|
|
|
|
|
// : startPoint[1] - 5
|
|
|
|
|
// );
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
typeChange(item) { |
|
|
|
|
if (item.checked) { |
|
|
|
|
this.coordinate.forEach((element) => { |
|
|
|
|
if (element.id === item.id) { |
|
|
|
|
this.currentCoordinate.push(element); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} else { |
|
|
|
|
this.currentCoordinate = this.currentCoordinate.filter( |
|
|
|
|
(v) => v.id !== item.id |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
this.ctx.clearRect(0, 0, this.canvasWidth, this.canvasHeight); |
|
|
|
|
this.strokeRect(this.currentCoordinate); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
downImg() { |
|
|
|
|
const canvasDom: any = document.querySelector("#canvas"); |
|
|
|
|
const imageData = canvasDom.toDataURL("image/png"); //返回base64的URL
|
|
|
|
|
const elink = document.createElement("a"); |
|
|
|
|
elink.download = "图片"; |
|
|
|
|
elink.style.display = "none"; |
|
|
|
|
elink.href = imageData; |
|
|
|
|
document.body.appendChild(elink); |
|
|
|
|
elink.click(); |
|
|
|
|
URL.revokeObjectURL(elink.href); //释放URL对象
|
|
|
|
|
document.body.removeChild(elink); |
|
|
|
|
} |
|
|
|
|
fileList = []; |
|
|
|
|
|
|
|
|
|
isLoadingSave: boolean = false; |
|
|
|
|