Browse Source

Merge branch 'develop' of http://39.106.31.193:9211/mengff/jihe-hs into develop

wangqin
qingzhengli 11 months ago
parent
commit
3a1142a169
  1. 2
      ruoyi-ui/src/api/equipment/type/api.js
  2. 225
      ruoyi-ui/src/views/JiHeExpressway/components/ProgressBar.vue
  3. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Broadcast/index.vue
  4. 55
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Camera/index.vue
  5. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/index.vue
  6. 23
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/FatigueWakesUp/index.vue
  7. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/GuardrailCollision/index.vue
  8. 40
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Intermodulation/index.vue
  9. 31
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/SmartDevice/index.vue
  10. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/InfoBoard/index.vue
  11. 41
      ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/index.vue
  12. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/index.vue
  13. 41
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/congestion/assets/charts.js
  14. 39
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/congestion/index.vue
  15. 21
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/flowstate/assets/charts.js
  16. 2
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/flowstate/index.vue
  17. 228
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/trafficIndicators/index.vue
  18. 78
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/trafficIndicators/progressBar.vue
  19. 33
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/index.vue
  20. 4
      ruoyi-ui/vue.config.js

2
ruoyi-ui/src/api/equipment/type/api.js

@ -145,7 +145,7 @@ export function listDevicesType() {
// 设备在线率统计 // 设备在线率统计
export function deviceStatusList(id) { export function deviceStatusList(id) {
return request({ return request({
url: "/system/status/deviceStatusList?deviceld=" + id, url: "/system/status/deviceStatusList/" + id,
method: "get", method: "get",
}); });
} }

225
ruoyi-ui/src/views/JiHeExpressway/components/ProgressBar.vue

@ -0,0 +1,225 @@
<template>
<div class="congestion">
<div>
<!-- :style="{ width: dataList.length * 300 }" -->
<div
:class="
selectIndex == index
? selectLine < 1
? 'item action Abefore'
: 'item action Aafter'
: selectIndex + selectLine == index
? selectLine < 1
? 'item action Aafter'
: 'item action Abefore'
: 'item'
"
v-for="(item, index) in dataList"
:key="index"
>
<i class="after" v-if="index === 0"></i>
<i
class="after"
v-else
@click="selectItem(index, -1, dataList[index - 1])"
></i>
<i class="before" v-if="index === dataList.length - 1"></i>
<i class="before" v-else @click="selectItem(index, +1, item)"></i>
<span></span>
<div>{{ item.title }}</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "ProgressBar",
components: {},
props: {
dataList: {
type: Array,
default: () => {
return [];
},
},
selectIndex: {
type: Number,
default: 1,
},
reset: {
type: Boolean,
default: false,
},
},
data() {
return {
// selectIndex: 0,
selectLine: -1,
};
},
created() {},
watch: {
reset: {
handler(newV) {
if (newV) {
this.selectLine = -1;
}
},
immediate: true,
},
},
methods: {
selectItem(index, num, item) {
// this.selectIndex = index;
this.selectLine = num;
if (item) this.$emit("selectItem", item, index);
},
},
mounted() {},
};
</script>
<style lang="scss" scoped>
.congestion {
width: 100%;
height: 35px;
display: inline-flex;
flex-direction: row;
> div {
position: relative;
width: 100%;
height: 35px;
display: inline-flex;
flex-direction: row;
> .item .after {
position: absolute;
display: inline-flex;
left: 0px;
top: -5px;
width: 45px !important;
height: 35px !important;
background-color: transparent;
cursor: pointer;
}
> .item .after::after {
content: "";
position: absolute;
display: inline-flex;
left: 0px;
top: 8px;
width: 45px !important;
height: 3px !important;
background-color: #c7c7c7;
}
> .item .before {
position: absolute;
display: inline-flex;
right: 0px;
top: -5px;
width: 45px;
height: 35px;
background-color: transparent;
cursor: pointer;
}
> .item .before::after {
content: "";
position: absolute;
display: inline-flex;
left: 0px;
top: 8px;
width: 45px !important;
height: 3px !important;
background-color: #c7c7c7;
}
.item.action .after::after {
background-color: #72fdc9;
}
.item.action.Aafter .after::after {
background-color: #c7c7c7 !important;
}
> .item.action.Aafter .before::after {
background-color: #72fdc9;
}
> .item.action.Abefore .after::after {
background-color: #72fdc9;
}
> .bef::before {
background-color: #72fdc9 !important;
}
> .aft::after {
background-color: #72fdc9 !important;
}
> .item.action span {
background-color: #72fdc9;
cursor: pointer;
}
> .item.action span::after {
border-color: #72fdc9;
}
> .action div {
color: #72fdc9 !important;
}
> .item {
position: relative;
width: 113px;
height: 35px;
display: inline-flex;
flex-direction: column;
justify-items: center;
> span {
position: absolute;
display: inline-flex;
width: 9px;
height: 9px;
background: #c7c7c7;
border-radius: 50%;
opacity: 1;
left: 53px;
}
> div {
font-size: 14px;
position: relative;
display: inline-flex;
width: 100%;
align-items: center;
justify-content: center;
top: 5px;
margin-top: 10px;
color: #c7c7c7;
}
> span::after {
content: "";
position: absolute;
display: inline-flex;
width: 15px;
height: 15px;
border: 1px solid #c7c7c7;
border-radius: 50%;
opacity: 1;
top: -3.5px;
left: -3px;
}
}
}
}
</style>

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Broadcast/index.vue

@ -12,7 +12,7 @@
<ElTabPane label="在线率统计" name="third"> <ElTabPane label="在线率统计" name="third">
<LineChart <LineChart
v-if="activeName === 'third'" v-if="activeName === 'third'"
:productId="dialogData.productId" :productId="dialogData.id"
style="height: 150px" style="height: 150px"
/> />
</ElTabPane> </ElTabPane>

55
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Camera/index.vue

@ -7,25 +7,51 @@
<Descriptions :list="list" :data="data" style="gap: 18px"> <Descriptions :list="list" :data="data" style="gap: 18px">
<template #content-deviceName> <template #content-deviceName>
<span>{{ dialogData.deviceName || "-" }}</span> <span>{{ dialogData.deviceName || "-" }}</span>
<img @click="controlDialogVisible = true" v-if="[0, '0'].includes( <img
@click="controlDialogVisible = true"
v-if="
[0, '0'].includes(
dialogData.parseOtherConfig && dialogData.parseOtherConfig &&
dialogData.parseOtherConfig.ptzCtrl dialogData.parseOtherConfig.ptzCtrl
) )
" src="@screen/images/camera-control-icon.svg" width="18px" height="18px" style="cursor: pointer" /> "
src="@screen/images/camera-control-icon.svg"
width="18px"
height="18px"
style="cursor: pointer"
/>
</template> </template>
</Descriptions> </Descriptions>
<div v-if="PanoramicCameraTypes.indexOf(dialogData.childType) == -1" <div
style="width:50%;display:flex;margin-top:18px"> v-if="PanoramicCameraTypes.indexOf(dialogData.childType) == -1"
style="width: 50%; display: flex; margin-top: 18px"
>
<span <span
style="color: #3de8ff;font-size: 15px;font-family: PingFang SC, PingFang SC;font-weight: 400;line-height: 18px;"> style="
雨刷: </span> color: #3de8ff;
<Button style="margin-left:5px;" @click.native="controlClick(49)"></Button> font-size: 15px;
<Button style="margin-left:5px;" @click.native="controlClick(48)"></Button> font-family: PingFang SC, PingFang SC;
font-weight: 400;
line-height: 18px;
"
>
雨刷:
</span>
<Button style="margin-left: 5px" @click.native="controlClick(49)"
></Button
>
<Button style="margin-left: 5px" @click.native="controlClick(48)"
></Button
>
</div> </div>
</ElTabPane> </ElTabPane>
<ElTabPane label="摄相机参数" name="second">摄相机参数</ElTabPane> <ElTabPane label="摄相机参数" name="second">摄相机参数</ElTabPane>
<ElTabPane label="在线率统计" name="third"> <ElTabPane label="在线率统计" name="third">
<LineChart v-if="activeName === 'third'" :productId="dialogData.productId" style="height: 180px" /> <LineChart
v-if="activeName === 'third'"
:productId="dialogData.id"
style="height: 180px"
/>
</ElTabPane> </ElTabPane>
</ElTabs> </ElTabs>
@ -35,7 +61,10 @@
</div> </div>
</div> </div>
<CameraControlDialog :deviceId="dialogData.iotDeviceId" v-model="controlDialogVisible" /> <CameraControlDialog
:deviceId="dialogData.iotDeviceId"
v-model="controlDialogVisible"
/>
</Dialog> </Dialog>
</template> </template>
@ -52,8 +81,8 @@ import {
getRoadInfoByStakeMark, getRoadInfoByStakeMark,
getOrganizationName, getOrganizationName,
} from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js"; } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js";
import { controlCamera } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js" import { controlCamera } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js";
import { throttle } from "lodash" import { throttle } from "lodash";
import { dialogDelayVisible } from "./../mixin"; import { dialogDelayVisible } from "./../mixin";
@ -135,7 +164,7 @@ export default {
}, },
methods: { methods: {
controlClick: throttle(function (type) { controlClick: throttle(function (type) {
controlCamera(this.deviceId, type) controlCamera(this.deviceId, type);
}, 150), }, 150),
visibleClose(bool) { visibleClose(bool) {
if (bool) return; if (bool) return;

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/index.vue

@ -11,7 +11,7 @@
<ElTabPane label="在线率统计" name="third"> <ElTabPane label="在线率统计" name="third">
<LineChart <LineChart
v-if="activeName === 'third'" v-if="activeName === 'third'"
:productId="dialogData.productId" :productId="dialogData.id"
style="height: 180px" style="height: 180px"
/> />
</ElTabPane> </ElTabPane>

23
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/FatigueWakesUp/index.vue

@ -4,11 +4,20 @@
<Video class="video-stream" :pileNum="dialogData.stakeMark" /> <Video class="video-stream" :pileNum="dialogData.stakeMark" />
<ElTabs v-model="activeName" @tab-click="handleClickTabs" class="tabs"> <ElTabs v-model="activeName" @tab-click="handleClickTabs" class="tabs">
<ElTabPane label="基本信息" name="first"> <ElTabPane label="基本信息" name="first">
<Descriptions labelWidth="72px" :list="list" :data="data" style="gap: 18px" /> <Descriptions
labelWidth="72px"
:list="list"
:data="data"
style="gap: 18px"
/>
</ElTabPane> </ElTabPane>
<ElTabPane label="设备参数" name="second">设备参数</ElTabPane> <ElTabPane label="设备参数" name="second">设备参数</ElTabPane>
<ElTabPane label="在线率统计" name="third"> <ElTabPane label="在线率统计" name="third">
<LineChart v-if="activeName === 'third'" :productId="dialogData.productId" style="height: 180px" /> <LineChart
v-if="activeName === 'third'"
:productId="dialogData.id"
style="height: 180px"
/>
</ElTabPane> </ElTabPane>
</ElTabs> </ElTabs>
</div> </div>
@ -17,7 +26,10 @@
<Button @click.native="deviceControlVisible = true">设备操作</Button> <Button @click.native="deviceControlVisible = true">设备操作</Button>
</template> </template>
<DeviceControlDialog v-model="deviceControlVisible" :deviceId="dialogData.iotDeviceId" /> <DeviceControlDialog
v-model="deviceControlVisible"
:deviceId="dialogData.iotDeviceId"
/>
</Dialog> </Dialog>
</template> </template>
@ -25,7 +37,10 @@
import Dialog from "@screen/components/Dialog/index.vue"; import Dialog from "@screen/components/Dialog/index.vue";
import Descriptions from "@screen/components/Descriptions.vue"; import Descriptions from "@screen/components/Descriptions.vue";
import Button from "@screen/components/Buttons/Button.vue"; import Button from "@screen/components/Buttons/Button.vue";
import { getRoadInfoByStakeMark, getProduct } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js" import {
getRoadInfoByStakeMark,
getProduct,
} from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js";
import Video from "@screen/components/Video"; import Video from "@screen/components/Video";
import DeviceControlDialog from "./components/DeviceControlDialog.vue"; import DeviceControlDialog from "./components/DeviceControlDialog.vue";

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/GuardrailCollision/index.vue

@ -9,7 +9,7 @@
</ElTabPane> </ElTabPane>
<ElTabPane label="在线率统计" name="third"> <ElTabPane label="在线率统计" name="third">
<LineChart v-if="activeName === 'third'" :productId="dialogData.productId" /> <LineChart v-if="activeName === 'third'" :productId="dialogData.id" />
</ElTabPane> </ElTabPane>
</ElTabs> </ElTabs>
</div> </div>

40
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Intermodulation/index.vue

@ -9,14 +9,22 @@
</ElTabPane> </ElTabPane>
<ElTabPane label="设备参数" name="second"> <ElTabPane label="设备参数" name="second">
<div class="content-second" style="height: 185px"> <div class="content-second" style="height: 185px">
<RadioGroup v-model="roadType" :options="roadTypeList" @input="changeRadio" /> <RadioGroup
v-model="roadType"
:options="roadTypeList"
@input="changeRadio"
/>
<span>当前车流量: {{ carNum }}</span> <span>当前车流量: {{ carNum }}</span>
<LineChartForTraffic style="flex: 1" v-if="isShowCar && activeName === 'second'" :xData="xData" <LineChartForTraffic
:yData="yData" /> style="flex: 1"
v-if="isShowCar && activeName === 'second'"
:xData="xData"
:yData="yData"
/>
</div> </div>
</ElTabPane> </ElTabPane>
<ElTabPane label="在线率统计" name="third"> <ElTabPane label="在线率统计" name="third">
<LineChart v-if="activeName === 'third'" :productId="dialogData.productId" /> <LineChart v-if="activeName === 'third'" :productId="dialogData.id" />
</ElTabPane> </ElTabPane>
</ElTabs> </ElTabs>
</div> </div>
@ -40,7 +48,7 @@ import { dialogDelayVisible } from "./../mixin";
import request from "@/utils/request"; import request from "@/utils/request";
import { Message } from "element-ui"; import { Message } from "element-ui";
import RadioGroup from "@screen/components/FormConfig/components/RadioGroup/index.vue"; import RadioGroup from "@screen/components/FormConfig/components/RadioGroup/index.vue";
import moment from 'moment/moment'; import moment from "moment/moment";
// 广 // 广
export default { export default {
@ -72,8 +80,8 @@ export default {
}, },
carNum: 0, carNum: 0,
objectValue: { objectValue: {
'1': 0, 1: 0,
'3': 0 3: 0,
}, },
xData: [], xData: [],
yData: [], yData: [],
@ -150,7 +158,7 @@ export default {
}, },
methods: { methods: {
changeRadio(value) { changeRadio(value) {
this.carNum = this.objectValue[value + '']; this.carNum = this.objectValue[value + ""];
this.isShowCar = false; this.isShowCar = false;
if (value == 3) { if (value == 3) {
this.yData = this.jnYData; this.yData = this.jnYData;
@ -162,7 +170,7 @@ export default {
// console.log('rdata', this.jnYData); // console.log('rdata', this.jnYData);
setTimeout(() => { setTimeout(() => {
this.isShowCar = true; this.isShowCar = true;
}, 1000) }, 1000);
}, },
getPropertiesHistory(deviceId) { getPropertiesHistory(deviceId) {
this.xData = []; this.xData = [];
@ -177,17 +185,17 @@ export default {
}).then((result) => { }).then((result) => {
if (result.code != 200) return Message.error(result?.msg); if (result.code != 200) return Message.error(result?.msg);
this.objectValue = result.data[result.data.length - 1]; this.objectValue = result.data[result.data.length - 1];
this.carNum = result.data[result.data.length - 1]['1']; this.carNum = result.data[result.data.length - 1]["1"];
result.data.forEach(it => { result.data.forEach((it) => {
this.xData.push(moment(it.timestamp).format("HH:mm")); this.xData.push(moment(it.timestamp).format("HH:mm"));
this.hzYData.push(it['1']); this.hzYData.push(it["1"]);
this.jnYData.push(it['3']); this.jnYData.push(it["3"]);
this.yData = this.hzYData; this.yData = this.hzYData;
}) });
this.isShowCar = true; this.isShowCar = true;
}); });
} },
} },
}; };
</script> </script>

31
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/SmartDevice/index.vue

@ -14,15 +14,22 @@
<ElTabPane label="在线率统计" name="third"> <ElTabPane label="在线率统计" name="third">
<LineChart <LineChart
v-if="activeName === 'third'" v-if="activeName === 'third'"
:productId="dialogData.productId" :productId="dialogData.id"
style="height: 180px" style="height: 180px"
/> />
</ElTabPane> </ElTabPane>
</ElTabs> </ElTabs>
</div> </div>
<template #footer> <template #footer>
<Button v-if="activeName != 'first' && data.deviceState == '1'" @click.native="deviceControlVisible = true"> 设备操作 </Button> <Button
<Button v-else-if="activeName != 'first'" style="background-color: #bbb;"> 设备离线 </Button> v-if="activeName != 'first' && data.deviceState == '1'"
@click.native="deviceControlVisible = true"
>
设备操作
</Button>
<Button v-else-if="activeName != 'first'" style="background-color: #bbb">
设备离线
</Button>
</template> </template>
<DeviceControlDialog <DeviceControlDialog
@ -99,7 +106,7 @@ export default {
label: "设备状态", label: "设备状态",
key: "deviceState", key: "deviceState",
// enum: "DeviceTypeEnum", // enum: "DeviceTypeEnum",
visible: false visible: false,
}, },
{ {
label: "设备状态", label: "设备状态",
@ -117,7 +124,11 @@ export default {
// if (!this.dialogData.iotDeviceId) this.dialogData.iotDeviceId = '10.0.36.146-1883'; // if (!this.dialogData.iotDeviceId) this.dialogData.iotDeviceId = '10.0.36.146-1883';
let deviceInfo = await this.getDeviceInfo(); let deviceInfo = await this.getDeviceInfo();
this.data = { ...this.dialogData, roadName: null, deviceStateLiteral : deviceInfo.data.formatValue.deviceState }; this.data = {
...this.dialogData,
roadName: null,
deviceStateLiteral: deviceInfo.data.formatValue.deviceState,
};
// console.log( // console.log(
// "%c [ dialogData ]-103-index.vue", // "%c [ dialogData ]-103-index.vue",
@ -137,12 +148,14 @@ export default {
methods: { methods: {
async getDeviceInfo() { async getDeviceInfo() {
return request({ return request({
url: `/business/device/properties/latest/${this.dialogData.iotDeviceId || '10.0.36.143-1883'}/3`, url: `/business/device/properties/latest/${
this.dialogData.iotDeviceId || "10.0.36.143-1883"
}/3`,
method: "get", method: "get",
params: {} params: {},
}); });
} },
} },
}; };
</script> </script>

2
ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/InfoBoard/index.vue

@ -94,7 +94,7 @@
<el-tab-pane label="在线率统计" name="third"> <el-tab-pane label="在线率统计" name="third">
<LineChart <LineChart
v-if="activeTab === 'third'" v-if="activeTab === 'third'"
:productId="selectedDevice.productId" :productId="selectedDevice.id"
style="height: 160px" style="height: 160px"
/> />
</el-tab-pane> </el-tab-pane>

41
ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/index.vue

@ -84,27 +84,7 @@
</el-table-column> </el-table-column>
<el-table-column prop="deviceIp" label="设备IP"> </el-table-column> <el-table-column prop="deviceIp" label="设备IP"> </el-table-column>
<el-table-column prop="production" label="厂家"> </el-table-column> <el-table-column prop="production" label="厂家"> </el-table-column>
<el-table-column prop="type" label="型号"> <el-table-column prop="model" label="型号"> </el-table-column>
<template slot-scope="scope">
<div v-if="scope.row.type == '1-1'">高清网络枪型固定摄像机</div>
<div v-if="scope.row.type == '1-2'">高清网络球形摄像机</div>
<div v-if="scope.row.type == '1-3'">桥下高清网络球形摄像机</div>
<div v-if="scope.row.type == '1-4'">360°全景摄像机</div>
<div v-if="scope.row.type == '1-5'">180°全景摄像机</div>
<div v-if="scope.row.type == '2-1'">门架式可变信息标志</div>
<div v-if="scope.row.type == '2-3'">雨棚可变信息标志</div>
<div v-if="scope.row.type == '2-4'">站前悬臂式可变信息标志</div>
<div v-if="scope.row.type == '3'">气象检测器</div>
<div v-if="scope.row.type == '5'">路段语音广播系统</div>
<div v-if="scope.row.type == '6'">护栏碰撞预警系统</div>
<div v-if="scope.row.type == '7'">毫米波雷达</div>
<div v-if="scope.row.type == '8'">合流区预警系统</div>
<div v-if="scope.row.type == '10'">激光疲劳唤醒</div>
<div v-if="scope.row.type == '11'">一类交通量调查站</div>
<div v-if="scope.row.type == '12'">智能行车诱导系统</div>
<div v-if="scope.row.type == '13'">智能设备箱</div>
</template>
</el-table-column>
<!-- <el-table-column prop="network" label="网段"> </el-table-column> --> <!-- <el-table-column prop="network" label="网段"> </el-table-column> -->
<el-table-column prop="time" label="监测时间"> </el-table-column> <el-table-column prop="time" label="监测时间"> </el-table-column>
<el-table-column prop="deviceStatus" label="设备状态"> <el-table-column prop="deviceStatus" label="设备状态">
@ -135,7 +115,7 @@
<script> <script>
import * as echarts from "echarts"; import * as echarts from "echarts";
import chartsStatistics from "./assets/charts"; import onlineCharts from "./assets/charts";
import DeviceUptime from "./components/deviceUptime"; import DeviceUptime from "./components/deviceUptime";
import MonthlyEquipment from "./components/monthlyEquipment"; import MonthlyEquipment from "./components/monthlyEquipment";
import DeviceSummary from "./components/deviceSummary"; import DeviceSummary from "./components/deviceSummary";
@ -212,7 +192,7 @@ export default {
this.initDevice(); this.initDevice();
} else if (this.activeName == "second") { } else if (this.activeName == "second") {
this.queryChart = echarts.init(this.$refs["queryChart"]); this.queryChart = echarts.init(this.$refs["queryChart"]);
this.queryChart.setOption(chartsStatistics); this.queryChart.setOption(onlineCharts);
this.initQueryChart(); this.initQueryChart();
this.initQueryTable(1); this.initQueryTable(1);
} }
@ -382,17 +362,14 @@ export default {
data0.push(val); data0.push(val);
data1.push(100); data1.push(100);
} }
chartsStatistics.xAxis.data = dataX; onlineCharts.xAxis.data = dataX;
chartsStatistics.series[0].data = data0; onlineCharts.series[0].data = data0;
chartsStatistics.series[0].name = typeLabel; onlineCharts.series[0].name = typeLabel;
chartsStatistics.series[1].data = data1; onlineCharts.series[1].data = data1;
chartsStatistics.yAxis[0].name = "在线率(%)"; onlineCharts.yAxis[0].name = "在线率(%)";
chartsStatistics.legend = {
show: true,
};
this.$nextTick(() => { this.$nextTick(() => {
this.queryChart.setOption(chartsStatistics); this.queryChart.setOption(onlineCharts);
}); });
// } else { // } else {
// this.setStatus("01", "empty"); // this.setStatus("01", "empty");

4
ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/eventQuery/index.vue

@ -125,7 +125,7 @@
<script> <script>
import WgtTitle from "../../../widgets/title"; import WgtTitle from "../../../widgets/title";
import RadioGroup from "@screen/components/FormConfig/components/RadioGroup/index.vue"; import RadioGroup from "@screen/components/FormConfig/components/RadioGroup/index.vue";
import ProgressBar from "./progressBar"; import ProgressBar from "@screen/components/ProgressBar.vue";
import * as echarts from "echarts"; import * as echarts from "echarts";
import chart1 from "./assets/charts"; import chart1 from "./assets/charts";
import chart2 from "./assets/charts2"; import chart2 from "./assets/charts2";
@ -137,7 +137,7 @@ import {
getWarningSectionType, getWarningSectionType,
getSectionMarkNumber, getSectionMarkNumber,
getRoadSectionList, getRoadSectionList,
} from "../../../../../../../api/event/perceiveEvent"; } from "@/api/event/perceiveEvent";
const drawRoundRect = (ctx, x, y, width, height, radius, gr) => { const drawRoundRect = (ctx, x, y, width, height, radius, gr) => {
// ctx, x, y, , , // ctx, x, y, , ,

41
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/congestion/assets/charts.js

@ -1,17 +1,24 @@
/* 数据 */ /* 数据 */
let nameList = [ let nameList = [
"数据1", "殷家林-枢纽",
"数据2", "大学城-立交",
"数据3", "长清-立交",
"数据4", "松竹-枢纽",
"数据5", "孝里-立交",
"数据6", "平阴北-立交",
"数据7", "平阴-立交",
"数据8", "孔村-枢纽",
"数据9", "平阴南-立交",
"数据10", "东平-立交",
"东平湖-枢纽",
"梁山东-立交",
"梁山-立交",
"嘉祥西-立交",
"王官屯-枢纽",
]; // 类别 ]; // 类别
let valueList = [26, 62, 38, 26, 85, 46, 12, 12, 33, 60]; // 人数 let valueList = [
26, 62, 38, 26, 85, 46, 12, 12, 33, 60, 26, 62, 38, 26, 85, 46, 12, 12, 33,
]; // 人数
var yList = ["畅通", "基本畅通", "轻度拥堵", "中度拥堵", "严重拥堵"]; var yList = ["畅通", "基本畅通", "轻度拥堵", "中度拥堵", "严重拥堵"];
/* 数据整合 */ /* 数据整合 */
let dataList = []; let dataList = [];
@ -58,8 +65,9 @@ var options = {
tooltip: { tooltip: {
show: true, show: true,
trigger: "axis", trigger: "axis",
valueFormatter: function (value) { formatter: function (params) {
return value + " 起"; let value = params[0].name.split("-");
return `${params[0].marker}${value[0]}${value[1]}: <span style="font-weight:bold;"> ${params[0].value} 起</span>`;
}, },
}, },
grid: { grid: {
@ -70,7 +78,7 @@ var options = {
containLabel: true, containLabel: true,
}, },
xAxis: { xAxis: {
type: "category", // type: "category",
data: nameList, data: nameList,
axisTick: { axisTick: {
show: false, //隐藏X轴刻度 show: false, //隐藏X轴刻度
@ -84,7 +92,10 @@ var options = {
show: true, show: true,
color: "#fff", color: "#fff",
fontSize: 12, fontSize: 12,
fontFamily: "Source Han Sans CN-Regular", formatter: function (params) {
let value = params.split("-");
return `${value[0]}\n\n${value[1]}`;
},
}, },
}, },
yAxis: [ yAxis: [

39
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/congestion/index.vue

@ -1,6 +1,6 @@
<template> <template>
<div class='congestion'> <div class="congestion">
<WgtTitle :title="'在途车流量车型分类'"></WgtTitle> <WgtTitle title="全路段拥堵状态"></WgtTitle>
<div class="board"> <div class="board">
<div class="charts keep-ratio" id="congestionEchartBox"></div> <div class="charts keep-ratio" id="congestionEchartBox"></div>
</div> </div>
@ -8,39 +8,34 @@
</template> </template>
<script> <script>
import WgtTitle from "../../../widgets/title";
import WgtTitle from '../../../widgets/title'
import * as echarts from "echarts"; import * as echarts from "echarts";
import chartsStatistics from "./assets/charts"; import chartsStatistics from "./assets/charts";
export default { export default {
name: 'Congestion', name: "Congestion",
components: { components: {
WgtTitle WgtTitle,
}, },
data() { data() {
return { return {};
}
}, },
created() { created() {},
methods: {},
},
methods: {
},
mounted() { mounted() {
setTimeout(() => { setTimeout(() => {
this.$nextTick(() => { this.$nextTick(() => {
var myChart = echarts.init(document.getElementById('congestionEchartBox')); var myChart = echarts.init(
document.getElementById("congestionEchartBox")
);
myChart.setOption(chartsStatistics); myChart.setOption(chartsStatistics);
}); });
}); });
}, },
} };
</script> </script>
<style lang='scss' scoped> <style lang="scss" scoped>
.congestion { .congestion {
width: 100%; width: 100%;
@ -52,11 +47,15 @@ export default {
border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px;
opacity: 1; opacity: 1;
border: 1px solid; border: 1px solid;
border-image: linear-gradient(360deg, rgba(55, 231, 255, 0.3), rgba(55, 231, 255, 0)) 1 1; border-image: linear-gradient(
360deg,
rgba(55, 231, 255, 0.3),
rgba(55, 231, 255, 0)
)
1 1;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
} }
} }

21
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/flowstate/assets/charts.js

@ -92,20 +92,19 @@ var options = {
z: 10, z: 10,
data: [ data: [
"殷家林-枢纽", "殷家林-枢纽",
"大学城-枢纽", "大学城-立交",
"长清-枢纽", "长清-立交",
"松竹-枢纽", "松竹-枢纽",
"孝里-枢纽", "孝里-立交",
"安城-枢纽", "平阴北-立交",
"平阴-枢纽", "平阴-立交",
"孔村-枢纽", "孔村-枢纽",
"平阴南-枢纽", "平阴南-立交",
"东平-枢纽", "东平-立交",
"东平湖-枢纽", "东平湖-枢纽",
"韩岗-枢纽", "梁山东-立交",
"梁山-枢纽", "梁山-立交",
"鄄郓-枢纽", "嘉祥西-立交",
"嘉祥西-枢纽",
"王官屯-枢纽", "王官屯-枢纽",
], ],
position: "top", position: "top",

2
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficFlow/components/flowstate/index.vue

@ -1,6 +1,6 @@
<template> <template>
<div class="flowstate"> <div class="flowstate">
<WgtTitle :title="'全路车流量状况'"></WgtTitle> <WgtTitle title="在途车流量车型分类"></WgtTitle>
<div class="board"> <div class="board">
<div class="tag1">方向济南</div> <div class="tag1">方向济南</div>
<div class="tag2">方向菏泽</div> <div class="tag2">方向菏泽</div>

228
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/trafficIndicators/index.vue

@ -2,88 +2,89 @@
<div class="congestion"> <div class="congestion">
<WgtTitle :title="'交通指标分析'"></WgtTitle> <WgtTitle :title="'交通指标分析'"></WgtTitle>
<div class="board"> <div class="board">
<!-- <div class="searchPanel"> <ProgressBar
<el-select v-model="area" size="mini" class="selectRoad" placeholder="请选择"> class="keep-ratio"
@selectItem="selectProgress"
:dataList="dataList"
:selectIndex="selectIndex"
:reset="reset"
/>
<div class="body">
<div class="body-l">
<div class="searchPanel_1">
<RadioGroup
:options="[
{ key: '1', label: '菏泽' },
{ key: '3', label: '济南' },
]"
v-model="direction"
type="button"
/>
<el-select
v-model="type"
size="mini"
class="selectRoad"
placeholder="请选择"
>
<el-option <el-option
v-for="item in areaOptions" v-for="item in typeOptions"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value"> :value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
<el-select v-model="year" size="mini" class="selectRoad" placeholder="请选择"> <el-select
v-model="quarter"
size="medium"
v-if="type == '3'"
class="selectRoad-medium"
placeholder="请选择"
>
<el-option <el-option
v-for="item in yearOptions" v-for="item in quarterOptions"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value"> :value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
<!-- <el-quarter-picker size="mini" class="selectRoad" style="width:180px;" v-if="type == '3'" v-model="dateTime"
aria-placeholder="请选季度" /> -->
<el-date-picker <el-date-picker
size="mini" size="mini"
v-if="year != 'quarter'" v-if="type != '3'"
class="selectRoad" class="selectRoad"
v-model="dateTime" v-model="dateTime"
style="width:140px;" style="width: 140px"
:type="year" :type="
placeholder="请选择" type == 1
/>
<el-quarter-picker size="mini" class="selectRoad" style="width:180px;" v-if="year == 'quarter'" v-model="quarter" aria-placeholder="请选季度" />
<el-button type="primary" size="mini" class="btnSearch" icon="el-icon-search">查询</el-button>
<el-button class="btnReset" size="mini" icon="el-icon-refresh-left" >重置</el-button>
</div> -->
<ProgressBar :dataList="dataList" class="keep-ratio progressbar" :selectIndex="7" />
<div class="body">
<div class="body-l">
<div class="searchPanel_1">
<!-- <el-from ref="form"> -->
<RadioGroup :options="[
{ key: '1', label: '菏泽' },
{ key: '3', label: '济南' },
]" v-model="direction" type="button" />
<el-select v-model="type" size="mini" class="selectRoad" placeholder="请选择">
<el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-select v-model="quarter" size="medium" v-if="type == '3'" class="selectRoad-medium" placeholder="请选择">
<el-option v-for="item in quarterOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<!-- <el-quarter-picker size="mini" class="selectRoad" style="width:180px;" v-if="type == '3'" v-model="dateTime"
aria-placeholder="请选季度" /> -->
<el-date-picker size="mini" v-if="type != '3'" class="selectRoad" v-model="dateTime" style="width: 140px"
:type="type == 1
? 'date' ? 'date'
: type == 2 : type == 2
? 'month' ? 'month'
: type == 4 : type == 4
? 'year' ? 'year'
: '' : ''
" placeholder="请选择" /> "
placeholder="请选择"
/>
<el-button type="primary" size="mini" class="btnSearch" @click="searchQuery" <el-button
icon="el-icon-search">查询</el-button> type="primary"
<el-button class="btnReset" size="mini" icon="el-icon-refresh-left" @click="handleClear">重置</el-button> size="mini"
<!-- </el-from> --> class="btnSearch"
@click="searchQuery"
icon="el-icon-search"
>查询</el-button
>
<el-button
class="btnReset"
size="mini"
icon="el-icon-refresh-left"
@click="onReset"
>重置</el-button
>
</div> </div>
<!-- <div class="searchPanel_1">
<el-select v-model="area" size="mini" class="selectRoad" placeholder="请选择">
<el-option v-for="item in areaOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-select v-model="year" size="mini" class="selectRoad" placeholder="请选择">
<el-option v-for="item in yearOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-date-picker size="mini" v-if="year != 'quarter'" class="selectRoad" v-model="dateTime"
style="width:140px;" :type="year" placeholder="请选择" />
<el-quarter-picker size="mini" class="selectRoad" style="width:180px;" v-if="year == 'quarter'"
v-model="quarter" aria-placeholder="请选季度" />
<el-button type="primary" size="mini" class="btnSearch" icon="el-icon-search">查询</el-button>
<el-button class="btnReset" size="mini" icon="el-icon-refresh-left">重置</el-button>
</div> -->
<div id="chart1" class="keep-ratio"></div> <div id="chart1" class="keep-ratio"></div>
</div> </div>
<div class="chartOrg"> <div class="chartOrg">
@ -104,13 +105,14 @@
<script> <script>
import RadioGroup from "@screen/components/FormConfig/components/RadioGroup/index.vue"; import RadioGroup from "@screen/components/FormConfig/components/RadioGroup/index.vue";
import WgtTitle from "../../../../../widgets/title"; import WgtTitle from "../../../../../widgets/title";
import ProgressBar from "./progressBar.vue"; import ProgressBar from "@screen/components/ProgressBar.vue";
import * as echarts from "echarts"; import * as echarts from "echarts";
import chart1 from "./assets/charts"; import chart1 from "./assets/charts";
import chart2 from "./assets/charts2"; import chart2 from "./assets/charts2";
import chart3 from "./assets/charts3"; import chart3 from "./assets/charts3";
import chartsRadar from "./assets/chartsRadar"; import chartsRadar from "./assets/chartsRadar";
import ElQuarterPicker from "./ElQuarterPicker"; import ElQuarterPicker from "./ElQuarterPicker";
import { getRoadSectionList } from "@/api/event/perceiveEvent";
const drawRoundRect = (ctx, x, y, width, height, radius, gr) => { const drawRoundRect = (ctx, x, y, width, height, radius, gr) => {
// ctx, x, y, , , // ctx, x, y, , ,
@ -150,6 +152,9 @@ export default {
}, },
data() { data() {
return { return {
selectIndex: 1,
selectId: 1,
reset: false,
direction: "1", direction: "1",
type: "1", type: "1",
typeOptions: [ typeOptions: [
@ -190,56 +195,7 @@ export default {
}, },
], ],
dateTime: "2024-01-01 00:00:00", dateTime: "2024-01-01 00:00:00",
dataList: [ dataList: [],
{
title: "殷家林枢纽",
},
{
title: "大学城立交",
},
{
title: "长清立交",
},
{
title: "松竹枢纽",
},
{
title: "孝里立交",
},
{
title: "平阴立交",
},
{
title: "孔村枢纽",
},
{
title: "平阴南立交",
},
{
title: "魏雪枢纽",
},
{
title: "东平立交",
},
{
title: "东平湖枢纽",
},
{
title: "韩岗立交",
},
{
title: "梁山立交",
},
{
title: "鄄郓枢纽",
},
{
title: "嘉祥西立交",
},
{
title: "王官屯枢纽",
},
],
quarter: "", quarter: "",
year: "", year: "",
list: [ list: [
@ -290,10 +246,44 @@ export default {
}, },
created() {}, created() {},
methods: {}, methods: {
selectProgress(item, index) {
this.selectIndex = index;
this.selectId = item.id;
this.reset = false;
// this.searchQuery();
},
onReset() {
this.selectId = 1;
this.selectIndex = 1;
this.reset = true;
// this.searchQuery();
},
},
mounted() { mounted() {
setTimeout(() => { setTimeout(() => {
this.$nextTick(() => { this.$nextTick(() => {
getRoadSectionList().then((res) => {
console.log(res);
if (res.code == 200) {
let rows = res.data;
this.dataList = [];
rows.forEach((it) => {
this.dataList.push({
title: it.sectionName.split("-")[0],
id: it.id,
});
});
//
if (rows.length > 1) {
this.dataList.push({
title: rows[rows.length - 1].sectionName.split("-")[1],
id: rows[rows.length - 1].id,
});
}
console.log("dataList", this.dataList);
}
});
var myChart1 = echarts.init(document.getElementById("chart1")); var myChart1 = echarts.init(document.getElementById("chart1"));
myChart1.setOption(chart1); myChart1.setOption(chart1);
var myChart2 = echarts.init(document.getElementById("chart2")); var myChart2 = echarts.init(document.getElementById("chart2"));
@ -317,21 +307,20 @@ export default {
gr.addColorStop(1, "rgba(92,197,255,0)"); gr.addColorStop(1, "rgba(92,197,255,0)");
gr.addColorStop(0, "rgba(92,197,255,0.5)"); gr.addColorStop(0, "rgba(92,197,255,0.5)");
// //
drawRoundRect(context, 98, 1, 90, 22, 12, gr); drawRoundRect(context, 98, 11, 90, 22, 12, gr);
var gr = context.createLinearGradient(35, 0, 75, 0); var gr = context.createLinearGradient(35, 0, 75, 0);
// //
gr.addColorStop(1, "rgba(92,197,255,0)"); gr.addColorStop(1, "rgba(92,197,255,0)");
gr.addColorStop(0, "rgba(92,197,255,0.5)"); gr.addColorStop(0, "rgba(92,197,255,0.5)");
drawRoundRect(context, -1, 136, 80, 20, 12, gr); drawRoundRect(context, -1, 146, 80, 20, 12, gr);
var gr = context.createLinearGradient(230, 0, 275, 0); var gr = context.createLinearGradient(230, 0, 275, 0);
// //
gr.addColorStop(1, "rgba(92,197,255,0)"); gr.addColorStop(1, "rgba(92,197,255,0)");
gr.addColorStop(0, "rgba(92,197,255,0.5)"); gr.addColorStop(0, "rgba(92,197,255,0.5)");
context.lineWidth = 1; // 线 context.lineWidth = 1; // 线
drawRoundRect(context, 211, 136, 220, 20, 12, gr); drawRoundRect(context, 211, 146, 220, 20, 12, gr);
const domMap3 = document.getElementById("chart3"); const domMap3 = document.getElementById("chart3");
let parentDiv3 = domMap3.firstChild; let parentDiv3 = domMap3.firstChild;
@ -349,20 +338,20 @@ export default {
gr.addColorStop(1, "rgba(92,197,255,0)"); gr.addColorStop(1, "rgba(92,197,255,0)");
gr.addColorStop(0, "rgba(92,197,255,0.5)"); gr.addColorStop(0, "rgba(92,197,255,0.5)");
// //
drawRoundRect(context3, 98, 4, 90, 20, 12, gr); drawRoundRect(context3, 98, 14, 90, 20, 12, gr);
var gr = context3.createLinearGradient(35, 0, 75, 0); var gr = context3.createLinearGradient(35, 0, 75, 0);
// //
gr.addColorStop(1, "rgba(92,197,255,0)"); gr.addColorStop(1, "rgba(92,197,255,0)");
gr.addColorStop(0, "rgba(92,197,255,0.5)"); gr.addColorStop(0, "rgba(92,197,255,0.5)");
drawRoundRect(context3, -1, 138, 80, 20, 12, gr); drawRoundRect(context3, -1, 148, 80, 20, 12, gr);
var gr = context3.createLinearGradient(240, 0, 290, 0); var gr = context3.createLinearGradient(240, 0, 290, 0);
// //
gr.addColorStop(1, "rgba(92,197,255,0)"); gr.addColorStop(1, "rgba(92,197,255,0)");
gr.addColorStop(0, "rgba(92,197,255,0.5)"); gr.addColorStop(0, "rgba(92,197,255,0.5)");
context3.lineWidth = 1; // 线 context3.lineWidth = 1; // 线
drawRoundRect(context3, 211, 138, 220, 20, 12, gr); drawRoundRect(context3, 211, 148, 200, 20, 12, gr);
}); });
}); });
}, },
@ -376,6 +365,7 @@ export default {
.congestion { .congestion {
width: 100%; width: 100%;
margin: 5px 0;
.body { .body {
display: flex; display: flex;

78
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/trafficIndicators/progressBar.vue

@ -1,8 +1,21 @@
<template> <template>
<div class='congestion'> <div class="congestion">
<div :style="{ width: dataList.length * 300 }"> <div :style="{ width: dataList.length * 300 }">
<div :class="selectIndex == index ? selectLine < 1 ? 'item action Abefore' : 'item action Aafter' : selectIndex + selectLine == index ? selectLine < 1 ? 'item action Aafter' : 'item action Abefore' : 'item'" <div
v-for="(item, index) in dataList" :key="index"> :class="
selectIndex == index
? selectLine < 1
? 'item action Abefore'
: 'item action Aafter'
: selectIndex + selectLine == index
? selectLine < 1
? 'item action Aafter'
: 'item action Abefore'
: 'item'
"
v-for="(item, index) in dataList"
:key="index"
>
<i class="after" @click="selectItem(index, -1)"></i> <i class="after" @click="selectItem(index, -1)"></i>
<i class="before" @click="selectItem(index, +1)"></i> <i class="before" @click="selectItem(index, +1)"></i>
<span></span> <span></span>
@ -13,44 +26,36 @@
</template> </template>
<script> <script>
import { number } from 'echarts';
export default { export default {
name: 'ProgressBar', name: "ProgressBar",
components: { components: {},
},
props: { props: {
dataList: { dataList: {
type: Array, type: Array,
default: () => { default: () => {
return [] return [];
} },
}, },
}, },
data() { data() {
return { return {
selectIndex: 0, selectIndex: 0,
selectLine: -1, selectLine: -1,
} };
}, },
created() { created() {},
},
methods: { methods: {
selectItem(index, num) { selectItem(index, num) {
this.selectIndex = index; this.selectIndex = index;
this.selectLine = num this.selectLine = num;
}
}, },
mounted() {
}, },
} mounted() {},
};
</script> </script>
<style lang='scss' scoped> <style lang="scss" scoped>
.congestion { .congestion {
width: 100%; width: 100%;
height: 35px; height: 35px;
@ -83,7 +88,7 @@ export default {
top: 8px; top: 8px;
width: 45px !important; width: 45px !important;
height: 3px !important; height: 3px !important;
background-color: #C7C7C7; background-color: #c7c7c7;
} }
> .item .before { > .item .before {
@ -105,47 +110,46 @@ export default {
top: 8px; top: 8px;
width: 45px !important; width: 45px !important;
height: 3px !important; height: 3px !important;
background-color: #C7C7C7; background-color: #c7c7c7;
} }
.item.action .after::after { .item.action .after::after {
background-color: #72FDC9; background-color: #72fdc9;
} }
.item.action.Aafter .after::after { .item.action.Aafter .after::after {
background-color: #C7C7C7 !important; background-color: #c7c7c7 !important;
} }
> .item.action.Aafter .before::after { > .item.action.Aafter .before::after {
background-color: #72FDC9; background-color: #72fdc9;
} }
> .item.action.Abefore .after::after { > .item.action.Abefore .after::after {
background-color: #72FDC9; background-color: #72fdc9;
} }
> .bef::before { > .bef::before {
background-color: #72FDC9 !important; background-color: #72fdc9 !important;
} }
> .aft::after { > .aft::after {
background-color: #72FDC9 !important; background-color: #72fdc9 !important;
} }
> .item.action span { > .item.action span {
background-color: #72FDC9; background-color: #72fdc9;
cursor: pointer; cursor: pointer;
} }
> .item.action span::after { > .item.action span::after {
border-color: #72FDC9; border-color: #72fdc9;
} }
> .action div { > .action div {
color: #72FDC9 !important; color: #72fdc9 !important;
} }
> .item { > .item {
position: relative; position: relative;
width: 180px; width: 180px;
@ -154,13 +158,12 @@ export default {
flex-direction: column; flex-direction: column;
justify-items: center; justify-items: center;
> span { > span {
position: absolute; position: absolute;
display: inline-flex; display: inline-flex;
width: 9px; width: 9px;
height: 9px; height: 9px;
background: #C7C7C7; background: #c7c7c7;
border-radius: 50%; border-radius: 50%;
opacity: 1; opacity: 1;
left: 53px; left: 53px;
@ -175,7 +178,7 @@ export default {
top: 5px; top: 5px;
margin-top: 10px; margin-top: 10px;
font-size: 14px; font-size: 14px;
color: #C7C7C7; color: #c7c7c7;
} }
> span::after { > span::after {
@ -184,7 +187,7 @@ export default {
display: inline-flex; display: inline-flex;
width: 15px; width: 15px;
height: 15px; height: 15px;
border: 1px solid #C7C7C7; border: 1px solid #c7c7c7;
border-radius: 50%; border-radius: 50%;
opacity: 1; opacity: 1;
top: -3.5px; top: -3.5px;
@ -194,4 +197,3 @@ export default {
} }
} }
</style> </style>

33
ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/index.vue

@ -1,5 +1,5 @@
<template> <template>
<div class='TrafficFlowMax'> <div class="TrafficFlowMax">
<el-tabs class="footTabs" v-model="activeName" @tab-click="changeTabs"> <el-tabs class="footTabs" v-model="activeName" @tab-click="changeTabs">
<el-tab-pane label="综合指标分析" name="first"> <el-tab-pane label="综合指标分析" name="first">
<IndicatorAnalysis /> <IndicatorAnalysis />
@ -12,38 +12,34 @@
</template> </template>
<script> <script>
import IndicatorAnalysis from './components/IndicatorAnalysis'; import IndicatorAnalysis from "./components/IndicatorAnalysis";
import IndicatorQuery from './components/IndicatorQuery'; import IndicatorQuery from "./components/IndicatorQuery";
export default { export default {
name: 'trafficSituation', name: "trafficSituation",
components: { components: {
IndicatorAnalysis, IndicatorAnalysis,
IndicatorQuery IndicatorQuery,
}, },
data() { data() {
return { return {
activeName:"first" activeName: "first",
} };
}, },
methods: { methods: {
changeTabs(){ changeTabs() {},
},
} };
}
}
</script> </script>
<style lang='scss' scoped> <style lang="scss" scoped>
::v-deep .el-tabs__item { ::v-deep .el-tabs__item {
display: inline-flex; display: inline-flex;
justify-content: center; justify-content: center;
font-size: 16px; font-size: 16px;
font-family: PingFang SC, PingFang SC; font-family: PingFang SC, PingFang SC;
font-weight: 500; font-weight: 500;
color: #FFFFFF; color: #ffffff;
min-width: 128px; min-width: 128px;
position: relative; position: relative;
left: 10px; left: 10px;
@ -65,7 +61,6 @@
.footTabs { .footTabs {
display: inline; display: inline;
width: 99%; width: 99%;
} }
.TrafficFlowMax { .TrafficFlowMax {
@ -96,10 +91,8 @@
width: calc(50%); width: calc(50%);
min-width: 460px; min-width: 460px;
margin-right: 20px; margin-right: 20px;
} }
.content-m { .content-m {
display: inline-flex; display: inline-flex;
flex-direction: column; flex-direction: column;
@ -130,7 +123,6 @@
.foot-w { .foot-w {
width: 100%; width: 100%;
} }
.foot-l { .foot-l {
@ -145,4 +137,3 @@
} }
} }
</style> </style>

4
ruoyi-ui/vue.config.js

@ -54,9 +54,9 @@ module.exports = {
// target: `http://10.168.78.135:8087`, //王钦 // target: `http://10.168.78.135:8087`, //王钦
// target: `http://10.168.66.196:8087`, //正晨后台 连现场物联 刘文阁2 // target: `http://10.168.66.196:8087`, //正晨后台 连现场物联 刘文阁2
// target: `http://10.168.68.42:8087`, //王思祥 // target: `http://10.168.68.42:8087`, //王思祥
// target: `http://10.168.65.194:8087`, //赵祥龙 target: `http://10.168.65.194:8087`, //赵祥龙
// target: `http://10.168.65.156:8097`, //孟 // target: `http://10.168.65.156:8097`, //孟
target: `http://10.168.76.181:8087`, //王家宝 // target: `http://10.168.76.181:8087`, //王家宝
// target: `http://10.168.65.103:8097`, // target: `http://10.168.65.103:8097`,
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {

Loading…
Cancel
Save