Commit 3183856c authored by ninglx's avatar ninglx

wj-smartcity 济南反馈问题/展示内容统一修正提交,事件列表添加checkbox&展示逻辑修改,过长图表展示近六条等

parent c3a14e9b
...@@ -153,7 +153,7 @@ export default { ...@@ -153,7 +153,7 @@ export default {
{ label: "中车流量", prop: "trafficFlowB" }, { label: "中车流量", prop: "trafficFlowB" },
{ label: "大车流量", prop: "trafficFlowA" }, { label: "大车流量", prop: "trafficFlowA" },
{ label: "平均速度", prop: "speed" }, { label: "平均速度", prop: "speed" },
{ label: "时间占有率", prop: "timeOccupancy" }, { label: "平均时间占有率", prop: "timeOccupancy" },
{ label: "平均车头时距", prop: "vehheadTime" }, { label: "平均车头时距", prop: "vehheadTime" },
{ label: "平均车身间距", prop: "vehheadDist" }, { label: "平均车身间距", prop: "vehheadDist" },
{ label: "85位速度", prop: "v85" }, { label: "85位速度", prop: "v85" },
......
...@@ -135,7 +135,7 @@ export default { ...@@ -135,7 +135,7 @@ export default {
{ label: "队尾距离", prop: "teamTailDistance" }, { label: "队尾距离", prop: "teamTailDistance" },
{ label: "排队车辆数", prop: "queueNums" }, { label: "排队车辆数", prop: "queueNums" },
{ label: "车道内车辆数", prop: "carNums" }, { label: "车道内车辆数", prop: "carNums" },
{ label: "空间占有率", prop: "vehicleLengthRatio" }, { label: "平均空间占有率", prop: "vehicleLengthRatio" },
{ label: "平均速度", prop: "speed" }, { label: "平均速度", prop: "speed" },
{ label: "车辆分布情况", prop: "stdSpaceHeadway" }, { label: "车辆分布情况", prop: "stdSpaceHeadway" },
{ label: "头车速度", prop: "headSpeed" }, { label: "头车速度", prop: "headSpeed" },
......
...@@ -50,7 +50,6 @@ export default { ...@@ -50,7 +50,6 @@ export default {
queue: "25", queue: "25",
time: "12", time: "12",
}, },
{name: "相城大道与南天成路", race: "91", queue: "25", time: "12"},
{ {
name: "相城大道与朱径支路", name: "相城大道与朱径支路",
race: "91", race: "91",
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
class="wave-item" class="wave-item"
v-for="item in waveData" v-for="item in waveData"
:key="item.crossId" :key="item.crossId"
style="width: 100%;" style="width: 100%"
> >
<i class="item-icon"></i> <i class="item-icon"></i>
<div class="item-title"> <div class="item-title">
...@@ -29,29 +29,33 @@ ...@@ -29,29 +29,33 @@
</div> </div>
</div> </div>
</div> </div>
<div class="time-run-dash" v-if="contentData.areaDetailFlag" :style="{ <div
left: class="time-run-dash"
(770 / contentData.cycle) * contentData.pointerSecond - 10 + 'px', v-if="contentData.areaDetailFlag"
}"> :style="{
<div class="dash-line"> left: (770 / contentData.cycle) * contentData.pointerSecond - 10 + 'px',
}"
</div> >
<div class="dash-line"></div>
<div class="dash-secend">{{ contentData.pointerSecond }}s</div> <div class="dash-secend">{{ contentData.pointerSecond }}s</div>
</div> </div>
<div class="time-line" v-if="contentData.areaDetailFlag"> <div class="time-line" v-if="contentData.areaDetailFlag">
<!-- <div--> <!-- <div-->
<!-- class="line-pointer"--> <!-- class="line-pointer"-->
<!-- :style="{--> <!-- :style="{-->
<!-- left:--> <!-- left:-->
<!-- (770 / contentData.cycle) * contentData.pointerSecond - 10 + 'px',--> <!-- (770 / contentData.cycle) * contentData.pointerSecond - 10 + 'px',-->
<!-- }"--> <!-- }"-->
<!-- >--> <!-- >-->
<span style="position:absolute" :style="{ <span
style="position: absolute"
:style="{
left: left:
(770 / contentData.cycle) * contentData.pointerSecond - 10 + 'px', (770 / contentData.cycle) * contentData.pointerSecond - 10 + 'px',
}" }"
class="pointer-second"></span> class="pointer-second"
<!-- </div>--> ></span>
<!-- </div>-->
<span class="cycle-left">0s</span> <span class="cycle-left">0s</span>
<span class="cycle">{{ contentData.cycle }}s</span> <span class="cycle">{{ contentData.cycle }}s</span>
</div> </div>
...@@ -59,7 +63,7 @@ ...@@ -59,7 +63,7 @@
</template> </template>
<script> <script>
import {api_phaseByTimeList} from "@/common/api/crossControl.js"; import { api_phaseByTimeList } from "@/common/api/crossControl.js";
import wsMixins from "@/common/mixin/wsMixins.js"; import wsMixins from "@/common/mixin/wsMixins.js";
export default { export default {
...@@ -77,8 +81,8 @@ export default { ...@@ -77,8 +81,8 @@ export default {
"redFlashTime", "redFlashTime",
], ],
waveCoordPhaseData: [ waveCoordPhaseData: [
{second: 85, forward: 18, reverse: 20, width: 20}, { second: 85, forward: 18, reverse: 20, width: 20 },
{second: 85, forward: 38, reverse: 20, width: 20}, { second: 85, forward: 38, reverse: 20, width: 20 },
], ],
waveData: [ waveData: [
// { title: "相城大道与朱径支路交叉口", phaseData: [], speed: 52 }, // { title: "相城大道与朱径支路交叉口", phaseData: [], speed: 52 },
...@@ -104,7 +108,7 @@ export default { ...@@ -104,7 +108,7 @@ export default {
}, },
}, },
mounted() { mounted() {
console.log('contentData', this.contentData) console.log("contentData", this.contentData);
this.getCrossWs(); //赋值第一路口的crossId this.getCrossWs(); //赋值第一路口的crossId
// this.contentData.pointerSecond = 235; // this.contentData.pointerSecond = 235;
this.timeInterval = setInterval(() => { this.timeInterval = setInterval(() => {
...@@ -143,14 +147,19 @@ export default { ...@@ -143,14 +147,19 @@ export default {
// (item.distanceToNextCross / sum) * boxHeight + "px"; // (item.distanceToNextCross / sum) * boxHeight + "px";
// console.log((item.distanceToNextCross / sum) * boxHeight); // console.log((item.distanceToNextCross / sum) * boxHeight);
}); });
console.log(this.contentData.forwardGreenwaveList);
this.contentData.forwardGreenwaveList.forEach((item) => { this.contentData.forwardGreenwaveList.forEach((item) => {
item.offsetToEnd = item.offsetToStart + this.contentData.forwardWidth; item.offsetToEnd = item.offsetToStart + this.contentData.forwardWidth;
}); });
this.$nextTick(()=>{ this.$nextTick(() => {
document.getElementById("waveCanvas").style.left = `${document.getElementById('greenWaveDialog').getBoundingClientRect().left*-1}px` document.getElementById("waveCanvas").style.left = `${
document.getElementById("waveCanvas").style.top = `${document.getElementById('greenWaveDialog').getBoundingClientRect().top*-1}px` document.getElementById("greenWaveDialog").getBoundingClientRect()
}) .left * -1
}px`;
document.getElementById("waveCanvas").style.top = `${
document.getElementById("greenWaveDialog").getBoundingClientRect()
.top * -1
}px`;
});
setTimeout(() => { setTimeout(() => {
// this.draw(); // this.draw();
this.setGreenWaveLine(); this.setGreenWaveLine();
...@@ -180,6 +189,7 @@ export default { ...@@ -180,6 +189,7 @@ export default {
} else { } else {
endDiv = divs[i + 1]; endDiv = divs[i + 1];
} }
console.log("draw line...", startDiv, endDiv);
// 获取 div 元素的位置和大小信息 // 获取 div 元素的位置和大小信息
const startDivRect = startDiv.getBoundingClientRect(); const startDivRect = startDiv.getBoundingClientRect();
const endDivRect = endDiv.getBoundingClientRect(); const endDivRect = endDiv.getBoundingClientRect();
...@@ -197,7 +207,8 @@ export default { ...@@ -197,7 +207,8 @@ export default {
const endX = const endX =
endDivRect.left + endDivRect.left +
endXEachSecondW * endXEachSecondW *
data[i === divs.length - 1 ? divs.length - 1 : i + 1].offsetToStart; data[i === divs.length - 1 ? divs.length - 1 : i + 1]
.offsetToStart;
const endY = endDivRect.top; const endY = endDivRect.top;
if (type === "f" || type === "r") { if (type === "f" || type === "r") {
ctx.moveTo(startX, startY); ctx.moveTo(startX, startY);
...@@ -358,18 +369,18 @@ export default { ...@@ -358,18 +369,18 @@ export default {
//height: 100%; //height: 100%;
pointer-events: none; pointer-events: none;
} }
.time-run-dash{ .time-run-dash {
position: absolute; position: absolute;
padding-left: 196px; padding-left: 196px;
height: 100%; height: 100%;
width: 206px; width: 206px;
.dash-line{ .dash-line {
height: calc(100% - 20px); height: calc(100% - 20px);
width: 23px; width: 23px;
background-image: url("../../../../assets/images/signal/line-pointer.png"); background-image: url("../../../../assets/images/signal/line-pointer.png");
background-size: 100% 100%; background-size: 100% 100%;
} }
.dash-secend{ .dash-secend {
height: 20px; height: 20px;
line-height: 20px; line-height: 20px;
} }
...@@ -403,7 +414,6 @@ export default { ...@@ -403,7 +414,6 @@ export default {
width: 24px; width: 24px;
//height: 300px; //height: 300px;
height: 240px; height: 240px;
} }
.pointer-second { .pointer-second {
...@@ -431,7 +441,8 @@ export default { ...@@ -431,7 +441,8 @@ export default {
display: inline-block; display: inline-block;
width: 18px; width: 18px;
height: 17px; height: 17px;
background: url("../../../../assets/images/dialogImg/wave-icon.png") no-repeat; background: url("../../../../assets/images/dialogImg/wave-icon.png")
no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
} }
......
<template> <template>
<div class="full-w-h" style="display: flex;flex-direction: column;"> <div class="full-w-h" style="display: flex; flex-direction: column">
<div class="custom-form"> <div class="custom-form">
<label class="custom-form-label">事件类型: </label> <label class="custom-form-label">事件类型: </label>
<el-select highlight-current-row style="width: 120px;margin-right: 10px" @change="filterDataByType" <el-select
highlight-current-row
style="width: 120px; margin-right: 10px"
@change="filterDataByType"
v-model="value" v-model="value"
placeholder="请选择"> placeholder="请选择"
>
<el-option <el-option
v-for="item in options" v-for="item in options"
:key="item" :key="item"
:label="$store.state.dicts.EventType.find((it) => { :label="
$store.state.dicts.EventType.find((it) => {
return it.code == item; return it.code == item;
})?.name || item" })?.name || item
:value="item"> "
:value="item"
>
</el-option> </el-option>
</el-select> </el-select>
<label class="custom-form-label">时段选择: </label> <label class="custom-form-label">时段选择: </label>
...@@ -21,7 +28,8 @@ ...@@ -21,7 +28,8 @@
type="datetimerange" type="datetimerange"
range-separator="至" range-separator="至"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期"> end-placeholder="结束日期"
>
</el-date-picker> </el-date-picker>
</div> </div>
<el-table <el-table
...@@ -34,42 +42,47 @@ ...@@ -34,42 +42,47 @@
header-cell-class-name="custom-table-header-cell" header-cell-class-name="custom-table-header-cell"
@row-click="rowClick" @row-click="rowClick"
:data="listDataCopy" :data="listDataCopy"
ref="multipleTable"
:row-class-name="getRowClassName" :row-class-name="getRowClassName"
style="width: 100%;flex:1" style="width: 100%; flex: 1"
height="100%"> height="100%"
<!-- <el-table-column--> @selection-change="handleSelectionChange"
<!-- show-overflow-tooltip--> >
<!-- align="center"--> <!-- <el-table-column-->
<!-- label="事件编号">--> <!-- show-overflow-tooltip-->
<!-- <template slot-scope="scope">{{ occupancyValue(scope.row.eventId) }}</template>--> <!-- align="center"-->
<!-- </el-table-column>--> <!-- label="事件编号">-->
<el-table-column width="100" align="center" label="事件编号" <!-- <template slot-scope="scope">{{ occupancyValue(scope.row.eventId) }}</template>-->
type="index"> <!-- </el-table-column>-->
<el-table-column type="selection" width="55"> </el-table-column>
<el-table-column width="100" align="center" label="事件编号" type="index">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="eventType" prop="eventType"
align="center" align="center"
label="事件类型" label="事件类型"
show-overflow-tooltip> show-overflow-tooltip
<template slot-scope="scope">{{ translateDict(scope.row.eventType, 'EventType') }}</template> >
<template slot-scope="scope">{{
translateDict(scope.row.eventType, "EventType")
}}</template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="startTime" prop="startTime"
align="center" align="center"
label="时间" label="时间"
show-overflow-tooltip> show-overflow-tooltip
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column align="center" label="位置" show-overflow-tooltip>
align="center" <template slot-scope="scope">{{
label="位置" occupancyValue(scope.row.placeDesc)
show-overflow-tooltip> }}</template>
<template slot-scope="scope">{{ occupancyValue(scope.row.placeDesc) }}</template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column align="center" label="备注" show-overflow-tooltip>
align="center" <template slot-scope="scope">{{
label="备注" occupancyValue(scope.row.remark)
show-overflow-tooltip> }}</template>
<template slot-scope="scope">{{ occupancyValue(scope.row.remark) }}</template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
...@@ -77,80 +90,110 @@ ...@@ -77,80 +90,110 @@
<script> <script>
import Vue from "vue"; import Vue from "vue";
import * as mapTool from '@/utils/mapboxTools' import * as mapTool from "@/utils/mapboxTools";
import {getHoloEventList} from "@/dao/optApi"; import { getHoloEventList } from "@/dao/optApi";
import {occupancyValue} from "@/utils"; import { occupancyValue } from "@/utils";
import eventPopupVue from "../../mapPopup/eventPopup.vue"; import eventPopupVue from "../../mapPopup/eventPopup.vue";
const EventPopupVue = Vue.extend(eventPopupVue); const EventPopupVue = Vue.extend(eventPopupVue);
export default { export default {
name: 'eventComp', name: "eventComp",
props: ['crossData'], props: ["crossData"],
data() { data() {
return { return {
options: [], options: [],
value: '', value: "",
dateTimeRange: [], dateTimeRange: [],
tableData: [], tableData: [],
listDataCopy: [], listDataCopy: [],
loading: true, loading: true,
} multipleSelection: [],
};
}, },
mounted() { mounted() {
if (time_config.homepage_eventTime) { if (time_config.homepage_eventTime) {
this.dateTimeRange = [ this.dateTimeRange = [
new Date(time_config.homepage_eventTime[0]), new Date(time_config.homepage_eventTime[0]),
new Date(time_config.homepage_eventTime[1]) new Date(time_config.homepage_eventTime[1]),
]; ];
} else { } else {
this.dateTimeRange = [ this.dateTimeRange = [
new Date( new Date(new Date().setTime(new Date().getTime() - 3600 * 1000 * 24)),
new Date().setTime(new Date().getTime() - 3600 * 1000 * 24) new Date(),
),
new Date()
]; ];
} }
this.getData() this.getData();
}, },
methods: { methods: {
showEventPoint(events){
let features = []
for (let item of events) {
if (item.lng && item.lat) {
features.push(turf.point([item.lng, item.lat], item))
}
}
// features.push(turf.point([map.getCenter().lng,map.getCenter().lat],{a:1}))
let geo = turf.featureCollection(features)
mapTool.addOrUpdateEventPoint1(window.map, geo)
window.map.off('click', 'eventPoint1', this.eventPointClick)
window.map.on('click', 'eventPoint1', this.eventPointClick)
},
eventPointClick(e) {
mapTool.addPopupEvent(window.map, e.features[0].properties)
},
handleSelectionChange(val) {
this.multipleSelection = val;
this.showEventPoint(this.multipleSelection)
},
translateDict(value, type) { translateDict(value, type) {
let result = value let result = value;
let target = this.$store.state.dicts[type].find((dict) => { let target = this.$store.state.dicts[type].find((dict) => {
return dict.code == value; return dict.code == value;
}) });
if (target) { if (target) {
result = target.name result = target.name;
} }
return result return result;
}, },
occupancyValue, occupancyValue,
sliceTableAndRender(){
let sliceSelection = this.listDataCopy.slice(0, 10);
this.$nextTick(() => {
for (let i = 0; i < this.listDataCopy.length; i++) {
if (i <= 9) {
this.$refs.multipleTable.toggleRowSelection(this.listDataCopy[i], true);
}
}
this.showEventPoint(sliceSelection)
});
},
filterDataByType() { filterDataByType() {
this.listDataCopy = this.tableData.filter(item => { this.listDataCopy = this.tableData.filter((item) => {
return this.value === item.eventType return this.value === item.eventType;
}) });
this.$emit('showEventPoint', this.listDataCopy) this.sliceTableAndRender()
}, },
getData() { getData() {
this.loading = true this.loading = true;
getHoloEventList({ getHoloEventList({
crossId: this.crossData.id, crossId: this.crossData.id,
"end": this.dateTimeRange[1].toLocaleString().replaceAll('/', '-'), end: this.dateTimeRange[1].toLocaleString().replaceAll("/", "-"),
"start": this.dateTimeRange[0].toLocaleString().replaceAll('/', '-'), start: this.dateTimeRange[0].toLocaleString().replaceAll("/", "-"),
}).then(res => { }).then((res) => {
this.loading = false this.loading = false;
this.$emit('showEventPoint', res.content) this.tableData = res.content;
this.tableData = res.content this.listDataCopy = JSON.parse(JSON.stringify(this.tableData));
this.listDataCopy = JSON.parse(JSON.stringify(this.tableData))
this.options = res.content.reduce((a, b) => { this.options = res.content.reduce((a, b) => {
if (!a.includes(b.eventType)) { if (!a.includes(b.eventType)) {
a.push(b.eventType) a.push(b.eventType);
} }
return a return a;
}, []) }, []);
}) this.sliceTableAndRender()
});
}, },
rowClick(row) { rowClick(row) {
mapTool.addPopupEvent(window.map, row) mapTool.addPopupEvent(window.map, row);
}, },
getRowClassName(e) { getRowClassName(e) {
if (e.rowIndex % 2 !== 0) { if (e.rowIndex % 2 !== 0) {
...@@ -159,8 +202,8 @@ export default { ...@@ -159,8 +202,8 @@ export default {
return "row-odd"; return "row-odd";
} }
}, },
} },
} };
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
...@@ -170,7 +213,8 @@ export default { ...@@ -170,7 +213,8 @@ export default {
align-items: center; align-items: center;
} }
::v-deep .el-range-input, ::v-deep .el-input__inner { ::v-deep .el-range-input,
::v-deep .el-input__inner {
background-color: transparent; background-color: transparent;
color: white; color: white;
} }
......
...@@ -205,8 +205,8 @@ export default { ...@@ -205,8 +205,8 @@ export default {
title, title,
dataZoom: { dataZoom: {
type: "inside", type: "inside",
startValue: Object.keys(yDatas).length - 6, startValue: xData.length - 6,
endValue: Object.keys(yDatas).length - 1, endValue:xData.length-1,
}, },
tooltip: { tooltip: {
enterable: true, enterable: true,
...@@ -327,9 +327,9 @@ export default { ...@@ -327,9 +327,9 @@ export default {
renderTurn() { renderTurn() {
let filterData = this.allTurnData.filter(item => { let filterData = this.allTurnData.filter(item => {
return item.fRidDir === this.selectVal return item.fRidDir === this.selectVal
}) }).reverse()
let xData = filterData.reduce((a,b) => { let xData = filterData.reduce((a,b) => {
let time = new Date(b.windowEndTime).toLocaleTimeString() let time = new Date(b.windowEndTime).toLocaleTimeString().slice(0,5)
if(!a.includes(time)){ if(!a.includes(time)){
a.push(time) a.push(time)
} }
...@@ -361,8 +361,8 @@ export default { ...@@ -361,8 +361,8 @@ export default {
title, title,
dataZoom: { dataZoom: {
type: "inside", type: "inside",
startValue: Object.keys(yDatas).length - 6, startValue: xData.length - 6,
endValue: Object.keys(yDatas).length - 1, endValue:xData.length-1,
}, },
color: colors, color: colors,
tooltip: { tooltip: {
......
...@@ -229,8 +229,8 @@ export default { ...@@ -229,8 +229,8 @@ export default {
title, title,
dataZoom: { dataZoom: {
type: "inside", type: "inside",
startValue: Object.keys(yDatas).length - 6, startValue: xData.length - 6,
endValue: Object.keys(yDatas).length - 1, endValue:xData.length-1,
}, },
color: this.colors, color: this.colors,
tooltip: { tooltip: {
...@@ -378,8 +378,8 @@ export default { ...@@ -378,8 +378,8 @@ export default {
title, title,
dataZoom: { dataZoom: {
type: "inside", type: "inside",
startValue: Object.keys(yDatas).length - 6, startValue: xData.length - 6,
endValue: Object.keys(yDatas).length - 1, endValue:xData.length-1,
}, },
color: [ color: [
"rgba(24, 144, 255, 1)", "rgba(24, 144, 255, 1)",
...@@ -552,8 +552,8 @@ export default { ...@@ -552,8 +552,8 @@ export default {
title, title,
dataZoom: { dataZoom: {
type: "inside", type: "inside",
startValue: Object.keys(yDatas).length - 6, startValue: xData.length - 6,
endValue: Object.keys(yDatas).length - 1, endValue:xData.length-1,
}, },
color: [ color: [
"rgba(24, 144, 255, 1)", "rgba(24, 144, 255, 1)",
......
...@@ -88,8 +88,8 @@ export default { ...@@ -88,8 +88,8 @@ export default {
title, title,
dataZoom: { dataZoom: {
type: "inside", type: "inside",
startValue: Object.keys(this.chartResult).length - 6, startValue: this.xData.length - 6,
endValue: Object.keys(this.chartResult).length - 1, endValue:this.xData.length-1,
}, },
tooltip: { tooltip: {
enterable: true, enterable: true,
......
...@@ -179,17 +179,6 @@ export default { ...@@ -179,17 +179,6 @@ export default {
} }
}); });
}, },
timeSetSort(time) {
// 使用 Set 进行去重
const uniqueTimeStrings = [...new Set(time)];
// 使用 sort 方法进行排序
const sortedTimeStrings = uniqueTimeStrings.sort((a, b) => {
const timeA = new Date(`2000-01-01 ${a}`);
const timeB = new Date(`2000-01-01 ${b}`);
return timeA - timeB;
});
return sortedTimeStrings;
},
getChart(data) { getChart(data) {
const xData = [...new Set(data.map((item) => item.metricTime))]; const xData = [...new Set(data.map((item) => item.metricTime))];
// const xData = metricsList.map((item) => item.metricTime); // const xData = metricsList.map((item) => item.metricTime);
......
...@@ -8,11 +8,15 @@ ...@@ -8,11 +8,15 @@
element-loading-background="rgba(0,0,0, 0.4)" element-loading-background="rgba(0,0,0, 0.4)"
> >
<div class="item-txt">详细指标查询</div> <div class="item-txt">详细指标查询</div>
<div class="content-container" style="flex: 1;display: flex;flex-direction: column"> <div
<div class="forms" style="display: flex;"> class="content-container"
style="flex: 1; display: flex; flex-direction: column"
>
<div class="forms" style="display: flex">
<div class="select-box"> <div class="select-box">
<label class="custom-form-label">路口名称:</label> <label class="custom-form-label">路口名称:</label>
<el-select <el-select
style="margin-right: 10px"
v-model="crossModel" v-model="crossModel"
placeholder="请选择路口" placeholder="请选择路口"
class="custom-form-input" class="custom-form-input"
...@@ -42,7 +46,7 @@ ...@@ -42,7 +46,7 @@
</el-option> </el-option>
</el-select> </el-select>
<el-select <el-select
style="margin-left: 10px;" style="margin-left: 10px"
multiple multiple
collapse-tags collapse-tags
v-model="scopeListModel" v-model="scopeListModel"
...@@ -94,16 +98,14 @@ ...@@ -94,16 +98,14 @@
</div> </div>
<div class="line-chart noDataMsg" v-if="!indexModel">暂无数据</div> <div class="line-chart noDataMsg" v-if="!indexModel">暂无数据</div>
<div class="line-chart" ref="chartLine" v-else></div> <div class="line-chart" ref="chartLine" v-else></div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import {bottomMenu, bottomCurve} from "@/common/api/signalEvaluation.js"; import { bottomMenu, bottomCurve } from "@/common/api/signalEvaluation.js";
import {formatDateTime} from "@/common/js/utils.js"; import { formatDateTime } from "@/common/js/utils.js";
import {getFontSize} from "@/config/holo/fontSize"; import { getFontSize } from "@/config/holo/fontSize";
export default { export default {
data() { data() {
...@@ -115,10 +117,10 @@ export default { ...@@ -115,10 +117,10 @@ export default {
scopeListModel: [], scopeListModel: [],
scopeListOption: [], scopeListOption: [],
scopeOption: [ scopeOption: [
{label: "路口", value: 0}, { label: "路口", value: 0 },
{label: "进口道", value: 1}, { label: "进口道", value: 1 },
{label: "方向", value: 2}, { label: "方向", value: 2 },
{label: "车道", value: 3}, { label: "车道", value: 3 },
], ],
xData: [], xData: [],
treeModel: "", treeModel: "",
...@@ -127,9 +129,9 @@ export default { ...@@ -127,9 +129,9 @@ export default {
timeModel: 5, timeModel: 5,
indexModel: "", indexModel: "",
timeOptions: [ timeOptions: [
{label: "5min", value: 5}, { label: "5min", value: 5 },
{label: "15min", value: 15}, { label: "15min", value: 15 },
{label: "30min", value: 30}, { label: "30min", value: 30 },
], ],
// indexOptions: [ // indexOptions: [
// { code: "1", name: "不停车通过率" }, // { code: "1", name: "不停车通过率" },
...@@ -144,31 +146,15 @@ export default { ...@@ -144,31 +146,15 @@ export default {
checkStrictly: true, checkStrictly: true,
multiple: true, multiple: true,
}, },
treeData: [
{
value: "路口",
name: "路口",
children: [
{
value: "进口道",
name: "进口道",
children: [
{value: "", name: ""},
{value: "", name: "", children: []},
],
},
],
},
],
dirObj: { dirObj: {
"1": "北进口", 1: "北进口",
"2": "东北进口", 2: "东北进口",
"3": "东进口", 3: "东进口",
"4": "东南进口", 4: "东南进口",
"5": "南进口", 5: "南进口",
"6": "西南进口", 6: "西南进口",
"7": "西进口", 7: "西进口",
"8": "西北进口", 8: "西北进口",
}, },
turnObj: { turnObj: {
u: "掉头", u: "掉头",
...@@ -180,8 +166,7 @@ export default { ...@@ -180,8 +166,7 @@ export default {
}; };
}, },
props: ["date", "detailApiData", "areaObj", "indexOption"], props: ["date", "detailApiData", "areaObj", "indexOption"],
mounted() { mounted() {},
},
watch: { watch: {
date(val) { date(val) {
this.dateAll = [ this.dateAll = [
...@@ -198,7 +183,7 @@ export default { ...@@ -198,7 +183,7 @@ export default {
// this.indexModel = this.indexOption?.[ // this.indexModel = this.indexOption?.[
// this.indexOption.length - 1 // this.indexOption.length - 1
// ].metricName; // ].metricName;
this.indexModel = '平均速度' this.indexModel = "平均速度";
this.crossOption = this.areaObj.crossList; this.crossOption = this.areaObj.crossList;
if (this.crossOption.length) { if (this.crossOption.length) {
this.crossModel = this.crossOption[0].crossId; this.crossModel = this.crossOption[0].crossId;
...@@ -208,7 +193,6 @@ export default { ...@@ -208,7 +193,6 @@ export default {
]; ];
this.initLineData(); this.initLineData();
} }
}, },
scopeChange() { scopeChange() {
this.scopeListModel = []; this.scopeListModel = [];
...@@ -242,7 +226,7 @@ export default { ...@@ -242,7 +226,7 @@ export default {
return data; return data;
}, },
initLineData() { initLineData() {
if (!this.indexModel) return if (!this.indexModel) return;
this.detailedIndexLoading = true; this.detailedIndexLoading = true;
bottomCurve({ bottomCurve({
crossId: this.crossModel, crossId: this.crossModel,
...@@ -253,7 +237,7 @@ export default { ...@@ -253,7 +237,7 @@ export default {
startTime: this.dateAll[0], startTime: this.dateAll[0],
endTime: this.dateAll[1], endTime: this.dateAll[1],
}).then((res) => { }).then((res) => {
console.log('bottom data', res.data) console.log("bottom data", res.data);
this.detailedIndexLoading = false; this.detailedIndexLoading = false;
if (res && res.data) { if (res && res.data) {
const data = res.data.content.map((item) => { const data = res.data.content.map((item) => {
...@@ -264,17 +248,6 @@ export default { ...@@ -264,17 +248,6 @@ export default {
} }
}); });
}, },
timeSetSort(time) {
// 使用 Set 进行去重
const uniqueTimeStrings = [...new Set(time)];
// 使用 sort 方法进行排序
const sortedTimeStrings = uniqueTimeStrings.sort((a, b) => {
const timeA = new Date(`2000-01-01 ${a}`);
const timeB = new Date(`2000-01-01 ${b}`);
return timeA - timeB;
});
return sortedTimeStrings;
},
getChart(data) { getChart(data) {
const xData = [...new Set(data.map((item) => item.metricTime))]; const xData = [...new Set(data.map((item) => item.metricTime))];
// const xData = metricsList.map((item) => item.metricTime); // const xData = metricsList.map((item) => item.metricTime);
...@@ -287,10 +260,20 @@ export default { ...@@ -287,10 +260,20 @@ export default {
objData[item.scopeName].push(item.value || 0); objData[item.scopeName].push(item.value || 0);
}); });
const seriesData = []; const seriesData = [];
let colors = ['#00933a','#ff8200','#c0cfc5','#f5da3e', let colors = [
'#5b45ff','#ed4438','#aceb2d','#5e6c52', "#00933a",
'#458fff','#c3b5f0','#9a5b67'] "#ff8200",
legendData.forEach((item,index) => { "#c0cfc5",
"#f5da3e",
"#5b45ff",
"#ed4438",
"#aceb2d",
"#5e6c52",
"#458fff",
"#c3b5f0",
"#9a5b67",
];
legendData.forEach((item, index) => {
seriesData.push({ seriesData.push({
yAxisIndex: 0, yAxisIndex: 0,
name: item, name: item,
...@@ -300,7 +283,7 @@ export default { ...@@ -300,7 +283,7 @@ export default {
showSymbol: false, showSymbol: false,
lineStyle: { lineStyle: {
width: 2, width: 2,
color: colors[index] color: colors[index],
// color: obj[item].color, // color: obj[item].color,
}, },
areaStyle: { areaStyle: {
...@@ -316,7 +299,7 @@ export default { ...@@ -316,7 +299,7 @@ export default {
}, },
{ {
offset: 1, offset: 1,
color: colors[index] , // 0% 处的颜色 color: colors[index], // 0% 处的颜色
}, },
], ],
false false
...@@ -330,7 +313,7 @@ export default { ...@@ -330,7 +313,7 @@ export default {
// color: colors, // color: colors,
// color: colorList, // color: colorList,
legend: { legend: {
inactiveColor:'rgba(255,255,255,0.7)', inactiveColor: "rgba(255,255,255,0.7)",
right: 0, right: 0,
textStyle: { textStyle: {
color: "rgba(255,255,255,0.9)", color: "rgba(255,255,255,0.9)",
...@@ -342,17 +325,17 @@ export default { ...@@ -342,17 +325,17 @@ export default {
bottom: 0, bottom: 0,
left: 0, left: 0,
top: 40, top: 40,
containLabel: true containLabel: true,
}, },
tooltip: { tooltip: {
trigger: "axis", trigger: "axis",
backgroundColor: 'rgba(0,0,0,0.8)', backgroundColor: "rgba(0,0,0,0.8)",
borderWidth: 0, borderWidth: 0,
textStyle: { textStyle: {
fontSize: getFontSize(12), fontSize: getFontSize(12),
color: 'white', color: "white",
}, },
confine:true confine: true,
// formatter: (params) => { // formatter: (params) => {
// return `${this.indexModel} : ${params[0].value}`; // return `${this.indexModel} : ${params[0].value}`;
// }, // },
...@@ -365,7 +348,7 @@ export default { ...@@ -365,7 +348,7 @@ export default {
type: "category", type: "category",
boundaryGap: false, boundaryGap: false,
// prettier-ignore // prettier-ignore
data: xData data: xData,
}, },
{ {
type: "category", type: "category",
...@@ -383,9 +366,9 @@ export default { ...@@ -383,9 +366,9 @@ export default {
}, },
splitLine: { splitLine: {
lineStyle: { lineStyle: {
color: 'rgba(255,255,255,0.2)' color: "rgba(255,255,255,0.2)",
} },
} },
}, },
{ {
type: "value", type: "value",
...@@ -394,9 +377,9 @@ export default { ...@@ -394,9 +377,9 @@ export default {
}, },
splitLine: { splitLine: {
lineStyle: { lineStyle: {
color: 'rgba(255,255,255,0.2)' color: "rgba(255,255,255,0.2)",
} },
} },
}, },
], ],
series: seriesData, series: seriesData,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment