From 6f554a260a396fb6767fdbd19d424b5cd3adf1b8 Mon Sep 17 00:00:00 2001 From: jiangyy Date: Thu, 9 Dec 2021 18:00:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=B0=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 4 +- .env.production.sit | 4 +- public/index.html | 6 +- src/assets/img/shuju/weiwanjie.png | Bin 0 -> 2193 bytes src/assets/img/shuju/yiwanjie.png | Bin 0 -> 2169 bytes .../scss/modules/visual/processAnalyze.scss | 67 +- .../scss/modules/visual/typeAnalyze.scss | 135 ++++ .../visual/communityGovern/processAnalyze.vue | 182 +++-- .../visual/communityGovern/typeAnalyze.vue | 646 ++++++++---------- .../visual/communityGovern/typePieOption.js | 179 +++++ .../visual/components/screen-map/index.vue | 107 +-- 11 files changed, 881 insertions(+), 449 deletions(-) create mode 100644 src/assets/img/shuju/weiwanjie.png create mode 100644 src/assets/img/shuju/yiwanjie.png create mode 100644 src/assets/scss/modules/visual/typeAnalyze.scss create mode 100644 src/views/modules/visual/communityGovern/typePieOption.js diff --git a/.env.development b/.env.development index b3e49ab5f..2ad1156bb 100644 --- a/.env.development +++ b/.env.development @@ -1,6 +1,6 @@ NODE_ENV=development -# VUE_APP_API_SERVER = https://epmet-test.elinkservice.cn/api -VUE_APP_API_SERVER = http://192.168.1.140/api +VUE_APP_API_SERVER = https://epmet-test.elinkservice.cn/api +# VUE_APP_API_SERVER = http://192.168.1.140/api # VUE_APP_API_SERVER = http://192.168.51.36:8080/api # VUE_APP_API_SERVER = https://epmet-dev.elinkservice.cn/api VUE_APP_NODE_ENV=dev diff --git a/.env.production.sit b/.env.production.sit index b0c600ea6..de86de77c 100644 --- a/.env.production.sit +++ b/.env.production.sit @@ -1,5 +1,5 @@ NODE_ENV=production -# VUE_APP_API_SERVER = https://epmet-test.elinkservice.cn/api -VUE_APP_API_SERVER = http://192.168.1.140/api +VUE_APP_API_SERVER = https://epmet-test.elinkservice.cn/api +# VUE_APP_API_SERVER = http://192.168.1.140/api VUE_APP_NODE_ENV=prod:sit VUE_APP_PUBLIC_PATH=epmet-oper \ No newline at end of file diff --git a/public/index.html b/public/index.html index be512c579..ef957a4cf 100644 --- a/public/index.html +++ b/public/index.html @@ -36,9 +36,9 @@ <% if (process.env.VUE_APP_NODE_ENV==='dev' ) { %> <% } %> diff --git a/src/assets/img/shuju/weiwanjie.png b/src/assets/img/shuju/weiwanjie.png new file mode 100644 index 0000000000000000000000000000000000000000..582766fbfe50f5a4437c88552f00cc6242535ff6 GIT binary patch literal 2193 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 img { + margin-left: 58px; + height: 35px; + width: 40px; + } + + > span { + margin-left: 3px; + font-size: 16px; + font-family: PingFang SC; + font-weight: 400; + color: #d2e7ff; + } + } + .r-legend:hover { + cursor: pointer; } } diff --git a/src/assets/scss/modules/visual/typeAnalyze.scss b/src/assets/scss/modules/visual/typeAnalyze.scss new file mode 100644 index 000000000..a5c3918e1 --- /dev/null +++ b/src/assets/scss/modules/visual/typeAnalyze.scss @@ -0,0 +1,135 @@ +@import '../../c/config'; +@import '../../c/function'; +@import './c/common'; + +.title { + padding: 10px; + font-size: 22px; + font-family: PingFang SC; + font-weight: 800; + color: #ffffff; + display: flex; + align-items: center; + position: relative; + + img { + display: block; + margin-right: 5px; + } + span { + display: block; + } + + .second-select { + margin: 0 10px 0 40px; + + ::v-deep .el-input { + width: 140px; + height: 36px; + .el-input__inner { + height: 100%; + padding: 0 10px; + color: #fff; + line-height: 36px; + background: #06186d; + border: 1px solid #1a64cc; + } + .el-icon-arrow-up:before { + content: '\e78f'; + } + } + ::v-deep .el-date-editor { + .el-input__prefix { + left: unset; + right: 5px; + } + } + } + + .cascader { + ::v-deep .el-input { + width: 220px; + } + } + .status-select { + position: absolute; + top: 20px; + right: 10px; + } + .second-select:last-child { + margin-left: 0; + } +} + +.g-cpt-resi { + display: flex; + flex-direction: row; + // flex-wrap: wrap; + // justify-content: center; + height: calc(100vh - 130px); + + .g-l { + flex-shrink: 0; + width: 600px; + height: calc(100vh - 190px); + } + + .g-r { + text-align: center; + margin: 40px 19px 20px; + width: calc(100vw - 60px - 600px); + height: calc(100vh - 140px - 20px); + } +} + +.g-r { + .tb { + position: relative; + height: calc(100vh - 220px); + overflow-y: auto; + @include scrollBar; + + .m-pagination { + position: absolute; + box-sizing: border-box; + right: 0; + bottom: 0; + + width: 100%; + height: 40px; + display: flex; + justify-content: flex-end; + + /deep/ .el-pagination.is-background .el-pager li:not(.disabled).active { + background: #0266d1; + color: #000d3f; + } + + /deep/ .el-pagination .el-pager li { + background: #002e74; + } + + /deep/ .el-pagination .btn-prev { + background: #002e74; + } + + /deep/ .el-pagination .btn-next { + background: #002e74; + } + } + } +} + +.echart-wr { + margin-left: 30px; + // margin-top: 100px; + text-align: center; + position: relative; + width: 500px; + height: 100%; + box-sizing: border-box; + .echart-org { + width: 100%; + height: 90%; + } +} diff --git a/src/views/modules/visual/communityGovern/processAnalyze.vue b/src/views/modules/visual/communityGovern/processAnalyze.vue index beae8fdc8..88fe8925d 100644 --- a/src/views/modules/visual/communityGovern/processAnalyze.vue +++ b/src/views/modules/visual/communityGovern/processAnalyze.vue @@ -54,11 +54,29 @@
+
+ +
+
已完结
+
未完结
+
+
+ + + 已完结 + + 未完结 +
- - +
@@ -66,6 +84,7 @@ + + diff --git a/src/views/modules/visual/communityGovern/typePieOption.js b/src/views/modules/visual/communityGovern/typePieOption.js new file mode 100644 index 000000000..64b6ad984 --- /dev/null +++ b/src/views/modules/visual/communityGovern/typePieOption.js @@ -0,0 +1,179 @@ + +export function pieOption (_charts) { +const center= ['50%', '250px'] + return { + title: { + text: '0', + top: 220, + left: 'center', + textStyle: { + width: '100%', + fontSize: 32, + color: '#FFFFFF', + fontWeight: 400 + }, + itemGap: 5, + subtext: '总数', + subtextStyle: { + fontSize: 20, + color: '#fff', + fontWeight: 400 + } + }, + tooltip: { + show: false + }, + legend: { + top: 500, + bottom: 0, + itemWidth: 20, + itemHeight: 10, + textStyle: { + color: '#D2E7FF', + fontSize: 16, + lineHeight: 20, + }, + + }, + series: [ + // 外侧圆环 + { + type: 'pie', + // 起始刻度的角度,默认为 90 度,即圆心的正上方。0 度为圆心的正右方。 + startAngle: 0, + hoverAnimation: false, + // tooltip: { + // }, + center: center, + radius: ['55%', '55.3%'], + label: { + show: false + }, + labelLine: { + show: false + }, + data: [{ + value: 360, + itemStyle: { + color: 'rgba(40, 101, 250, 0)', + width:0, + borderColor: 'rgba(40, 101, 250, 0.5)', + borderWidth: 1, + borderType: 'dotted' + } + } + ] + }, + + // 突出的 + { + hoverAnimation: false, + // name: 'Access From', + type: 'pie', + center: center, + radius: ['40%', '60%'], + avoidLabelOverlap: false, + // top: top + '%', + // height: '80%', + selectedMode: 'single', + left: 'center', + width: 400, + label: { + // show: false, + position: 'outside', + alignTo: 'edge', + // formatter: '{a|{c}}\n\n{name|{b}}', + formatter: '{a|{c}}\n{r|}\n{name|{b}}', + minMargin: 5, + edgeDistance: 1, + lineHeight: 15, + color: '#fff', + fontSize: 12, + // distanceToLabelLine: -60, + rich: { + name: { + padding: [0, 6, 0, 6] + }, + a: { + fontSize: 30, + color: '#fff', + padding: [0, 6, 6, 6] + }, + r: { + backgroundColor: 'auto', + borderRadius: 6, + width: 6, + height: 6, + // padding: [3, 3, 0, -12] + } + } + }, + labelLine: { + show: false, + smooth: 0.2, + length: 30, + length2: 0, + maxSurfaceAngle: 80 + }, + labelLayout: function (params) { + + const isLeft = params.labelRect.x < _charts.getWidth() / 2; + const points = params.labelLinePoints; + // Update the end point. + if (points) { + points[2][0] = isLeft + ? params.labelRect.x + : params.labelRect.x + params.labelRect.width; + } + + return { + labelLinePoints: points + }; + }, + itemStyle: { + // color:function(params) { + // //自定义颜色 + // var colorList = [ + // '#00FFFF', '#00FF00', '#FFFF00', '#FF8C00', '#FF0000', '#FE8463', + // ]; + // return colorList[params.dataIndex] + // } + }, + data: [], + + }, + // 中间圆环 + { + type: 'pie', + // 起始刻度的角度,默认为 90 度,即圆心的正上方。0 度为圆心的正右方。 + startAngle: 0, + hoverAnimation: false, + center: center, + // tooltip: { + // }, + radius: ['0%', '25%'], + label: { + + show: false + + }, + labelLine: { + + show: false + + }, + data: [{ + value: 360, + itemStyle: { + normal: { + color: 'rgba(8, 37, 134, 1)', + + } + } + } + ] + }, + ] + + } +} diff --git a/src/views/modules/visual/components/screen-map/index.vue b/src/views/modules/visual/components/screen-map/index.vue index 541bd3762..dc0252add 100644 --- a/src/views/modules/visual/components/screen-map/index.vue +++ b/src/views/modules/visual/components/screen-map/index.vue @@ -23,6 +23,7 @@ import Overlay from 'ol/Overlay'; import { defaults as defaultInteractions, Select, DoubleClickZoom } from 'ol/interaction.js'; import { getCenter, boundingExtent } from 'ol/extent.js'; import { Circle as CircleStyle, Icon, Fill, Stroke, Style, Text } from 'ol/style.js'; +import { altKeyOnly, click, pointerMove } from 'ol/events/condition'; import { mapGetters } from "vuex"; import { Loading } from 'element-ui'; //引入Loading服务 @@ -50,37 +51,13 @@ let select;//选中标注 //url图标 -let textColorArray = [ - 'rgba(236, 69, 4, 0.66)', - 'rgba(0, 146, 238, 0.75)', - 'rgba(238, 151, 0, 0.8)' -]; + let polygonColorArray = [ 'rgba(210, 2, 2, 0.24)', 'rgba(43, 231, 253, 0.25)', 'rgba(183, 185, 0, 0.16)' ]; -//变电站标注的文字样式 -var createTextStyle = function (feature) { - return new Text({ - textAlign: undefined, - font: "18px Arial", - //fontFamily: "Courier New, monospace", - // fontWeight: "bold", - text: feature.values_.name, - backgroundFill: new Fill({ - // color: 'rgba(0, 146, 238, 0.75)' - color: textColorArray[feature.values_.index - 1] - }), - padding: [4, 10, 4, 10], - //text: "变电站名称", - fill: new Fill({ color: "#ffffff" }), - // stroke: new Stroke({ color: "#ffffff", width: 3 }), - offsetY: -30, - offsetX: -50, - overflow: true, - }); -}; + //变电站标注样式 @@ -146,6 +123,7 @@ const vueGis = { iconArrays: [ ], + iconTextStyle: {}, //policon图标样式 polIconUrlArray: [ @@ -155,6 +133,7 @@ const vueGis = { ], //icon图标样式 iconUrlArray: [], + iconTextColor: '#ffffff', } }, @@ -164,12 +143,13 @@ const vueGis = { }, methods: { //加载地图 - loadMap (mapInfo, polygonArray, polIconUrlArray, iconArrays, iconUrlArray) { + loadMap (mapInfo, polygonArray, polIconUrlArray, iconArrays, iconUrlArray, iconTextStyle) { this.mapInfo = mapInfo this.polygonArray = polygonArray this.polIconUrlArray = polIconUrlArray this.iconArrays = iconArrays this.iconUrlArray = iconUrlArray + this.iconTextStyle = iconTextStyle //初始化地图 this.initMap() @@ -185,31 +165,37 @@ const vueGis = { //初始化多边形标注图层 this.initPolygonLayer() //加载当前园区的标注 - this.loadPolygon() + this.loadPolIcon() } if (this.showIconLayer) { //初始化icon图层 this.initIconLayer() + this.loadIcon() } }, //刷新地图 - async refreshMap (isRefreshView) { + async refreshMap (polygonArray, iconArrays) { + this.polygonArray = polygonArray + this.iconArrays = iconArrays - //加载组织数据 - await this.loadOrgData() + if (this.showPolygonLayer) { - //加载当前园区的标注 - await this.loadPolygon() + //加载当前园区的标注 + this.loadPolygon() + } + if (this.showPolIconLayer) { + + //加载当前园区的标注 + this.loadPolIcon() + } + + if (this.showIconLayer) { - //重置地图中心点 - if (isRefreshView) { - this.setMapLocation() - mapView.setCenter(this.centerPoint); - mapView.setZoom(this.zoom); + this.loadIcon() } @@ -323,15 +309,15 @@ const vueGis = { if (this.iconArrays && this.iconArrays.length > 0) { let iconFeatures = []; - this.iconArrays.forEach(oneIcon => { - + this.iconArrays.forEach((oneIcon, index) => { + let urlNum = this.getRndBetween(1, 3) //添加标注 let iconItem = new Feature({ geometry: new Point([oneIcon.longitude, oneIcon.latitude]), id: oneIcon.id, properties: { type: "icon", - info: { ...oneIcon.info } + info: { ...oneIcon } } }); @@ -339,9 +325,10 @@ const vueGis = { image: new Icon({ // anchor: [0.5, 0.5], // imgSize: [32, 32], - scale: 0.5, - src: iconUrlArray[oneIcon.values_.index - 1] - }) + // scale: 0.5, + src: this.iconUrlArray[oneIcon.urlIndex] + }), + text: this.createTextStyle(oneIcon) }); iconItem.setStyle(iconStyle); @@ -353,6 +340,15 @@ const vueGis = { } }, + //icon文字样式 + createTextStyle (feature) { + + let iconTextStyle = { ...this.iconTextStyle } + iconTextStyle.text = feature.values_.name + return new Text({ ...iconTextStyle }) + + }, + //初始化地图 initMap () { this.setMapLocation() @@ -385,9 +381,19 @@ const vueGis = { //目标加载到map中 }) + let that = this map.on('singleclick', function (e) { - // console.log(e.coordinate) - // console.log(transform(e.coordinate, 'EPSG:3857', 'EPSG:4326')); + const feature = map.forEachFeatureAtPixel(e.pixel, function (feature) { + return feature; + }); + if (feature) { + console.log(feature) + that.$emit('clickFeature', feature) + + } + + + }) //去除双击放大效果 @@ -472,6 +478,7 @@ const vueGis = { map.addLayer(polygonLayer) map.addInteraction(select); + }, //初始化多边形icon图层 @@ -491,6 +498,7 @@ const vueGis = { //初始化icon图层 initIconLayer () { + iconSource = new VectorSource({ //features: (new GeoJSON()).readFeatures(geojsonObject) }); @@ -501,9 +509,16 @@ const vueGis = { }); map.addLayer(iconLayer); + // select = new Select({ condition: click, }); + // map.addInteraction(select); + + // select.on('select', e => { + // this.$emit('clickFeature', e) + // }); }, + //取随机数 getRndBetween (lowerLimit, upperLimit) { return Math.floor(Math.random() * (upperLimit - lowerLimit + 1)) + lowerLimit;