From 379b07532e335e01ec47d9e85609041082270af3 Mon Sep 17 00:00:00 2001 From: chenzeping <ChenZeping02609@163.com> Date: 星期二, 16 三月 2021 16:40:19 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master --- src/assets/images/map-pages/icon/layer.png | 0 src/conf/MapConfig.js | 3 src/components/LayerController/LayerController.vue | 55 +++++-- src/components/LayerController/LayerController2.vue | 288 +++++++++++++++++++++++++++++++++++++++++ src/components/LayerController/modules/LcServiceLayer.vue | 18 +- src/conf/LayerWasteWater.js | 43 ++++++ src/App.vue | 2 7 files changed, 383 insertions(+), 26 deletions(-) diff --git a/src/App.vue b/src/App.vue index 89338ed..6b056a7 100644 --- a/src/App.vue +++ b/src/App.vue @@ -23,7 +23,7 @@ overflow: hidden; } body .el-scrollbar__wrap { - overflow-x: hidden; + // overflow-x: hidden; } body{ -ms-overflow-style: none; diff --git a/src/assets/images/map-pages/icon/layer.png b/src/assets/images/map-pages/icon/layer.png new file mode 100644 index 0000000..4c4587c --- /dev/null +++ b/src/assets/images/map-pages/icon/layer.png Binary files differ diff --git a/src/components/LayerController/LayerController.vue b/src/components/LayerController/LayerController.vue index 8f24ad7..9a60145 100644 --- a/src/components/LayerController/LayerController.vue +++ b/src/components/LayerController/LayerController.vue @@ -1,14 +1,9 @@ <template> <div class="float-panel"> - <div class="title-text-border" @click="switchPanel"> - <div class="title-icon"></div> - <div class="title-text">鍥惧眰鎺у埗</div> - </div> - <transition name="el-fade-in-linear"> - <div class="body-box" id="panelContent" :style="{ width:width }"> - <div v-show="isShow"> - <slot></slot> - </div> + <div :class='["btn",layerControllerVisible ? "active" : ""]' @click="showPanel"><span><img src="@assets/images/map-pages/icon/layer.png" alt="" width="26px" style="display: block;margin: auto"><span class="icon-name">鍥惧眰</span></span></div> + <transition name="fade"> + <div :class="'legend-content map-background'" style="position: absolute;left: 50px;top: 0" v-show="layerControllerVisible"> + <lc-service-layer></lc-service-layer> </div> </transition> </div> @@ -19,10 +14,12 @@ import presets from './layerControllerPresets' import iconSetting from '@/assets/images/map-pages/icon/setting.png' +import LcServiceLayer from './modules/LcServiceLayer' +const cityOptions = ['涓婃捣', '鍖椾含', '骞垮窞', '娣卞湷'] export default { name: 'LayerController', - components: {}, + components: { LcServiceLayer }, props: { preset: { type: String, @@ -38,9 +35,6 @@ }, layerHelper () { return this.$store.state.map.layerHelper - }, - layerControllerVisible () { - return this.$store.state.map.layerControllerVisible } }, data () { @@ -50,6 +44,11 @@ icons: { setting: iconSetting }, + checkAll: false, + checkedCities: ['涓婃捣', '鍖椾含'], + cities: cityOptions, + isIndeterminate: true, + layerControllerVisible: false, panelSwitch: { main: true // 涓荤獥鍙� } @@ -61,6 +60,18 @@ }) }, methods: { + showPanel () { + this.layerControllerVisible = !this.layerControllerVisible + }, + handleCheckAllChange (val) { + this.checkedCities = val ? cityOptions : [] + this.isIndeterminate = false + }, + handleCheckedCitiesChange (value) { + const checkedCount = value.length + this.checkAll = checkedCount === this.cities.length + this.isIndeterminate = checkedCount > 0 && checkedCount < this.cities.length + }, init () { this.initPreset() }, @@ -90,18 +101,30 @@ </script> <style lang="less"> - .float-panel { position: absolute; + left: 2px; top: 120px; height: auto; font-size: 11px; z-index: 1000; div { - color: #90c8e0; + color: #00fff6; } - + .btn { + width:45px; + text-align: center; + background: rgba(0, 16, 30, 0.5); + cursor: pointer; + color: #00fff6; + border: 0.00521rem solid #00fff6; + box-shadow: 0 0 0.03rem #00fff6; + } + .active { + border: 0.00521rem solid #fff700; + box-shadow: 0 0 0.03rem #fff700; + } .title-border { width: 100%; height: 28px; diff --git a/src/components/LayerController/LayerController2.vue b/src/components/LayerController/LayerController2.vue new file mode 100644 index 0000000..8f24ad7 --- /dev/null +++ b/src/components/LayerController/LayerController2.vue @@ -0,0 +1,288 @@ +<template> + <div class="float-panel"> + <div class="title-text-border" @click="switchPanel"> + <div class="title-icon"></div> + <div class="title-text">鍥惧眰鎺у埗</div> + </div> + <transition name="el-fade-in-linear"> + <div class="body-box" id="panelContent" :style="{ width:width }"> + <div v-show="isShow"> + <slot></slot> + </div> + </div> + </transition> + </div> +</template> + +<script> +import '@assets/css/map/magic.min.css' +import presets from './layerControllerPresets' + +import iconSetting from '@/assets/images/map-pages/icon/setting.png' + +export default { + name: 'LayerController', + components: {}, + props: { + preset: { + type: String, + default: 'default' + } + }, + computed: { + map () { + return this.$store.state.map.map + }, + L () { + return this.$store.state.map.L + }, + layerHelper () { + return this.$store.state.map.layerHelper + }, + layerControllerVisible () { + return this.$store.state.map.layerControllerVisible + } + }, + data () { + return { + width: '250px', + isShow: true, + icons: { + setting: iconSetting + }, + panelSwitch: { + main: true // 涓荤獥鍙� + } + } + }, + mounted () { + this.$nextTick(function () { + this.init() + }) + }, + methods: { + init () { + this.initPreset() + }, + initPreset () { + if (this.preset !== 'default') { + const prmPreset = presets[this.preset] + Object.assign(this.layerControllerVisible, prmPreset) // 闃叉棰勮鍙傛暟涓庨粯璁ゅ弬鏁颁笉涓�鑷村鑷存姤閿欙紝濡傛灉娌℃湁鎸夌収鎮ㄧ殑閰嶇疆鍙戠敓鏀瑰彉锛岃妫�鏌ユ嫾鍐欐槸鍚︽纭� + if (prmPreset === 'undefined') { + console.log('璇ュ浘灞傛帶鍒堕潰鏉跨殑棰勮娌℃湁鎵惧埌锛岃妫�鏌ラ璁惧悕绉版槸鍚︽纭紒') + } else { + this.$store.commit('updateLayerControllerVisible', this.layerControllerVisible) + } + } + }, + switchPanel () { + this.panelSwitch.main = !this.panelSwitch.main + if (this.panelSwitch.main) { + this.width = '250px' + this.isShow = true + } else { + this.width = '0px' + this.isShow = false + } + } + } +} +</script> + +<style lang="less"> + +.float-panel { + position: absolute; + top: 120px; + height: auto; + font-size: 11px; + z-index: 1000; + + div { + color: #90c8e0; + } + + .title-border { + width: 100%; + height: 28px; + background: #10488c; + -webkit-clip-path: polygon(0px 0px, 0px 28px, 230px 28px, 230px 9px, 95px 9px, 86px 0px); + clip-path: polygon(0px 0px, 0px 28px, 230px 28px, 230px 9px, 95px 9px, 86px 0px); + position: relative; + } + + .title-border:before { + content: ""; + display: block; + position: absolute; + width: 6px; + height: 6px; + top: 0; + left: 0; + background-color: #38c8ef; + } + + .title-border:after { + content: ""; + display: block; + position: absolute; + width: 6px; + height: 6px; + top: 9px; + right: 0; + background-color: #38c8ef; + -webkit-clip-path: polygon(0px 0px, 0px 1px, 5px 1px, 5px 6px, 6px 6px, 6px 0px); + clip-path: polygon(0px 0px, 0px 1px, 5px 1px, 5px 6px, 6px 6px, 6px 0px); + } + + .title-text-border { + width: 30px; + height: 120px; + float: left; + background: #091331; + // -webkit-clip-path: polygon(1px 1px, 1px 27px, 229px 27px, 229px 10px, 94px 10px, 85px 1px); + // clip-path: polygon(1px 1px, 1px 27px, 229px 27px, 229px 10px, 94px 10px, 85px 1px); + } + + .title-icon { + float: left; + width: 22px; + height: 22px; + margin-top: 4px; + margin-left: 2px; + background-image: url(../../assets/images/map-pages/icon/setting.png); + } + + .title-text { + width: 25px; + color: #00d0f9; + font-weight: bold; + margin-top: 6px; + text-align: center; + font-size: 14px; + filter: brightness(100%); + text-shadow: 0 0 5px #00d0f9, 0 0 0 #00d0f9, 0 0 0 #00d0f9, 0 0 0 #0258c5, 0 0 0 #0258c5, 0 0 2px #0258c5, 0 0 5px #0258c5, 0 0 15px #0258c5; + } + + .title-line { + display: inline-block; + width: 120px; + height: 1px; + // margin-top: 14px; + margin-left: 4px; + background-color: #04527f; + line-height: 5px; + vertical-align: middle; + } + + .title-point { + display: inline-block; + width: 5px; + height: 5px; + // margin-top: 12px; + background-color: #04527f; + line-height: 5px; + vertical-align: middle; + } + + .title-button { + float: right; + width: 28px; + height: 28px; + cursor: pointer; + + :hover { + font-weight: bold; + color: white; + } + } + + .body-box { + background-color: rgba(44, 62, 80, 0.6); + border: 1px solid #10488c; + margin-top: -1px; + margin-left: 30px; + height: auto; + } + + .switch-head-up { + width: 22px; + height: 16px; + float: right; + margin-top: 10px; + margin-right: 10px; + cursor: pointer; + background-image: url(../../assets/images/map-pages/icon/xljt1.png); + transform: rotateX(0deg); + transform-origin: 50% 50%; + transition: transform 0.5s linear 0s; + } + + .switch-head-down { + transform: rotateX(180deg); + transform-origin: 50% 50%; + transition: transform 0.5s linear 0s; + } + + select { + background: transparent; + margin: 6px; + border: .5px solid #569EB7; + width: 150px; + color: #569EB7; + padding: 0 16px; + } + + .horn { + width: 6px; + height: 6px; + float: left; + position: absolute; + } + + .horn-tl { + background-image: url(../../assets/images/map-pages/cosmetics/horn_tl.png); + left: -1px; + top: -1px; + } + + .horn-tr { + background-image: url(../../assets/images/map-pages/cosmetics/horn_tr.png); + right: -1px; + top: -1px; + } + + .horn-bl { + background-image: url(../../assets/images/map-pages/cosmetics/horn_bl.png); + left: -1px; + bottom: -1px; + } + + .horn-br { + background-image: url(../../assets/images/map-pages/cosmetics/horn_br.png); + right: -1px; + bottom: -1px; + } + + ::-webkit-scrollbar { + width: 7px; + height: 5px !important; + } + + ::-webkit-scrollbar-thumb { + /*婊氬姩鏉¢噷闈㈠皬鏂瑰潡*/ + border-radius: 10px; + box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); + background: #0661AE; + border: 1px solid transparent; + } + + ::-webkit-scrollbar-track { + /*婊氬姩鏉¢噷闈㈣建閬�*/ + // box-shadow : inset 0 0 5px rgba(0, 0, 0, 0.2); + border-radius: 0px; + background: #0E3565; + } +} + +</style> diff --git a/src/components/LayerController/modules/LcServiceLayer.vue b/src/components/LayerController/modules/LcServiceLayer.vue index b86a7e6..fddacf6 100644 --- a/src/components/LayerController/modules/LcServiceLayer.vue +++ b/src/components/LayerController/modules/LcServiceLayer.vue @@ -1,5 +1,8 @@ <template> <div class="inner-panel"> + <div class="title"> + 鍥惧眰鎺у埗 + </div> <div class="wms-panel"> <div v-for="item in serviceLayers" :key="item.code" class="layerbox"> <div><input type="checkbox" :name="'wmsLayer_'+item.code" :checked="item.checked" :value="item.code" @@ -96,10 +99,13 @@ <style scoped lang="less"> .inner-panel { - display: flex; - justify-content: center; - align-items: center; - + .title{ + color: #ffffff; + font-size: 16px; + font-weight: 600; + margin: 10px; + text-align: center; + } .btn-filter { cursor: pointer; color: #ffffff; @@ -107,13 +113,9 @@ .wms-panel { width: 250px; - display: flex; - flex-flow: column; .layerbox { width: 100%; - display: flex; - flex-flow: column; .layerbox-item { display: flex; diff --git a/src/conf/LayerWasteWater.js b/src/conf/LayerWasteWater.js new file mode 100644 index 0000000..982bd28 --- /dev/null +++ b/src/conf/LayerWasteWater.js @@ -0,0 +1,43 @@ +/** + * 搴熸按鍥惧眰 + * @type {string} + */ +const APP_GIS_HOST_2 = 'http://xearth.cn:6289' +export const LayerWasteWater = { + code: 'pipeline', + name: '搴熸按', + type: 'geojson', + // url: APP_GIS_HOST_2 + '/server/ogcserver/PipeLineTest/wms?version=1.1.1', + // url: APP_GIS_HOST_2 + '/layer/findLayer?layerName={sname}', + url: APP_GIS_HOST_2 + '/server/ogcserver/PipeLine/wfs?version=1.0.0&TYPENAME={sname}&REQUEST=getfeature&OUTPUTFORMAT=json&maxFeatures=20000', + checked: true, + layers: [ + { + code: 'rainline', + name: '浼佷笟', + sname: '浼佷笟', // 琛ㄥ悕 + checked: true, // 榛樿閫変腑鐘舵�� + filter: {}, + minZoom: 10, // 鍦ㄦ寚瀹氱骇鍒樉绀� + childLayer: 'fsss,hbss' // 鍏宠仈PointLayers + }, + { + code: 'oilline', + name: '鐩戞祴鐐�', + sname: '鐩戞祴鐐�', + checked: true, // 榛樿閫変腑鐘舵�� + filter: {}, + minZoom: 10, + childLayer: 'fsss,hbss' // 鍏宠仈PointLayers + }, + { + code: 'saltline', + name: '鎺掓斁鍙�', + sname: '鎺掓斁鍙�', + checked: true, // 榛樿閫変腑鐘舵�� + filter: {}, + minZoom: 10, + childLayer: 'fsss,hbss' // 鍏宠仈PointLayers + } + ] +} diff --git a/src/conf/MapConfig.js b/src/conf/MapConfig.js index 8e502d3..2fb7b12 100644 --- a/src/conf/MapConfig.js +++ b/src/conf/MapConfig.js @@ -1,6 +1,7 @@ 锘縤mport * as L from 'leaflet' import TDT from './TDT' import { LayerSewersLine, LayerSewersPoint } from './LayerSewers' +import { LayerWasteWater } from './LayerWasteWater' const curWwwPath = window.document.location.href const pathname = window.document.location.pathname const pos = curWwwPath.indexOf(pathname) @@ -37,7 +38,7 @@ // defaultBasemapCode: 'tianditu_img', // 榛樿鏄剧ず 鍦板浘绫诲瀷 IntranetBaseMaps: TDT.intranet, InternetBaseMaps: TDT.internet, - Layers: { LayerSewersLine: [LayerSewersLine], layerSewersPoint: LayerSewersPoint } // 姹¢洦姘村浘灞傞厤缃� + Layers: { LayerSewersLine: [LayerSewersLine, LayerWasteWater], layerSewersPoint: LayerSewersPoint } // 姹¢洦姘村浘灞傞厤缃� } /** -- Gitblit v1.8.0