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. 63
      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. 27
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/FatigueWakesUp/index.vue
  7. 4
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/GuardrailCollision/index.vue
  8. 42
      ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/Intermodulation/index.vue
  9. 33
      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. 41
      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. 260
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/trafficIndicators/index.vue
  18. 356
      ruoyi-ui/src/views/JiHeExpressway/pages/perception/trafficSituation/components/IndicatorAnalysis/components/trafficIndicators/progressBar.vue
  19. 251
      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) {
return request({
url: "/system/status/deviceStatusList?deviceld=" + id,
url: "/system/status/deviceStatusList/" + id,
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">
<LineChart
v-if="activeName === 'third'"
:productId="dialogData.productId"
:productId="dialogData.id"
style="height: 150px"
/>
</ElTabPane>

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

@ -7,25 +7,51 @@
<Descriptions :list="list" :data="data" style="gap: 18px">
<template #content-deviceName>
<span>{{ dialogData.deviceName || "-" }}</span>
<img @click="controlDialogVisible = true" v-if="[0, '0'].includes(
dialogData.parseOtherConfig &&
dialogData.parseOtherConfig.ptzCtrl
)
" src="@screen/images/camera-control-icon.svg" width="18px" height="18px" style="cursor: pointer" />
<img
@click="controlDialogVisible = true"
v-if="
[0, '0'].includes(
dialogData.parseOtherConfig &&
dialogData.parseOtherConfig.ptzCtrl
)
"
src="@screen/images/camera-control-icon.svg"
width="18px"
height="18px"
style="cursor: pointer"
/>
</template>
</Descriptions>
<div v-if="PanoramicCameraTypes.indexOf(dialogData.childType) == -1"
style="width:50%;display:flex;margin-top:18px">
<div
v-if="PanoramicCameraTypes.indexOf(dialogData.childType) == -1"
style="width: 50%; display: flex; margin-top: 18px"
>
<span
style="color: #3de8ff;font-size: 15px;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>
style="
color: #3de8ff;
font-size: 15px;
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>
</ElTabPane>
<ElTabPane label="摄相机参数" name="second">摄相机参数</ElTabPane>
<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>
</ElTabs>
@ -35,7 +61,10 @@
</div>
</div>
<CameraControlDialog :deviceId="dialogData.iotDeviceId" v-model="controlDialogVisible" />
<CameraControlDialog
:deviceId="dialogData.iotDeviceId"
v-model="controlDialogVisible"
/>
</Dialog>
</template>
@ -52,8 +81,8 @@ import {
getRoadInfoByStakeMark,
getOrganizationName,
} 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 { controlCamera } from "@screen/pages/Home/components/RoadAndEvents/utils/httpList.js";
import { throttle } from "lodash";
import { dialogDelayVisible } from "./../mixin";
@ -135,7 +164,7 @@ export default {
},
methods: {
controlClick: throttle(function (type) {
controlCamera(this.deviceId, type)
controlCamera(this.deviceId, type);
}, 150),
visibleClose(bool) {
if (bool) return;
@ -199,7 +228,7 @@ export default {
align-items: center;
justify-content: end;
>div {
> div {
font-size: 16px;
padding: 6px 12px;
}

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

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

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

@ -4,11 +4,20 @@
<Video class="video-stream" :pileNum="dialogData.stakeMark" />
<ElTabs v-model="activeName" @tab-click="handleClickTabs" class="tabs">
<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 label="设备参数" name="second">设备参数</ElTabPane>
<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>
</ElTabs>
</div>
@ -17,7 +26,10 @@
<Button @click.native="deviceControlVisible = true">设备操作</Button>
</template>
<DeviceControlDialog v-model="deviceControlVisible" :deviceId="dialogData.iotDeviceId" />
<DeviceControlDialog
v-model="deviceControlVisible"
:deviceId="dialogData.iotDeviceId"
/>
</Dialog>
</template>
@ -25,7 +37,10 @@
import Dialog from "@screen/components/Dialog/index.vue";
import Descriptions from "@screen/components/Descriptions.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 DeviceControlDialog from "./components/DeviceControlDialog.vue";
@ -99,7 +114,7 @@ export default {
if (roadInfo) this.$set(this.data, "roadName", roadInfo.roadName);
},
methods: {
handleClickTabs() { },
handleClickTabs() {},
},
};
</script>
@ -140,7 +155,7 @@ export default {
align-items: center;
justify-content: end;
>div {
> div {
font-size: 16px;
padding: 6px 12px;
}

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

@ -9,7 +9,7 @@
</ElTabPane>
<ElTabPane label="在线率统计" name="third">
<LineChart v-if="activeName === 'third'" :productId="dialogData.productId" />
<LineChart v-if="activeName === 'third'" :productId="dialogData.id" />
</ElTabPane>
</ElTabs>
</div>
@ -179,7 +179,7 @@ div.switcher {
align-items: center;
justify-content: end;
>div {
> div {
font-size: 16px;
padding: 6px 12px;
}

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

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

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

@ -14,15 +14,22 @@
<ElTabPane label="在线率统计" name="third">
<LineChart
v-if="activeName === 'third'"
:productId="dialogData.productId"
:productId="dialogData.id"
style="height: 180px"
/>
</ElTabPane>
</ElTabs>
</div>
<template #footer>
<Button v-if="activeName != 'first' && data.deviceState == '1'" @click.native="deviceControlVisible = true"> 设备操作 </Button>
<Button v-else-if="activeName != 'first'" style="background-color: #bbb;"> 设备离线 </Button>
<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>
<DeviceControlDialog
@ -99,7 +106,7 @@ export default {
label: "设备状态",
key: "deviceState",
// enum: "DeviceTypeEnum",
visible: false
visible: false,
},
{
label: "设备状态",
@ -117,7 +124,11 @@ export default {
// if (!this.dialogData.iotDeviceId) this.dialogData.iotDeviceId = '10.0.36.146-1883';
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(
// "%c [ dialogData ]-103-index.vue",
@ -134,15 +145,17 @@ export default {
if (roadInfo) this.data.roadName = roadInfo.roadName;
},
methods:{
methods: {
async getDeviceInfo() {
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",
params: {}
params: {},
});
}
}
},
},
};
</script>

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

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

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

@ -84,27 +84,7 @@
</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="type" label="型号">
<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="model" 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="deviceStatus" label="设备状态">
@ -135,7 +115,7 @@
<script>
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
import onlineCharts from "./assets/charts";
import DeviceUptime from "./components/deviceUptime";
import MonthlyEquipment from "./components/monthlyEquipment";
import DeviceSummary from "./components/deviceSummary";
@ -212,7 +192,7 @@ export default {
this.initDevice();
} else if (this.activeName == "second") {
this.queryChart = echarts.init(this.$refs["queryChart"]);
this.queryChart.setOption(chartsStatistics);
this.queryChart.setOption(onlineCharts);
this.initQueryChart();
this.initQueryTable(1);
}
@ -382,17 +362,14 @@ export default {
data0.push(val);
data1.push(100);
}
chartsStatistics.xAxis.data = dataX;
chartsStatistics.series[0].data = data0;
chartsStatistics.series[0].name = typeLabel;
chartsStatistics.series[1].data = data1;
chartsStatistics.yAxis[0].name = "在线率(%)";
chartsStatistics.legend = {
show: true,
};
onlineCharts.xAxis.data = dataX;
onlineCharts.series[0].data = data0;
onlineCharts.series[0].name = typeLabel;
onlineCharts.series[1].data = data1;
onlineCharts.yAxis[0].name = "在线率(%)";
this.$nextTick(() => {
this.queryChart.setOption(chartsStatistics);
this.queryChart.setOption(onlineCharts);
});
// } else {
// this.setStatus("01", "empty");

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

@ -125,7 +125,7 @@
<script>
import WgtTitle from "../../../widgets/title";
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 chart1 from "./assets/charts";
import chart2 from "./assets/charts2";
@ -137,7 +137,7 @@ import {
getWarningSectionType,
getSectionMarkNumber,
getRoadSectionList,
} from "../../../../../../../api/event/perceiveEvent";
} from "@/api/event/perceiveEvent";
const drawRoundRect = (ctx, x, y, width, height, radius, gr) => {
// ctx, x, y, , ,

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

@ -1,17 +1,24 @@
/* 数据 */
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 = ["畅通", "基本畅通", "轻度拥堵", "中度拥堵", "严重拥堵"];
/* 数据整合 */
let dataList = [];
@ -58,8 +65,9 @@ var options = {
tooltip: {
show: true,
trigger: "axis",
valueFormatter: function (value) {
return value + " 起";
formatter: function (params) {
let value = params[0].name.split("-");
return `${params[0].marker}${value[0]}${value[1]}: <span style="font-weight:bold;"> ${params[0].value} 起</span>`;
},
},
grid: {
@ -70,7 +78,7 @@ var options = {
containLabel: true,
},
xAxis: {
type: "category",
// type: "category",
data: nameList,
axisTick: {
show: false, //隐藏X轴刻度
@ -84,7 +92,10 @@ var options = {
show: true,
color: "#fff",
fontSize: 12,
fontFamily: "Source Han Sans CN-Regular",
formatter: function (params) {
let value = params.split("-");
return `${value[0]}\n\n${value[1]}`;
},
},
},
yAxis: [

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

@ -1,46 +1,41 @@
<template>
<div class='congestion'>
<WgtTitle :title="'在途车流量车型分类'"></WgtTitle>
<div class="congestion">
<WgtTitle title="全路段拥堵状态"></WgtTitle>
<div class="board">
<div class="charts keep-ratio " id="congestionEchartBox"></div>
<div class="charts keep-ratio" id="congestionEchartBox"></div>
</div>
</div>
</template>
<script>
import WgtTitle from '../../../widgets/title'
import WgtTitle from "../../../widgets/title";
import * as echarts from "echarts";
import chartsStatistics from "./assets/charts";
export default {
name: 'Congestion',
name: "Congestion",
components: {
WgtTitle
WgtTitle,
},
data() {
return {
}
},
created() {
return {};
},
methods: {
},
created() {},
methods: {},
mounted() {
setTimeout(() => {
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById('congestionEchartBox'));
var myChart = echarts.init(
document.getElementById("congestionEchartBox")
);
myChart.setOption(chartsStatistics);
});
});
},
}
};
</script>
<style lang='scss' scoped>
<style lang="scss" scoped>
.congestion {
width: 100%;
@ -52,11 +47,15 @@ export default {
border-radius: 5px 5px 5px 5px;
opacity: 1;
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;
justify-content: space-between;
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,
data: [
"殷家林-枢纽",
"大学城-枢纽",
"长清-枢纽",
"大学城-立交",
"长清-立交",
"松竹-枢纽",
"孝里-枢纽",
"安城-枢纽",
"平阴-枢纽",
"孝里-立交",
"平阴北-立交",
"平阴-立交",
"孔村-枢纽",
"平阴南-枢纽",
"东平-枢纽",
"平阴南-立交",
"东平-立交",
"东平湖-枢纽",
"韩岗-枢纽",
"梁山-枢纽",
"鄄郓-枢纽",
"嘉祥西-枢纽",
"梁山东-立交",
"梁山-立交",
"嘉祥西-立交",
"王官屯-枢纽",
],
position: "top",

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

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

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

@ -2,88 +2,89 @@
<div class="congestion">
<WgtTitle :title="'交通指标分析'"></WgtTitle>
<div class="board">
<!-- <div class="searchPanel">
<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> -->
<ProgressBar :dataList="dataList" class="keep-ratio progressbar" :selectIndex="7" />
<ProgressBar
class="keep-ratio"
@selectItem="selectProgress"
:dataList="dataList"
:selectIndex="selectIndex"
:reset="reset"
/>
<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">
<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-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'
: type == 2
? 'month'
: type == 4
? 'year'
: ''
" placeholder="请选择" />
<el-button type="primary" size="mini" class="btnSearch" @click="searchQuery"
icon="el-icon-search">查询</el-button>
<el-button class="btnReset" size="mini" icon="el-icon-refresh-left" @click="handleClear">重置</el-button>
<!-- </el-from> -->
<el-date-picker
size="mini"
v-if="type != '3'"
class="selectRoad"
v-model="dateTime"
style="width: 140px"
:type="
type == 1
? 'date'
: type == 2
? 'month'
: type == 4
? 'year'
: ''
"
placeholder="请选择"
/>
<el-button
type="primary"
size="mini"
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 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>
<div class="chartOrg">
@ -104,13 +105,14 @@
<script>
import RadioGroup from "@screen/components/FormConfig/components/RadioGroup/index.vue";
import WgtTitle from "../../../../../widgets/title";
import ProgressBar from "./progressBar.vue";
import ProgressBar from "@screen/components/ProgressBar.vue";
import * as echarts from "echarts";
import chart1 from "./assets/charts";
import chart2 from "./assets/charts2";
import chart3 from "./assets/charts3";
import chartsRadar from "./assets/chartsRadar";
import ElQuarterPicker from "./ElQuarterPicker";
import { getRoadSectionList } from "@/api/event/perceiveEvent";
const drawRoundRect = (ctx, x, y, width, height, radius, gr) => {
// ctx, x, y, , ,
@ -150,6 +152,9 @@ export default {
},
data() {
return {
selectIndex: 1,
selectId: 1,
reset: false,
direction: "1",
type: "1",
typeOptions: [
@ -190,56 +195,7 @@ export default {
},
],
dateTime: "2024-01-01 00:00:00",
dataList: [
{
title: "殷家林枢纽",
},
{
title: "大学城立交",
},
{
title: "长清立交",
},
{
title: "松竹枢纽",
},
{
title: "孝里立交",
},
{
title: "平阴立交",
},
{
title: "孔村枢纽",
},
{
title: "平阴南立交",
},
{
title: "魏雪枢纽",
},
{
title: "东平立交",
},
{
title: "东平湖枢纽",
},
{
title: "韩岗立交",
},
{
title: "梁山立交",
},
{
title: "鄄郓枢纽",
},
{
title: "嘉祥西立交",
},
{
title: "王官屯枢纽",
},
],
dataList: [],
quarter: "",
year: "",
list: [
@ -289,11 +245,45 @@ export default {
};
},
created() { },
methods: {},
created() {},
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() {
setTimeout(() => {
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"));
myChart1.setOption(chart1);
var myChart2 = echarts.init(document.getElementById("chart2"));
@ -317,21 +307,20 @@ export default {
gr.addColorStop(1, "rgba(92,197,255,0)");
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);
//
gr.addColorStop(1, "rgba(92,197,255,0)");
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);
//
gr.addColorStop(1, "rgba(92,197,255,0)");
gr.addColorStop(0, "rgba(92,197,255,0.5)");
context.lineWidth = 1; // 线
drawRoundRect(context, 211, 136, 220, 20, 12, gr);
drawRoundRect(context, 211, 146, 220, 20, 12, gr);
const domMap3 = document.getElementById("chart3");
let parentDiv3 = domMap3.firstChild;
@ -349,20 +338,20 @@ export default {
gr.addColorStop(1, "rgba(92,197,255,0)");
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);
//
gr.addColorStop(1, "rgba(92,197,255,0)");
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);
//
gr.addColorStop(1, "rgba(92,197,255,0)");
gr.addColorStop(0, "rgba(92,197,255,0.5)");
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 {
width: 100%;
margin: 5px 0;
.body {
display: flex;
@ -385,7 +375,7 @@ export default {
width: 100%;
font-size: 14px;
>div {
> div {
display: inline-flex;
flex-direction: column;
height: 100%;
@ -401,7 +391,7 @@ export default {
.chartOrg {
flex-direction: row !important;
>div {
> div {
display: inline-flex;
flex-direction: column;
width: 50%;
@ -409,7 +399,7 @@ export default {
}
.itemChart {
>.title {
> .title {
display: inline-flex;
width: 100%;
height: 30px;

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

@ -1,197 +1,199 @@
<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" @click="selectItem(index, -1)"></i>
<i class="before" @click="selectItem(index, +1)"></i>
<span></span>
<div>{{ item.title }}</div>
</div>
</div>
<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" @click="selectItem(index, -1)"></i>
<i class="before" @click="selectItem(index, +1)"></i>
<span></span>
<div>{{ item.title }}</div>
</div>
</div>
</div>
</template>
<script>
import { number } from 'echarts';
<script>
export default {
name: 'ProgressBar',
components: {
name: "ProgressBar",
components: {},
props: {
dataList: {
type: Array,
default: () => {
return [];
},
},
props: {
dataList: {
type: Array,
default: () => {
return []
}
},
},
data() {
return {
selectIndex: 0,
selectLine: -1,
};
},
created() {},
methods: {
selectItem(index, num) {
this.selectIndex = index;
this.selectLine = num;
},
data() {
return {
selectIndex: 0,
selectLine: -1,
}
},
created() {
},
methods: {
selectItem(index, num) {
this.selectIndex = index;
this.selectLine = num
}
},
mounted() {
},
}
},
mounted() {},
};
</script>
<style lang='scss' scoped>
<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;
>div {
> .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: 180px;
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 {
position: relative;
display: inline-flex;
width: 100%;
height: 35px;
align-items: center;
justify-content: center;
top: 5px;
margin-top: 10px;
font-size: 14px;
color: #c7c7c7;
}
> span::after {
content: "";
position: absolute;
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: 180px;
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 {
position: relative;
display: inline-flex;
width: 100%;
align-items: center;
justify-content: center;
top: 5px;
margin-top: 10px;
font-size: 14px;
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;
}
}
width: 15px;
height: 15px;
border: 1px solid #c7c7c7;
border-radius: 50%;
opacity: 1;
top: -3.5px;
left: -3px;
}
}
}
}
</style>

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

@ -1,148 +1,139 @@
<template>
<div class='TrafficFlowMax'>
<el-tabs class="footTabs" v-model="activeName" @tab-click="changeTabs">
<el-tab-pane label="综合指标分析" name="first">
<IndicatorAnalysis />
</el-tab-pane>
<el-tab-pane label="综合指标查询" name="second">
<IndicatorQuery />
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import IndicatorAnalysis from './components/IndicatorAnalysis';
import IndicatorQuery from './components/IndicatorQuery';
<div class="TrafficFlowMax">
<el-tabs class="footTabs" v-model="activeName" @tab-click="changeTabs">
<el-tab-pane label="综合指标分析" name="first">
<IndicatorAnalysis />
</el-tab-pane>
<el-tab-pane label="综合指标查询" name="second">
<IndicatorQuery />
</el-tab-pane>
</el-tabs>
</div>
</template>
export default {
name: 'trafficSituation',
components: {
IndicatorAnalysis,
IndicatorQuery
},
data(){
return {
activeName:"first"
}
},
methods:{
changeTabs(){
}
}
}
</script>
<style lang='scss' scoped>
<script>
import IndicatorAnalysis from "./components/IndicatorAnalysis";
import IndicatorQuery from "./components/IndicatorQuery";
::v-deep .el-tabs__item{
display: inline-flex;
justify-content: center;
font-size: 16px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #FFFFFF;
min-width:128px;
position: relative;
left:10px;
}
export default {
name: "trafficSituation",
components: {
IndicatorAnalysis,
IndicatorQuery,
},
data() {
return {
activeName: "first",
};
},
methods: {
changeTabs() {},
},
};
</script>
::v-deep .el-tabs__active-bar {
min-width:128px;
}
<style lang="scss" scoped>
::v-deep .el-tabs__item {
display: inline-flex;
justify-content: center;
font-size: 16px;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #ffffff;
min-width: 128px;
position: relative;
left: 10px;
}
::v-deep .el-tabs__nav-wrap::after {
background-color: #133242;
opacity: 0.1;
}
::v-deep .el-tabs__active-bar {
min-width: 128px;
}
::v-deep .el-tabs__header {
margin:0px !important;
}
::v-deep .el-tabs__nav-wrap::after {
background-color: #133242;
opacity: 0.1;
}
.footTabs {
display: inline;
width:99%;
::v-deep .el-tabs__header {
margin: 0px !important;
}
}
.footTabs {
display: inline;
width: 99%;
}
.TrafficFlowMax {
width: 100%;
height: 100%;
position: relative;
z-index: 6;
color: white;
padding: 15px 25px;
.head{
width: 98%;
margin: auto;
margin-top: 15px;
.TrafficFlowMax {
width: 100%;
height: 100%;
position: relative;
z-index: 6;
color: white;
padding: 15px 25px;
.head {
width: 98%;
margin: auto;
margin-top: 15px;
}
.content {
width: 98%;
margin: auto;
display: flex;
flex: 1;
pointer-events: none;
margin-top: 19px;
> div {
pointer-events: auto;
}
.content {
width: 98%;
margin: auto;
display: flex;
flex: 1;
pointer-events: none;
margin-top: 19px;
>div {
pointer-events: auto;
}
.content-l {
width: calc(50%);
min-width:460px;
margin-right:20px;
}
.content-m {
display: inline-flex;
flex-direction: column;
width: calc(100% / 4 );
margin-right:20px;
.content-l {
width: calc(50%);
min-width: 460px;
margin-right: 20px;
}
.content-m-t {
width:100%;
height:240px;
margin-bottom: 20px;
}
}
.content-r {
width: 49.4%;
.content-m {
display: inline-flex;
flex-direction: column;
width: calc(100% / 4);
margin-right: 20px;
.content-m-t {
width: 100%;
height: 240px;
margin-bottom: 20px;
}
}
.foot{
width: 98%;
margin: auto;
display: flex;
justify-content: space-between;
flex: 1;
pointer-events: none;
margin-top: 8px;
>div {
pointer-events: auto;
}
.content-r {
width: 49.4%;
}
}
.foot {
width: 98%;
margin: auto;
display: flex;
justify-content: space-between;
flex: 1;
pointer-events: none;
margin-top: 8px;
> div {
pointer-events: auto;
}
.foot-w {
width:100%;
.foot-w {
width: 100%;
}
}
.foot-l {
width: 726px;
}
.foot-m {
width: 613px;
}
.foot-r {
width: 493px;
}
.foot-l {
width: 726px;
}
.foot-m {
width: 613px;
}
.foot-r {
width: 493px;
}
}
</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.66.196:8087`, //正晨后台 连现场物联 刘文阁2
// 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.76.181:8087`, //王家宝
// target: `http://10.168.76.181:8087`, //王家宝
// target: `http://10.168.65.103:8097`,
changeOrigin: true,
pathRewrite: {

Loading…
Cancel
Save