From 80078586462a5d66221d716adca79b6173c2bc08 Mon Sep 17 00:00:00 2001 From: chenzeping <ChenZeping02609@163.com> Date: 星期二, 09 三月 2021 17:04:33 +0800 Subject: [PATCH] 修改已知问题 --- src/components/panel/RightSearchPanel.vue | 180 +++++++++++++++++-------- src/components/plugin/leaflet-canvas-markers.js | 68 +++++++++ src/router/routes.js | 7 + .eslintrc.js | 3 src/api/index.js | 4 src/main.js | 5 package.json | 7 src/assets/css/map/map-elem-ui.less | 6 src/components/panel/topicSearch/SewersSearch.vue | 4 src/utils/AjaxUtils.js | 61 +++++--- src/api/mapUrl.js | 12 src/components/helpers/ServiceLayerHelper.js | 19 +- 12 files changed, 262 insertions(+), 114 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 654134e..60ec4b5 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,7 +1,8 @@ module.exports = { root: true, env: { - node: true + node: true, + amd: true }, extends: [ 'plugin:vue/essential', diff --git a/package.json b/package.json index 3d10fb5..98809aa 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "fullscreen": "^1.1.1", "jquery": "^3.5.1", "js-cookie": "^2.2.0", - "leaflet": "^1.6.0", + "leaflet": "^1.7.1", "leaflet-canvas-markers": "^1.0.6", "leaflet.browser.print": "^1.0.6", "leaflet.markercluster": "^1.4.1", @@ -43,17 +43,18 @@ "@vue/eslint-config-standard": "^5.1.2", "babel-eslint": "^10.1.0", "babel-loader": "^8.2.2", + "babel-polyfill": "^6.26.0", "cache-loader": "^4.1.0", "css-loader": "^5.0.1", "eslint": "^6.7.2", - "eslint-plugin-vue": "^6.2.2", "eslint-plugin-import": "^2.20.2", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^4.0.0", - "mockjs": "^1.1.0", + "eslint-plugin-vue": "^6.2.2", "less": "^3.13.0", "less-loader": "^7.1.0", + "mockjs": "^1.1.0", "vue-loader": "^15.9.5", "vue-template-compiler": "^2.6.11" }, diff --git a/src/api/index.js b/src/api/index.js index 5654a60..1df9919 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -2,6 +2,6 @@ import * as mapUrl from './mapUrl' export default { - mapApi, - mapUrl + mapApi, + mapUrl } diff --git a/src/api/mapUrl.js b/src/api/mapUrl.js index c337552..bc905e4 100644 --- a/src/api/mapUrl.js +++ b/src/api/mapUrl.js @@ -1,10 +1,10 @@ /** - * 璇ユ枃浠堕厤缃帴鍙g殑URL鍦板潃 - */ -class ApiURLs{ - constructor(){ - this.APIURL_HELLOWORLD = 'http://www.baidu.com' - } + * 璇ユ枃浠堕厤缃帴鍙g殑URL鍦板潃 + */ +class ApiURLs { + constructor () { + this.APIURL_HELLOWORLD = 'http://www.baidu.com' + } } export default new ApiURLs() diff --git a/src/assets/css/map/map-elem-ui.less b/src/assets/css/map/map-elem-ui.less index 5b99031..1f6fd20 100644 --- a/src/assets/css/map/map-elem-ui.less +++ b/src/assets/css/map/map-elem-ui.less @@ -51,9 +51,9 @@ } - location-btn{ - - } + //location-btn{ + // + //} .location-btn:hover,.el-input__icon:hover{ color: @color; diff --git a/src/components/helpers/ServiceLayerHelper.js b/src/components/helpers/ServiceLayerHelper.js index a38ef6c..96da67f 100644 --- a/src/components/helpers/ServiceLayerHelper.js +++ b/src/components/helpers/ServiceLayerHelper.js @@ -116,18 +116,21 @@ * @param url * @param item */ - loadGeojsonLayer (url, item) { + async loadGeojsonLayer (url, item) { var matches = this.regex.exec(url) var matchValue = item[matches[1]] var code = item.code var newUrl = url.replace(this.regex, matchValue) var that = this if (!that.layerArray[code]) { - AjaxUtils.GetDataAsynByUrl(newUrl, {}, function (res) { - store.commit('addSewersDatas', res) - var layer = that.loadGeojson(res, item) - that.layerArray[code] = layer - }) + const res = await AjaxUtils.GetDataAsynByUrl(newUrl, {}) + if (res.data instanceof Object && Object.prototype.hasOwnProperty.call(res.data, 'features')) { + store.commit('addSewersDatas', res.data) + if (newUrl.indexOf('绠$綉') !== -1 || newUrl.indexOf('鍥涢��') !== -1) { + var layer = that.loadGeojson(res.data, item) + that.layerArray[code] = layer + } + } } else { that.layerArray[code].addTo(that.map) } @@ -140,6 +143,7 @@ loadGeojson (res, opt) { var that = this var icon = opt.icon + const layergroup = that.L.featureGroup().addTo(that.map) const geojson = that.L.geoJSON(res.features, { style: function (feature) { return { @@ -215,7 +219,8 @@ } }) } - }).addTo(that.map) + // }).addTo(that.map) + }).addTo(layergroup) store.commit('addSewersDatas', geojson) if (Object.prototype.hasOwnProperty.call(res, 'features') && res.features.length > 0 && (res.features[0].geometry.type === 'LineString' || res.features[0].geometry.type === 'MultiLineString')) { geojson.bringToBack() diff --git a/src/components/panel/RightSearchPanel.vue b/src/components/panel/RightSearchPanel.vue index 4976bac..650c599 100644 --- a/src/components/panel/RightSearchPanel.vue +++ b/src/components/panel/RightSearchPanel.vue @@ -1,49 +1,76 @@ <template> <div id="right-panel"> <div class="panel-tab"> - <div v-for="item in topicMenu" :key="item.id" :title="item.name" class="tab-item" @click="handleClick(item)"> + <div v-for="item in topicMenu" :key="item.id" :title="item.name" class="tab-item" @click="handleGd" :class="{'B-TMT-tab-waybill-isActive': isWaybillHover}"> <img :src="item.icon" style="width: 24px;height: 24px;"></div> - <!-- <div class="tab-item" @click="handleHb" :class="{'B-TMT-tab-route-isActive': isRouteHover}"></div>--> <!-- <div class="tab-item" @click="handlePk" :class="{'B-TMT-tab-route-isActive': isRouteHover}"></div>--> </div> - <div class="panel-fold-btn"> - <div class="btn-stretch" @click="toggleMonitorPanel"></div> - </div> +<!-- <div class="panel-fold-btn" >--> +<!-- <div class="btn-stretch" @click="toggleMonitorPanel"></div>--> +<!-- </div>--> - <div class="right-control"> - +<!-- <div class="panel-fold-btn" @click="toggleMonitorPanel" >--> +<!-- <div :class="[isCollapse? 'btn-stretch':'btn-shrink']" ></div>--> +<!--<!– <div class="btn-stretch" v-if="isCollapse" </div>–>--> +<!--<!– <div class="btn-shrink" v-else-if="!isCollapse" ></div>–>--> +<!--<!– :style = "{width:isCollapse ? '290px' : '0px'}"–>--> +<!-- </div>--> +<!-- <div class="right-control" v-if="!isCollapse" >--> + <div class="right-control" :class="[{ 'unfold': !isCollapse },{ 'shrink': isCollapse }] " > + <div class="panel-fold-btn" @click="toggleMonitorPanel"> +<!-- <div class="btn-stretch" v-if="isCollapse"></div>--> +<!-- <div class="btn-shrink" v-else-if="!isCollapse"></div>--> + <div :class="[isCollapse? 'btn-stretch':'btn-shrink']" ></div> + </div> <component :title="title" :is="gcComp"></component> </div> </div> </template> <script> -import $ from 'jquery' -import { TopicComp, TopicList } from '../../conf/Topic' +// import $ from 'jquery' +import EnvProtectSearch from './topicSearch/EnvProtectSearch' +import DischargeSearch from './topicSearch/DischargeSearch' +import { TopicList } from '../../conf/Topic' + +import SewersSearch from '@components/panel/topicSearch/SewersSearch' export default { name: 'MonitorPanel', - components: TopicComp, + components: { EnvProtectSearch, DischargeSearch }, data () { return { + topicMenu: [], topicList: TopicList, topicCheckedList: [], isPanelVisible: false, - gcComp: 'sewersSearch', + gcComp: SewersSearch, gdVisible: true, hbVisible: false, pkVisible: false, toggleMonitorStyle: 'right:0px', - title: '姹¢洦姘寸缃�' + title: '姹¢洦姘寸缃�', + isCollapse: false } }, - computed: { - topicMenu () { - console.log(this.$store.state.map.topic.topicCheckedList) - return this.$store.state.map.topic.topicCheckedList + computed: {}, + watch: { + '$store.state.map.topic.topicCheckedList': function (newVal, oldVal) { + console.log(oldVal) + console.log(newVal) + this.topicCheckedList = newVal + this.topicMenu = [] + this.topicList.forEach((item) => { + this.topicCheckedList.forEach((itm) => { + if (item.name === itm) { + // item.checked = tr + this.topicMenu.push(item) + } + }) + }) } }, methods: { @@ -53,43 +80,48 @@ handlePage (page) { }, - handleClick (item) { - this.title = item.name - this.gcComp = item.comp + handleGd () { + this.title = '绠¢亾淇℃伅鏌ヨ' }, toggleMonitorPanel () { - const el = $('.btn-stretch') - const el2 = $('.panel-fold-btn') - // let cs = 'btn-stretch-active' - var rightControl = $('#right-panel') - const right = rightControl.css('right') - if (right === '10px') { - rightControl.animate({ - right: '-322px' - }) - el.css({ - transform: 'rotateY(180deg)', - 'transform-origin': '50% 50%', - transition: 'transform 1s linear' - }) - el2.animate({ - right: '320px', - speed: 1000 - }) - } else { - rightControl.animate({ - right: '10px' - }) - el.css({ - transform: 'rotateY(0deg)', - 'transform-origin': '50% 50%', - transition: 'transform 1s linear' - }) - el2.animate({ - right: '290px', - speed: 1000 - }) - } + this.isCollapse = !this.isCollapse + // const el = $('.btn-stretch') + // const el2 = $('.panel-fold-btn') + // const el = document.getElementsByClassName('.btn-stretch') + // const el2 = document.getElementsByClassName('.panel-fold-btn') + // let = 'btn-stretch-active' + // var rightControl = $('#right-panel') + // var rightControl = document.getElementById('#right-panel') + // const right = rightControl.css('right') + // const rightit = rightControl.ownerDocument.defaultView + // const right = rightit.getComputedStyle(rightit, null).right + // if (right === '10px') { + // rightControl.animate({ + // right: '-322px' + // }) + // el.css({ + // transform: 'rotateY(180deg)', + // 'transform-origin': '50% 50%', + // transition: 'transform 1s linear' + // }) + // el2.animate({ + // right: '320px', + // speed: 1000 + // }) + // } else { + // rightControl.animate({ + // right: '10px' + // }) + // el.css({ + // transform: 'rotateY(0deg)', + // 'transform-origin': '50% 50%', + // transition: 'transform 1s linear' + // }) + // el2.animate({ + // right: '290px', + // speed: 1000 + // }) + // } } }, mounted () { @@ -110,7 +142,6 @@ .el-card__body { padding: 7px; } - .el-form-item__content { color: rgb(52, 224, 255); } @@ -127,6 +158,7 @@ .el-form-item__label { color: rgb(52, 224, 255); + color: @color; } .el-input__inner::placeholder { @@ -218,14 +250,29 @@ white-space: nowrap; } .panel-fold-btn{ + overflow: hidden; position: absolute; top:45%; + left: -18px; + /*left: 0px;*/ //right: 320px; - right: 290px; + /*right: 290px;*/ z-index: 1000; + /*right: 0px;*/ background-color: rgba(5,24,66,.8); border-radius: 10px 0 0 10px; .btn-stretch { + width: 20px; + height: 40px; + background: url('../../assets/images/map-pages/icon/icon.png') no-repeat -408px 5px; + cursor: pointer; + /*margin-left: -20px;*/ + transform: rotateY(0deg); + transform-origin: 50% 50%; + transition: transform 1s linear; + /*transition: 3s linear;*/ + } + .btn-shrink { width: 20px; height: 40px; background: url('../../assets/images/map-pages/icon/icon.png') no-repeat -408px 5px; @@ -258,17 +305,20 @@ } .right-control { - width: 290px; + /*width: 290px;*/ //height: 573px; height: 100%; - position: absolute; + position: relative; top: 0; right: 0; z-index: 999; background: url('../../assets/images/map-pages/icon/bgc.png') no-repeat; background-size: 100% 98%; } - + .a{ + transform: translateX(328px); + transition: transform 3s linear; + } .panel_searchTotal { font-size: 12px; float: right; @@ -276,13 +326,13 @@ .panel_header { // background-color: #030D2E; - padding: 7px 15px 3px 20px; + padding: 8px 15px 3px 20px; } .panel_title { font-size: 12px; - margin: 0px; - padding: 0px; + /*margin: 0px;*/ + /*padding: 0px;*/ color: #78c4ff; font-weight: bold; } @@ -292,7 +342,7 @@ } .search-form .el-form-item { - margin: 0px; + /*margin: 0px;*/ margin-bottom: 8px; } @@ -438,7 +488,7 @@ ::-webkit-scrollbar-track { /*婊氬姩鏉¢噷闈㈣建閬�*/ - // box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2); + box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2); border-radius: 0px; background: #0E3565; } @@ -467,5 +517,13 @@ background-color: #061e51 !important; } } + .unfold { + transform: translateX(332px); + transition: transform 0.5s linear; + } + .shrink { + transform: translateX(0px); + transition: transform 0.5s linear; + } } </style> diff --git a/src/components/panel/topicSearch/SewersSearch.vue b/src/components/panel/topicSearch/SewersSearch.vue index a3987bf..6fe9340 100644 --- a/src/components/panel/topicSearch/SewersSearch.vue +++ b/src/components/panel/topicSearch/SewersSearch.vue @@ -1,9 +1,5 @@ <template> <div class="sewers-search"> - <div class="el-message-box__header panel_header"> - <div class="el-message-box__title panel_title"><!----><span>{{ title }}</span> - </div> - </div> <div class="el-message-box__content" style="padding:6px;font-size: 13px;"> <div class="box__content" v-if="gdVisible"> <div> diff --git a/src/components/plugin/leaflet-canvas-markers.js b/src/components/plugin/leaflet-canvas-markers.js new file mode 100644 index 0000000..b79ae38 --- /dev/null +++ b/src/components/plugin/leaflet-canvas-markers.js @@ -0,0 +1,68 @@ + +'use strict'; + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + define(['leaflet'], factory) + } else if (typeof exports === 'object') { + module.exports = factory(require('leaflet')) + } else { + factory(window.L) + } +}(this, function (L) { + L.Canvas.include({ + _updateImg: function (layer) { + const { img } = layer.options + // const img = layer.options.img + const p = layer._point.round() + p.x += img.offset.x; p.y += img.offset.y + if (img.rotate) { + this._ctx.save() + this._ctx.translate(p.x, p.y) + this._ctx.rotate(img.rotate * Math.PI / 180) + this._ctx.drawImage(img.el, -img.size[0] / 2, -img.size[1] / 2, img.size[0], img.size[1]) + this._ctx.restore() + } else { + this._ctx.drawImage(img.el, p.x - img.size[0] / 2, p.y - img.size[1] / 2, img.size[0], img.size[1]) + } + } + }) + + const angleCrds = (map, prevLatlng, latlng) => { + if (!latlng || !prevLatlng) return 0 + const pxStart = map.project(prevLatlng) + const pxEnd = map.project(latlng) + return Math.atan2(pxStart.y - pxEnd.y, pxStart.x - pxEnd.x) / Math.PI * 180 - 90 + } + + const defaultImgOptions = { + rotate: 0, + size: [40, 40], + offset: { x: 0, y: 0 } + } + + const CanvasMarker = L.CircleMarker.extend({ + _updatePath () { + if (!this.options.img || !this.options.img.url) return + if (!this.options.img.el) { + this.options.img = { ...defaultImgOptions, ...this.options.img } + this.options.img.rotate += angleCrds(this._map, this.options.prevLatlng, this._latlng) + const img = document.createElement('img') + img.src = this.options.img.url + this.options.img.el = img + img.onload = () => { + this.redraw() + } + img.onerror = () => { + this.options.img = null + } + } else { + this._renderer._updateImg(this) + } + } + }) + + L.canvasMarker = function (...options) { + return new CanvasMarker(...options) + } +})) diff --git a/src/main.js b/src/main.js index 32a895f..1d1c6ac 100644 --- a/src/main.js +++ b/src/main.js @@ -1,4 +1,4 @@ -// import 'babel-polyfill' +import 'babel-polyfill' import Vue from 'vue' import App from './App.vue' import router from './router' @@ -11,9 +11,10 @@ import 'leaflet/dist/leaflet.css' import L from 'leaflet' import 'leaflet.markercluster' -import 'leaflet-canvas-markers' +// import 'leaflet-canvas-markers' import './components/plugin/Leaflet.GridLayer.FadeOut' +import './components/plugin/leaflet-canvas-markers' Vue.config.productionTip = false Vue.use(ElementUI) diff --git a/src/router/routes.js b/src/router/routes.js index 2bdac51..ed5d92a 100644 --- a/src/router/routes.js +++ b/src/router/routes.js @@ -26,6 +26,13 @@ meta: { title: '鍩虹鏁版嵁缁存姢' } + }, { + path: '/mapTemplate', + name: 'mapTemplate', + component: MapTemplate, + meta: { + title: '鍩虹鍦板浘' + } }] }] export const routes = [...mainRoutes, ...mapRoutes] diff --git a/src/utils/AjaxUtils.js b/src/utils/AjaxUtils.js index 11138b0..0499763 100644 --- a/src/utils/AjaxUtils.js +++ b/src/utils/AjaxUtils.js @@ -1,5 +1,5 @@ import $ from 'jquery' - +import axios from 'axios' /** * 瀵筳query鐨勫皝瑁卆jax鐨勪紶鏁版嵁鏂规硶 * @param pUrl 璇锋眰鐨剈rl @@ -28,36 +28,47 @@ * @param pData 鍙傛暟 * @param pBackFun 鎴愬姛鍥炶皟 */ -function get4JsonDataByUrl (pUrl, pData, pBackFun) { - $.ajax({ - type: 'get', +function get4JsonDataByUrl (oUrl, pData, pBackFun) { + const pUrl = encodeURI(oUrl) + axios({ + method: 'get', url: pUrl, - dataType: 'json', - data: pData, - async: true, - success: function (datas, nnn) { - pBackFun(datas) - }, - error: function (err, nnnn) { - console.error('鏁版嵁鑾峰彇澶辫触', err, pUrl) - } + data: pData + }).then(function (response) { + pBackFun(response) }) + .catch(function (error) { + console.error('鏁版嵁鑾峰彇澶辫触', error) + }) } -function GetDataAsynByUrl (pUrl, pData, pBackFun) { - $.ajax({ - type: 'GET', +const GetDataAsynByUrl = async (oUrl, pData) => { + const pUrl = encodeURI(oUrl) + const res = await axios({ + method: 'get', url: pUrl, - data: pData, - timeout: 600000, - async: true, - success: function (datas, nnn) { - pBackFun(datas) - }, - error: function (e, nnnn) { - console.error('鏁版嵁鑾峰彇澶辫触', pUrl) - } + data: pData + }).then((response) => { + return (response) }) + .catch((error) => { + console.error('鏁版嵁鑾峰彇澶辫触', error) + }) + return res + + // $.ajax({ + // type: 'GET', + // url: pUrl, + // data: pData, + // timeout: 600000, + // async: true, + // success: function (datas, nnn) { + // pBackFun(datas) + // }, + // error: function (e, nnnn) { + // console.error('鏁版嵁鑾峰彇澶辫触', pUrl) + // } + // }) } function postDataAsynByUrl (pUrl, pData, pBackFun) { $.ajax({ -- Gitblit v1.8.0