From d8fcf4c20cd4638a3def6227a71ea2c81fbc0885 Mon Sep 17 00:00:00 2001
From: hanbaoshan <hanbaoshan@aiotlink.com>
Date: 星期五, 23 十月 2020 17:23:15 +0800
Subject: [PATCH] 标注静态交互
---
src/pages/labelMark/components/RightSide.vue | 172 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
src/pages/cameraAccess/components/SeparateRules.vue | 2
2 files changed, 159 insertions(+), 15 deletions(-)
diff --git a/src/pages/cameraAccess/components/SeparateRules.vue b/src/pages/cameraAccess/components/SeparateRules.vue
index b9802db..37bb077 100644
--- a/src/pages/cameraAccess/components/SeparateRules.vue
+++ b/src/pages/cameraAccess/components/SeparateRules.vue
@@ -640,7 +640,7 @@
</script>
<style lang="scss">
.el-message--info .el-message__content {
- color: #999;
+ color: #999 !important;
}
.swiper-container {
margin-left: auto;
diff --git a/src/pages/labelMark/components/RightSide.vue b/src/pages/labelMark/components/RightSide.vue
index 2839f63..9bf6d66 100644
--- a/src/pages/labelMark/components/RightSide.vue
+++ b/src/pages/labelMark/components/RightSide.vue
@@ -4,7 +4,7 @@
<div>
<!-- <input type="color" ref="colorPicker" v-model="color"> -->
<label for>鎷捐壊鍣�:</label>
- <el-color-picker v-model="color" show-alpha size="mini"></el-color-picker>
+ <el-color-picker v-model="colorPick" show-alpha size="mini"></el-color-picker>
</div>
<div style="width:250px;">
<label for>绗旇Е:</label>
@@ -12,18 +12,49 @@
</div>
</div>
<div class="action-bar">
- <el-button type size="mini" @click="newLabel">鏍囨敞</el-button>
- <el-button type size="mini" @click="isEdit=!isEdit">{{isEdit?'閿佸畾':'缂栬緫'}}</el-button>
+ <el-button class="drawboard-trigger" size="small" @click="isEdit=!isEdit" :icon="isEdit?'el-icon-lock':'el-icon-edit'">{{isEdit?'閿佸畾':'缂栬緫'}}</el-button>
</div>
<div class="drawboard">
- <div class="mask" v-show="isEdit" ref="editBoard">
- <div class="label" v-for="(item,index) in labels" :key="index" :style="{left:`${item.x}px`, top:`${item.y}px`}"></div>
+ <div class="mask" :class="{'edit-status-mask':isEdit}" ref="editBoard" >
+ <div class="label" @click="editLabel(item)" v-for="(item,index) in labels" :key="index" :style="{left:`${item.x}px`, top:`${item.y}px`, backgroundColor: colorPick, width: `${dotSize}px`, height: `${dotSize}px` }"></div>
</div>
<img :src="baseUrl" alt />
+ <div class="popBox" v-show="isShowPop" :style="`top:${curLabel.y + 22}px;left:${curLabel.x}px`">
+ <div class="title">鏍囨敞淇℃伅</div>
+ <div class="details">
+ <div class="detail-item">
+ <div class="left">
+ <label for="">骞抽潰鍧愭爣X:</label>
+ <span class="fix-width">{{curLabel.x}}</span>
+ <i>px</i>
+ </div>
+ <span class="devide"></span>
+ <div class="right">
+ <label for="">瀹為檯鍧愭爣X:</label>
+ <el-input type="text" size="mini" style="width:90px" v-model="curLabel.posX"></el-input>
+ </div>
+ </div>
+ <div class="detail-item">
+ <div class="left">
+ <label for="">骞抽潰鍧愭爣Y:</label>
+ <span class="fix-width">{{curLabel.y}}</span>
+ <i>px</i>
+ </div>
+ <span class="devide"></span>
+ <div class="right">
+ <label for="">瀹為檯鍧愭爣Y:</label>
+ <el-input type="text" size="mini" style="width:90px" v-model="curLabel.posY"></el-input>
+ </div>
+ </div>
+ <div class="btns">
+ <el-button size="mini" type="danger" @click="deleteLabel">鍒犻櫎</el-button>
+ <el-button size="mini" type="primary" @click="cancle">鍙栨秷</el-button>
+ <el-button size="mini" type="success" @click="submitInfo">纭畾</el-button>
+ </div>
+ </div>
+ </div>
</div>
- <el-dialog>
-
- </el-dialog>
+
</div>
</template>
@@ -33,29 +64,83 @@
data () {
return {
labels: [],
- color: '#79f2fb',
+ colorPick: '#79f2fb',
dotSize: 3,
isEdit: false,
+ isShowPop: false,
isNewLabel: false,
+ curLabel: {
+ id:'',
+ posX:'',
+ posY:'',
+ x:'',
+ y:''
+ },
baseUrl: ''
}
},
computed: {
},
+ mounted(){
+ setTimeout(()=>{
+ let mockData = [{id:'a1',x:15, y:33, posX:150, posY:330},{id:'b2',x:56, y:87, posX:560, posY:870}];
+ this.labels = mockData;
+ },1000);
+ },
watch:{
isEdit(n,o){
if(n){
- this.$refs['editBoard'].addEventListener('click',(e)=>{
- this.newLabel(e);
- })
+ this.$refs['editBoard'].addEventListener('click',this.bindListen);
+ }else{
+ this.$refs['editBoard'].removeEventListener('click',this.bindListen);
}
}
},
methods: {
+ bindListen(e){
+ this.newLabel(e);
+ },
newLabel(e){
- this.labels.push({x,y});
+ console.log('鐐瑰嚮浜嗙敾鏉�')
+ if(this.isShowPop) return;
+ //鑾峰彇榧犳爣鐩稿浜庣敾鏉跨殑瀹氫綅
+ console.log('鑾峰彇褰撳墠瀹氫綅淇℃伅');
+ let target = {
+ id:'',
+ x:e.offsetX,
+ y:e.offsetY,
+ posX:'',
+ posY:''
+ };
+ this.labels.push(target);
+ this.curLabel = target;
+ this.isShowPop = true;
this.isNewLabel = true;
+ },
+ editLabel(label){
+ debugger
+ if(!this.isEdit) return;
+ this.isShowPop = true;
+ this.curLabel = JSON.parse(JSON.stringify(label));
+ },
+ cancle(){
+ this.isShowPop = false;
+ //濡傛灉鏄湭淇濆瓨杩囩殑label鐩存帴鍒犻櫎(鏈繚瀛樼殑灏辨槸labels鏁扮粍涓渶鍚庝竴涓�)
+ if(!this.curLabel.id){
+ this.labels.pop();
+ }
+ },
+ deleteLabel(){
+ if(this.curLabel.id){
+ //璇锋眰鍚庡彴鍒犻櫎
+ }else{
+ this.labels.pop();
+ this.isShowPop = false;
+ }
+ },
+ submitInfo(){
+
}
}
}
@@ -96,6 +181,11 @@
margin: auto;
margin-bottom: 20px;
text-align: right;
+ .drawboard-trigger{
+ background: transparent;
+ color: #fff;
+ border-color: rgba(255,255,255,.3);
+ }
}
.drawboard {
margin: auto;
@@ -106,15 +196,69 @@
box-shadow: 3px 3px 3px 1px rgba(0, 0, 0, 0.1);
.mask{
position: absolute;
- background: rgba(20, 181, 255, 0.1);
+ background: transparent;
width: 100%;
height: 100%;
+ overflow: hidden;
+ &.edit-status-mask{
+ background: rgba(20, 181, 255, 0.1);
+ }
+ .label{
+ position: absolute;
+ z-index: 2;
+ border-radius: 50%;
+ }
}
img{
width: 960px;
height: 540px;
background:#f0ffca;
}
+ .popBox{
+ position: absolute;
+ padding: 14px;
+ border-radius: 3px;
+ color: #fff;
+ background: rgba(0,0,0,.7);
+ .title{
+ font-weight: bold;
+ text-align: left;
+ font-size: 15px;
+ }
+ .details{
+ .detail-item{
+ display: flex;
+ align-items: center;
+ margin: 5px 0;
+ label{
+ color: #ccc;
+ width:65px;
+ display: inline-block;
+ }
+ .left{
+ width: 110px;
+ text-align: left;
+ line-height: 28px;
+ .fix-width{
+ display: inline-block;
+ width: 23px;
+ }
+ }
+ .right{
+ width: 160px;
+ }
+ .devide{
+ width: 10px;
+ height: 1px;
+ background: #ccc;
+ margin: 0 3px;
+ }
+ }
+ .btns{
+ margin-top: 10px;
+ }
+ }
+ }
}
}
</style>
\ No newline at end of file
--
Gitblit v1.8.0