提交:告警导出开放功能

This commit is contained in:
nieli 2022-11-23 11:49:49 +08:00
parent 3d99964997
commit 5f5668e1c5
15 changed files with 302 additions and 203 deletions

BIN
smart-power-dist.zip Normal file

Binary file not shown.

View File

@ -20,7 +20,7 @@ export function getContract(contractId) {
// 新增电价合同 // 新增电价合同
export function addContract(data) { export function addContract(data) {
return request({ return request({
url: '/iot/contract', url: '/iot/contract/addContract',
method: 'post', method: 'post',
data: data data: data
}) })

View File

@ -23,3 +23,27 @@ export function monthOnCircleEnergy(query) {
params: query params: query
}) })
} }
export function exportEnergy(query) {
return request({
url: '/iot/stat/exportProjectEnergy',
method: 'get',
params: query
})
}
export function exportOnMonth(query) {
return request({
url: '/iot/stat/exportMOMEnergy',
method: 'get',
params: query
})
}
export function exportOnCircle(query) {
return request({
url: '/iot/stat/exportMOCEnergy',
method: 'get',
params: query
})
}

View File

@ -41,26 +41,16 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery" <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button >重置</el-button
> >
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button <el-button
type="warning" type="warning"
plain plain
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['iot:record:export']"
>导出</el-button >导出</el-button
> >
</el-col> </el-form-item>
<right-toolbar </el-form>
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table <el-table
v-loading="loading" v-loading="loading"

View File

@ -42,26 +42,16 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery" <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button >重置</el-button
> >
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button <el-button
type="warning" type="warning"
plain plain
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['iot:record:export']"
>导出</el-button >导出</el-button
> >
</el-col> </el-form-item>
<right-toolbar </el-form>
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table <el-table
v-loading="loading" v-loading="loading"
@ -211,8 +201,8 @@ export default {
beginTime: null, beginTime: null,
endTime: null, endTime: null,
alarmDivide: "WARNING", alarmDivide: "WARNING",
isAsc: 'desc', isAsc: "desc",
orderByColumn: 'alarmTime' orderByColumn: "alarmTime",
}, },
// //
form: {}, form: {},

View File

@ -371,9 +371,6 @@ export default {
this.stompClient.onclose = this.socket_onclose; this.stompClient.onclose = this.socket_onclose;
}, },
socket_message(data) { socket_message(data) {
console.log("wsljcg:=", data);
// const data = JSON.parse(evt.data);
// this.actualEnergyCensus = data.params || {};
console.log("socket-message:", data); console.log("socket-message:", data);
this.handleDeviceInfo(data); this.handleDeviceInfo(data);
this.$forceUpdate(); this.$forceUpdate();

View File

@ -371,8 +371,8 @@ export default {
}, },
// socket // socket
handleDeviceInfo(param) { handleDeviceInfo(param) {
console.log( this.list)
if (this.list && this.list.length > 0) { if (this.list && this.list.length > 0) {
// let result = this.list.filter(v => { if (v['deviceKey'] === param['deviceKey']) { return v }});
this.list = this.list.map((v) => { this.list = this.list.map((v) => {
if (v["deviceKey"] === param["deviceKey"]) { if (v["deviceKey"] === param["deviceKey"]) {
return Object.assign(v, param); return Object.assign(v, param);

View File

@ -36,6 +36,14 @@
<!-- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery" <!-- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button >重置</el-button
> --> > -->
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button
>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -194,6 +202,12 @@ export default {
this.$refs.chainTemplate[0].getChartList(); this.$refs.chainTemplate[0].getChartList();
} }
}, },
/** 导出按钮操作 */
handleExport() {
if (this.$refs.chainTemplate) {
this.$refs.chainTemplate[0].handleExport();
}
},
}, },
}; };
</script> </script>

View File

@ -66,7 +66,7 @@
</div> </div>
</template> </template>
<script> <script>
import { monthOnCircleEnergy } from "@/api/iot/staistics"; import { monthOnCircleEnergy, exportOnCircle } from "@/api/iot/staistics";
import EEchartsBar from "@/components/Echarts/EEchartsBar"; import EEchartsBar from "@/components/Echarts/EEchartsBar";
export default { export default {
name: "ChainTemplate", name: "ChainTemplate",
@ -206,6 +206,28 @@ export default {
}); });
} }
}, },
/** 导出按钮操作 */
handleExport() {
if (this.energyType && this.params.year) {
const queryParams = Object.assign(
{
energyType: this.energyType,
},
this.params
);
this.$confirm("是否确认导出数据项?", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(function () {
return exportOnCircle(queryParams);
})
.then((response) => {
this.download(response.msg);
});
}
},
}, },
}; };
</script> </script>

View File

@ -43,6 +43,14 @@
<!-- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery" <!-- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button >重置</el-button
> --> > -->
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button
>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -208,6 +216,12 @@ export default {
this.$refs.comparedTemplate[0].getChartList(); this.$refs.comparedTemplate[0].getChartList();
} }
}, },
/** 导出按钮操作 */
handleExport() {
if (this.$refs.comparedTemplate) {
this.$refs.comparedTemplate[0].handleExport();
}
},
}, },
}; };
</script> </script>

View File

@ -25,14 +25,22 @@
></el-table-column> ></el-table-column>
<el-table-column label="项目名称" align="left" prop="projectName" /> <el-table-column label="项目名称" align="left" prop="projectName" />
<el-table-column label="日期" align="left" prop="date" /> <el-table-column label="日期" align="left" prop="date" />
<el-table-column :label="`本期用量 (${unit})`" align="center" prop="homochronousValue" > <el-table-column
<template slot-scope="scope"> :label="`本期用量 (${unit})`"
<span class="lay-table-textarea">{{ align="center"
Number(scope.row.homochronousValue).toFixed(2) || "--" prop="homochronousValue"
}}</span> >
</template> <template slot-scope="scope">
<span class="lay-table-textarea">{{
Number(scope.row.homochronousValue).toFixed(2) || "--"
}}</span>
</template>
</el-table-column> </el-table-column>
<el-table-column :label="`同期用量 (${unit})`" align="center" prop="currentPeriodValue"> <el-table-column
:label="`同期用量 (${unit})`"
align="center"
prop="currentPeriodValue"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span class="lay-table-textarea">{{ <span class="lay-table-textarea">{{
Number(scope.row.currentPeriodValue).toFixed(2) || "--" Number(scope.row.currentPeriodValue).toFixed(2) || "--"
@ -46,11 +54,11 @@
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="`增长率`" align="center" prop="coal"> <el-table-column :label="`增长率`" align="center" prop="coal">
<template slot-scope="scope"> <template slot-scope="scope">
<span class="lay-table-textarea">{{ <span class="lay-table-textarea"
Number(scope.row.increaseRate).toFixed(2) || "--" >{{ Number(scope.row.increaseRate).toFixed(2) || "--" }} %</span
}} %</span> >
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -58,7 +66,7 @@
</div> </div>
</template> </template>
<script> <script>
import { monthOnMonthEnergy } from "@/api/iot/staistics"; import { monthOnMonthEnergy, exportOnMonth } from "@/api/iot/staistics";
import EEchartsBar from "@/components/Echarts/EEchartsBar"; import EEchartsBar from "@/components/Echarts/EEchartsBar";
export default { export default {
name: "ComparedTemplate", name: "ComparedTemplate",
@ -169,9 +177,9 @@ export default {
} }
} }
return { return {
'xAxis': xAxis, xAxis: xAxis,
'seriesFast': seriesFast, seriesFast: seriesFast,
'seriesLast': seriesLast, seriesLast: seriesLast,
}; };
}, },
getChartList() { getChartList() {
@ -197,6 +205,26 @@ export default {
}); });
} }
}, },
/** 导出按钮操作 */
handleExport() {
const queryParams = Object.assign(
{
energyType: this.energyType,
},
this.params
);
this.$confirm("是否确认导出数据项?", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(function () {
return exportOnMonth(queryParams);
})
.then((response) => {
this.download(response.msg);
});
},
}, },
}; };
</script> </script>

View File

@ -1,133 +1,155 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form <el-form
:model="queryParams" :model="queryParams"
ref="queryForm" ref="queryForm"
:inline="true" :inline="true"
label-width="68px" label-width="68px"
> >
<el-form-item label="项目名称" prop="projectName"> <el-form-item label="项目名称" prop="projectName">
<el-input <el-input
v-model="queryParams.projectName" v-model="queryParams.projectName"
placeholder="请输入项目名称" placeholder="请输入项目名称"
clearable clearable
size="small" size="small"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="时间" prop="time"> <el-form-item label="时间" prop="time">
<el-date-picker <el-date-picker
v-model="time" v-model="time"
size="small" size="small"
type="datetimerange" type="datetimerange"
range-separator="至" range-separator="至"
class="form-input" class="form-input"
start-placeholder="开始时间" start-placeholder="开始时间"
end-placeholder="结束时间" end-placeholder="结束时间"
@change="timeChange" @change="timeChange"
placeholder="选择时间范围" placeholder="选择时间范围"
></el-date-picker> ></el-date-picker>
</el-form-item> </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-form-item>
</el-form>
<el-table <el-form-item>
v-loading="loading" <el-button
:data="tableList" type="primary"
> icon="el-icon-search"
<!-- :default-sort="{prop: 'createTime', order: 'descending'}" size="mini"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button
>
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button
>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="tableList">
<!-- :default-sort="{prop: 'createTime', order: 'descending'}"
@sort-change="sortChange" --> @sort-change="sortChange" -->
<el-table-column <el-table-column
type="index" type="index"
label="序号" label="序号"
align="center" align="center"
:index="(val) => { :index="
return ( val + 1 + (queryParams.pageNum - 1) * queryParams.pageSize ) (val) => {
}" return val + 1 + (queryParams.pageNum - 1) * queryParams.pageSize;
width="80px" }
></el-table-column> "
<el-table-column label="项目ID" align="left" prop="projectName" /> width="80px"
<el-table-column label="项目名称" align="left" prop="projectName" /> ></el-table-column>
<el-table-column label="电用量 (kwh)" align="center" prop="electric" > <el-table-column label="项目ID" align="left" prop="projectName" />
<template slot-scope="scope"> <el-table-column label="项目名称" align="left" prop="projectName" />
<span class="lay-table-textarea">{{ Number(scope.row.electric).toFixed(2) || '--' }}</span> <el-table-column label="电用量 (kwh)" align="center" prop="electric">
</template> <template slot-scope="scope">
</el-table-column> <span class="lay-table-textarea">{{
<el-table-column label="水用量 (吨)" align="center" prop="electric" > Number(scope.row.electric).toFixed(2) || "--"
<template slot-scope="scope"> }}</span>
<span class="lay-table-textarea">{{ Number(0).toFixed(2) || '--' }}</span> </template>
</template> </el-table-column>
</el-table-column> <el-table-column label="水用量 (吨)" align="center" prop="water">
<el-table-column label="气用量 (m³)" align="center" prop="electric" > <template slot-scope="scope">
<template slot-scope="scope"> <span class="lay-table-textarea">{{
<span class="lay-table-textarea">{{ Number(0).toFixed(2) || '--' }}</span> Number(scope.row.water).toFixed(2) || "--"
</template> }}</span>
</el-table-column> </template>
<el-table-column label="碳排放 (吨)" align="center" prop="coal" > </el-table-column>
<template slot-scope="scope"> <el-table-column label="气用量 (m³)" align="center" prop="gas">
<span class="lay-table-textarea">{{ Number(scope.row.coal).toFixed(2) || '--' }}</span> <template slot-scope="scope">
</template> <span class="lay-table-textarea">{{
</el-table-column> Number(scope.row.gas).toFixed(2) || "--"
</el-table> }}</span>
</template>
</el-table-column>
<el-table-column label="碳排放 (吨)" align="center" prop="coal">
<template slot-scope="scope">
<span class="lay-table-textarea">{{
Number(scope.row.coal).toFixed(2) || "--"
}}</span>
</template>
</el-table-column>
</el-table>
<pagination <pagination
v-show="total > 0" v-show="total > 0"
:total="total" :total="total"
:page.sync="queryParams.pageNum" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</div> </div>
</template> </template>
<script> <script>
import { projectEnergy } from '@/api/iot/staistics' import { projectEnergy, exportEnergy } from "@/api/iot/staistics";
export default { export default {
name: 'EStatisticsEnergy', name: "EStatisticsEnergy",
data() { data() {
return { return {
total: 0, total: 0,
queryParams: { queryParams: {
projectName: '', projectName: "",
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
ed: '', ed: "",
sd: '' sd: "",
}, },
time: [], time: [],
loading: false, loading: false,
tableList: [] tableList: [],
};
} },
}, created() {
created() { this.getList();
this.getList(); },
}, methods: {
methods: { timeChange(val) {
timeChange(val) {
if (val) { if (val) {
this.queryParams.sd = this.parseTime(val[0], '{y}:{m}:{d} {h}:{i}:{s}'); this.queryParams.sd = this.parseTime(val[0], "{y}:{m}:{d} {h}:{i}:{s}");
this.queryParams.ed = this.parseTime(val[1], '{y}:{m}:{d} {h}:{i}:{s}'); this.queryParams.ed = this.parseTime(val[1], "{y}:{m}:{d} {h}:{i}:{s}");
} else { } else {
this.queryParams.sd = ""; this.queryParams.sd = "";
this.queryParams.ed = ""; this.queryParams.ed = "";
} }
this.handleQuery(); this.handleQuery();
}, },
sortChange(column) { sortChange(column) {
const sort = { const sort = {
isAsc: column.order === "descending" ? "desc" : "asc", isAsc: column.order === "descending" ? "desc" : "asc",
orderByColumn: column.prop orderByColumn: column.prop,
}; };
this.queryParams = Object.assign(this.queryParams, sort); this.queryParams = Object.assign(this.queryParams, sort);
this.handleQuery(); this.handleQuery();
}, },
/** 搜索按钮操作 */ /** 搜索按钮操作 */
handleQuery() { handleQuery() {
this.queryParams.pageNum = 1; this.queryParams.pageNum = 1;
this.getList(); this.getList();
@ -135,19 +157,34 @@ export default {
/** 重置按钮操作 */ /** 重置按钮操作 */
resetQuery() { resetQuery() {
this.resetForm("queryForm"); this.resetForm("queryForm");
this.queryParams.sd = ""; this.queryParams.sd = "";
this.queryParams.ed = ""; this.queryParams.ed = "";
this.time = []; this.time = [];
this.handleQuery(); this.handleQuery();
}, },
getList() { getList() {
this.loading = true; this.loading = true;
projectEnergy(Object.assign(this.queryParams)).then(res => { projectEnergy(Object.assign(this.queryParams)).then((res) => {
this.tableList = res.rows; this.tableList = res.rows;
this.total = res.total; this.total = res.total;
this.loading = false; this.loading = false;
}) });
}, },
}, /** 导出按钮操作 */
} handleExport() {
</script> const queryParams = this.queryParams;
this.$confirm("是否确认导出数据项?", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(function () {
return exportEnergy(queryParams);
})
.then((response) => {
this.download(response.msg);
});
},
},
};
</script>

View File

@ -114,35 +114,36 @@
/> />
</div> </div>
<div class="trigger-dialog"> <div>
<el-dialog <dialog-template
:close-on-press-escape="false"
:close-on-click-modal="false"
title="触发器详情" title="触发器详情"
width="40%" width="40%"
:visible.sync="triggerDetailsDialog" :visible="triggerDetailsDialog"
@close="triggerDetailsDialog = false"
top="5vh" top="5vh"
> >
<!-- <triggerDetails v-if="triggerDetailsDialog === true" :triggerId="tempModel.triggerId"></triggerDetails> --> <!-- <triggerDetails slot="dialog-center" v-if="triggerDetailsDialog === true" :triggerId="tempModel.triggerId"></triggerDetails> -->
</el-dialog> </dialog-template>
<!-- 新增触发器dialog --> <!-- 新增触发器dialog -->
<el-dialog <dialog-template
class="trigger-d-dialog" class="trigger-d-dialog"
:close-on-click-modal="false" :close-on-click-modal="false"
title="新增触发器" title="新增触发器"
width="900px" width="900px"
:visible.sync="outerVisible" :visible="outerVisible"
@close="outerVisible = false"
append-to-body append-to-body
> >
<component <component
slot="dialog-center"
v-if="outerVisible" v-if="outerVisible"
:is="componectVal" :is="componectVal"
:type="childOpt.type" :type="childOpt.type"
:triggerId="childOpt.triggerId" :triggerId="childOpt.triggerId"
@recover="dialogRecover" @recover="dialogRecover"
></component> ></component>
</el-dialog> </dialog-template>
</div> </div>
<!-- <div <!-- <div
@ -177,11 +178,13 @@ import { listTrigger, delTrigger } from "@/api/iot/trigger";
// // import { openDetailsPage } from '@/util/util' // // import { openDetailsPage } from '@/util/util'
import InsertTriggerDialog from "./profile/insertTriggerDialog"; import InsertTriggerDialog from "./profile/insertTriggerDialog";
import { listAlarmType } from "@/api/alarm/alarmType"; import { listAlarmType } from "@/api/alarm/alarmType";
import DialogTemplate from "@/components/DialogTemplate";
export default { export default {
name: "Rule", name: "Rule",
components: { components: {
// TriggerDetails, // TriggerDetails,
InsertTriggerDialog InsertTriggerDialog,
DialogTemplate
}, },
data() { data() {
return { return {

View File

@ -43,26 +43,16 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery" <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button >重置</el-button
> >
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button <el-button
type="warning" type="warning"
plain plain
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['tenant:record:export']"
>导出</el-button >导出</el-button
> >
</el-col> </el-form-item>
<right-toolbar </el-form>
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table <el-table
v-loading="loading" v-loading="loading"

View File

@ -42,26 +42,16 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery" <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button >重置</el-button
> >
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button <el-button
type="warning" type="warning"
plain plain
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['tenant:record:export']"
>导出</el-button >导出</el-button
> >
</el-col> </el-form-item>
<right-toolbar </el-form>
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table <el-table
v-loading="loading" v-loading="loading"