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",
......
...@@ -2,10 +2,10 @@ ...@@ -2,10 +2,10 @@
<div class="green-wave" ref="greenWave"> <div class="green-wave" ref="greenWave">
<canvas id="waveCanvas"></canvas> <canvas id="waveCanvas"></canvas>
<div <div
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">
...@@ -16,11 +16,11 @@ ...@@ -16,11 +16,11 @@
</div> </div>
<div class="wave-phase-box"> <div class="wave-phase-box">
<div <div
:class="{ coordPhaseNo: phase.isCoordinate === 1 }" :class="{ coordPhaseNo: phase.isCoordinate === 1 }"
class="wave-phase" class="wave-phase"
v-for="phase in item.greenwavePhaseList" v-for="phase in item.greenwavePhaseList"
:key="phase.id" :key="phase.id"
:style="{ :style="{
flex: phase.seconds / item.allCyclelen, flex: phase.seconds / item.allCyclelen,
display: phase.seconds === 0 ? 'none' : 'inline-block', display: phase.seconds === 0 ? 'none' : 'inline-block',
}" }"
...@@ -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
left: style="position: absolute"
(770 / contentData.cycle) * contentData.pointerSecond - 10 + 'px', :style="{
}" left:
class="pointer-second"></span> (770 / contentData.cycle) * contentData.pointerSecond - 10 + 'px',
<!-- </div>--> }"
class="pointer-second"
></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();
...@@ -191,34 +201,35 @@ export default { ...@@ -191,34 +201,35 @@ export default {
if (data) { if (data) {
const startXEachSecondW = startDivRect.width / this.contentData.cycle; const startXEachSecondW = startDivRect.width / this.contentData.cycle;
const startX = const startX =
startDivRect.left + startXEachSecondW * data[i].offsetToStart; startDivRect.left + startXEachSecondW * data[i].offsetToStart;
const startY = startDivRect.top; const startY = startDivRect.top;
const endXEachSecondW = endDivRect.width / this.contentData.cycle; const endXEachSecondW = endDivRect.width / this.contentData.cycle;
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);
ctx.lineTo(endX, endY); ctx.lineTo(endX, endY);
} else if (type === "fw") { } else if (type === "fw") {
ctx.moveTo( ctx.moveTo(
startDivRect.left + startXEachSecondW * data[i].offsetToEnd, startDivRect.left + startXEachSecondW * data[i].offsetToEnd,
startY startY
); );
ctx.lineTo( ctx.lineTo(
endX + endXEachSecondW * this.contentData.forwardWidth, endX + endXEachSecondW * this.contentData.forwardWidth,
endY endY
); );
} else if (type === "rw") { } else if (type === "rw") {
ctx.moveTo( ctx.moveTo(
startX - startXEachSecondW * this.contentData.reverseWidth, startX - startXEachSecondW * this.contentData.reverseWidth,
startY startY
); );
ctx.lineTo( ctx.lineTo(
endX - endXEachSecondW * this.contentData.reverseWidth, endX - endXEachSecondW * this.contentData.reverseWidth,
endY endY
); );
} }
} }
...@@ -297,18 +308,18 @@ export default { ...@@ -297,18 +308,18 @@ export default {
if (res.data) { if (res.data) {
const data = res.data.content; const data = res.data.content;
this.waveData[0].phaseData = this.waveData[1].phaseData = data.map( this.waveData[0].phaseData = this.waveData[1].phaseData = data.map(
(item, index) => { (item, index) => {
item.phaseLen = 0; item.phaseLen = 0;
this.timeAllKey.forEach((key) => { this.timeAllKey.forEach((key) => {
item.phaseLen += item[key]; item.phaseLen += item[key];
}); });
this.allCyclelen += item.phaseLen; this.allCyclelen += item.phaseLen;
return { return {
phaseNo: item.phaseNo, phaseNo: item.phaseNo,
phaseLen: item.phaseLen, phaseLen: item.phaseLen,
coordPhaseNo: index, coordPhaseNo: index,
}; };
} }
); );
setTimeout(() => { setTimeout(() => {
this.setGreenWaveLine(); this.setGreenWaveLine();
...@@ -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 {
...@@ -417,7 +427,7 @@ export default { ...@@ -417,7 +427,7 @@ export default {
flex: 1; flex: 1;
height: 30px; height: 30px;
display: flex; display: flex;
align-items: center; align-items: center;
width: 100%; width: 100%;
// &:nth-child(2) { // &:nth-child(2) {
// height: 105Px; // height: 105Px;
...@@ -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%;
} }
......
...@@ -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);
......
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