From f96e393e62b4c7496f7ace44b6aa5abb69ae58df Mon Sep 17 00:00:00 2001 From: zhanghua <314079846@qq.com> Date: 星期一, 11 九月 2023 21:54:55 +0800 Subject: [PATCH] bug修改 --- src/views/intelligentPatrol/trendAnalysis/index.vue | 342 ++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 241 insertions(+), 101 deletions(-) diff --git a/src/views/intelligentPatrol/trendAnalysis/index.vue b/src/views/intelligentPatrol/trendAnalysis/index.vue index 5d5a93a..b827ad9 100644 --- a/src/views/intelligentPatrol/trendAnalysis/index.vue +++ b/src/views/intelligentPatrol/trendAnalysis/index.vue @@ -1,67 +1,87 @@ <template> - <div class="trend-analysis"> - <!-- 渚ц竟鏍� --> - <div class="trend-side"> - <!-- 杈撳叆鍖哄煙 --> - <div class="trend-input-area"> - <span class="trend-title">瓒嬪娍鍒嗘瀽</span> - <el-form ref="form" :model="search" label-width="6vw"> -<!-- <el-form-item label="绫诲瀷鏌ヨ">--> -<!-- <el-select v-model="search.type" @change="searchList" placeholder="鍐呭淇℃伅">--> -<!-- <el-option v-for="option in categoryOptions" :key="option.value" :value="option.value" :label="option.label" ></el-option>--> -<!-- </el-select>--> -<!-- </el-form-item>--> - <el-form-item class="time-area" label="鏃堕棿鑼冨洿"> - <el-date-picker @change="searchList" start-placeholder="寮�濮嬫椂闂�" end-placeholder="缁撴潫鏃堕棿" v-model="search.timeRange" - type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss"> - </el-date-picker> - </el-form-item> - </el-form> - </div> - <!-- 鏁版嵁灞曠ず --> - <div class="trend-data-show"> - <!-- 鐐逛綅鍒囨崲 --> - <div class="trend-data-header"> - <el-button type="text" @click="tabChange(1)">楂樺彂鐐逛綅</el-button> - <el-button type="text" @click="tabChange(2)">棣栨杩濊鐐逛綅</el-button> + <div style="height: 95%"> + <div class="trend-title">瓒嬪娍鍒嗘瀽</div> + <div class="trend-analysis"> + <div class="trend-side"> + <!-- 杈撳叆鍖哄煙 --> + <div class="trend-input-area"> + <el-form ref="form" :model="search" label-width="6vw"> + <!-- <el-form-item label="绫诲瀷鏌ヨ">--> + <!-- <el-select v-model="search.type" @change="searchList" placeholder="鍐呭淇℃伅">--> + <!-- <el-option v-for="option in categoryOptions" :key="option.value" :value="option.value" :label="option.label" ></el-option>--> + <!-- </el-select>--> + <!-- </el-form-item>--> + <el-form-item class="time-area" label="鏃堕棿鑼冨洿"> + <el-date-picker + @change="searchList" + start-placeholder="寮�濮嬫椂闂�" + end-placeholder="缁撴潫鏃堕棿" + v-model="search.timeRange" + type="datetimerange" + value-format="yyyy-MM-dd HH:mm:ss" + > + </el-date-picker> + </el-form-item> + </el-form> </div> - <!-- 瀵瑰簲鏁版嵁 --> - <div class="trend-data-main"> - <div class="point-item" v-for="item in trendAnalysisList" :key="item.id" @click="pointClick(item)"> - <span class="point-name">{{ item.name }}</span> - <span>{{ item.count }}</span> + <!-- 鏁版嵁灞曠ず --> + <div class="trend-data-show"> + <!-- 鐐逛綅鍒囨崲 --> + <div class="trend-data-header"> + <el-button type="text" @click="tabChange(1)">楂樺彂鐐逛綅</el-button> + <el-button type="text" @click="tabChange(2)" + >棣栨杩濊鐐逛綅</el-button + > + </div> + <!-- 瀵瑰簲鏁版嵁 --> + <div class="trend-data-main"> + <div + class="point-item" + v-for="item in trendAnalysisList" + :key="item.id" + @click="pointClick(item)" + > + <span class="point-name">{{ item.name }}</span> + <span>{{ item.count }}</span> + </div> </div> </div> </div> - </div> - <div class="trend-main"> - - <div class="map"> - <MyMap :point="point" :zoom="zoom" :mark="mark" @fatherMethod="fatherMethod"></MyMap> + <div class="trend-main"> + <div class="map"> + <MyMap + :point="point" + :zoom="zoom" + :mark="mark" + @fatherMethod="fatherMethod" + ></MyMap> + </div> </div> - - </div> - <el-dialog - title="鎻愮ず" + <el-dialog + title="瓒嬪娍鍥�" :visible.sync="echartsDialogVisible" - width="30%" - :before-close="handleClose"> - <div style="height: 500px;width: 500px;" id="echarts"> - </div> - </el-dialog> + :before-close="handleClose" + > + <div style="display: flex"> + <div style="height: 500px; width: 500px" id="echarts"></div> + <div style="height: 500px; width: 500px" id="typeEcharts"></div> + </div> + </el-dialog> + </div> </div> </template> <script> -import * as echarts from 'echarts' +import * as echarts from "echarts"; import basecase from "@/api/operate/basecase"; import { CATEGOTY } from "@/utils/helper"; -import MyMap from "@/components/map"; +// import MyMap from "@/components/map"; +import MyMap from "@/components/map/leafletMap.vue"; export default { - components :{MyMap}, + components: { MyMap }, created() { - this.searchList() + this.searchList(); }, mounted() { @@ -71,16 +91,19 @@ computed: { categoryOptions() { return CATEGOTY; - } + }, }, data() { return { - echartsList:null, - echartsDialogVisible:false, + echartsDateList: [], + echartsDataList: null, + echartsTypeList: [], + echartsTypeDataList: null, + echartsDialogVisible: false, search: { type: null, - timeRange: null + timeRange: null, }, timeRangeFlag: false, trendAnalysisList: [], @@ -89,40 +112,128 @@ pointName: null, point: { x: "119.27179890", y: "28.59027084" }, mark: null, - zoom: 15, - } + zoom: 13, + }; }, methods: { - fatherMethod(){ - console.log('7777') - this.echartsDialogVisible=true - this.$nextTick(function (){ - this.renderEchart(this.echartsList); - - }) + fatherMethod() { + this.echartsDialogVisible = true; + this.$nextTick(function () { + this.renderEchart(this.echartsDateList, this.echartsDataList); + }); }, - handleClose(){ - this.echartsDialogVisible = false + handleClose() { + this.echartsDialogVisible = false; }, - renderEchart(dataList) { + renderEchart(dateTimeList, dataList) { if (!this.echarts) { - this.echarts = echarts.init(document.getElementById('echarts')); + this.echarts = echarts.init(document.getElementById("echarts")); } // 缁樺埗鍥捐〃 this.echarts.setOption({ xAxis: { - name: '鏃�/鍛�', + name: "鏃�/鍛�", + data: dateTimeList, }, yAxis: { - name: '鎶ヨ閲�(娆�)', + name: "鎶ヨ閲�(娆�)", }, series: [ { data: dataList, - type: 'line', - smooth: true - } - ] + type: "line", + smooth: true, + }, + ], + }); + + let typeEcharts = echarts.init(document.getElementById("typeEcharts")); + + let option = { + series: this.echartsTypeDataList.map(function (data, idx) { + return { + type: "pie", + radius: [20, 60], + left: "center", + width: 400, + itemStyle: { + borderColor: "#fff", + borderWidth: 1, + }, + label: { + alignTo: "edge", + formatter: "{name|{b}}\n{count|{c} 浠秨", + minMargin: 5, + edgeDistance: 10, + lineHeight: 15, + rich: { + time: { + fontSize: 10, + color: "#999", + }, + }, + }, + labelLine: { + length: 5, + length2: 0, + maxSurfaceAngle: 80, + }, + data: data, + }; + }), + }; + let data = []; + this.echartsTypeDataList.forEach((item) => { + data.push({ + name: item.name, + value: item.count, + }); + }); + + typeEcharts.setOption({ + series: [ + { + type: "pie", + radius: [20, 60], + left: "center", + width: 400, + itemStyle: { + borderColor: "#fff", + borderWidth: 1, + }, + label: { + alignTo: "edge", + formatter: "{name|{b}}\n{value|{c} 浠秨", + minMargin: 5, + edgeDistance: 5, + lineHeight: 15, + rich: { + time: { + fontSize: 10, + color: "#999", + }, + }, + }, + labelLine: { + length: 15, + length2: 0, + maxSurfaceAngle: 80, + }, + data: data, + // labelLayout: function (params) { + // const isLeft = params.labelRect.x < typeEcharts.getWidth() / 2; + // const points = params.labelLinePoints; + // // Update the end point. + // points[2][0] = isLeft + // ? params.labelRect.x + // : params.labelRect.x + params.labelRect.width; + // return { + // labelLinePoints: points, + // }; + // }, + // data: this.echartsTypeDataList, + }, + ], }); }, async searchList() { @@ -130,10 +241,11 @@ const trendAnalysisParam = { startTime, endTime, - type: this.search.type - } - this.trendAnalysisList = this.highFlag ? await basecase.getTrendAnalysisData(trendAnalysisParam) - : await basecase.getFirstTrendAnalysisData(trendAnalysisParam); + type: this.search.type, + }; + this.trendAnalysisList = this.highFlag + ? await basecase.getTrendAnalysisData(trendAnalysisParam) + : await basecase.getFirstTrendAnalysisData(trendAnalysisParam); }, tabChange(params) { @@ -144,27 +256,54 @@ pointClick(data) { this.pointName = data.name; this.point = { - x: data.longitude, - y: data.latitude, - }; - this.zoom = 19; + x: data.longitude, + y: data.latitude, + }; + this.zoom = 18; this.mark = { title: data.address }; - basecase.getPointTrendAnalysisData({ longitude: data.longitude,latitude: data.latitude }) - .then(res => { - // const countList = res.map(item => +item.count); - this.echartsList= res.map(item => +item.count); - // this.renderEchart(countList); - }) - .catch(err => this.$message.error(err)) - } + + const [startTime, endTime] = this.search.timeRange ?? [null, null]; + basecase + .getPointTrendAnalysisData({ + pointId: data.id, + startTime: startTime, + endTime: endTime, + }) + .then((res) => { + // const countList = res.map(item => +item.count); + this.echartsDataList = []; + this.echartsDateList = []; + res.timeList.forEach((item) => { + this.echartsDataList.push(item.count); + this.echartsDateList.push(item.dateTime); + }); + + this.echartsTypeDataList = res.typeList; + // this.echartsTypeDataList = []; + // this.echartsTypeList = []; + // res.typeList.forEach((item) => { + // this.echartsTypeDataList.push(item.count); + // this.echartsTypeList.push(item.name); + // }); + // this.renderEchart(countList); + }) + .catch((err) => this.$message.error(err)); + }, }, -} +}; </script> <style lang="scss" scoped> +.trend-title { + color: #4b9bb7; + line-height: 40px; + font-size: 26px; + text-align: left; + margin-left: 20px; +} .trend-analysis { height: 100%; - padding: 10vh 0vw; + padding: 10px 0px; color: #4b9bb7; display: flex; @@ -172,14 +311,14 @@ width: 30vw; text-align: left; height: 100%; - border: 1px solid #09152f; + // border: 1px solid #09152f; .trend-input-area { display: flex; flex-direction: column; padding: 0 2vw; - &>span { + & > span { line-height: 40px; } @@ -199,10 +338,10 @@ .el-button { flex: 1; - border: 2px solid #09152f; + // border: 2px solid #09152f; } - .el-button+.el-button { + .el-button + .el-button { margin: 0; } } @@ -212,7 +351,7 @@ display: flex; padding: 0 2vw; justify-content: space-between; - .point-name{ + .point-name { cursor: pointer; color: #66b1ff; } @@ -223,22 +362,23 @@ .trend-main { flex: 1; - border: 1px solid #09152f; + // border: 1px solid #09152f; display: flex; + margin-left: 20px; .trend-main-echarts { width: 500px; height: 400px; } } - .trend-footer { - ::v-deep .el-range-input { - background-color: #09152f; - } - } + // .trend-footer { + // ::v-deep .el-range-input { + // // background-color: #09152f; + // } + // } } .map { height: 100%; - min-width: 80%; + width: 98%; } </style> -- Gitblit v1.8.0