element-ui 사진 업로드 후 좌표 점 표시
11882 단어 element-ui업로드
element-ui 는 배 고 프 세 요?전단 팀 이 개발 자,디자이너,제품 매니저 를 위 한 Vue.js 2.0 기반 데스크 톱 구성 요소 라 이브 러 리 를 내 놓 았 고 핸드폰 엔 해당 프레임 워 크 는 Mint UI 입 니 다.전체 ui 스타일 이 심 플 하고 실 용적 이 며 개발 자의 효율 도 크게 향상 시 켜 인기 있 는 구성 요소 라 이브 러 리 입 니 다.
페이지 는 다음 과 같 습 니 다:
구성 요 소 는 layui 의 layer.open 탄 상 자 를 사용 합 니 다.
왼쪽 은 폼 정보 이 고 오른쪽 은 그림 그리 기 영역 입 니 다.
원본 파일 mapForm.vue
<template>
<div class="mapForm">
<div class="left">
<el-form ref="form" :model="form" :rules="rules" label-width="160px">
<el-form-item label=" " prop="mapName">
<el-input v-model="form.mapName" size="mini" clearable class="formInputClass"></el-input>
</el-form-item>
<el-form-item label=" " prop="remarks">
<el-input type="textarea" v-model="form.remarks" size="mini" clearable class="formInputClass"></el-input>
</el-form-item>
<el-form-item label=" " prop="" v-if="mapList.length > 0">
<div class="mapContent">
<div v-for="(map,key) in mapList" :key="key">
<div class="pointAbscissaOrdinate"><span> {{key+1}}:{{map.abscissa}}-{{map.ordinate}}</span></div>
<el-select v-model="mapList[key]['point']" placeholder=" " class="selectClass" @change="changePoint">
<el-option v-for="(item, key) in pointList" :key="key" :label="item.name" :value="item.point">
</el-option>
</el-select>
</div>
</div>
</el-form-item>
<div class="btn">
<el-button @click="checkParams" type="primary"> </el-button>
</div>
</el-form>
</div>
<div class="right" id="">
<div class="imgDiv" id="imgDiv" v-loading="loadStage">
<img :src="fileSrc" width="1100" height="720" id="imgPainter" />
<div class="marker" v-for="(item, key) in mapList" :key="key" :style="{top: item.ordinate+'px', 'left': item.abscissa+'px'}" @contextmenu.prevent="clearMarker(key)">
{{key+1}}
<div class="ponint">{{item.point}}</div>
</div>
</div>
<div class="uploadBtn">
<el-upload class="upload-demo" ref="upload" action="" :on-change="handleChange" :show-file-list="false" :on-remove="handleRemove" :auto-upload="false" style="display:inline-block;">
<el-button slot="trigger" size="mini" type="primary"> </el-button>
</el-upload>
<el-button @click="clearPic" type="danger"> </el-button>
</div>
<div class="info"><i class="el-icon-info"></i> 1100px*720px</div>
<div class="info"><i class="el-icon-info"></i> </div>
<div class="info"><i class="el-icon-info"></i> </div>
</div>
</div>
</template>
<script>
export default {
name: 'mapFormComponent',
data() {
return {
form: {
mapName: "",
},
rules: {
mapName: [
{ required: true, message: " ", trigger: "blur" },
],
},
fileList: [],
fileSrc: '',
pointList: [
{ name: " 1", point: "@FQ01" },
{ name: " 2", point: "@FQ02" },
],
mapList: [], //
canBiaoZhu: true, //
pointColor: 'red', //
pointSize: 20, //
pointSelectList: {},
notifyId: {},
loadStage: false,
};
},
created() { },
mounted() {
//
let _this = this;
if (document.getElementById('imgPainter')) {
document.getElementById('imgPainter').onmousedown = (e) => {
e = e || window.event
if (e.button !== 2) { //
if (this.canBiaoZhu && this.fileSrc != '') { //
var x = e.offsetX || e.layerX
var y = e.offsetY || e.layerY
this.mapList.push({
id: this.mapList.length + 1,
name: '',
abscissa: x,
ordinate: y,
})
//
// this.pointSelectList.$set(0);
let key = `point`;
_this.$set(this.mapList[this.mapList.length - 1], key, "")
} else {
//
//
if (_this.notifyId.id)
_this.notifyId.close();
this.notifyId = _this.$notify.error({
title: ' ',
message: ' ',
showClose: true,
});
}
} else {
return false
}
}
}
//
var oDiv1 = document.getElementById('imgDiv');
oDiv1.oncontextmenu = function (ev) {
var e = e || window.event;
//
e.cancelBubble = true;
//
e.returnValue = false;
}
},
methods: {
changePoint() {
/**point change */
this.$forceUpdate();
},
clearMarker(index) {
/** marker */
this.mapList.splice(index, 1);
},
handleChange(file, fileList) {
this.loadStage = true;
let fileName = file.name;
let regex = /(.jpg|.jpeg|.gif|.png|.bmp)$/;
if (regex.test(fileName.toLowerCase())) {
this.fileSrc = URL.createObjectURL(file.raw) // URL
console.log(this.fileSrc);
} else {
this.$message.error(' ');
}
this.loadStage = false;
},
clearPic() {
/** */
this.mapList = [];
},
checkParams() {
/***
*
*/
this.$refs["form"].validate((valid) => {
if (valid) {
let params = this.form;
this.submit(params);
}
});
},
async submit(params) {
/** */
let resp = await this.$api.companyApiList
.addEditCompany(params);
if (resp.data.code != "error") {
//
this.$notify.success({
title: " ",
message: resp.data.msg,
showClose: true,
});
let type = params.id && params.id != '' ? 'edit' : 'add';
this.$emit("update", type);
//
this.$refs.form.resetFields();
}
},
},
};
</script>
<style scoped lang="less">
/**
*/
.mapForm {
display: flex;
padding: 10px;
border: 1px solid pink;
.left {
flex: 2;
border-right: 1px dashed pink;
margin-right: 4px;
.mapContent {
height: 700px;
overflow-y: auto;
.selectClass {
margin: 0px 5px;
}
.pointAbscissaOrdinate {
display: inline-block;
width: 140px;
}
}
}
.right {
flex: 8;
// border: 1px solid pink;
max-width: 1100px;
.imgDiv {
position: relative;
height: 720px;
border: 2px solid cornflowerblue;
.marker {
position: absolute;
border-radius: 50%;
z-index: 999;
width: 20px;
height: 20px;
background-color: red;
text-align: center;
line-height: 20px;
color: yellow;
.ponint {
display: block;
position: absolute;
left: 20px;
top: 0px;
font-size: 12px;
color: blue;
}
}
.marker:hover .ponint {
display: block;
}
}
.info {
font-size: 12px;
}
.uploadBtn {
margin: 10px 0px;
}
}
.btn {
padding-left: 160px;
}
}
.formInputClass {
width: 200px;
}
</style>
구두점 의 효 과 는 다음 과 같다.엘 레 멘 트-ui 가 사진 을 올 리 고 좌표 점 을 표시 하 는 글 은 여기까지 입 니 다.더 많은 엘 레 멘 트-ui 가 사진 을 올 리 는 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
element-ui 대화상자 기반el-dialog 초기화 검사 문제 해결페이지를 새로 고치지 않고 el-dialog를 다시 열 때, rules나 어떤 값을 연결하려면required가 필요합니다. 자동으로 검사됩니다. 여러 개의 블로그를 살펴본 결과, 자주 사용하는 두 가지 해결 방법이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.