添加报告
添加细节
This commit is contained in:
@@ -49,6 +49,7 @@ const updateRoadNoise = function (data) {
|
|||||||
|
|
||||||
// -------------------------统计---------------------
|
// -------------------------统计---------------------
|
||||||
const pageRoadNoiseStatisticUrl = '/sound/road/noise/statistic';
|
const pageRoadNoiseStatisticUrl = '/sound/road/noise/statistic';
|
||||||
|
const pageRoadNoiseCompare = '/sound/road/noise/statistic/compare';
|
||||||
const getHistoryyears = function () {
|
const getHistoryyears = function () {
|
||||||
return axios.get("/sound/road/noise/history-year")
|
return axios.get("/sound/road/noise/history-year")
|
||||||
}
|
}
|
||||||
@@ -66,6 +67,7 @@ export {
|
|||||||
updateRoadNoise,
|
updateRoadNoise,
|
||||||
removeBatchRoadNoise,
|
removeBatchRoadNoise,
|
||||||
pageRoadNoiseStatisticUrl,
|
pageRoadNoiseStatisticUrl,
|
||||||
getHistoryyears
|
getHistoryyears,
|
||||||
|
pageRoadNoiseCompare
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,16 @@ export default {
|
|||||||
monitorTime.setDate(item[11]);
|
monitorTime.setDate(item[11]);
|
||||||
monitorTime.setHours(item[12]);
|
monitorTime.setHours(item[12]);
|
||||||
monitorTime.setMinutes(item[13]);
|
monitorTime.setMinutes(item[13]);
|
||||||
|
let quarter = 1;
|
||||||
|
if ((item[10] - 1) < 4) {
|
||||||
|
quarter = 1
|
||||||
|
} else if ((item[10] - 1) < 7) {
|
||||||
|
quarter = 2
|
||||||
|
} else if ((item[10] - 1) < 10) {
|
||||||
|
quarter = 3
|
||||||
|
} else{
|
||||||
|
quarter = 4
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
monitorYear: item[0],
|
monitorYear: item[0],
|
||||||
place: item[1],
|
place: item[1],
|
||||||
@@ -31,6 +41,8 @@ export default {
|
|||||||
indexL90: item[18],
|
indexL90: item[18],
|
||||||
indexLmin: item[19],
|
indexLmin: item[19],
|
||||||
indexLmax: item[20],
|
indexLmax: item[20],
|
||||||
|
quarter
|
||||||
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
412
src/views/sound/road/statistic/average.vue
Normal file
412
src/views/sound/road/statistic/average.vue
Normal file
@@ -0,0 +1,412 @@
|
|||||||
|
<template>
|
||||||
|
<div class="">
|
||||||
|
<ele-pro-table ref="table" row-key="id" :datasource="url" :columns="columns" :where="where" :needPage="false"
|
||||||
|
@done="(d)=>data = d.data" :scroll="{x: 'max-content'}">
|
||||||
|
<template #toolbar>
|
||||||
|
<!-- 搜索表单 -->
|
||||||
|
<a-form :model="where" layout="inline" :labelCol="{ offset: 1}">
|
||||||
|
<a-row>
|
||||||
|
<a-col :lg="6" :md="12" :sm="24" :xs="24">
|
||||||
|
<a-form-item label="统计模块:">
|
||||||
|
<a-select :options="modelOptions" v-model:value="where.model" placeholder="统计模块">
|
||||||
|
</a-select>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :lg="6" :md="12" :sm="24" :xs="24">
|
||||||
|
<a-form-item label="昼夜:">
|
||||||
|
<a-select :options="timeSlotOptions" v-model:value="where.timeSlot" placeholder="昼夜">
|
||||||
|
</a-select>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :lg="8" :md="12" :sm="24" :xs="24">
|
||||||
|
<a-form-item label="时间范围:">
|
||||||
|
<!-- <a-month-picker v-model:value="timeScope" placeholder="起始" /> -->
|
||||||
|
<a-range-picker v-model:value="timeScope" format="YYYY-MM-DD" />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
|
||||||
|
<a-col :lg="4" :md="12" :sm="24" :xs="24">
|
||||||
|
<a-form-item class="ele-text-right" :wrapper-col="{span: 24}">
|
||||||
|
<a-space>
|
||||||
|
<a-button type="primary" @click="reload">查询</a-button>
|
||||||
|
<a-button @click="reset">重置</a-button>
|
||||||
|
<a-button @click="exportFile">导出excel</a-button>
|
||||||
|
</a-space>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-form>
|
||||||
|
<!-- <a-space>
|
||||||
|
|
||||||
|
</a-space> -->
|
||||||
|
</template>
|
||||||
|
</ele-pro-table>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import _ from "lodash";
|
||||||
|
import XLSX from 'xlsx';
|
||||||
|
import {
|
||||||
|
pageRoadNoiseStatisticUrl
|
||||||
|
} from "@/api/ecology/road-sound"
|
||||||
|
const columns = [{
|
||||||
|
title: '测点',
|
||||||
|
dataIndex: 'place',
|
||||||
|
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '路段',
|
||||||
|
dataIndex: 'road',
|
||||||
|
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '城区',
|
||||||
|
dataIndex: 'area',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '市',
|
||||||
|
dataIndex: 'city',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '路长',
|
||||||
|
dataIndex: 'roadLength',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Math.round(text)
|
||||||
|
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '路宽',
|
||||||
|
dataIndex: 'roadWidth',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Math.round(text)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '20分钟中小型车流量',
|
||||||
|
children: [{
|
||||||
|
title: '平均',
|
||||||
|
dataIndex: 'avgSmallTrafficFlow',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Math.round(text)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最大',
|
||||||
|
dataIndex: 'maxSmallTrafficFlow',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Math.round(text)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最小',
|
||||||
|
dataIndex: 'minSmallTrafficFlow',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Math.round(text)
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '20分钟大型车流量',
|
||||||
|
children: [{
|
||||||
|
title: '平均',
|
||||||
|
dataIndex: 'avgLargeTrafficFlow',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Math.round(text)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最大',
|
||||||
|
dataIndex: 'maxLargeTrafficFlow',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Math.round(text)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最小',
|
||||||
|
dataIndex: 'minLargeTrafficFlow',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Math.round(text)
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'LeqdB(A)',
|
||||||
|
children: [{
|
||||||
|
title: '平均',
|
||||||
|
dataIndex: 'avgLeq',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最大',
|
||||||
|
dataIndex: 'maxLeq',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最小',
|
||||||
|
dataIndex: 'minLeq',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "SDdB(A)",
|
||||||
|
children: [{
|
||||||
|
title: '平均',
|
||||||
|
dataIndex: 'avgSD',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最大',
|
||||||
|
dataIndex: 'maxSD',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最小',
|
||||||
|
dataIndex: 'minSD',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "L10dB(A)",
|
||||||
|
children: [
|
||||||
|
|
||||||
|
{
|
||||||
|
title: '平均',
|
||||||
|
dataIndex: 'avgL10',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最大',
|
||||||
|
dataIndex: 'maxL10',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最小',
|
||||||
|
dataIndex: 'minL10',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
title: 'L50dB(A)',
|
||||||
|
children: [{
|
||||||
|
title: '平均',
|
||||||
|
dataIndex: 'avgL50',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最大',
|
||||||
|
dataIndex: 'maxL50',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最小',
|
||||||
|
dataIndex: 'minL50',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "L90dB(A)",
|
||||||
|
children: [
|
||||||
|
|
||||||
|
{
|
||||||
|
title: '平均',
|
||||||
|
dataIndex: 'avgL90',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最大',
|
||||||
|
dataIndex: 'maxL90',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最小',
|
||||||
|
dataIndex: 'minL90',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "LmindB(A)",
|
||||||
|
children: [{
|
||||||
|
title: '平均',
|
||||||
|
dataIndex: 'avgLmin',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最大',
|
||||||
|
dataIndex: 'maxLmin',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最小',
|
||||||
|
dataIndex: 'minLmin',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
title: 'LmaxdB(A)',
|
||||||
|
children: [{
|
||||||
|
title: '平均',
|
||||||
|
dataIndex: 'avgLmax',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最大',
|
||||||
|
dataIndex: 'maxLmax',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '最小',
|
||||||
|
dataIndex: 'minLmax',
|
||||||
|
customRender: ({
|
||||||
|
text
|
||||||
|
}) => Number(text).toFixed(2)
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
]
|
||||||
|
export default {
|
||||||
|
name: 'StatisticSoundRoadAverage',
|
||||||
|
components: {
|
||||||
|
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
url: pageRoadNoiseStatisticUrl,
|
||||||
|
data: [],
|
||||||
|
where: {
|
||||||
|
model: "place"
|
||||||
|
},
|
||||||
|
timeScope: [],
|
||||||
|
columns,
|
||||||
|
modelOptions: [{
|
||||||
|
value: "place",
|
||||||
|
label: "测点",
|
||||||
|
}, {
|
||||||
|
value: "road",
|
||||||
|
label: "路段",
|
||||||
|
}, {
|
||||||
|
value: "area",
|
||||||
|
label: "城区",
|
||||||
|
},{
|
||||||
|
value: "city",
|
||||||
|
label: "市"
|
||||||
|
}],
|
||||||
|
timeSlotOptions: [{
|
||||||
|
value: "昼",
|
||||||
|
label: "昼"
|
||||||
|
}, {
|
||||||
|
value: "夜",
|
||||||
|
label: "夜"
|
||||||
|
}]
|
||||||
|
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
/* 刷新表格 */
|
||||||
|
reload() {
|
||||||
|
this.$refs.table.reload({
|
||||||
|
where: {
|
||||||
|
model: this.where.model,
|
||||||
|
timeStart: this.timeScope.length == 2 ? this.timeScope[0].format("Y-M-D") : null,
|
||||||
|
timeEnd: this.timeScope.length == 2 ? this.timeScope[1].format("Y-M-D") : null,
|
||||||
|
timeSlot: this.where.timeSlot
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let cloneColumns = _.cloneDeep(columns);
|
||||||
|
if (this.where.model == "area") {
|
||||||
|
this.columns = cloneColumns.filter(item => {
|
||||||
|
return item.dataIndex != "place" && item.dataIndex != "road";
|
||||||
|
})
|
||||||
|
} else if (this.where.model == "road") {
|
||||||
|
this.columns = cloneColumns.filter(item => {
|
||||||
|
return item.dataIndex != "place"
|
||||||
|
})
|
||||||
|
}else if(this.where.model == "city"){
|
||||||
|
this.columns = cloneColumns.filter(item => {
|
||||||
|
return item.dataIndex != "place" && item.dataIndex != "road" && item.dataIndex != "area";
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/* 重置搜索 */
|
||||||
|
reset() {
|
||||||
|
this.where = {
|
||||||
|
model: "place",
|
||||||
|
timeSlot: "昼"
|
||||||
|
};
|
||||||
|
this.this.timeScope = []
|
||||||
|
|
||||||
|
this.reload();
|
||||||
|
},
|
||||||
|
exportFile() {
|
||||||
|
let array = [
|
||||||
|
['测点', '路段', '城区', '路长', '路宽', '平均Leq', '平均SD']
|
||||||
|
];
|
||||||
|
this.data.forEach(d => {
|
||||||
|
array.push([d.place, d.road, d.area, d.roadLength, d.roadWidth, d.avgLeq, d.avgSD]);
|
||||||
|
});
|
||||||
|
let sheet = XLSX.utils.aoa_to_sheet(array);
|
||||||
|
// sheet['!merges'] = [
|
||||||
|
// {s: {r: 0, c: 1}, e: {r: 0, c: 5}}, // 合并第0行第1列到第0行第5列
|
||||||
|
// {s: {r: 0, c: 0}, e: {r: 1, c: 0}}, // 合并第0行第0列到第1行第0列
|
||||||
|
// {s: {r: 0, c: 6}, e: {r: 1, c: 6}} // 合并第0行第6列到第1行第6列
|
||||||
|
// ];
|
||||||
|
this.$util.exportSheet(XLSX, sheet, '道路交通噪声统计表');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -1,412 +1,422 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="">
|
<div class="ele-body">
|
||||||
<ele-pro-table ref="table" row-key="id" :datasource="url" :columns="columns" :where="where" :needPage="false"
|
<a-card :bordered="false">
|
||||||
@done="(d)=>data = d.data" :scroll="{x: 'max-content'}">
|
<!-- 搜索表单 -->
|
||||||
<template #toolbar>
|
<a-form :model="where" :label-col="{md: {span: 6}, sm: {span: 24}}"
|
||||||
<!-- 搜索表单 -->
|
:wrapper-col="{md: {span: 18}, sm: {span: 24}}">
|
||||||
<a-form :model="where" layout="inline" :labelCol="{ offset: 1}">
|
|
||||||
<a-row>
|
<a-row>
|
||||||
<a-col :lg="6" :md="12" :sm="24" :xs="24">
|
<a-col :lg="6" :md="12" :sm="24" :xs="24">
|
||||||
<a-form-item label="统计模块:">
|
<a-form-item label="测点名称:">
|
||||||
<a-select :options="modelOptions" v-model:value="where.model" placeholder="统计模块">
|
<a-input v-model:value.trim="where.place" placeholder="请输入测点名称" allow-clear />
|
||||||
</a-select>
|
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :lg="6" :md="12" :sm="24" :xs="24">
|
<a-col :lg="6" :md="12" :sm="24" :xs="24">
|
||||||
<a-form-item label="昼夜:">
|
<a-form-item label="路段:">
|
||||||
<a-select :options="timeSlotOptions" v-model:value="where.timeSlot" placeholder="昼夜">
|
<a-input v-model:value.trim="where.road" placeholder="请输入路段名称" allow-clear />
|
||||||
</a-select>
|
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :lg="8" :md="12" :sm="24" :xs="24">
|
<a-col :lg="6" :md="12" :sm="24" :xs="24">
|
||||||
<a-form-item label="时间范围:">
|
<a-form-item label="城区">
|
||||||
<!-- <a-month-picker v-model:value="timeScope" placeholder="起始" /> -->
|
<a-input v-model:value.trim="where.area" placeholder="请输入城区名称" allow-clear />
|
||||||
<a-range-picker v-model:value="timeScope" format="YYYY-MM-DD" />
|
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
<a-col :lg="6" :md="12" :sm="24" :xs="24">
|
||||||
<a-col :lg="4" :md="12" :sm="24" :xs="24">
|
|
||||||
<a-form-item class="ele-text-right" :wrapper-col="{span: 24}">
|
<a-form-item class="ele-text-right" :wrapper-col="{span: 24}">
|
||||||
<a-space>
|
<a-space>
|
||||||
<a-button type="primary" @click="reload">查询</a-button>
|
<a-button type="primary" @click="reload">查询</a-button>
|
||||||
<a-button @click="reset">重置</a-button>
|
<a-button @click="reset">重置</a-button>
|
||||||
<a-button @click="exportFile">导出excel</a-button>
|
|
||||||
</a-space>
|
</a-space>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
</a-form>
|
</a-form>
|
||||||
<!-- <a-space>
|
<a-modal v-model:visible="showEdit" :title="form.roadNoiseId!==undefined?'修改用户':'添加用户'" :confirm-loading="loading"
|
||||||
|
:width="1000" :body-style="{paddingBottom: '8px'}" @ok="save">
|
||||||
</a-space> -->
|
<a-form ref="form" :model="form" :rules="rules" :label-col="{md: {span: 6}, sm: {span: 24}}"
|
||||||
</template>
|
:wrapper-col="{md: {span: 18}, sm: {span: 24}}">
|
||||||
|
<a-row>
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="日期" name="monitorDate">
|
||||||
|
<a-date-picker v-model:value="form.monitorDate" :locale="locale" />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="时间" name="monitorTime">
|
||||||
|
<a-time-picker v-model:value="form.monitorTime" format="HH:mm" />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="时段" name="timeSlot">
|
||||||
|
<a-select v-model:value="form.timeSlot">
|
||||||
|
<a-select-option value="昼">昼</a-select-option>
|
||||||
|
<a-select-option value="夜">夜</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="测点名称" name="place">
|
||||||
|
<a-input v-model:value="form.place" placeholder="请输入测点名称" allow-clear />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="点号" name="placeCode">
|
||||||
|
<a-input v-model:value="form.placeCode" placeholder="请输入点号" allow-clear />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="所属路段" name="road">
|
||||||
|
<a-input v-model:value="form.road" placeholder="请输入测点名称" allow-clear />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="所属城区" name="area">
|
||||||
|
<a-input v-model:value="form.area" placeholder="请输入点号" allow-clear />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="路长" name="roadLength">
|
||||||
|
<a-input v-model:value="form.roadLength" placeholder="请输入路长(米)" allow-clear />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="总路宽" name="roadWidth">
|
||||||
|
<a-input v-model:value="form.roadWidth" placeholder="请输入总路宽(米)" allow-clear />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="中小型车流量" name="smallTrafficFlow">
|
||||||
|
<a-input type="number" v-model:value="form.smallTrafficFlow" placeholder="请输入中小型车流量(辆/20分钟)"
|
||||||
|
allow-clear />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="大型车流量" name="largeTrafficFlow">
|
||||||
|
<a-input type="number" v-model:value="form.largeTrafficFlow" placeholder="请输入大型车流量(辆/20分钟)"
|
||||||
|
allow-clear />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="LeqdB(A)" name="indexLeq">
|
||||||
|
<a-input type="number" v-model:value="form.indexLeq" placeholder="请输入LeqdB(A)" allow-clear />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="SDdB(A)" name="indexSd">
|
||||||
|
<a-input type="number" v-model:value="form.indexSd" placeholder="请输入大SDdB(A)" allow-clear />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="L10dB(A)" name="indexL10">
|
||||||
|
<a-input type="number" v-model:value="form.indexL10" placeholder="请输入L10dB(A)" allow-clear />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="L50dB(A)" name="indexL50">
|
||||||
|
<a-input type="number" v-model:value="form.indexL50" placeholder="请输入L50dB(A)" allow-clear />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="L90dB(A)" name="indexL90">
|
||||||
|
<a-input type="number" v-model:value="form.indexL90" placeholder="请输入L90dB(A)" allow-clear />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="LmindB(A)" name="indexLmin">
|
||||||
|
<a-input type="number" v-model:value="form.indexLmin" placeholder="请输入LmindB(A)" allow-clear />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :md="12" :sm="24">
|
||||||
|
<a-form-item label="LmaxdB(A)" name="indexLmax">
|
||||||
|
<a-input type="number" v-model:value="form.indexLmax" placeholder="请输入LmaxdB(A)" allow-clear />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
|
||||||
|
</a-form>
|
||||||
|
|
||||||
|
</a-modal>
|
||||||
|
<!-- 表格 -->
|
||||||
|
<ele-pro-table v-model:selection="selectionList" ref="table" row-key="roadNoiseId" :datasource="url"
|
||||||
|
:columns="columns" :where="where" :scroll="{x: 'max-content'}">
|
||||||
</ele-pro-table>
|
</ele-pro-table>
|
||||||
|
</a-card>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- 编辑弹窗 -->
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import _ from "lodash";
|
import _ from "lodash"
|
||||||
import XLSX from 'xlsx';
|
|
||||||
import {
|
import {
|
||||||
pageRoadNoiseStatisticUrl
|
pageRoadNoiseUrl,
|
||||||
} from "@/api/ecology/road-sound"
|
saveRoadNoise,
|
||||||
const columns = [{
|
removeRoadNoise,
|
||||||
title: '测点',
|
removeBatchRoadNoise,
|
||||||
dataIndex: 'place',
|
updateRoadNoise,
|
||||||
|
} from "@/api/ecology/road-sound";
|
||||||
},
|
import locale from 'ant-design-vue/es/date-picker/locale/zh_CN';
|
||||||
{
|
import moment from 'moment';
|
||||||
title: '路段',
|
// import utils from "./utils";
|
||||||
dataIndex: 'road',
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '城区',
|
|
||||||
dataIndex: 'area',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '市',
|
|
||||||
dataIndex: 'city',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '路长',
|
|
||||||
dataIndex: 'roadLength',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Math.round(text)
|
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '路宽',
|
|
||||||
dataIndex: 'roadWidth',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Math.round(text)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '20分钟中小型车流量',
|
|
||||||
children: [{
|
|
||||||
title: '平均',
|
|
||||||
dataIndex: 'avgSmallTrafficFlow',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Math.round(text)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最大',
|
|
||||||
dataIndex: 'maxSmallTrafficFlow',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Math.round(text)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最小',
|
|
||||||
dataIndex: 'minSmallTrafficFlow',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Math.round(text)
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '20分钟大型车流量',
|
|
||||||
children: [{
|
|
||||||
title: '平均',
|
|
||||||
dataIndex: 'avgLargeTrafficFlow',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Math.round(text)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最大',
|
|
||||||
dataIndex: 'maxLargeTrafficFlow',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Math.round(text)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最小',
|
|
||||||
dataIndex: 'minLargeTrafficFlow',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Math.round(text)
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'LeqdB(A)',
|
|
||||||
children: [{
|
|
||||||
title: '平均',
|
|
||||||
dataIndex: 'avgLeq',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最大',
|
|
||||||
dataIndex: 'maxLeq',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最小',
|
|
||||||
dataIndex: 'minLeq',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "SDdB(A)",
|
|
||||||
children: [{
|
|
||||||
title: '平均',
|
|
||||||
dataIndex: 'avgSD',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最大',
|
|
||||||
dataIndex: 'maxSD',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最小',
|
|
||||||
dataIndex: 'minSD',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "L10dB(A)",
|
|
||||||
children: [
|
|
||||||
|
|
||||||
{
|
|
||||||
title: '平均',
|
|
||||||
dataIndex: 'avgL10',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最大',
|
|
||||||
dataIndex: 'maxL10',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最小',
|
|
||||||
dataIndex: 'minL10',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
]
|
|
||||||
}, {
|
|
||||||
title: 'L50dB(A)',
|
|
||||||
children: [{
|
|
||||||
title: '平均',
|
|
||||||
dataIndex: 'avgL50',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最大',
|
|
||||||
dataIndex: 'maxL50',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最小',
|
|
||||||
dataIndex: 'minL50',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "L90dB(A)",
|
|
||||||
children: [
|
|
||||||
|
|
||||||
{
|
|
||||||
title: '平均',
|
|
||||||
dataIndex: 'avgL90',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最大',
|
|
||||||
dataIndex: 'maxL90',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最小',
|
|
||||||
dataIndex: 'minL90',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "LmindB(A)",
|
|
||||||
children: [{
|
|
||||||
title: '平均',
|
|
||||||
dataIndex: 'avgLmin',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最大',
|
|
||||||
dataIndex: 'maxLmin',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最小',
|
|
||||||
dataIndex: 'minLmin',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
]
|
|
||||||
}, {
|
|
||||||
title: 'LmaxdB(A)',
|
|
||||||
children: [{
|
|
||||||
title: '平均',
|
|
||||||
dataIndex: 'avgLmax',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最大',
|
|
||||||
dataIndex: 'maxLmax',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '最小',
|
|
||||||
dataIndex: 'minLmax',
|
|
||||||
customRender: ({
|
|
||||||
text
|
|
||||||
}) => Number(text).toFixed(2)
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
]
|
|
||||||
export default {
|
export default {
|
||||||
name: 'StatisticSoundRoadBase',
|
name: 'StatisticSoundRoadBase',
|
||||||
components: {
|
components: {},
|
||||||
|
|
||||||
},
|
|
||||||
data() {
|
data() {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
url: pageRoadNoiseStatisticUrl,
|
locale,
|
||||||
data: [],
|
bill:{},
|
||||||
|
// 表格数据接口
|
||||||
|
url: pageRoadNoiseUrl,
|
||||||
|
selection: [],
|
||||||
|
// 表格列配置
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
title: '监测日期',
|
||||||
|
dataIndex: 'monitorTime',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '测点名称',
|
||||||
|
dataIndex: 'place',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '点号',
|
||||||
|
dataIndex: 'placeCode',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '所属路段',
|
||||||
|
dataIndex: 'road',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '所属城区',
|
||||||
|
dataIndex: 'area',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '路长',
|
||||||
|
dataIndex: 'roadLength',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '路宽',
|
||||||
|
dataIndex: 'roadWidth',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '中小型车流量(辆/20分钟)',
|
||||||
|
dataIndex: 'smallTrafficFlow',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '大型车流量(辆/20分钟)',
|
||||||
|
dataIndex: 'largeTrafficFlow',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '时段',
|
||||||
|
dataIndex: 'timeSlot',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// title: '月',
|
||||||
|
// dataIndex: 'monitorMonth',
|
||||||
|
// sorter: true
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// title: '日',
|
||||||
|
// dataIndex: 'monitorDay',
|
||||||
|
// sorter: true
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// title: '时',
|
||||||
|
// dataIndex: 'monitorHour',
|
||||||
|
// sorter: true
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// title: '分',
|
||||||
|
// dataIndex: 'monitorMinute',
|
||||||
|
// sorter: true
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
title: 'LeqdB(A)',
|
||||||
|
dataIndex: 'indexLeq',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'SDdB(A)',
|
||||||
|
dataIndex: 'indexSd',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'L10dB(A)',
|
||||||
|
dataIndex: 'indexL10',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'L50dB(A)',
|
||||||
|
dataIndex: 'indexL50',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'L90dB(A)',
|
||||||
|
dataIndex: 'indexL90',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'LmindB(A)',
|
||||||
|
dataIndex: 'indexLmin',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'LmaxdB(A)',
|
||||||
|
dataIndex: 'indexLmax',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '创建人',
|
||||||
|
dataIndex: 'username',
|
||||||
|
sorter: true
|
||||||
|
},
|
||||||
|
],
|
||||||
|
// 表格搜索条件
|
||||||
where: {
|
where: {
|
||||||
model: "place"
|
checked: 1
|
||||||
},
|
},
|
||||||
timeScope: [],
|
// 表格选中数据
|
||||||
columns,
|
selectionList: [],
|
||||||
modelOptions: [{
|
// 是否显示编辑弹窗
|
||||||
value: "place",
|
showEdit: false,
|
||||||
label: "测点",
|
// 表单数据
|
||||||
}, {
|
form: {},
|
||||||
value: "road",
|
loading: false,
|
||||||
label: "路段",
|
rules: {}
|
||||||
}, {
|
|
||||||
value: "area",
|
|
||||||
label: "城区",
|
|
||||||
},{
|
|
||||||
value: "city",
|
|
||||||
label: "市"
|
|
||||||
}],
|
|
||||||
timeSlotOptions: [{
|
|
||||||
value: "昼",
|
|
||||||
label: "昼"
|
|
||||||
}, {
|
|
||||||
value: "夜",
|
|
||||||
label: "夜"
|
|
||||||
}]
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
},
|
||||||
|
mounted(){
|
||||||
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
/* 刷新表格 */
|
/* 刷新表格 */
|
||||||
reload() {
|
reload() {
|
||||||
|
console.log(this.$route);
|
||||||
|
console.log(this.$router);
|
||||||
this.$refs.table.reload({
|
this.$refs.table.reload({
|
||||||
where: {
|
where: this.where
|
||||||
model: this.where.model,
|
|
||||||
timeStart: this.timeScope.length == 2 ? this.timeScope[0].format("Y-M-D") : null,
|
|
||||||
timeEnd: this.timeScope.length == 2 ? this.timeScope[1].format("Y-M-D") : null,
|
|
||||||
timeSlot: this.where.timeSlot
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
let cloneColumns = _.cloneDeep(columns);
|
|
||||||
if (this.where.model == "area") {
|
|
||||||
this.columns = cloneColumns.filter(item => {
|
|
||||||
return item.dataIndex != "place" && item.dataIndex != "road";
|
|
||||||
})
|
|
||||||
} else if (this.where.model == "road") {
|
|
||||||
this.columns = cloneColumns.filter(item => {
|
|
||||||
return item.dataIndex != "place"
|
|
||||||
})
|
|
||||||
}else if(this.where.model == "city"){
|
|
||||||
this.columns = cloneColumns.filter(item => {
|
|
||||||
return item.dataIndex != "place" && item.dataIndex != "road" && item.dataIndex != "area";
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
/* 重置搜索 */
|
/* 重置搜索 */
|
||||||
reset() {
|
reset() {
|
||||||
this.where = {
|
this.where = {
|
||||||
model: "place",
|
checked: 1
|
||||||
timeSlot: "昼"
|
|
||||||
};
|
};
|
||||||
this.this.timeScope = []
|
|
||||||
|
|
||||||
this.reload();
|
this.reload();
|
||||||
},
|
},
|
||||||
exportFile() {
|
/* 显示编辑 */
|
||||||
let array = [
|
openEdit(record) {
|
||||||
['测点', '路段', '城区', '路长', '路宽', '平均Leq', '平均SD']
|
const cloneRecord = _.cloneDeep(record)
|
||||||
];
|
if (record && cloneRecord.monitorTime) {
|
||||||
this.data.forEach(d => {
|
console.log(moment(cloneRecord.monitorTime).format('YYYY MM DD'));
|
||||||
array.push([d.place, d.road, d.area, d.roadLength, d.roadWidth, d.avgLeq, d.avgSD]);
|
cloneRecord.monitorDate = moment(cloneRecord.monitorTime);
|
||||||
|
cloneRecord.monitorTime = moment(cloneRecord.monitorTime);
|
||||||
|
}
|
||||||
|
// cloneRecord.mi
|
||||||
|
this.form = Object.assign({}, cloneRecord);
|
||||||
|
this.showEdit = true;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.form.clearValidate(); // 清除表单验证信息
|
||||||
});
|
});
|
||||||
let sheet = XLSX.utils.aoa_to_sheet(array);
|
},
|
||||||
// sheet['!merges'] = [
|
|
||||||
// {s: {r: 0, c: 1}, e: {r: 0, c: 5}}, // 合并第0行第1列到第0行第5列
|
save() {
|
||||||
// {s: {r: 0, c: 0}, e: {r: 1, c: 0}}, // 合并第0行第0列到第1行第0列
|
const hide = this.$message.loading('请求中..', 0);
|
||||||
// {s: {r: 0, c: 6}, e: {r: 1, c: 6}} // 合并第0行第6列到第1行第6列
|
const form = _.cloneDeep(this.form);
|
||||||
// ];
|
const date = new Date();
|
||||||
this.$util.exportSheet(XLSX, sheet, '道路交通噪声统计表');
|
date.setFullYear(form.monitorDate.year());
|
||||||
}
|
date.setMonth(form.monitorDate.month());
|
||||||
}
|
date.setDate(form.monitorDate.date());
|
||||||
|
date.setHours(form.monitorTime.hour());
|
||||||
|
date.setMinutes(form.monitorTime.minutes());
|
||||||
|
form.monitorTime = date.getTime();
|
||||||
|
form.monitorYear = date.getFullYear();
|
||||||
|
form.monitorMonth = date.getMonth() + 1;
|
||||||
|
form.monitorDay = date.getDate();
|
||||||
|
form.monitorHour = date.getHours();
|
||||||
|
form.monitorMinute = date.getMinutes();
|
||||||
|
delete form['monitorDate']
|
||||||
|
if (form.roadNoiseId) {
|
||||||
|
updateRoadNoise(form).then(res => {
|
||||||
|
if (res.data.code == 0) {
|
||||||
|
this.showEdit = false;
|
||||||
|
this.$message.success(res.data.msg);
|
||||||
|
this.reload();
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.data.msg);
|
||||||
|
}
|
||||||
|
}).catch((error)=>{
|
||||||
|
this.$message.error(error.message);
|
||||||
|
}).finally(()=>{
|
||||||
|
console.log("finallyfinallyfinallyfinally");
|
||||||
|
hide();
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
form.roadNoiseBillId = this.roadNoiseBillId;
|
||||||
|
saveRoadNoise(form).then(res => {
|
||||||
|
if (res.data.code == 0) {
|
||||||
|
this.showEdit = false;
|
||||||
|
this.$message.success(res.data.msg);
|
||||||
|
this.reload();
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.data.msg);
|
||||||
|
}
|
||||||
|
}).catch((error)=>{
|
||||||
|
this.$message.error(error.message);
|
||||||
|
}).finally(()=>{
|
||||||
|
hide();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
/* 删除单个 */
|
||||||
|
remove(row) {
|
||||||
|
const hide = this.$message.loading('请求中..', 0);
|
||||||
|
removeRoadNoise(row.roadNoiseId).then(res => {
|
||||||
|
if (res.data.code === 0) {
|
||||||
|
this.$message.success(res.data.msg);
|
||||||
|
this.reload();
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.data.msg);
|
||||||
|
}
|
||||||
|
}).catch(e => {
|
||||||
|
this.$message.error(e.msg);
|
||||||
|
}).finally(() => hide());
|
||||||
|
},
|
||||||
|
removeBatch() {
|
||||||
|
const ids = this.selectionList.map(item => item.roadNoiseId);
|
||||||
|
const hide = this.$message.loading('请求中..', 0);
|
||||||
|
removeBatchRoadNoise(ids).then(res => {
|
||||||
|
if (res.data.code === 0) {
|
||||||
|
this.$message.success(res.data.msg);
|
||||||
|
this.reload();
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.data.msg);
|
||||||
|
}
|
||||||
|
}).catch(e => {
|
||||||
|
|
||||||
|
this.$message.error(e.msg);
|
||||||
|
}).finally(() => hide());
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped lang="less">
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
@@ -1,54 +1,55 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="">
|
<div class="">
|
||||||
<ele-pro-table ref="table" row-key="id" :datasource="url" :columns="columns" :where="where" :needPage="false"
|
<ele-pro-table ref="table" row-key="id" :datasource="url" :columns="columns" :where="where" :needPage="false"
|
||||||
@done="(d)=>data = d.data" :scroll="{x: 'max-content'}">
|
@done="stableDone" :scroll="{x: 'max-content'}">
|
||||||
<template #toolbar>
|
<template #toolbar>
|
||||||
<!-- 搜索表单 -->
|
<!-- 搜索表单 -->
|
||||||
<a-form :model="where" layout="inline" :labelCol="{ offset: 1}">
|
<a-form :model="where" layout="inline" :labelCol="{ offset: 1}">
|
||||||
<a-row>
|
<a-row>
|
||||||
<a-col :lg="6" :md="12" :sm="24" :xs="24">
|
<a-col :lg="6" :md="12" :sm="24" :xs="24">
|
||||||
<a-form-item label="统计模块:">
|
<a-form-item label="统计模块:">
|
||||||
<a-select :options="modelOptions" v-model:value="where.model" placeholder="统计模块">
|
<a-select :options="groupModelOptions" v-model:value="where.groupModel" placeholder="统计模块">
|
||||||
</a-select>
|
</a-select>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :lg="6" :md="12" :sm="24" :xs="24">
|
<a-col :lg="6" :md="12" :sm="24" :xs="24">
|
||||||
<a-form-item label="昼夜:">
|
<a-form-item label="时间细度:">
|
||||||
<a-select :options="timeSlotOptions" v-model:value="where.timeSlot" placeholder="昼夜">
|
<a-select :options="groupTimeLengthOptions" v-model:value="where.groupTimeLength" placeholder="">
|
||||||
</a-select>
|
</a-select>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :lg="8" :md="12" :sm="24" :xs="24">
|
<a-col :lg="6" :md="12" :sm="24" :xs="24">
|
||||||
<a-form-item label="时间范围:">
|
<a-form-item label="昼夜:">
|
||||||
<!-- <a-month-picker v-model:value="timeScope" placeholder="起始" /> -->
|
<a-select :options="timeSlotOptions" v-model:value="where.timeSlot" placeholder="昼夜">
|
||||||
<a-range-picker v-model:value="timeScope" format="YYYY-MM-DD" />
|
</a-select>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
|
||||||
|
|
||||||
<a-col :lg="4" :md="12" :sm="24" :xs="24">
|
<a-col :lg="4" :md="12" :sm="24" :xs="24">
|
||||||
<a-form-item class="ele-text-right" :wrapper-col="{span: 24}">
|
<a-form-item class="ele-text-right" :wrapper-col="{span: 24}">
|
||||||
<a-space>
|
<a-space>
|
||||||
<a-button type="primary" @click="reload">查询</a-button>
|
<a-button type="primary" @click="reload">查询</a-button>
|
||||||
<a-button @click="reset">重置</a-button>
|
<a-button @click="reset">重置</a-button>
|
||||||
<a-button @click="exportFile">导出excel</a-button>
|
<a-button @click="exportFile">导出excel</a-button>
|
||||||
</a-space>
|
</a-space>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
</a-form>
|
</a-form>
|
||||||
<!-- <a-space>
|
<!-- <a-space>
|
||||||
|
|
||||||
</a-space> -->
|
</a-space> -->
|
||||||
</template>
|
</template>
|
||||||
</ele-pro-table>
|
</ele-pro-table>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import _ from "lodash";
|
// import _ from "lodash";
|
||||||
import XLSX from 'xlsx';
|
import XLSX from 'xlsx';
|
||||||
import {
|
import {
|
||||||
pageRoadNoiseStatisticUrl
|
pageRoadNoiseCompare
|
||||||
} from "@/api/ecology/road-sound"
|
} from "@/api/ecology/road-sound"
|
||||||
const columns = [{
|
const columns = [{
|
||||||
title: '测点',
|
title: '测点',
|
||||||
@@ -64,7 +65,7 @@
|
|||||||
title: '城区',
|
title: '城区',
|
||||||
dataIndex: 'area',
|
dataIndex: 'area',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '市',
|
title: '市',
|
||||||
dataIndex: 'city',
|
dataIndex: 'city',
|
||||||
},
|
},
|
||||||
@@ -75,27 +76,36 @@
|
|||||||
|
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
|
const groupModelOptions = [{
|
||||||
|
label: "测点",
|
||||||
|
value: "place"
|
||||||
|
},{
|
||||||
|
label: "城区",
|
||||||
|
value: "area"
|
||||||
|
},{
|
||||||
|
label: "市",
|
||||||
|
value: "city"
|
||||||
|
}];
|
||||||
|
const groupTimeLengthOptions = [{
|
||||||
|
label: "年",
|
||||||
|
value: "monitor_year"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "季度",
|
||||||
|
value: "quarter"
|
||||||
|
}]
|
||||||
return {
|
return {
|
||||||
url: pageRoadNoiseStatisticUrl,
|
url: pageRoadNoiseCompare,
|
||||||
data: [],
|
data: [],
|
||||||
where: {
|
where: {
|
||||||
model: "place"
|
groupModel: "area",
|
||||||
|
groupTimeLength: "monitor_year",
|
||||||
|
timeSlot: '昼'
|
||||||
},
|
},
|
||||||
timeScope: [],
|
timeScope: [],
|
||||||
columns,
|
columns,
|
||||||
modelOptions: [{
|
groupModelOptions,
|
||||||
value: "place",
|
groupTimeLengthOptions,
|
||||||
label: "测点",
|
|
||||||
}, {
|
|
||||||
value: "road",
|
|
||||||
label: "路段",
|
|
||||||
}, {
|
|
||||||
value: "area",
|
|
||||||
label: "城区",
|
|
||||||
},{
|
|
||||||
value: "city",
|
|
||||||
label: "市"
|
|
||||||
}],
|
|
||||||
timeSlotOptions: [{
|
timeSlotOptions: [{
|
||||||
value: "昼",
|
value: "昼",
|
||||||
label: "昼"
|
label: "昼"
|
||||||
@@ -110,27 +120,9 @@
|
|||||||
/* 刷新表格 */
|
/* 刷新表格 */
|
||||||
reload() {
|
reload() {
|
||||||
this.$refs.table.reload({
|
this.$refs.table.reload({
|
||||||
where: {
|
where: this.where
|
||||||
model: this.where.model,
|
|
||||||
timeStart: this.timeScope.length == 2 ? this.timeScope[0].format("Y-M-D") : null,
|
|
||||||
timeEnd: this.timeScope.length == 2 ? this.timeScope[1].format("Y-M-D") : null,
|
|
||||||
timeSlot: this.where.timeSlot
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
let cloneColumns = _.cloneDeep(columns);
|
|
||||||
if (this.where.model == "area") {
|
|
||||||
this.columns = cloneColumns.filter(item => {
|
|
||||||
return item.dataIndex != "place" && item.dataIndex != "road";
|
|
||||||
})
|
|
||||||
} else if (this.where.model == "road") {
|
|
||||||
this.columns = cloneColumns.filter(item => {
|
|
||||||
return item.dataIndex != "place"
|
|
||||||
})
|
|
||||||
}else if(this.where.model == "city"){
|
|
||||||
this.columns = cloneColumns.filter(item => {
|
|
||||||
return item.dataIndex != "place" && item.dataIndex != "road" && item.dataIndex != "area";
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
/* 重置搜索 */
|
/* 重置搜索 */
|
||||||
reset() {
|
reset() {
|
||||||
@@ -142,6 +134,66 @@
|
|||||||
|
|
||||||
this.reload();
|
this.reload();
|
||||||
},
|
},
|
||||||
|
stableDone(){
|
||||||
|
const columns = [];
|
||||||
|
if(this.where.groupModel == "area"){
|
||||||
|
columns.push({
|
||||||
|
title : "城区",
|
||||||
|
dataIndex: "area",
|
||||||
|
sorter: true
|
||||||
|
})
|
||||||
|
}else if(this.where.groupModel == "place"){
|
||||||
|
columns.push({
|
||||||
|
title : "测点",
|
||||||
|
dataIndex: "area",
|
||||||
|
sorter: true
|
||||||
|
})
|
||||||
|
}else if(this.where.groupModel == "city"){
|
||||||
|
columns.push({
|
||||||
|
title : "城市",
|
||||||
|
dataIndex: "area",
|
||||||
|
sorter: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
columns.push({
|
||||||
|
title : "年份",
|
||||||
|
dataIndex: "year",
|
||||||
|
sorter: true
|
||||||
|
})
|
||||||
|
|
||||||
|
if(this.where.groupTimeLength == 'quarter'){
|
||||||
|
columns.push({
|
||||||
|
title : "季度",
|
||||||
|
dataIndex: "quarter",
|
||||||
|
sorter: true,
|
||||||
|
customRender: ({text}) =>{
|
||||||
|
switch (text) {
|
||||||
|
case 1:
|
||||||
|
return "第一季度";
|
||||||
|
case 2:
|
||||||
|
return "第二季度";
|
||||||
|
case 3:
|
||||||
|
return "第三季度";
|
||||||
|
case 4:
|
||||||
|
return "第四季度";
|
||||||
|
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// if(this.where.groupTimeLength == 'monitor_year'){
|
||||||
|
columns.push({
|
||||||
|
title : "Leq",
|
||||||
|
dataIndex: "value",
|
||||||
|
customRender: ({text}) => Number(text).toFixed(2)
|
||||||
|
|
||||||
|
})
|
||||||
|
// }
|
||||||
|
this.columns = columns;
|
||||||
|
},
|
||||||
exportFile() {
|
exportFile() {
|
||||||
let array = [
|
let array = [
|
||||||
['测点', '路段', '城区', '路长', '路宽', '平均Leq', '平均SD']
|
['测点', '路段', '城区', '路长', '路宽', '平均Leq', '平均SD']
|
||||||
|
|||||||
@@ -2,11 +2,17 @@
|
|||||||
<div class="ele-body">
|
<div class="ele-body">
|
||||||
<a-card :bordered="false">
|
<a-card :bordered="false">
|
||||||
<a-tabs v-model:activeKey="activeKey">
|
<a-tabs v-model:activeKey="activeKey">
|
||||||
<a-tab-pane key="base" tab="通用统计">
|
<a-tab-pane key="base" tab="总览">
|
||||||
<base-statistic></base-statistic>
|
<base-statistic></base-statistic>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
<a-tab-pane key="quarter" tab="季度报告">
|
<a-tab-pane key="average" tab="平均">
|
||||||
|
<average-statistic></average-statistic>
|
||||||
|
</a-tab-pane>
|
||||||
|
<!-- <a-tab-pane key="quarter" tab="季度报告">
|
||||||
<quarter-statistic></quarter-statistic>
|
<quarter-statistic></quarter-statistic>
|
||||||
|
</a-tab-pane> -->
|
||||||
|
<a-tab-pane key="year-compare" tab="报告">
|
||||||
|
<compare></compare>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
</a-tabs>
|
</a-tabs>
|
||||||
|
|
||||||
@@ -23,16 +29,21 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
import BaseStatistic from "./base.vue";
|
import BaseStatistic from "./base.vue";
|
||||||
import QuarterStatistic from "./quarter.vue";
|
// import QuarterStatistic from "./quarter.vue";
|
||||||
|
import Compare from "./compare.vue"
|
||||||
|
import AverageStatistic from "./average.vue"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'StatisticSoundRoad',
|
name: 'StatisticSoundRoad',
|
||||||
components: {
|
components: {
|
||||||
BaseStatistic,
|
BaseStatistic,
|
||||||
QuarterStatistic
|
// QuarterStatistic,
|
||||||
|
Compare,
|
||||||
|
AverageStatistic
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
activeKey: 'quarter'
|
activeKey: 'base'
|
||||||
};
|
};
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user