1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057 |
- <template>
- <div class="app-container">
- <div class="scoped-top-tips" v-show="!isDeal">洪楼plus小程序提示:点击图中区域、楼盘、学校可查看更多</div>
- <div class="scoped-bg"></div>
- <div v-if="$route.query.id === '95542fdc-b542-4582-9be2-9ab8005728d3' || $route.query.id === '95542ff1-8176-4267-8344-2aa7f1034ac5'" class="scoped-tab">
- <div @click="linkChange('95542fdc-b542-4582-9be2-9ab8005728d3')" :class="$route.query.id === '95542fdc-b542-4582-9be2-9ab8005728d3' ? 'op cur' : 'op'">小学</div>
- <div @click="linkChange('95542ff1-8176-4267-8344-2aa7f1034ac5')" :class="$route.query.id === '95542ff1-8176-4267-8344-2aa7f1034ac5' ? 'op cur' : 'op'">初中</div>
- </div>
- <!-- https://img2.honglounews.com/20220111024440-5626.png -->
- <div v-show="isDeal" :class="isDbShow ? 'scoped-deal-box' : 'scoped-deal-box t2'">
- <div class="sdb-info">
- <div class="p1">当前缩放级别:{{mapDiyObj.zoom}}<span class="more" @click="setShowChange">{{isMapSetShow ? '收起设置' : '展开设置'}}></span></div>
- <div class="p2" v-show="isMapSetShow">
- <base-form ref="ruleForm" :data="formData" :is-inline="false" label-width="80px">
- <div slot="footer">
- <el-button class="xl-form-btn bgc2" @click="setHandle">设置</el-button>
- <div class="scoped-select-center" @click="setCenterHandle">中心坐标<div class="s">{{centerStr}}</div></div>
- </div>
- </base-form>
- </div>
- </div>
- <div class="sdb-add">
- <div class="b t2" @click="openMte('polygonAdd')">添加多边形</div>
- <div class="b t2" @click="openMte('textAdd')">添加文字</div>
- </div>
- <div class="sdb-add">
- <div class="b t3" @click="saveHandle()">保 存</div>
- </div>
- <div class="sdb-list" v-if="polygons.length > 0">
- <div class="label t2">多边形列表(选中:{{polygonIndex + 1}})</div>
- <div class="ul">
- <div class="op" v-for="(polygon, index) in polygons" :key="index">
- <p class="p1" @click="openMte('polygonAdd', {obj: polygon, index})">({{index + 1}}){{polygon.text}}</p>
- <p class="more">
- <span v-if="polygon.editable" class="d d2" @click="textAdd(polygon)">标点</span>
- <span v-if="polygon.editable" class="d d1" @click="mapIsEdit(index, 'polygons')">编辑</span>
- <span v-else class="d d3" @click="mapIsEdit(index, 'polygons')">只读</span>
- <span class="d d4" @click="mapDel(index, 'polygons')">删除</span>
- </p>
- </div>
- </div>
- </div>
- <div class="sdb-list" v-if="markerData.length > 0">
- <div class="label t2">文字列表(选中:{{curMarkersIndex + 1}})</div>
- <div class="ul">
- <div class="op" v-for="(t, index) in markerData" :key="index">
- <p class="p1" @click="openMte('textAdd', {obj: t, index})">({{index + 1}}){{t.content}}</p>
- <p class="more">
- <span v-if="t.draggable" class="d d1" @click="mapIsEdit(index, 'markerData')">编辑</span>
- <span v-else class="d d3" @click="mapIsEdit(index, 'markerData')">只读</span>
- <span class="d d4" @click="mapDel(index, 'markerData')">删除</span>
- </p>
- </div>
- </div>
- </div>
- </div>
- <el-amap
- class="amap-box"
- :vid="'amap-vue'"
- :amap-manager="amapManager"
- :zoom="mapDiyObj.zoom"
- :zooms="mapDiyObj.zooms"
- :mapStyle="mapDiyObj.mapStyle"
- :center="mapDiyObj.center"
- :events="mapEvents"
- :plugin="plugin"
- >
- <template v-if="mapDiyObj.zoom > 13">
- <template v-if="mapDiyObj.isSchoolShow === '1'">
- <el-amap-marker class="scoped-m-box" v-for="(marker, index) in schoolList" :key="3000 + index"
- icon="https://img2.honglounews.com/20220110041435-6276.png"
- width="20"
- height="20"
- :position="marker.position"
- :events="schoolEvents"
- :title="marker.school_name"
- :label="{content: marker.school_name, offset: [-10 * marker.school_name.length / 2, -20]}"
- :extData="{id: marker.id}"
- >
- </el-amap-marker>
- </template>
- <template v-if="mapDiyObj.isEstateShow === '1'">
- <el-amap-marker class="scoped-m-box" v-for="(marker, index) in estateList" :key="2000 + index"
- icon="https://img2.honglounews.com/20220110041411-6675.png"
- :position="marker.position"
- :events="estateEvents"
- :title="marker.estate_name"
- :label="{content: marker.estate_name, offset: [-10 * marker.estate_name.length / 2, -20]}"
- :extData="{id: marker.id}"
- >
- <!-- https://img2.honglounews.com/20220110041534-8330.png -->
- <!-- https://img2.honglounews.com/20220110041411-6675.png -->
- </el-amap-marker>
- </template>
- <el-amap-marker v-for="(marker, index) in markerData" :key="9000 + index"
- :position="marker.position"
- :draggable="marker.draggable"
- :animation="marker.animation"
- :offset="marker.offset"
- :extData="{index}"
- :events="markersEvents">
- <div class="scoped-marker-text" :style="`color: ${marker.color}`">{{marker.content}}</div>
- </el-amap-marker>
- </template>
- <template v-else>
- <template v-if="mapDiyObj.isAreaShow === '1'">
- <el-amap-marker class="scoped-m-box" v-for="(marker, index) in areaList" :key="4000 + index"
- icon="https://img2.honglounews.com/20220110041435-6276.png"
- :position="marker.position"
- :events="areaEvents"
- :offset="[-40, -40]"
- :extData="{areaName: marker.areaName, areaType: marker.area_type}"
- >
- <div class="scoped-marker-area">
- <div class="p1">{{marker.areaName}}</div>
- <div class="p2">楼盘:{{marker.estate_total}}</div>
- <div class="p2">学校:{{marker.school_total}}</div>
- </div>
- </el-amap-marker>
- </template>
- </template>
- <el-amap-polygon
- v-for="(polygon, index) in polygons"
- :key="index"
- :path="polygon.path"
- :editable="polygon.editable"
- :fillColor="polygon.fillColor"
- :fillOpacity="polygon.fillOpacity"
- :strokeColor="polygon.strokeColor"
- :strokeWeight="polygon.strokeWeight"
- :strokeOpacity="polygon.strokeOpacity"
- :extData="{index}"
- :events="polygonEvents">
- </el-amap-polygon>
- </el-amap>
- <MapTextEdit
- :isShow="isMteShow"
- :mteStr="mteStr"
- :curObj="mteObj"
- @close="closeMte"/>
- </div>
- </template>
- <script>
- import { AMapManager, lazyAMapApiLoaderInstance } from 'vue-amap'
- const amapManager = new AMapManager()
- import MapTextEdit from './components/popup/MapTextEdit'
- import { arrToObj } from '@/utils'
- export default {
- name: 'map',
- components: {},
- components: {
- MapTextEdit
- },
- mixins,
- data() {
- const that = this
- return {
- estateList: [],
- schoolList: [],
- medium_school_list: [],
- small_school_list: [],
- areaList: [],
- isDbShow: true,
- isMapSetShow: false,
- formData: [],
- isMteShow: false,
- mapDiyObj: {
- center: [115.852386, 28.684076],
- zoom: 17,
- zooms: [15, 19],
- },
- amapManager,
- polygons: [
- // {
- // path: [[115.823481,28.702359],[115.861933,28.672241],[115.812838,28.629609],[115.793784,28.657179]],
- // strokeWeight: 2,
- // fillColor: '#f00',
- // strokeStyle: 'solid',
- // },
- // {
- // path: [[115.859015,28.654919],[115.93386,28.630212],[115.841849,28.606101]],
- // editable: true,
- // strokeWeight: 1,
- // fillColor: '#ffffff',
- // strokeStyle: 'dashed',
- // },
- ],
- markerData: [],
- mapEvents: {
- init(map) {
- // map.setFeatures(['road', 'point', 'bg', 'building']); // 多个种类要素显示
- map.setFeatures(['road', 'bg', 'building']); // 多个种类要素显示
- // map.setMapStyle('amap://styles/647a4a7f773b3c7143b46e7c3e499f1f');
- AMapUI.loadUI(['control/BasicControl'], function(BasicControl) {
- //图层切换控件
- var layerControl = new BasicControl.LayerSwitcher({
- baseLayers: [
- {
- id: 'basic',//图层id,需唯一
- enable: true, //是否启用
- name: '基础地图',//显示名称,html
- layer: new AMap.TileLayer()
- },
- {
- id: 'Satellite',//图层id,需唯一
- enable: false, //是否启用
- name: '卫星图',//显示名称,html
- layer: new AMap.TileLayer.Satellite()
- },
- ],
- overlayLayers:[
- ],
- position: {
- bottom:'50px',
- right:'30px',
- },
- });
- map.addControl(layerControl);
- })
- },
- zoomchange (e) {
- const curMap = amapManager.getMap()
- that.mapDiyObj.zoom = curMap.getZoom() || 17
- },
- complete () {
- that.setCurFeatures(that.mapDiyObj.features)
- },
- // click(e) {
- // const { lng, lat } = e.lnglat
- // console.log(lng, lat)
- // },
- },
- markersEvents: {
- dragend(e) {
- const { lng, lat } = e.lnglat
- let markerData = JSON.parse(JSON.stringify(that.markerData))
- markerData[that.curMarkersIndex].position = [lng, lat]
- that.markerData = [...markerData]
- },
- click(e) {
- const eData = e.target.getExtData()
- that.curMarkersIndex = eData.index
- },
- },
- polygonEvents: {
- click(e) {
- const eData = e.target.getExtData()
- that.polygonIndex = eData.index
- // wx.miniProgram.navigateTo({url: '/pagesSchool/indexDtl?id=25'})
- },
- },
- estateEvents: {
- click(e) {
- const eData = e.target.getExtData()
- wx.miniProgram.navigateTo({url: `/pagesHouse/indexDtl?id=${eData.id}`})
- },
- },
- schoolEvents: {
- click(e) {
- const eData = e.target.getExtData()
- wx.miniProgram.navigateTo({url: `/pagesSchool/indexDtl?id=${eData.id}`})
- },
- },
- areaEvents: {
- click(e) {
- const eData = e.target.getExtData()
- wx.miniProgram.navigateTo({url: `/pagesSchool/index?areaName=${eData.areaName}&areaType=${eData.areaType}`})
- },
- },
- polygonIndex: 0,
- curMarkersIndex: 0,
- plugin: [{
- pName: 'MouseTool',
- }],
- mteStr: 'polygonAdd',
- mteObj: {},
- dictData: {
- sys_yesno: [
- {key: '是', val: '1'},
- {key: '否', val: '2'},
- ],
- area_type: [
- {
- "key": "红谷滩中心区",
- "val": "hgt"
- },
- {
- "key": "红角洲",
- "val": "hjz"
- },
- {
- "key": "朝阳新城",
- "val": "cyxc"
- },
- {
- "key": "九龙湖",
- "val": "jlh"
- },
- {
- "key": "凤凰洲",
- "val": "fhz"
- },
- {
- "key": "西湖区",
- "val": "xhq"
- },
- {
- "key": "东湖区",
- "val": "dhq"
- },
- {
- "key": "象湖滨江",
- "val": "xhbj"
- },
- {
- "key": "青山湖区",
- "val": "qshq"
- },
- {
- "key": "新建区",
- "val": "xjq"
- },
- {
- "key": "湾里区",
- "val": "wlq"
- },
- {
- "key": "青云谱区",
- "val": "qypq"
- },
- {
- "key": "高新区",
- "val": "gxq"
- },
- {
- "key": "欣悦湖",
- "val": "xyh"
- },
- {
- "key": "经开区",
- "val": "jkq"
- },
- {
- "key": "象湖新城",
- "val": "xhxc"
- },
- {
- "key": "望城",
- "val": "wcxq"
- },
- {
- "key": "南昌县",
- "val": "ncx"
- },
- {
- "key": "赣江新区",
- "val": "gjxq"
- }
- ],
- map_area_lnglat: [
- {
- "option1": "望城",
- "key": "115.74219,28.622854",
- "val": "wcxq"
- },
- {
- "option1": "湾里区",
- "key": "115.781385,28.709504",
- "val": "wlq"
- },
- {
- "option1": "欣悦湖",
- "key": "115.787513,28.685376",
- "val": "xyh"
- },
- {
- "option1": "九龙湖",
- "key": "115.792951,28.587435",
- "val": "jlh"
- },
- {
- "option1": "新建区",
- "key": "115.818441,28.692623",
- "val": "xjq"
- },
- {
- "option1": "红角洲",
- "key": "115.824219,28.63926",
- "val": "hjz"
- },
- {
- "option1": "经开区",
- "key": "115.830506,28.747641",
- "val": "jkq"
- },
- {
- "option1": "象湖滨江",
- "key": "115.847217,28.582374",
- "val": "xhbj"
- },
- {
- "option1": "红谷滩中心区",
- "key": "115.852886,28.683902",
- "val": "hgt"
- },
- {
- "option1": "朝阳新城",
- "key": "115.858884,28.633789",
- "val": "cyxc"
- },
- {
- "option1": "凤凰洲",
- "key": "115.875846,28.709236",
- "val": "fhz"
- },
- {
- "option1": "西湖区",
- "key": "115.889966,28.664366",
- "val": "xhq"
- },
- {
- "option1": "东湖区",
- "key": "115.901112,28.680259",
- "val": "dhq"
- },
- {
- "option1": "青云谱区",
- "key": "115.908247,28.623327",
- "val": "qypq"
- },
- {
- "option1": "南昌县",
- "key": "115.932183,28.550813",
- "val": "ncx"
- },
- {
- "option1": "赣江新区",
- "key": "115.93303,28.803368",
- "val": "gjxq"
- },
- {
- "option1": "青山湖区",
- "key": "115.949679,28.701298",
- "val": "qshq"
- },
- {
- "option1": "高新区",
- "key": "116.033624,28.697981",
- "val": "gxq"
- }
- ]
- },
- }
- },
- computed: {
- isDeal () {
- const query = this.$route.query
- if (query.e && query.e === '1') {
- return true
- } else {
- return false
- }
- },
- centerStr () {
- const center = this.mapDiyObj.center
- if (center && center.length > 0) {
- return `${center[0]}, ${center[1]}`
- } else {
- return '待选取'
- }
- }
- },
- created() {
- this.getData()
- this.$api.base.apiareainfolist().then(areaArr => {
- const arr = areaArr.map((a, aIndex) => {
- return {
- key: aIndex,
- val: a.option1,
- longitude: a.longitude,
- latitude: a.latitude,
- areaName: a.area_name,
- }
- })
- this.$api.other.admmapcoordinall().then(res => {
- let estateList = res.estate_list || []
- estateList.map(item => {
- item.position = [item.longitude, item.latitude]
- })
- this.estateList = [...estateList]
- const query = this.$route.query
- if (query.id === '95542fdc-b542-4582-9be2-9ab8005728d3') {
- let small_school_list = res.small_school_list || []
- small_school_list.map(item => {
- item.position = [item.longitude, item.latitude]
- })
- this.schoolList = [...small_school_list]
- } else if (query.id === '95542ff1-8176-4267-8344-2aa7f1034ac5') {
- let medium_school_list = res.medium_school_list || []
- medium_school_list.map(item => {
- item.position = [item.longitude, item.latitude]
- })
- this.schoolList = [...medium_school_list]
- } else {
- let schoolList = res.school_list || []
- schoolList.map(item => {
- item.position = [item.longitude, item.latitude]
- })
- this.schoolList = [...schoolList]
- }
- let areaList = res.area_total || []
- areaList.map(item => {
- // let lnglatArr = arrToObj(this.dictData.map_area_lnglat)[item.area_type].split(',')
- // item.position = [lnglatArr[0], lnglatArr[1]]
- // item.areaName = arrToObj(this.dictData.area_type)[item.area_type]
- const areaIndex = arrToObj(arr)[item.area_type]
- item.position = [arr[areaIndex].longitude, arr[areaIndex].latitude]
- item.areaName = arr[areaIndex].areaName
- })
- this.areaList = [...areaList]
- })
- })
- },
- mounted() {},
- methods: {
- linkChange (str) {
- const query = this.$route.query
- if (query.e) {
- this.$router.push(`/map/dtl?e=${query.e}&id=${str}`)
- } else {
- this.$router.push(`/map/dtl?id=${str}`)
- }
- this.$router.go(0)
- },
- setShowChange () {
- this.isMapSetShow = !this.isMapSetShow
- },
- getDef () {
- let params = {}
- params = { ...this.mapDiyObj }
- params.zoom1 = params.zooms[0]
- params.zoom2 = params.zooms[1]
- this.formData = [
- { label: '地图标题', key: 'title', rules: 1},
- { label: '主题样式', key: 'mapStyle', type: 'select', rules: 1,
- options: [
- {key: '默认样式', val: 'normal'},
- {key: '深色样式', val: 'dark'},
- {key: '浅色样式', val: 'light'},
- {key: '清新风格osm', val: 'fresh'},
- ]
- },
- { label: '显示内容', key: 'features', type: 'select', multiple: true, rules: 1,
- options: [
- {key: '区域面', val: 'bg'},
- {key: '兴趣点', val: 'point'},
- {key: '道路和标注', val: 'road'},
- {key: '建筑物', val: 'building'},
- ]
- },
- { label: '默认级别', key: 'zoom', rules: 1},
- { label: '最小3+', key: 'zoom1', rules: 1},
- { label: '最大19-', key: 'zoom2', rules: 1},
- { label: '展示楼盘', key: 'isEstateShow', type: 'select', rules: 1, options: this.dictData.sys_yesno},
- { label: '展示学校', key: 'isSchoolShow', type: 'select', rules: 1, options: this.dictData.sys_yesno},
- { label: '展示区域', key: 'isAreaShow', type: 'select', rules: 1, options: this.dictData.sys_yesno},
- ]
- this.setDefaultValue(params)
- // this.setCurFeatures(params.features)
- },
- setCurFeatures (data) {
- const curMap = this.amapManager.getMap()
- curMap.setFeatures(data)
- },
- getData () {
- const query = this.$route.query
- this.$api.other.admmapcoordindetail({
- uuid: query.id
- }).then(res => {
- if (res.data) {
- const data = JSON.parse(res.data)
- this.polygons = [...data.polygons]
- this.markerData = [...data.markerData]
- this.mapDiyObj = {
- ...data.mapDiyObj,
- title: res.title,
- }
- } else {
- this.mapDiyObj = {
- mapStyle: 'normal',
- zoom: 13,
- zooms: [11, 19],
- center: [115.852386, 28.684076],
- isEstateShow: '2',
- isSchoolShow: '2',
- isAreaShow: '2',
- title: res.title,
- features: ['road', 'bg', 'building']
- }
- }
- document.title = res.title || '洪楼地图1'
- this.getDef()
- })
- },
- setHandle () {
- this.$refs['ruleForm'].$refs['baseForm'].validate((valid) => {
- if (valid) {
- const oldform = this.$refs.ruleForm.baseForm
- let newForm = { ...oldform }
- let mapDiyObj = { ...this.mapDiyObj }
- mapDiyObj.zoom = Number(newForm.zoom)
- mapDiyObj.zooms = [Number(newForm.zoom1), Number(newForm.zoom2)]
- mapDiyObj.title = newForm.title
- mapDiyObj.mapStyle = newForm.mapStyle
- mapDiyObj.features = newForm.features
- mapDiyObj.isEstateShow = newForm.isEstateShow
- mapDiyObj.isSchoolShow = newForm.isSchoolShow
- mapDiyObj.isAreaShow = newForm.isAreaShow
- this.mapDiyObj = {...mapDiyObj}
- this.setCurFeatures(newForm.features)
- this.isMapSetShow = false
- }
- })
- },
- setCenterHandle () {
- const that = this
- const curMap = this.amapManager.getMap()
- let mouseTool = new AMap.MouseTool(curMap)
- mouseTool.marker({
- content: ' ',
- })
- that.isDbShow = false
- that.$msgs('请在地图上选择中心点')
- AMap.event.addListener(mouseTool,'draw',function(e){
- let cPath = e.obj.getPosition()
- let mapDiyObj = {...that.mapDiyObj}
- mapDiyObj.center = [cPath.lng, cPath.lat]
- that.mapDiyObj = {...mapDiyObj}
- that.$msg('中心坐标选取成功~如需重新选中心点,请再次点击中心坐标位置')
- that.isDbShow = true
- window.setTimeout(() => {
- mouseTool.close(true)
- }, 100)
- })
- },
- saveHandle () {
- this.$msg(`您确定要保存该数据(覆盖原来数据)吗?`, 'confirm', () => {
- let polygons = JSON.parse(JSON.stringify(this.polygons))
- polygons.map(one=> {
- // console.log(one.fillColor)
- // if (one.fillColor === '#DC9B21') {
- // one.fillColor = '#F8A41C'
- // one.strokeColor = '#F8A41C'
- // one.fillOpacity = '0.4'
- // one.strokeOpacity = '0.8'
- // }
- let tPath = []
- one.editable = false
- one.path.forEach(sub => {
- tPath.push([sub.lng, sub.lat])
- })
- one.path = tPath
- })
- let markerData = JSON.parse(JSON.stringify(this.markerData))
- markerData.map(one => {
- one.draggable = false
- })
- const data = {
- polygons,
- markerData,
- mapDiyObj: this.mapDiyObj,
- }
- // console.log(polygons)
- // return
- const query = this.$route.query
- this.$api.other.admmapcoordinedit({
- uuid: query.id,
- title: this.mapDiyObj.title,
- data: JSON.stringify(data)
- }).then(res => {
- this.getData()
- })
- })
- },
- polygonAdd (obj) {
- const that = this
- const curMap = this.amapManager.getMap()
- let mouseTool = new AMap.MouseTool(curMap)
- mouseTool.polygon({
- fillColor:'#00b0ff',
- strokeColor:'#80d8ff',
- editable: true,
- strokeStyle: 'dashed',
- })
- AMap.event.addListener(mouseTool,'draw',function(e) {
- let cPath = [...e.obj.getPath()]
- let tempPath = []
- cPath.forEach(item => {
- tempPath.push([item.lng, item.lat])
- })
- let polygons = [...that.polygons]
- polygons.push({
- path: tempPath,
- editable: true,
- fillColor: obj.fillColor || '#DC3021', // 填充色
- fillOpacity: obj.fillOpacity || 0.4, // 填充透明度
- strokeColor: obj.strokeColor || '#DC3021', // 轮廓颜色
- strokeWeight: 2, // 轮廓宽度
- strokeOpacity: 0.8, // 轮廓透明度
- text: obj.text,
- })
- that.polygons = [...polygons]
- mouseTool.close(true)
- that.isDbShow = true
- })
- },
- mapIsEdit (index, str) {
- this.curMarkersIndex = index
- let tempData = [...this[str]]
- if (str === 'polygons') {
- if (tempData[index].editable) {
- tempData[index].editable = false
- tempData[index].strokeStyle = 'solid'
- } else {
- tempData[index].editable = true
- tempData[index].strokeStyle = 'dashed'
- }
- } else {
- tempData[index].draggable = !tempData[index].draggable
- // tempData[index].animation = tempData[index].draggable ? 'AMAP_ANIMATION_BOUNCE' : 'AMAP_ANIMATION_DROP'
- }
- this[str] = [...tempData]
- this.$storage(`map_${str}`, JSON.stringify(tempData))
- },
- mapDel (index, str) {
- this.$msg(`您确定要删除该数据吗?`, 'confirm', () => {
- let tempData = [...this[str]]
- tempData.splice(index, 1)
- this[str] = [...tempData]
- this.$storage(`map_${str}`, JSON.stringify(tempData))
- })
- },
- openMte (str, obj) {
- this.mteStr = str
- this.isMteShow = true
- if (obj) {
- this.mteObj = {...obj}
- }
- },
- closeMte (obj, bcStr) {
- this.isMteShow = false
- if (obj) {
- if (bcStr && bcStr === 'edit') {
- const index = this.mteObj.index || 0
- const str = this.mteStr === 'textAdd' ? 'markerData' : 'polygons'
- let tempData = [...this[str]]
- if (this.mteStr === 'textAdd') {
- tempData[index].content = obj.text
- tempData[index].text = obj.text
- tempData[index].color = obj.color
- } else {
- tempData[index].text = obj.text
- tempData[index].fillColor = obj.fillColor
- tempData[index].fillOpacity = obj.fillOpacity
- tempData[index].strokeColor = obj.strokeColor
- }
- this[str] = [...tempData]
- this.$storage(`map_${str}`, JSON.stringify(tempData))
- } else {
- this[this.mteStr](obj)
- this.isDbShow = false
- this.$msgs('请在地图上操作')
- }
- }
- this.mteObj = {}
- },
- textAdd (obj) {
- const that = this
- const curMap = this.amapManager.getMap()
- let mouseTool = new AMap.MouseTool(curMap)
- mouseTool.marker({
- content: ' ',
- })
- AMap.event.addListener(mouseTool,'draw',function(e){
- let cPath = e.obj.getPosition()
- let markerData = [...that.markerData]
- markerData.push({
- position: [cPath.lng, cPath.lat],
- draggable: true,
- animation: 'AMAP_ANIMATION_DROP',
- content: obj.text,
- offset: [0, -10],
- text: obj.text,
- color: obj.color,
- })
- that.markerData = [...markerData]
- window.setTimeout(() => {
- mouseTool.close(true)
- that.isDbShow = true
- }, 100)
- })
- },
- }
- }
- </script>
- <style lang="scss" scoped>
- .app-container {
- height: 100%;
- padding: 0;
- margin: 0;
- position: relative;
- .amap-box {
- height: 100%;
- }
- }
- .scoped-deal-box {
- background: #f2f2f2;
- box-shadow: 0 0 5px #666;
- position: absolute;
- z-index: 999;
- left: 0;
- top: 0;
- height: 100%;
- width: 220px;
- overflow-y: auto;
- overflow-x: hidden;
- &.t2 {
- opacity: 0.5;
- }
- .sdb-info {
- background: #fff;
- margin-bottom: 10px;
- padding: 10px 10px 0;
- .p1 {
- font-size: 14px;
- user-select: none;
- padding-bottom: 10px;
- .more {
- color: #409eff;
- text-decoration: underline;
- padding-left: 2px;
- cursor: pointer;
- }
- }
- .p2 {
- padding-bottom: 6px;
- }
- }
- .sdb-add {
- padding: 0 10px 10px;
- .b {
- display: inline-block;
- vertical-align: middle;
- border-radius: 0;
- background: #0c78b1;
- color: #fff;
- min-width: 60px;
- height: 36px;
- line-height: 36px;
- cursor: pointer;
- outline: none;
- padding: 0 10px;
- margin-right: 10px;
- font-size: 14px;
- text-align: center;
- &:last-child {
- margin-right: 0;
- }
- &.t2 {
- background: #409eff;
- }
- &.t3 {
- width: 177px;
- }
- }
- }
- .sdb-list {
- background: #fff;
- margin-bottom: 10px;
- padding-top: 10px;
- .label {
- margin-left: 10px;
- border-left: 4px solid #409eff;
- padding-left: 6px;
- &.t2 {
- border-left-color: #0c78b1;
- }
- }
- .ul {
- height: 300px;
- overflow-y: auto;
- }
- .op {
- border-bottom: 1px solid #dcdcdc;
- padding: 10px;
- .p1 {
- color: #313131;
- font-weight: bold;
- padding-bottom: 6px;
- }
- .more {
- .d {
- display: inline-block;
- vertical-align: middle;
- margin-right: 10px;
- padding: 0 6px;
- line-height: 20px;
- height: 20px;
- border: 1px solid #0c78b1;
- color: #0c78b1;
- border-radius: 6px;
- font-size: 12px;
- font-weight: bold;
- cursor: pointer;
- &.d2 {
- color: #409eff;
- border-color: #409eff;
- }
- &.d3 {
- color: #313131;
- border-color: #313131;
- }
- &.d4 {
- color: #f00;
- border-color: #f00;
- }
- }
- }
- }
- }
- }
- .scoped-marker-text {
- color: #fff;
- min-width: 120px;
- font-weight: bold;
- box-shadow: 0 0 10px #fff;
- text-align: center;
- padding: 6px 10px;
- border-radius: 6px;
- background: #ebad57;
- }
- .scoped-select-center {
- position: absolute;
- left: -75px;
- top: 0px;
- cursor: pointer;
- width: 60px;
- line-height: 14px;
- color: #313131;
- .s {
- color: #f00;
- font-size: 12px;
- }
- }
- ::v-deep .amap-marker-label {
- border-color: #dcdcdc;
- border-radius: 2px;
- padding: 3px 5px;
- color: #666;
- background: #f0f0f0;
- box-shadow: 0 0 3px #ccc;
- }
- ::v-deep .amap-logo{
- display: none!important;;
- }
- ::v-deep .amap-copyright {
- opacity:0;
- }
- ::v-deep .amap-icon img {
- width: 20px !important;
- height: 20px !important;
- }
- .scoped-marker-area {
- background: #369af7;
- box-shadow: 0 0 5px #369af7;
- color: #fff;
- width: 80px;
- height: 80px;
- text-align: center;
- font-size: 12px;
- border-radius: 50%;
- padding-top: 20px;
- box-sizing: border-box;
- }
- .scoped-bg {
- width: 180px;
- height: 30px;
- background: url(./img/bg.png);
- background-size: 100%;
- position: fixed;
- z-index: 999999;
- // left: 50%;
- // top: 50%;
- // margin-left: -150px;
- // margin-top: -25px;
- // transform: rotate(-45deg);
- left: 10px;
- bottom: 0;
- }
- .scoped-top-tips {
- position: fixed;
- z-index: 999999;
- top: 0;
- left: 0;
- width: 100%;
- color: #5caac1; //#de8c17;
- background: #fcf6ed;
- font-size: 12px;
- padding: 10px;
- opacity: .8;
- font-weight: bold;
- }
- .scoped-tab {
- position: fixed;
- right: 0;
- top: 50%;
- background: #fff;
- z-index: 9999999;
- cursor: pointer;
- padding: 10px;
- border-radius: 20px 0 0 20px;
- box-shadow: 0 0 10px #ccc;
- .op {
- color: #313131;
- height: 30px;
- line-height: 30px;
- padding: 0 2px;
- font-size: 14px;
- &:last-child {
- border-top: 1px solid #dcdcdc;
- }
- &.cur {
- color: #409eff;
- font-weight: bold;
- }
- }
- }
- </style>
|