赞
踩
- <el-dialog v-model="markVisible" title="图片标注" width="70%" :before-close="cancelBiaoZhu">
- <el-row>
- <el-col :span="24">
- <span>(图片标注可点击鼠标右键进行撤销)</span>
- </el-col>
- <el-col :span="24">
- <div class="myBiaoZhu" id="myBiaoZhuDiv" v-if="isRefresh">
- <img id="myBiaoZhu" :src="imageUrl" style="max-width: 800px" />
- </div>
- </el-col>
- </el-row>
- <!-- 展示标记点位置-->
- <!-- <div class="showBiaoZhu" id="showBiaoZhuDiv">-->
- <!--<!– style="max-width: 600px"–>-->
- <!-- <img id="showBiaoZhu" :src="imageUrl" style="width: 600px;height: 200px"/>-->
- <!-- </div>-->
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="cancelBiaoZhu" size="default">取 消</el-button>
- <el-button type="primary" size="default" @click="endBiaoZhu">结束标注</el-button>
- </span>
- </template>
- </el-dialog>
-
-
- #myBiaoZhuDiv {
- position: relative;
- cursor: pointer;
- img {
- border: solid 1px #000;
- display: inline-block;
- margin: 20px 20px;
- z-index: 1;
- }
- .marker {
- position: absolute;
- border-radius: 50%;
- z-index: 999;
- }
- }
- // 开始标注
- startBiaoZhu() {
- this.markVisible = true
- this.canBiaoZhu = true
- // console.log('ppp',this.banMa)
- this.$nextTick(() => {
- // let this.tableData[this.picturePropIndex].buList[this.pictureIndex].banMa
- // console.log('ppp',document.getElementById('myBiaoZhu'))
- document.getElementById('myBiaoZhu').oncontextmenu = (e) => {
- if (e && e.preventDefault) {
- //阻止默认浏览器动作(W3C)
- e.preventDefault()
- } else {
- //IE中阻止函数器默认动作的方式
- window.event.returnValue = false
- }
- return false
- } //阻止冒泡行为和默认右键菜单事件
- let arr = JSON.parse(JSON.stringify(this.banMa))
- // 如果存在已经有位置信息的点直接回显
- arr.forEach((v) => {
- // console.log(')0))0',v.proportionHeightInImg)
- if (v.proportionHeightInImg != null) {
- setTimeout(()=>{
- // this.createMarker(v.x,v.y,v.sort)
- let markImg = document.querySelector('#myBiaoZhu')
- let markWidth = markImg.clientWidth
- let markHeight = markImg.clientHeight
- // console.log('进行',markWidth,markHeight)
- let div = document.createElement('div')
- div.className = 'marker'
- div.id = 'marker' + v.sort
- div.style.width = this.pointSize + 'px'
- div.style.height = this.pointSize + 'px'
- div.style.backgroundColor = this.pointColor
- div.style.left = markWidth * v.proportionWidthInImg + document.getElementById('myBiaoZhu').offsetTop - this.pointSize / 2 + 'px'
- div.style.top = markHeight * v.proportionHeightInImg + document.getElementById('myBiaoZhu').offsetLeft - this.pointSize / 2 + 'px'
- div.style.borderRadius = '50%'
- div.style.position = 'absolute'
- div.style.zIndex = 999
- div.innerHTML = `${v.sort}`
- div.style.color = '#ffffff'
- div.style.textAlign = 'center'
- div.style.lineHeight = this.pointSize + 'px'
- div.oncontextmenu = (e) => {
- // this.isRefresh = false
- var sort = e.target.id
- // console.log('sss',sort)
- document.getElementById('myBiaoZhuDiv').removeChild(div)
- this.banMa.forEach((item, index) => {
- if (item.sort == sort.slice(6, sort.length)) {
- // console.log('进',item.id)
- // delete this.banMa[index];
- this.banMa[index].x = null
- this.banMa[index].y = null
- this.banMa[index].proportionHeightInImg = null
- this.banMa[index].proportionWidthInImg = null
- }
- // console.log('&&&&',item.id,id.slice(6,id.length),item.id == id.slice(6,id.length))
- })
- this.canBiaoZhu = true
- if (e && e.preventDefault) {
- //阻止默认浏览器动作(W3C)
- e.preventDefault()
- } else {
- //IE中阻止函数器默认动作的方式
- window.event.returnValue = false
- }
- return false
- } //阻止冒泡行为和默认右键菜单事件,删除该点、
- document.getElementById('myBiaoZhuDiv').appendChild(div)
- },500)
- }
- })
-
- document.getElementById('myBiaoZhu').onmousedown = (e) => {
- // console.log('进')
- e = e || window.event
- if (e.button !== 2) {
- //判断是否右击
- if (this.canBiaoZhu) {
- //判断是否可以进行标注
- var x = e.offsetX || e.layerX
- var y = e.offsetY || e.layerY
- // console.log(x,y)
- var myImg = document.querySelector('#myBiaoZhu')
- var currWidth = myImg.clientWidth
- var currHeight = myImg.clientHeight
- var proportionWidthInImg = x / currWidth
- var proportionHeightInImg = y / currHeight
- // console.log("图片比例高度:"+proportionHeightInImg)
- // console.log("图片比例宽度:"+proportionWidthInImg)
- let obj = {
- // id:this.banMa.length+1,
- sort: null,
- x,
- y,
- proportionHeightInImg,
- proportionWidthInImg,
- }
- let arr = JSON.parse(JSON.stringify(this.banMa))
- let flag = false
- for (let i = 0; i < arr.length; i++) {
- if (this.banMa[i].proportionHeightInImg == null) {
- // console.log('jinjinjin')
- flag = true
- obj.sort = Number(this.banMa[i].sort)
- this.banMa[i] = obj
- break
- }
- }
- if (obj.sort === this.banMa[this.banMa.length - 1].sort && this.banMa[this.banMa.length - 1].x != null) {
- // console.log('进')
- this.canBiaoZhu = false
- }
- if (obj.sort != null) {
- this.createMarker(x, y, obj.sort)
- } else {
- ElMessage({
- message: '标注点数已达上限!',
- type: 'warning',
- })
- }
-
- // if(this.banMa[this.banMa.length-1].id===obj.id){
- // this.canBiaoZhu = false
- // }
- // console.log('ppp')
- // var markImg = document.querySelector("#showBiaoZhu")
- // var markWidth = markImg.clientWidth
- // var markHeight = markImg.clientHeight
- // var div = document.createElement('div')
- // div.className = 'show'
- // div.style.width = this.pointSize + 'px'
- // div.style.height = this.pointSize + 'px'
- // div.style.backgroundColor = this.pointColor
- // div.style.left = markWidth*ProportionWidthInImg + document.getElementById('showBiaoZhu').offsetTop- this.pointSize/2 + 'px'
- // div.style.top = markHeight*ProportionHeightInImg + document.getElementById('showBiaoZhu').offsetLeft - this.pointSize/2 + 'px'
- // div.style.borderRadius = '50%'
- // div.style.position='absolute'
- // div.style.zIndex= 999
- // div.innerHTML=`${this.banMa.length}`
- // div.style.color='#ffffff'
- // div.style.textAlign='center'
- // div.style.lineHeight = this.pointSize + 'px'
- // document.getElementById('showBiaoZhuDiv').appendChild(div)
- } else {
- ElMessage({
- message: '标注点数已达上限!',
- type: 'warning',
- })
- }
- } else {
- console.log(e)
- }
- }
- })
- },
- //画点
- createMarker(x, y, sort) {
- // console.log('ppp',id)
- var div = document.createElement('div')
- div.className = 'marker'
- div.id = 'marker' + sort
- y = y + document.getElementById('myBiaoZhu').offsetTop - this.pointSize / 2
- x = x + document.getElementById('myBiaoZhu').offsetLeft - this.pointSize / 2
- // console.log('@@@',document.getElementById('myBiaoZhu').offsetTop,document.getElementById('myBiaoZhu').offsetLeft)
- div.style.width = this.pointSize + 'px'
- div.style.height = this.pointSize + 'px'
- div.style.backgroundColor = this.pointColor
- div.style.left = x + 'px'
- div.style.top = y + 'px'
- div.style.borderRadius = '50%'
- div.style.position = 'absolute'
- div.style.zIndex = 999
- div.innerHTML = `${sort}`
- div.style.color = '#ffffff'
- div.style.textAlign = 'center'
- div.style.lineHeight = this.pointSize + 'px'
- div.oncontextmenu = (e) => {
- // this.isRefresh = false
- // console.log('pppp',e)
- var sort = e.target.id
- document.getElementById('myBiaoZhuDiv').removeChild(div)
- this.banMa.forEach((item, index) => {
- if (item.sort == sort.slice(6, sort.length)) {
- // console.log('进',item.id)
- // delete this.banMa[index];
- this.banMa[index].x = null
- this.banMa[index].y = null
- this.banMa[index].proportionHeightInImg = null
- this.banMa[index].proportionWidthInImg = null
- }
- // console.log('&&&&',item.id,id.slice(6,id.length),item.id == id.slice(6,id.length))
- })
- this.canBiaoZhu = true
- if (e && e.preventDefault) {
- //阻止默认浏览器动作(W3C)
- e.preventDefault()
- } else {
- //IE中阻止函数器默认动作的方式
- window.event.returnValue = false
- }
- return false
- } //阻止冒泡行为和默认右键菜单事件,删除该点
- document.getElementById('myBiaoZhuDiv').appendChild(div)
- },
- //结束标注
- endBiaoZhu() {
- this.tableData[this.picturePropIndex].buList[this.pictureIndex].banMa = JSON.parse(JSON.stringify(this.banMa))
- this.cancelBiaoZhu()
- this.markVisible = false
- this.canBiaoZhu = false
- // this.comfirmAdd()
- },
- // 取消标注
- cancelBiaoZhu() {
- this.markVisible = false
- this.canBiaoZhu = false
- this.banMa.forEach((v) => {
- let div = document.getElementById('marker' + v.sort)
- if (div) {
- document.getElementById('myBiaoZhuDiv').removeChild(div)
- }
- })
- this.comfirmAdd()
- this.banMa = []
- },
获取已经有标注信息的数据并回显,通过拧紧信息带括号判断从数字几开始标注,到几结束,限制标注个数
- // 步序图片上传
- handleChildUpImg(row, index, propIndex) {
- // this.cancelBiaoZhu()
- this.picturePropIndex = propIndex
- this.pictureIndex = index
- this.pictureDialogVisible = true
- let str = row.stepName
- if (str.indexOf('(') != -1 || str.indexOf('(') != -1) {
- // console.log('row',row.stepName)
- this.banMa = []
- this.pointSortList = []
- var num1, num2, num3
- if (str.indexOf('(') != -1) {
- num1 = str.indexOf('(')
- } else if (str.indexOf('(') != -1) {
- num1 = str.indexOf('(')
- } else {
- num1 = ''
- }
- // console.log('次数',str.match(/-/g).length,str.indexOf('-',2))
- num2 = str.indexOf('-')
- if(str.match(/-/g).length===2){
- num2 = str.indexOf('-',num2+1)
- }
- if (str.indexOf(')') != -1) {
- num3 = str.indexOf(')')
- } else if (str.indexOf(')') != -1) {
- num3 = str.indexOf(')')
- } else {
- num3 = ''
- }
- var start = str.slice(num1 + 1, num2)
- var end = str.slice(num2 + 1, num3)
- for (var i = start; i <= end; i++) {
- this.pointSortList.push({ sort: Number(i), x: null, y: null, proportionHeightInImg: null, proportionWidthInImgInImg: null })
- }
- // console.log('进行',start,end)
- this.isNingJin = true
- if (row.banMa) {
- // this.banMa = []
- row.banMa.forEach((v, i) => {
- if (v.sort) {
- this.banMa.push({ sort: v.sort, x: null, y: null, proportionHeightInImg: v.proportionHeightInImg, proportionWidthInImg: v.proportionWidthInImg })
- } else {
- let sort = Number(i) + Number(start)
- this.banMa.push({ sort, x: null, y: null, proportionHeightInImg: v.proportionHeightInImg, proportionWidthInImg: v.proportionWidthInImg })
- }
- })
- } else {
- // console.log('jin',start,end)
- // var tips = str.slice(0, num1)
- // for (var i = start; i <= end; i++) {
- // this.banMa.push({sort:Number(i),
- // x:null,
- // y:null,
- // proportionHeightInImg:null,
- // proportionWidthInImgInImg:null})
- // }
- // console.log('步序',this.banMa)
- this.banMa = [...this.pointSortList]
- }
- // console.log('oooo',this.banMa,row.banMa)
- } else {
- this.isNingJin = false
- this.banMa = []
- }
- if (row.pictureUrl) {
- this.imageUrl = this.mateUrl + row.pictureUrl
- this.picUrl = row.pictureUrl
- } else {
- this.imageUrl = ''
- this.picUrl = ''
- }
- // if(row.banMa){
- // this.banMa = row.banMa
- // }else{
- // this.banMa = []
- // }
- },
效果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。