fix:日常监测报告页面,工单完善
This commit is contained in:
parent
669552cce1
commit
f4338599d9
@ -58,6 +58,8 @@ export default {
|
||||
roadNum: 0,
|
||||
// 病害趋势echart数据
|
||||
diseaseChart: [],
|
||||
// 道路分布echart数据
|
||||
roadChart: [],
|
||||
};
|
||||
},
|
||||
created() {
|
||||
|
||||
@ -155,9 +155,7 @@ export default {
|
||||
if (code === 200) {
|
||||
this.total = data.total;
|
||||
this.newTotal = data.today;
|
||||
let all = 0;
|
||||
this.distributionList = data.data.map((item) => {
|
||||
all += item.value;
|
||||
return {
|
||||
value: item.value,
|
||||
name: item.label,
|
||||
|
||||
@ -46,7 +46,7 @@
|
||||
import * as echarts from "echarts";
|
||||
// 接口
|
||||
import { getEquipment, getEquipmentLog } from "@/api/xj/index/index";
|
||||
import fssmScroll from "../../components/scroll/fssm-scroll.vue";
|
||||
import fssmScroll from "@/components/scroll/fssm-scroll.vue";
|
||||
export default {
|
||||
components: { fssmScroll },
|
||||
name: "RoadIndex",
|
||||
|
||||
@ -53,20 +53,6 @@
|
||||
clearable
|
||||
></el-cascader>
|
||||
</el-form-item>
|
||||
<el-form-item label="病害状态" prop="state">
|
||||
<el-select
|
||||
v-model="noticeForm.state"
|
||||
placeholder="请选择病害状态"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in defectStatus"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="上下行" prop="inspectDirection">
|
||||
<el-select
|
||||
v-model="noticeForm.inspectDirection"
|
||||
@ -146,7 +132,7 @@
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- 导航栏 -->
|
||||
<el-tabs v-model="activeName" @tab-click="getList">
|
||||
<el-tabs v-model="activeName" @tab-click="resetQuery">
|
||||
<el-tab-pane
|
||||
v-for="(item, index) in editableTabs"
|
||||
:key="`tabs-${index}`"
|
||||
@ -350,8 +336,6 @@ export default {
|
||||
noticeForm: {
|
||||
// 道路名称
|
||||
segmentName: "",
|
||||
// 病害状态
|
||||
state: "",
|
||||
// 上下行
|
||||
inspectDirection: "",
|
||||
// 公里桩
|
||||
@ -405,8 +389,6 @@ export default {
|
||||
segmentList: [],
|
||||
// 病害类型下拉级联
|
||||
tableDefect: [],
|
||||
// 病害状态
|
||||
defectStatus: [],
|
||||
// 导航栏选择绑定
|
||||
activeName: "已完成",
|
||||
// 导航栏列表
|
||||
@ -448,7 +430,6 @@ export default {
|
||||
this.getList();
|
||||
this.getSegmentList();
|
||||
this.getDefectData();
|
||||
this.getDefectStatusList();
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
@ -476,15 +457,12 @@ export default {
|
||||
},
|
||||
|
||||
/**
|
||||
* @description: 获取病害状态下拉数据
|
||||
* @description: 切换导航栏
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
getDefectStatusList() {
|
||||
getDefectStatus().then(({ code, data }) => {
|
||||
if (code === 200) {
|
||||
this.defectStatus = data;
|
||||
}
|
||||
});
|
||||
changeTab() {
|
||||
this.resetQuery();
|
||||
},
|
||||
|
||||
/**
|
||||
@ -495,7 +473,18 @@ export default {
|
||||
handleQuery() {
|
||||
this.$refs.noticeForm.validate((valid) => {
|
||||
if (valid) {
|
||||
this.searchForm = JSON.parse(JSON.stringify(this.noticeForm));
|
||||
const data = {
|
||||
...this.noticeForm,
|
||||
classType: this.paramsDefectType ? this.paramsDefectType[0] : "",
|
||||
defectType: this.paramsDefectType
|
||||
? this.paramsDefectType.length > 1
|
||||
? this.paramsDefectType[1]
|
||||
: ""
|
||||
: "",
|
||||
startTime: this.dateTime ? this.dateTime[0] : "",
|
||||
endTime: this.dateTime ? this.dateTime[1] : "",
|
||||
};
|
||||
this.searchForm = JSON.parse(JSON.stringify(data));
|
||||
this.pagination.page = 1;
|
||||
this.getList();
|
||||
}
|
||||
@ -508,11 +497,10 @@ export default {
|
||||
* @return {*}
|
||||
*/
|
||||
resetQuery() {
|
||||
this.$refs.noticeForm.resetFields();
|
||||
this.noticeForm = {
|
||||
// 道路名称
|
||||
segmentName: "",
|
||||
// 病害状态
|
||||
state: "",
|
||||
// 上下行
|
||||
inspectDirection: "",
|
||||
// 公里桩
|
||||
@ -525,6 +513,8 @@ export default {
|
||||
minArea: undefined,
|
||||
maxArea: undefined,
|
||||
};
|
||||
this.paramsDefectType = [];
|
||||
this.dateTime = [];
|
||||
this.searchForm = {};
|
||||
this.pagination.page = 1;
|
||||
this.getList();
|
||||
@ -540,8 +530,6 @@ export default {
|
||||
...this.searchForm,
|
||||
...this.pagination,
|
||||
maintenanceStatus: this.activeName,
|
||||
startTime: this.dateTime ? this.dateTime[0] : "",
|
||||
endTime: this.dateTime ? this.dateTime[1] : "",
|
||||
};
|
||||
getMaintenanceNoticeList(data)
|
||||
.then(({ code, rows, total }) => {
|
||||
|
||||
@ -0,0 +1,293 @@
|
||||
<!--
|
||||
* @Author: SunTao 328867980@qq.com
|
||||
* @Date: 2024-11-18 09:13:34
|
||||
* @LastEditors: SunTao 328867980@qq.com
|
||||
* @LastEditTime: 2024-11-18 09:13:42
|
||||
* @FilePath: \znxjxt-ui\src\views\xj\inspection-report\daily-monitoring\components\four-content.vue
|
||||
* @Description: 巡检报告-日常监测报告-路况评定
|
||||
-->
|
||||
<template>
|
||||
<div class="four-content">
|
||||
<div class="title">
|
||||
<span>路况评定</span>
|
||||
</div>
|
||||
<div class="traffic-chart" ref="trafficChart"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as echarts from "echarts";
|
||||
// 接口
|
||||
import { getRoadConditionLog } from "@/api/xj/index/index";
|
||||
export default {
|
||||
name: "FourContent",
|
||||
data() {
|
||||
return {};
|
||||
},
|
||||
created() {
|
||||
this.getLogData();
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* @description: 获取echart数据
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
getLogData() {
|
||||
getRoadConditionLog().then(({ code, data }) => {
|
||||
if (code === 200) {
|
||||
this.trafficEchartData = data;
|
||||
this.$nextTick(() => {
|
||||
this.drawTrafficChart();
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* @description: 绘制柱状图
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
drawTrafficChart() {
|
||||
if (this.$refs.trafficChart) {
|
||||
const xData = this.trafficEchartData.map((item) => {
|
||||
return item.name;
|
||||
});
|
||||
const y1Data = this.trafficEchartData.map((item) => {
|
||||
return item.road;
|
||||
});
|
||||
const y2Data = this.trafficEchartData.map((item) => {
|
||||
return item.event;
|
||||
});
|
||||
const y3Data = this.trafficEchartData.map((item) => {
|
||||
return item.bridge;
|
||||
});
|
||||
const y4Data = this.trafficEchartData.map((item) => {
|
||||
return item.green;
|
||||
});
|
||||
const chart = echarts.init(this.$refs.trafficChart);
|
||||
chart.setOption({
|
||||
color: ["#388BD8", "#04DAD7", "#F8A74E", "#8448FF"],
|
||||
title: [
|
||||
// 中心比例
|
||||
{
|
||||
text: "病害趋势",
|
||||
x: "1%",
|
||||
y: "1%",
|
||||
textStyle: {
|
||||
fontSize: 14,
|
||||
},
|
||||
},
|
||||
],
|
||||
legend: {
|
||||
show: true,
|
||||
right: "3%",
|
||||
},
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
padding: [5, 10, 5, 10],
|
||||
},
|
||||
grid: {
|
||||
top: "20%",
|
||||
left: "7%",
|
||||
right: "4%",
|
||||
bottom: "12%",
|
||||
},
|
||||
xAxis: [
|
||||
{
|
||||
data: xData,
|
||||
type: "category",
|
||||
axisTick: {
|
||||
show: false, //隐藏X轴刻度
|
||||
},
|
||||
axisLabel: { color: "#A2B0B8" },
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: "#3C6579",
|
||||
width: 1,
|
||||
},
|
||||
},
|
||||
splitLine: {
|
||||
show: false,
|
||||
},
|
||||
boundaryGap: false,
|
||||
},
|
||||
],
|
||||
yAxis: [
|
||||
{
|
||||
nameTextStyle: {
|
||||
color: "#fff",
|
||||
fontSize: 12,
|
||||
},
|
||||
name: "",
|
||||
type: "value",
|
||||
axisLabel: {
|
||||
show: true,
|
||||
color: "#9eaaba",
|
||||
},
|
||||
axisLine: { show: false },
|
||||
splitLine: { show: true },
|
||||
},
|
||||
],
|
||||
series: [
|
||||
{
|
||||
name: "路面病害数",
|
||||
type: "line",
|
||||
showSymbol: false,
|
||||
smooth: true,
|
||||
areaStyle: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{
|
||||
offset: 0,
|
||||
color: "#388BD8",
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: "#ffffff",
|
||||
},
|
||||
]),
|
||||
},
|
||||
data: y1Data,
|
||||
},
|
||||
{
|
||||
name: "交安病害数",
|
||||
type: "line",
|
||||
showSymbol: false,
|
||||
smooth: true,
|
||||
areaStyle: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{
|
||||
offset: 0,
|
||||
color: "#04DAD7",
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: "#ffffff",
|
||||
},
|
||||
]),
|
||||
},
|
||||
data: y3Data,
|
||||
},
|
||||
{
|
||||
name: "桥隧病害数",
|
||||
type: "line",
|
||||
showSymbol: false,
|
||||
smooth: true,
|
||||
areaStyle: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{
|
||||
offset: 0,
|
||||
color: "#F8A74E",
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: "#ffffff",
|
||||
},
|
||||
]),
|
||||
},
|
||||
data: y4Data,
|
||||
},
|
||||
{
|
||||
name: "绿化问题数",
|
||||
type: "line",
|
||||
showSymbol: false,
|
||||
smooth: true,
|
||||
areaStyle: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{
|
||||
offset: 0,
|
||||
color: "#8448FF",
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: "#ffffff",
|
||||
},
|
||||
]),
|
||||
},
|
||||
data: y2Data,
|
||||
},
|
||||
],
|
||||
dataZoom: [
|
||||
{
|
||||
// 设置滚动条的隐藏与显示
|
||||
show: false,
|
||||
// 设置滚动条类型
|
||||
type: "slider",
|
||||
// 设置背景颜色
|
||||
backgroundColor: "rgba(225,225,225,0.2)",
|
||||
// 设置选中范围的填充颜色
|
||||
fillerColor: "#ccc",
|
||||
// 设置边框颜色
|
||||
borderColor: "rgba(225,225,225,0.2)",
|
||||
// 是否显示detail,即拖拽时候显示详细数值信息
|
||||
showDetail: false,
|
||||
// 数据窗口范围的起始数值
|
||||
startValue: 0,
|
||||
// 数据窗口范围的结束数值(一页显示多少条数据)
|
||||
endValue: 6,
|
||||
// empty:当前数据窗口外的数据,被设置为空。
|
||||
// 即不会影响其他轴的数据范围
|
||||
filterMode: "empty",
|
||||
// 设置滚动条宽度,相对于盒子宽度
|
||||
width: "80%",
|
||||
// 设置滚动条高度
|
||||
height: 5,
|
||||
// 设置滚动条显示位置
|
||||
left: "center",
|
||||
// 是否锁定选择区域(或叫做数据窗口)的大小
|
||||
zoomLoxk: true,
|
||||
// 控制手柄的尺寸
|
||||
handleSize: 10,
|
||||
// dataZoom-slider组件离容器下侧的距离
|
||||
bottom: 0,
|
||||
},
|
||||
{
|
||||
// 没有下面这块的话,只能拖动滚动条,
|
||||
// 鼠标滚轮在区域内不能控制外部滚动条
|
||||
type: "inside",
|
||||
// 滚轮是否触发缩放
|
||||
zoomOnMouseWheel: false,
|
||||
// 鼠标滚轮触发滚动
|
||||
moveOnMouseMove: true,
|
||||
moveOnMouseWheel: true,
|
||||
},
|
||||
],
|
||||
});
|
||||
window.addEventListener("resize", () => {
|
||||
chart.resize();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.four-content {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 0.5rem;
|
||||
|
||||
.title {
|
||||
width: 100%;
|
||||
height: 10%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding-left: 3rem;
|
||||
background: url("~@/assets/index/div-title.png") no-repeat;
|
||||
background-size: 5%;
|
||||
background-position: 0 30%;
|
||||
|
||||
span {
|
||||
font-family: "DouYu";
|
||||
}
|
||||
}
|
||||
|
||||
.traffic-chart {
|
||||
width: 100%;
|
||||
height: 90%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,243 @@
|
||||
<!--
|
||||
* @Author: SunTao 328867980@qq.com
|
||||
* @Date: 2024-11-18 09:13:34
|
||||
* @LastEditors: SunTao 328867980@qq.com
|
||||
* @LastEditTime: 2024-11-18 09:13:42
|
||||
* @FilePath: \znxjxt-ui\src\views\xj\inspection-report\daily-monitoring\components\one-content.vue
|
||||
* @Description: 巡检报告-日常监测报告-今日巡查
|
||||
-->
|
||||
<template>
|
||||
<div class="one-content">
|
||||
<div class="title">
|
||||
<span>今日巡查</span>
|
||||
</div>
|
||||
<div class="day-echart" ref="dayChart"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getTaskToday } from "@/api/xj/index/index";
|
||||
import * as echarts from "echarts";
|
||||
export default {
|
||||
name: "OneContent",
|
||||
data() {
|
||||
return {
|
||||
// 病害趋势echart数据
|
||||
diseaseChart: [],
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getData();
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* @description: 获取数据
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
getData() {
|
||||
getTaskToday().then(({ code, data }) => {
|
||||
if (code === 200) {
|
||||
this.diseaseChart = data.xclcbhqs;
|
||||
this.$nextTick(() => {
|
||||
this.drawTrendChart();
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* @description: 绘制病害趋势柱状图
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
drawTrendChart() {
|
||||
const xData = this.diseaseChart.map((item) => {
|
||||
return item.label;
|
||||
});
|
||||
const y1Data = this.diseaseChart.map((item) => {
|
||||
return item.value;
|
||||
});
|
||||
const y2Data = this.diseaseChart.map((item) => {
|
||||
return item.long;
|
||||
});
|
||||
if (this.$refs.dayChart) {
|
||||
const chart = echarts.init(this.$refs.dayChart);
|
||||
chart.setOption({
|
||||
color: ["#388BD8", "#FFC400"],
|
||||
title: [
|
||||
// 中心比例
|
||||
{
|
||||
text: "巡查里程-病害趋势",
|
||||
x: "1%",
|
||||
y: "1%",
|
||||
textStyle: {
|
||||
fontSize: 14,
|
||||
},
|
||||
},
|
||||
],
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
},
|
||||
grid: {
|
||||
top: "20%",
|
||||
left: "3%",
|
||||
right: "4%",
|
||||
bottom: "3%",
|
||||
containLabel: true,
|
||||
},
|
||||
legend: {
|
||||
right: "5%",
|
||||
},
|
||||
xAxis: [
|
||||
{
|
||||
type: "category",
|
||||
data: xData,
|
||||
axisTick: {
|
||||
show: false, //隐藏X轴刻度
|
||||
},
|
||||
axisLabel: { color: "#A2B0B8" },
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: "#3C6579",
|
||||
width: 1,
|
||||
},
|
||||
},
|
||||
splitLine: {
|
||||
show: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
yAxis: [
|
||||
{
|
||||
name: "",
|
||||
type: "value",
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: "#A2B0B8",
|
||||
},
|
||||
},
|
||||
axisLabel: {
|
||||
// "formatter": "{value} T/h"
|
||||
// formatter: "{value}",
|
||||
},
|
||||
splitLine: {
|
||||
show: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "",
|
||||
type: "value",
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: "#A2B0B8",
|
||||
},
|
||||
},
|
||||
axisLabel: {
|
||||
// "formatter": "{value} T/W㎡"
|
||||
// formatter: "{value}",
|
||||
},
|
||||
splitLine: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
],
|
||||
series: [
|
||||
{
|
||||
type: "bar",
|
||||
barWidth: 10,
|
||||
name: "累计病害",
|
||||
data: y1Data,
|
||||
},
|
||||
{
|
||||
type: "line",
|
||||
symbolSize: 5,
|
||||
name: "巡查里程",
|
||||
smooth: 1,
|
||||
data: y2Data,
|
||||
yAxisIndex: 1,
|
||||
},
|
||||
],
|
||||
dataZoom: [
|
||||
{
|
||||
// 设置滚动条的隐藏与显示
|
||||
show: false,
|
||||
// 设置滚动条类型
|
||||
type: "slider",
|
||||
// 设置背景颜色
|
||||
backgroundColor: "rgba(225,225,225,0.2)",
|
||||
// 设置选中范围的填充颜色
|
||||
fillerColor: "#ccc",
|
||||
// 设置边框颜色
|
||||
borderColor: "rgba(225,225,225,0.2)",
|
||||
// 是否显示detail,即拖拽时候显示详细数值信息
|
||||
showDetail: false,
|
||||
// 数据窗口范围的起始数值
|
||||
startValue: 0,
|
||||
// 数据窗口范围的结束数值(一页显示多少条数据)
|
||||
endValue: 6,
|
||||
// empty:当前数据窗口外的数据,被设置为空。
|
||||
// 即不会影响其他轴的数据范围
|
||||
filterMode: "empty",
|
||||
// 设置滚动条宽度,相对于盒子宽度
|
||||
width: "80%",
|
||||
// 设置滚动条高度
|
||||
height: 5,
|
||||
// 设置滚动条显示位置
|
||||
left: "center",
|
||||
// 是否锁定选择区域(或叫做数据窗口)的大小
|
||||
zoomLoxk: true,
|
||||
// 控制手柄的尺寸
|
||||
handleSize: 10,
|
||||
// dataZoom-slider组件离容器下侧的距离
|
||||
bottom: 0,
|
||||
},
|
||||
{
|
||||
// 没有下面这块的话,只能拖动滚动条,
|
||||
// 鼠标滚轮在区域内不能控制外部滚动条
|
||||
type: "inside",
|
||||
// 滚轮是否触发缩放
|
||||
zoomOnMouseWheel: false,
|
||||
// 鼠标滚轮触发滚动
|
||||
moveOnMouseMove: true,
|
||||
moveOnMouseWheel: true,
|
||||
},
|
||||
],
|
||||
});
|
||||
window.addEventListener("resize", () => {
|
||||
chart.resize();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.one-content {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 0.5rem;
|
||||
|
||||
.title {
|
||||
width: 100%;
|
||||
height: 10%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding-left: 3rem;
|
||||
background: url("~@/assets/index/div-title.png") no-repeat;
|
||||
background-size: 5%;
|
||||
background-position: 0 30%;
|
||||
|
||||
span {
|
||||
font-family: "DouYu";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.day-echart {
|
||||
height: 90%;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,234 @@
|
||||
<!--
|
||||
* @Author: SunTao 328867980@qq.com
|
||||
* @Date: 2024-11-18 09:13:34
|
||||
* @LastEditors: SunTao 328867980@qq.com
|
||||
* @LastEditTime: 2024-11-18 09:13:42
|
||||
* @FilePath: \znxjxt-ui\src\views\xj\inspection-report\daily-monitoring\components\three-content.vue
|
||||
* @Description: 巡检报告-日常监测报告-公路资产
|
||||
-->
|
||||
<template>
|
||||
<div class="three-content">
|
||||
<div class="title">
|
||||
<span>公路资产</span>
|
||||
</div>
|
||||
<div class="road-chart" ref="roadChart"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getEquipmentLog } from "@/api/xj/index/index";
|
||||
import FssmScroll from "@/components/scroll/fssm-scroll.vue";
|
||||
import * as echarts from "echarts";
|
||||
export default {
|
||||
components: { FssmScroll },
|
||||
name: "ThreeContent",
|
||||
data() {
|
||||
return {};
|
||||
},
|
||||
created() {
|
||||
this.getBottomData();
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* @description: 获取底部echart数据
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
getBottomData() {
|
||||
getEquipmentLog().then(({ code, data }) => {
|
||||
if (code === 200) {
|
||||
this.roadChartData = data;
|
||||
this.$nextTick(() => {
|
||||
this.drawRoadChart();
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* @description: 绘制echart图
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
drawRoadChart() {
|
||||
if (this.$refs.roadChart) {
|
||||
const xData = this.roadChartData.map((item) => {
|
||||
return item.label;
|
||||
});
|
||||
const y1Data = this.roadChartData.map((item) => {
|
||||
return item.total;
|
||||
});
|
||||
const y2Data = this.roadChartData.map((item) => {
|
||||
return item.value;
|
||||
});
|
||||
const chart = echarts.init(this.$refs.roadChart);
|
||||
chart.setOption({
|
||||
color: ["#388BD8", "#04DAD7"],
|
||||
title: [
|
||||
// 中心比例
|
||||
{
|
||||
text: "路产趋势",
|
||||
x: "1%",
|
||||
y: "1%",
|
||||
textStyle: {
|
||||
fontSize: 14,
|
||||
},
|
||||
},
|
||||
],
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
},
|
||||
grid: {
|
||||
top: "20%",
|
||||
left: "3%",
|
||||
right: "4%",
|
||||
bottom: "3%",
|
||||
containLabel: true,
|
||||
},
|
||||
legend: {
|
||||
right: "5%",
|
||||
},
|
||||
xAxis: [
|
||||
{
|
||||
type: "category",
|
||||
data: xData,
|
||||
axisTick: {
|
||||
show: false, //隐藏X轴刻度
|
||||
},
|
||||
axisLabel: { color: "#A2B0B8" },
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: "#3C6579",
|
||||
width: 1,
|
||||
},
|
||||
},
|
||||
splitLine: {
|
||||
show: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
yAxis: [
|
||||
{
|
||||
name: "",
|
||||
type: "value",
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: "#A2B0B8",
|
||||
},
|
||||
},
|
||||
axisLabel: {
|
||||
// "formatter": "{value} T/h"
|
||||
// formatter: "{value}",
|
||||
},
|
||||
splitLine: {
|
||||
show: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
series: [
|
||||
{
|
||||
name: "路产总数",
|
||||
type: "bar",
|
||||
barWidth: 20,
|
||||
itemStyle: {
|
||||
borderWidth: 1,
|
||||
borderRadius: [3, 3, 0, 0],
|
||||
color: "#388BD8",
|
||||
},
|
||||
data: y1Data,
|
||||
},
|
||||
{
|
||||
name: "异常设施数量",
|
||||
type: "bar",
|
||||
barWidth: 20,
|
||||
itemStyle: {
|
||||
borderWidth: 1,
|
||||
borderRadius: [3, 3, 0, 0],
|
||||
color: "#38C8D8",
|
||||
},
|
||||
data: y2Data,
|
||||
},
|
||||
],
|
||||
dataZoom: [
|
||||
{
|
||||
// 设置滚动条的隐藏与显示
|
||||
show: false,
|
||||
// 设置滚动条类型
|
||||
type: "slider",
|
||||
// 设置背景颜色
|
||||
backgroundColor: "rgba(225,225,225,0.2)",
|
||||
// 设置选中范围的填充颜色
|
||||
fillerColor: "#ccc",
|
||||
// 设置边框颜色
|
||||
borderColor: "rgba(225,225,225,0.2)",
|
||||
// 是否显示detail,即拖拽时候显示详细数值信息
|
||||
showDetail: false,
|
||||
// 数据窗口范围的起始数值
|
||||
startValue: 0,
|
||||
// 数据窗口范围的结束数值(一页显示多少条数据)
|
||||
endValue: 6,
|
||||
// empty:当前数据窗口外的数据,被设置为空。
|
||||
// 即不会影响其他轴的数据范围
|
||||
filterMode: "empty",
|
||||
// 设置滚动条宽度,相对于盒子宽度
|
||||
width: "80%",
|
||||
// 设置滚动条高度
|
||||
height: 5,
|
||||
// 设置滚动条显示位置
|
||||
left: "center",
|
||||
// 是否锁定选择区域(或叫做数据窗口)的大小
|
||||
zoomLoxk: true,
|
||||
// 控制手柄的尺寸
|
||||
handleSize: 10,
|
||||
// dataZoom-slider组件离容器下侧的距离
|
||||
bottom: 0,
|
||||
},
|
||||
{
|
||||
// 没有下面这块的话,只能拖动滚动条,
|
||||
// 鼠标滚轮在区域内不能控制外部滚动条
|
||||
type: "inside",
|
||||
// 滚轮是否触发缩放
|
||||
zoomOnMouseWheel: false,
|
||||
// 鼠标滚轮触发滚动
|
||||
moveOnMouseMove: true,
|
||||
moveOnMouseWheel: true,
|
||||
},
|
||||
],
|
||||
});
|
||||
window.addEventListener("resize", () => {
|
||||
chart.resize();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.three-content {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 0.5rem;
|
||||
|
||||
.title {
|
||||
width: 100%;
|
||||
height: 10%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding-left: 3rem;
|
||||
background: url("~@/assets/index/div-title.png") no-repeat;
|
||||
background-size: 5%;
|
||||
background-position: 0 30%;
|
||||
|
||||
span {
|
||||
font-family: "DouYu";
|
||||
}
|
||||
}
|
||||
|
||||
.road-chart {
|
||||
width: 100%;
|
||||
height: 90%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,285 @@
|
||||
<!--
|
||||
* @Author: SunTao 328867980@qq.com
|
||||
* @Date: 2024-11-18 09:13:34
|
||||
* @LastEditors: SunTao 328867980@qq.com
|
||||
* @LastEditTime: 2024-11-18 09:13:42
|
||||
* @FilePath: \znxjxt-ui\src\views\xj\inspection-report\daily-monitoring\components\twe-content.vue
|
||||
* @Description: 巡检报告-日常监测报告-病害识别
|
||||
-->
|
||||
<template>
|
||||
<div class="twe-content">
|
||||
<div class="title">
|
||||
<span>病害识别</span>
|
||||
</div>
|
||||
<div class="disease-echart">
|
||||
<div class="disease-div" ref="diseaseChart"></div>
|
||||
<div class="disease-legnd">
|
||||
<fssm-scroll>
|
||||
<div
|
||||
class="legnd-div"
|
||||
v-for="(item, index) in distributionList"
|
||||
:key="`disease-${index}`"
|
||||
>
|
||||
<div class="name">
|
||||
<span
|
||||
class="index"
|
||||
:style="{ backgroundColor: distributionColor[index] }"
|
||||
></span>
|
||||
<span>{{ item.name }}</span>
|
||||
</div>
|
||||
<div class="rate">{{ item.rate }}</div>
|
||||
</div>
|
||||
</fssm-scroll>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getTotalList } from "@/api/xj/index/index";
|
||||
import * as echarts from "echarts";
|
||||
import FssmScroll from "@/components/scroll/fssm-scroll.vue";
|
||||
export default {
|
||||
name: "TweContent",
|
||||
components: {
|
||||
FssmScroll,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// 病害类型颜色盘
|
||||
distributionColor: [
|
||||
"#3678FF",
|
||||
"#F8A74E",
|
||||
"#04DAD7",
|
||||
"#00D669",
|
||||
"#8448FF",
|
||||
"#F6D566",
|
||||
"#00B1FF",
|
||||
"#62CFFF",
|
||||
"#6A9BFF",
|
||||
"#B38EFF",
|
||||
"#3678FF",
|
||||
"#F8A74E",
|
||||
"#04DAD7",
|
||||
"#00D669",
|
||||
"#8448FF",
|
||||
"#F6D566",
|
||||
"#00B1FF",
|
||||
"#62CFFF",
|
||||
"#6A9BFF",
|
||||
"#B38EFF",
|
||||
"#3678FF",
|
||||
"#F8A74E",
|
||||
"#04DAD7",
|
||||
"#00D669",
|
||||
"#8448FF",
|
||||
],
|
||||
// 病害类型分布数据
|
||||
distributionList: [],
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getBottomData();
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* @description: 获取数据
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
getBottomData() {
|
||||
getTotalList({ dateType: this.checkCycle }).then(({ code, data }) => {
|
||||
if (code === 200) {
|
||||
this.total = data.total;
|
||||
this.newTotal = data.today;
|
||||
this.distributionList = data.data.map((item) => {
|
||||
return {
|
||||
value: item.value,
|
||||
name: item.label,
|
||||
rate: `${((item.value / data.total) * 100).toFixed(0)}%`,
|
||||
};
|
||||
});
|
||||
this.$nextTick(() => {
|
||||
this.drawDistributionChart();
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* @description: 绘制病害类型分布图
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
drawDistributionChart() {
|
||||
if (this.$refs.diseaseChart) {
|
||||
const chart = echarts.init(this.$refs.diseaseChart);
|
||||
chart.setOption({
|
||||
color: this.distributionColor,
|
||||
title: [
|
||||
// 中心比例
|
||||
{
|
||||
text: "新增病害类型分布",
|
||||
x: "1%",
|
||||
y: "1%",
|
||||
textStyle: {
|
||||
fontSize: 14,
|
||||
},
|
||||
},
|
||||
],
|
||||
series: [
|
||||
{
|
||||
type: "pie",
|
||||
// hoverAnimation: true,
|
||||
minAngle: 1,
|
||||
padAngle: 4,
|
||||
hoverOffset: 0,
|
||||
startAngle: 0, //起始角度
|
||||
clockwise: false, //是否顺时针
|
||||
radius: ["55%", "70%"],
|
||||
center: ["50%", "56%"],
|
||||
avoidLabelOverlap: false,
|
||||
animationDuration: 3000,
|
||||
emphasis: {
|
||||
label: {
|
||||
formatter: ["{a|{c}}" + "\n" + "{b|{b}}"].join("\n"),
|
||||
show: true,
|
||||
fontSize: "30",
|
||||
fontWeight: "bold",
|
||||
rich: {
|
||||
a: {
|
||||
fontSize: 18,
|
||||
lineHeight: 18,
|
||||
color: "#000",
|
||||
},
|
||||
b: {
|
||||
color: "#000",
|
||||
fontSize: 16,
|
||||
lineHeight: 30,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
label: {
|
||||
show: false,
|
||||
position: "center",
|
||||
color: "rgba(13, 17, 29,0)",
|
||||
},
|
||||
labelLine: {
|
||||
show: false,
|
||||
},
|
||||
data: this.distributionList,
|
||||
zlevel: 30,
|
||||
},
|
||||
{
|
||||
type: "pie",
|
||||
radius: ["35%", "55%"],
|
||||
center: ["50%", "56%"],
|
||||
// hoverAnimation: true,
|
||||
hoverOffset: 0,
|
||||
startAngle: 0, //起始角度
|
||||
clockwise: false, //是否顺时针
|
||||
padAngle: 4,
|
||||
minAngle: 1,
|
||||
animationDuration: 3000,
|
||||
emphasis: { scale: false },
|
||||
label: {
|
||||
show: false,
|
||||
},
|
||||
itemStyle: {
|
||||
color: "#E4EDFD",
|
||||
},
|
||||
data: this.distributionList,
|
||||
z: 1,
|
||||
},
|
||||
],
|
||||
});
|
||||
window.addEventListener("resize", () => {
|
||||
chart.resize();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.twe-content {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 0.5rem;
|
||||
|
||||
.title {
|
||||
width: 100%;
|
||||
height: 10%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding-left: 3rem;
|
||||
background: url("~@/assets/index/div-title.png") no-repeat;
|
||||
background-size: 5%;
|
||||
background-position: 0 30%;
|
||||
|
||||
span {
|
||||
font-family: "DouYu";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.disease-echart {
|
||||
height: 90%;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
|
||||
> div {
|
||||
height: 100%;
|
||||
width: 50%;
|
||||
display: flex;
|
||||
position: relative;
|
||||
background-color: #ffffff;
|
||||
|
||||
.disease-div {
|
||||
width: 30%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.disease-legnd {
|
||||
width: 70%;
|
||||
height: 100%;
|
||||
padding: 2.5rem 0;
|
||||
|
||||
.scroll-box {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.legnd-div {
|
||||
width: 47%;
|
||||
height: 2rem;
|
||||
padding: 0 1rem;
|
||||
margin: 0.2rem 0;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
background-color: #f6f6fa;
|
||||
border-radius: 0.2rem;
|
||||
|
||||
.name {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.index {
|
||||
width: 0.7rem;
|
||||
height: 0.7rem;
|
||||
display: inline-block;
|
||||
margin-right: 0.5rem;
|
||||
border-radius: 0.3rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -7,18 +7,86 @@
|
||||
* @Description: 巡检报告-日常监测报告
|
||||
-->
|
||||
<template>
|
||||
<div class="content">日常监测报告</div>
|
||||
<div class="content">
|
||||
<div class="export">
|
||||
<el-form
|
||||
:model="dailyForm"
|
||||
ref="dailyForm"
|
||||
size="small"
|
||||
:inline="true"
|
||||
label-width="5rem"
|
||||
>
|
||||
<el-form-item label="道路名称" prop="segmentName">
|
||||
<el-select
|
||||
v-model="dailyForm.segmentName"
|
||||
placeholder="请选择路段"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in segmentList"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<!-- <el-button
|
||||
type="primary"
|
||||
icon="el-icon-search"
|
||||
size="mini"
|
||||
@click="handleQuery"
|
||||
>搜索</el-button
|
||||
>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
|
||||
>重置</el-button
|
||||
> -->
|
||||
<el-button type="primary" @click="exportReport" size="mini"
|
||||
>导出报告</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="div-content">
|
||||
<one-content></one-content>
|
||||
</div>
|
||||
<div class="div-content">
|
||||
<twe-content></twe-content>
|
||||
</div>
|
||||
<div class="div-content">
|
||||
<three-content></three-content>
|
||||
</div>
|
||||
<div class="div-content">
|
||||
<four-content></four-content>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import OneContent from "./components/one-content.vue";
|
||||
import TweContent from "./components/twe-content.vue";
|
||||
import ThreeContent from "./components/three-content.vue";
|
||||
import FourContent from "./components/four-content.vue";
|
||||
export default {
|
||||
name: "DailyMonitoring",
|
||||
components: {},
|
||||
components: { OneContent, TweContent, ThreeContent, FourContent },
|
||||
data() {
|
||||
return {};
|
||||
return {
|
||||
dailyForm: {
|
||||
segmentName: "",
|
||||
},
|
||||
// 选择分公司下拉数据
|
||||
segmentList: [],
|
||||
};
|
||||
},
|
||||
created() {},
|
||||
methods: {},
|
||||
methods: {
|
||||
/**
|
||||
* @description: 导出报告
|
||||
* @return {*}
|
||||
*/
|
||||
exportReport() {},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@ -26,6 +94,22 @@ export default {
|
||||
.content {
|
||||
width: 100%;
|
||||
height: calc(100vh - 5.4rem);
|
||||
padding: 1rem;
|
||||
padding: 0.5rem;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.export {
|
||||
height: 5%;
|
||||
width: 100%;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.div-content {
|
||||
width: 49.5%;
|
||||
height: 46%;
|
||||
background: url("~@/assets/index/road-content.png") no-repeat;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user