zhgdyun/src/views/projectFront/projectSummary/devicePointConfig.vue

542 lines
15 KiB
Vue

<template>
<!-- 基本信息 -->
<div class="cooperator flex">
<div class="left whiteBlock">
<!-- <div class="title">全部塔吊</div> -->
<vue-scroll style="height: 94%">
<el-menu :default-active="String(devTypeIndex)" class="el-menu-vertical-demo whiteBlock">
<!-- <el-menu-item
index="0"
class="el-menu-item"
:class="checkedId == 0 ? 'checked_item' : ''"
@click="selectMenu(0)"
>
<span slot="title">全部设备位置</span>
</el-menu-item> -->
<el-menu-item
:index="String(index)"
class="el-menu-item"
:class="devTypeIndex == index ? 'checked_item' : ''"
v-for="(item, index) in devTypeList"
@click="
devTypeIndex = index
selectMenu(item.id)
"
:key="index"
>
<span slot="title">{{ item.name }}</span>
</el-menu-item>
</el-menu>
</vue-scroll>
<div class="flex2 btn_pack">
<!-- <el-button size="small" type="primary" @click="newTowerBtn"
>新增塔吊</el-button
>
<el-button
size="small"
type="danger"
@click="deleteOrCancel"
:disabled="checkedId == 0"
>{{ checkedId != -1 ? "删除塔吊" : "取消新增" }}</el-button
> -->
<el-button size="medium" type="primary" @click="saveTowerLocationBtn">
{{ $t('message.projectInfo.saveLocationInfo') }}
<!-- 保存位置信息 -->
</el-button>
</div>
</div>
<div class="right">
<div class="pageTitle title flex2 whiteBlock" style="margin-bottom: 0">
{{ rightTitle }}
</div>
<div class="content whiteBlock">
<div class="bgPack">
<img :src="bgUrl" style="width: auto; height: auto" ref="bgPackImg" />
<!-- 塔吊点位 -->
<div
v-for="(item, index) in towerList"
class="point"
:key="index"
:style="{ top: item.mapY + 'px', left: item.mapX + 'px' }"
@mousedown="e => mousedown(e, index)"
>
<img :src="getDevIcon(item.devType)" alt="" />
<span class="devName">{{ item.name }}</span>
<!-- {{ index + 1 }} -->
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { selectDevCoordinateListApi, updateDevCoordinateApi } from '@/assets/js/api/dataBoard'
export default {
data() {
return {
devTypeList: [
{ name: '全部设备位置', id: '' },
{ name: '摄像机', id: 4 },
{ name: '塔吊', id: 2 },
{ name: '升降机', id: 3 },
{ name: '车辆相机', id: 1 },
{ name: '配电箱', id: 5 },
{ name: '扬尘设备', id: 6 },
{ name: '人脸闸机', id: 7 },
{ name: '标养室', id: 8 }
],
devTypeIndex: 0,
devType: '',
devIcon: '',
projectSn: '',
uploadUrl: '',
fileUrl: '',
checkTowerId: '', //选中的塔吊id 只作为列表选中状态切换
checkedId: 0, //选中的设备 -1 新增状态 控制取消按钮 获取选中设备
towerList: [], //设备列表
rightTitle: /* "现场施工图", */ this.$t('message.projectInfo.SiteConstructionDrawing'),
driverList: [], //司机列表
videoList: [],
showTowerInfo: false, //显示施工图或塔吊信息
bgUrl: '' //施工图
}
},
created() {
this.uploadUrl = this.$store.state.UPLOADURL
this.fileUrl = this.$store.state.FILEURL
this.projectSn = this.$store.state.projectSn
this.getTowerList(1)
// this.getWorkerInfoList();
// this.getVideoItemList();
this.bgUrl = this.$store.state.currentProDetail.constructionMapUrl
},
methods: {
getDevIcon(type) {
switch (Number(type)) {
case 1:
return require('@/assets/images/dataBoard/devIcon-car.png')
break
case 2:
return require('@/assets/images/dataBoard/devIcon-tower.png')
break
case 3:
return require('@/assets/images/dataBoard/devIcon-lifter.png')
break
case 4:
return require('@/assets/images/dataBoard/devIcon-camera.png')
break
case 5:
return require('@/assets/images/dataBoard/devIcon-electric.png')
break
case 6:
return require('@/assets/images/dataBoard/devIcon-green.png')
break
case 7:
return require('@/assets/images/dataBoard/devIcon-face.png')
break
case 8:
return require('@/assets/images/dataBoard/devIcon-chamber.png')
break
}
},
// 获取所有塔吊
getTowerList() {
let data = {
projectSn: this.projectSn,
devType: this.devType
}
selectDevCoordinateListApi(data).then(res => {
if (res.code == 200) {
this.towerList = res.result
// if (type == 1) {
// this.checkedId = 0;
// this.checkTowerId = '';
// } else {
// this.checkedId = this.towerList.length;
// this.checkTowerId = this.towerList[this.towerList.length-1].id;
// //详情
// this.selectMenu(this.checkedId);
// }
}
})
},
//切换塔吊
selectMenu(val) {
this.devType = val
this.getTowerList()
// if (val == 0) {
// this.rightTitle = "现场施工图";
// this.showTowerInfo = false; //显示施工图
// this.checkTowerId = '';
// } else {
// this.showTowerInfo = true;
// if (this.towerList[val - 1].id) {
// this.rightTitle = this.towerList[val - 1].devName;
// this.facilityForm = this.towerList[val - 1];
// this.checkTowerId = this.towerList[val - 1].id;
// this.getDetailsData(this.towerList[val - 1].id);
// }
// }
},
// 查询设备详情
// getDetailsData(id) {
// let data = {
// id,
// };
// getDetailsApi(data).then((res) => {
// if (res.code == 200) {
// this.facilityForm = res.result;
// let workerIdArr = [];
// let videoItemIdArr = [];
// for (let i = 0; i < res.result.driverList.length; i++) {
// workerIdArr.push(res.result.driverList[i].workerId);
// }
// for (let i = 0; i < res.result.videoList.length; i++) {
// videoItemIdArr.push(res.result.videoList[i].videoItemId);
// }
// this.facilityForm.driverList = workerIdArr;
// this.facilityForm.videoList = videoItemIdArr;
// }
// });
// },
//新增塔吊按钮
// newTowerBtn() {
// this.facilityForm = {
// devName: "",
// devSn: "",
// forearmLength: "",
// towerHeight: "",
// registNo: "",
// factoryName: "",
// anticollision: 0,
// workerId: "",
// videoItemId: "",
// };
// this.showTowerInfo = true;
// this.checkedId = -1;
// this.checkTowerId = '';
// this.rightTitle = "新增塔吊";
// },
//删除或取消按钮
// deleteOrCancel() {
// //新增状态 this.checkedId=-1 为取消按钮
// if (this.checkedId == -1) {
// this.rightTitle = "现场施工图";
// this.checkedId = 0;
// this.showTowerInfo = false;
// } else {
// // 删除按钮
// this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {
// confirmButtonText: "确定",
// cancelButtonText: "取消",
// type: "warning",
// })
// .then(() => {
// let data = {
// id: this.towerList[this.checkedId - 1].id,
// };
// deleteTowerInfoApi(data).then((res) => {
// if (res.code == 200) {
// this.getTowerList(1);
// this.showTowerInfo = false;
// this.rightTitle = "现场施工图";
// this.$message({
// type: "success",
// message: "删除成功!",
// });
// } else {
// this.$message.error(res.message);
// }
// });
// })
// .catch(() => {
// this.$message({
// type: "info",
// message: "已取消删除",
// });
// });
// }
// },
//移动塔吊位置
mousedown(e, index) {
let bgPackImg = this.$refs.bgPackImg //获取背景图
let maxH = bgPackImg.scrollHeight - 30 //可移动的最大高度
let maxW = bgPackImg.scrollWidth - 30 //可移动的最大宽度
let objDiv = document.getElementsByClassName('point')[index]
let zoom = window.localStorage.getItem('zoom')
//算出鼠标相对元素的位置
let disX = e.clientX - objDiv.offsetLeft
let disY = e.clientY - objDiv.offsetTop
// let disX = e.clientY ;
// let disY = e.clientY ;
//
//鼠标移动时
document.onmousemove = e => {
console.log('document.onmousemove')
//用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
let left = e.clientX - disX
let top = e.clientY - disY
console.log(e.clientX, e.clientY)
console.log(disX, disY)
console.log(left, top)
if (left < 0 || top < 0 || top > maxH || left > maxW) {
return
} else {
this.towerList[index].mapX = left
this.towerList[index].mapY = top
}
}
//鼠标松开时
document.onmouseup = e => {
console.log('document.onmouseup')
document.onmousemove = null
document.onmouseup = null
}
},
// //获取司机列表
// getWorkerInfoList() {
// let data = {
// projectSn: this.projectSn,
// };
// getWorkerInfoListApi(data).then((res) => {
// if (res.code == 200) {
// this.driverList = res.result;
// }
// });
// },
//获取摄像机列表
// getVideoItemList() {
// let data = {
// projectSn: this.projectSn,
// };
// getVideoItemListApi(data).then((res) => {
// if (res.code == 200) {
// this.videoList = res.result.list;
// }
// });
// },
//保存新增
// submit() {
// this.$refs["facilityForm"].validate((valid) => {
// if (valid) {
// let data = JSON.parse(JSON.stringify(this.facilityForm));
// data.projectSn = this.projectSn;
// data.mapX = "0";
// data.mapY = "0";
// let driverArr = [];
// let videoArr = [];
// //循环选中的司机
// for (let i = 0; i < data.driverList.length; i++) {
// let obj = { workerId: data.driverList[i] };
// driverArr.push(obj);
// }
// //循环选中的摄像头
// for (let i = 0; i < data.videoList.length; i++) {
// let obj = { videoItemId: data.videoList[i] };
// videoArr.push(obj);
// }
// data.driverList = driverArr;
// data.videoList = videoArr;
// if(this.checkedId==-1){
// //新增
// addTowerInfoApi(data).then((res) => {
// if (res.code == 200) {
// this.getTowerList(2);
// this.$message.success('新增成功')
// } else {
// this.$message.error(res.message);
// }
// });
// }else{
// editTowerInfoApi(data).then((res)=>{
// if(res.code==200){
// this.getTowerList(1);
// this.$message.success('编辑成功')
// }
// })
// }
// } else {
// console.log("error submit!!");
// return false;
// }
// });
// },
//保存塔吊位置
saveTowerLocationBtn() {
console.log(this.towerList)
// let data = [];
// for(let i = 0; i<this.towerList.length;i++){
// let obj = {id:this.towerList[i].id,mapX:this.towerList[i].mapX,mapY:this.towerList[i].mapY};
// data.push(obj)
// }
updateDevCoordinateApi(this.towerList).then(res => {
console.log(res)
if (res.code == 200) {
// 保存成功
this.$message.success(this.$t('message.projectInfo.saveSuccess'))
this.getTowerList()
}
})
}
}
}
</script>
<style lang="less" scoped>
.flex {
display: flex;
}
.flex2 {
display: flex;
align-items: center;
justify-content: space-between;
}
.flex3 {
display: flex;
align-items: center;
}
.cooperator {
width: 100%;
height: 100%;
.left {
height: 100%;
width: 300px;
// width: 25%;
margin-right: 15px;
font-size: 15px;
.title {
height: 41px;
line-height: 41px;
box-sizing: border-box;
padding: 0 22px;
margin-bottom: 0;
// color: #282e49;
// border-bottom: 2px #ebf0fc solid;
font-weight: 600;
}
.el-menu-item {
border-bottom: 2px #ebf0fc solid;
height: 50px;
line-height: 50px;
padding: 0 30px !important;
font-size: 16px;
}
.checked_item {
border-left: 3px solid @--color-primary;
padding: 0 27px !important;
background-color: #e1e8fa !important;
}
.btn_pack {
justify-content: center;
}
}
.right {
height: 100%;
width: calc(100% - 300px);
// width: 75%;
.title {
font-size: 15px;
height: 41px;
line-height: 41px;
// background-color: #ffffff;
box-sizing: border-box;
padding: 0 22px;
// color: #282e49;
border-bottom: 2px #ebf0fc solid;
font-weight: 600;
.right_value {
color: rgba(115, 121, 150, 100);
font-size: 14px;
font-weight: 100;
.value {
color: @--color-primary;
}
}
}
.content {
height: calc(100% - 41px);
// background-color: #fff;
box-sizing: border-box;
padding: 20px 20px;
.demo-facilityForm {
width: 50%;
}
}
}
}
/deep/ .__view {
min-height: calc(100% - 41px) !important;
}
/deep/ .el-checkbox__label {
display: none;
}
.el-menu-vertical-demo {
width: 100%;
}
.cooperatorDetail {
width: 100%;
height: 100%;
// background: #ffffff;
box-sizing: border-box;
.navigationTitle {
// border-bottom: 2px solid #ebf0fc;
// margin-bottom: 15px;
}
}
.nodata_wrap {
width: 100%;
text-align: center;
height: 80%;
padding-top: 20%;
box-sizing: border-box;
// color: #c3d4fd;
div {
margin-top: 10px;
}
}
.bgPack {
width: 100%;
height: 100%;
background-repeat: no-repeat;
position: relative;
overflow: auto;
.point {
position: absolute;
display: inline-flex;
align-items: center;
// border-radius: 50%;
// background: rgb(236, 126, 46);
// text-align: center;
// line-height: 30px;
z-index: 2;
cursor: pointer;
user-select: none;
img {
width: 52px;
height: 58px;
}
.devName {
color: #fff;
font-size: 13px;
// margin-left: 10px;
word-break: keep-all;
}
}
// .point:hover {
// background: rgb(241, 191, 24);
// }
}
</style>