From c819024e241b9f7c54cc3786373ad0d2998f2190 Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期五, 05 五月 2023 08:55:46 +0800 Subject: [PATCH] 修改 --- src/components/Tab/Plot.vue | 552 ++++++++++++++++++++++++++++++++----------------------- 1 files changed, 322 insertions(+), 230 deletions(-) diff --git a/src/components/Tab/Plot.vue b/src/components/Tab/Plot.vue index 798c15d..1834109 100644 --- a/src/components/Tab/Plot.vue +++ b/src/components/Tab/Plot.vue @@ -1,250 +1,342 @@ <template> - <div class="container"> - <div class="model-panel-list"> - <el-row :gutter="10"> - <el-col :span="6"> - <el-button - icon="el-icon-plus" - size="small" - type="primary" - @click="showCreateHandle" - > - 创建 - </el-button> - </el-col> - <el-col :span="6"> - <el-button - icon="el-icon-delete" - size="small" - type="danger" - @click="clearHandle" - > - 清空 - </el-button> - </el-col> - <el-col :span="6"> - <el-button - icon="el-icon-view" - size="small" - :type="showPlot ? 'success' : 'info'" - @click="toggleVisible" - > - {{ showPlot ? '隐藏' : '显示' }} - </el-button> - </el-col> - </el-row> - <el-row :gutter="10" v-for="label in labels" :key="label.attr.id"> - <el-col :span="14"> - {{ label.attr.name || ' ' }} - </el-col> - <el-col :span="10" style="textalign: right"> - <el-button - icon="el-icon-s-promotion" - size="mini" - circle - @click="() => focusHandle(label.attr.id)" - /> - <el-button - icon="el-icon-edit" - size="mini" - circle - @click="() => editHandle(label)" - /> - <el-button - icon="el-icon-delete" - type="danger" - size="mini" - circle - @click="() => removeHandle(label.attr.id)" - /> - </el-col> - </el-row> - </div> - <el-dialog - :visible="showCreatePanel" - width="380px" - title="创建标注" - :append-to-body="true" - :close-on-click-modal="false" - :before-close="closeCreateHandle" - > - <p>请输入内容:</p> - <el-input v-model="label.name" placeholder="请输入内容" /> - <span slot="footer" class="dialog-footer"> + <div class="container"> + <div class="model-panel-list"> + <el-row :gutter="10"> + <el-col :span="6"> + <el-button + icon="el-icon-plus" + size="small" + type="primary" + @click="showCreateHandle" + > + 创建 + </el-button> + </el-col> + <!-- <el-col :span="6"> + <el-button + icon="el-icon-delete" + size="small" + type="danger" + @click="clearHandle" + > + 清空 + </el-button> + </el-col> --> + <el-col :span="6"> + <el-button + icon="el-icon-view" + size="small" + :type="showPlot ? 'success' : 'info'" + @click="toggleVisible" + > + {{ showPlot ? '隐藏' : '显示' }} + </el-button> + </el-col> + </el-row> + <el-row :gutter="10" v-for="label in labels" :key="label.attr.id"> + <el-col :span="14"> + {{ label.attr.name || ' ' }} + </el-col> + <el-col :span="10" style="textalign: right"> + <el-button + icon="el-icon-s-promotion" + size="mini" + circle + @click="() => focusHandle(label.attr.id)" + /> + +<!-- <el-button--> +<!-- icon="el-icon-edit"--> +<!-- size="mini"--> +<!-- circle--> +<!-- @click="() => editHandle(label)"--> +<!-- />--> + <el-button + icon="el-icon-delete" + type="danger" + size="mini" + circle + @click="() => removeHandle(label)" + /> + </el-col> + </el-row> + </div> + <el-dialog + :visible="showCreatePanel" + width="380px" + title="创建标注" + :append-to-body="true" + :close-on-click-modal="false" + :before-close="closeCreateHandle" + > + <p>请输入内容:</p> + <el-input v-model="label.name" placeholder="请输入内容" /> + <p>请选择风险等级:</p> + <el-select v-model="color" placeholder="请选择" > + <el-option + v-for="item in colorList" + :key="item.id" + :value="item.name" + :label="item.text" + ></el-option> + </el-select> + <span slot="footer" class="dialog-footer"> <el-button @click="closeCreateHandle">取 消</el-button> <el-button type="primary" @click="createHandle">确 定</el-button> </span> - </el-dialog> - </div> + </el-dialog> + </div> </template> <script> -import { global } from '../../global'; + import { addMap , deleteColorMap} from '@/api/fourColorMap' + import { global } from '../../global'; -// 默认样式 -const LABEL_STYLE = { - opacity: 1, - color: '#FFFFFF', - font_family: '黑体', - font_size: 18, - font_style: 'normal', - font_weight: 'normal', - border: false, - border_color: '#ffffff', - border_width: 2, - background: true, - background_color: 'rgba(0, 0, 0, .8)', -}; - -export default { - components: {}, - data() { - return { - label: { - id: null, - name: '', - }, - showCreatePanel: false, - showPlot: true, + // 默认样式 + const LABEL_STYLE = { + opacity: 1, + color: '#FFFFFF', + font_family: '黑体', + font_size: 18, + font_style: 'normal', + font_weight: 'normal', + border: false, + border_color: '#ffffff', + border_width: 2, + background: true, + background_color: 'rgba(0, 0, 0, .8)', }; - }, - computed: { - timestamp() { - return this.$store.state.map.timestamp; - }, - labels() { - return this.entities.map(entity => entity.attribute); - }, - entities() { - let entities = - this.timestamp && global.map - ? global.map.plotDrawTool.getEntitys() - : []; - return entities.filter(entity => entity.attribute.type === 'polygon'); - }, - }, - methods: { - editHandle(label) { - if (!global.map) return; - this.label = { - id: label.attr.id, - name: label.attr.name, - }; - this.showCreatePanel = true; - }, - removeHandle(id) { - if (!global.map) return; - global.map.deletePlot(id); - this.$store.dispatch('map/updateTimestamp'); - }, - closeCreateHandle() { - this.showCreatePanel = false; - }, - showCreateHandle() { - this.showCreatePanel = true; - }, - _initLabel() { - this.label = { - id: null, - name: '', - }; - }, - createHandle() { - if (!global.map) return; - let map = global.map; - const { id, name } = this.label; - const entity = id && map.getPlotById(id); - this.closeCreateHandle(); - if (entity) { - map.updatePlotStyle(id, { text: name }); - map.updatePlotAttribute(id, { name }); - this._initLabel(); - this.$store.dispatch('map/updateTimestamp'); - } else { - map.startDraw( - { - type: 'polygon', - style: { text: name }, - attr: { - name, + + export default { + props:['type','colorMapList'], + components: {}, + data() { + return { + label: { + id: null, + name: '', + }, + color:'', + colorList:[{id:1,name:'blue',text:'低风险'},{id:2,name:'yellow',text:'一般风险'},{id:3,name:'orange',text:'较大风险'},{id:4,name:'red',text:'重大风险'},], + showCreatePanel: false, + showPlot: true, + form:{ + id:'', + etype:1, + "type": "Feature", + "properties": { + "type": "polygon", + "style": { "text": "D号楼", "clampToGround": true ,color:'',}, + "attr": { + "name": "", + "id": "" + } + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [120.728524, 31.258178, 0], + [120.727911, 31.257992, 0], + [120.728024, 31.25772, 0], + [120.727986, 31.2577, 0], + [120.728039, 31.257535, 0], + [120.728759, 31.257714, 0], + [120.728524, 31.258178, 0], + [120.728524, 31.258178, 0], + [120.728524, 31.258178, 0] + ] + ] + } + }, + }; + }, + computed: { + timestamp() { + return this.$store.state.map.timestamp; }, - }, - () => { - this._initLabel(); - this.$store.dispatch('map/updateTimestamp'); - } - ); - } - }, - toggleVisible() { - this.showPlot = !this.showPlot; - if (global.map) { - this.entities.forEach(entity => { - entity.show = this.showPlot; - }); - } - this.$store.dispatch('map/updateTimestamp'); - }, - focusHandle(markerId) { - if (global.map) { - const entity = global.map.getPlotById(markerId); - if (entity) { - global.map.viewer.flyTo(entity, { duration: 1 }); - } - } - }, - clearHandle() { - if (global.map) { - this.entities.forEach(entity => { - global.map.plotDrawTool.deleteEntity(entity); - }); - } - this.$store.dispatch('map/updateTimestamp'); - }, - }, -}; + labels() { + return this.entities.map(entity => entity.attribute); + }, + entities() { + let entities = + this.timestamp && global.map + ? global.map.plotDrawTool.getEntitys() + : []; + return entities.filter(entity => entity.attribute.type === 'polygon'); + }, + }, + methods: { + editHandle(label) { + if (!global.map) return; + this.label = { + id: label.attr.id, + name: label.attr.name, + }; + this.showCreatePanel = true; + }, + removeHandle(label) { + if (!global.map) return; + for(let i in this.colorMapList){ + if(JSON.parse(this.colorMapList[i].properties).attr.id === label.attr.id){ + deleteColorMap({id:this.colorMapList[i].id}).then(res =>{ + if(res.data.code === '200'){ + this.$message({ + title:'成功', + message:'删除成功', + duration:2000, + type:'success' + }) + global.map.deletePlot(label.attr.id); + this.$store.dispatch('map/updateTimestamp'); + } + }) + } + } + + + }, + closeCreateHandle() { + this.showCreatePanel = false; + }, + showCreateHandle() { + this.showCreatePanel = true; + }, + _initLabel() { + this.label = { + id: null, + name: '', + }; + }, + async createHandle() { + // this.form.geometry = JSON.stringify(this.form.geometry) + // this.form.properties = JSON.stringify(this.form.properties) + // let res = await addMap(this.form) + if (!global.map) return; + let map = global.map; + const { id, name } = this.label; + const entity = id && map.getPlotById(id); + this.closeCreateHandle(); + if (entity) { + map.updatePlotStyle(id, { text: name }); + map.updatePlotAttribute(id, { name }); + this._initLabel(); + this.$store.dispatch('map/updateTimestamp'); + } else { + map.startDraw( + { + type: 'polygon', + style: { text: name ,color:this.color, clampToGround: true}, + attr: { + name, + }, + }, + (entity) => { + console.log(wutu3d.draw.attr.getCoordinates(entity)); + this._initLabel(); + this.$store.dispatch('map/updateTimestamp'); + this.form = { + id:'', + etype:this.type, + "type": "Feature", + "properties": + JSON.stringify(entity.attribute), + "geometry": JSON.stringify({ + "type": "Polygon", + "coordinates": [ + + wutu3d.draw.attr.getCoordinates(entity) + + ] + }) + } + // this.form.properties.style.color = this.color + // this.form.properties = JSON.stringify(this.form.properties) + addMap(this.form).then(res =>{ + if(res.data.code === '200'){ + // this.$emit('testLoadedData') + this.$message({ + type:'success', + duration:2000, + title:'成功', + message:'四色图新增成功', + }) + } + this.$emit('getList') + }) + } + ); + } + }, + toggleVisible() { + this.showPlot = !this.showPlot; + if (global.map) { + this.entities.forEach(entity => { + entity.show = this.showPlot; + }); + } + this.$store.dispatch('map/updateTimestamp'); + }, + focusHandle(markerId) { + if (global.map) { + const entity = global.map.getPlotById(markerId); + if (entity) { + global.map.viewer.flyTo(entity, { duration: 1 }); + } + } + }, + clearHandle() { + if (global.map) { + this.entities.forEach(entity => { + global.map.plotDrawTool.deleteEntity(entity); + }); + } + this.$store.dispatch('map/updateTimestamp'); + }, + }, + }; </script> <style scoped> -.images img { - width: 36px; - height: auto; - margin: 0px 5px; - cursor: pointer; -} + .images img { + width: 36px; + height: auto; + margin: 0px 5px; + cursor: pointer; + } -.model-panel-list > div { - margin-bottom: 5px; - padding: 5px 0 5px 0; - border-bottom: 1px solid rgba(0, 0, 0, 0.1); -} + .model-panel-list > div { + margin-bottom: 5px; + padding: 5px 0 5px 0; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + } -.image-list { - margin: 20px 0; -} + .image-list { + margin: 20px 0; + } -.image-list ul, -.image-list li { - margin: 0; - padding: 0; - list-style: none; -} + .image-list ul, + .image-list li { + margin: 0; + padding: 0; + list-style: none; + } -.image-list li { - display: inline-block; - margin: 0 5px 5px 5px; - cursor: pointer; - padding: 5px 8px; - border-radius: 3px; -} + .image-list li { + display: inline-block; + margin: 0 5px 5px 5px; + cursor: pointer; + padding: 5px 8px; + border-radius: 3px; + } -.image-list li img { - width: 32px; - height: 32px; -} + .image-list li img { + width: 32px; + height: 32px; + } -.image-list li:hover, -.image-list li.active { - box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.15); -} + .image-list li:hover, + .image-list li.active { + box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.15); + } </style> -- Gitblit v1.9.2