fast(设备管理、告警管理): 设备管理、报警记录、预警记录添加项目查询和项目显示

This commit is contained in:
fhysy 2024-11-12 14:13:28 +08:00
parent e8b5a0c30f
commit f2d896626a
3 changed files with 168 additions and 95 deletions

View File

@ -2,40 +2,50 @@
<!-- 告警记录功能 --> <!-- 告警记录功能 -->
<div class="app-container alarm-record"> <div class="app-container alarm-record">
<el-form <el-form
:model="queryParams" v-show="showSearch"
ref="queryForm" ref="queryForm"
:inline="true" :inline="true"
v-show="showSearch" :model="queryParams"
label-width="68px" label-width="68px"
> >
<el-form-item label="所属项目" prop="inProject">
<el-select v-model="queryParams.inProject" clearable placeholder="请选择所属项目" size="small">
<el-option
v-for="(item, index) in inProjectList"
:key="item.projectId"
:label="item.projectName"
:value="item.projectId"
/>
</el-select>
</el-form-item>
<el-form-item label="预警时间" prop="alarmTime"> <el-form-item label="预警时间" prop="alarmTime">
<el-date-picker <el-date-picker
v-model="time" v-model="time"
size="small"
@change="queryTimeChange"
clearable
type="datetimerange"
:default-time="['00:00:00', '23:59:59']" :default-time="['00:00:00', '23:59:59']"
range-separator="至" clearable
start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
range-separator="至"
size="small"
start-placeholder="开始日期"
type="datetimerange"
@change="queryTimeChange"
> >
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="告警类型" prop="typeName"> <el-form-item label="警类型" prop="typeName">
<el-input <el-input
v-model="queryParams.typeName" v-model="queryParams.typeName"
placeholder="请输入告警类型"
clearable clearable
placeholder="请输入预警类型"
size="small" size="small"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button
type="primary"
icon="el-icon-search" icon="el-icon-search"
size="mini" size="mini"
type="primary"
@click="handleQuery" @click="handleQuery"
>搜索</el-button >搜索</el-button
> >
@ -43,10 +53,10 @@
>重置</el-button >重置</el-button
> >
<el-button <el-button
type="warning"
plain
icon="el-icon-download" icon="el-icon-download"
plain
size="mini" size="mini"
type="warning"
@click="handleExport" @click="handleExport"
>导出</el-button >导出</el-button
> >
@ -60,29 +70,29 @@
@sort-change="sortChange" @sort-change="sortChange"
> >
<el-table-column <el-table-column
type="index"
label="序号"
align="center"
:index="indexFormatter" :index="indexFormatter"
width="80px" align="center"
label="序号"
type="index"
width="60"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
label="设备名称"
align="left" align="left"
width="200px" label="设备名称"
prop="deviceName" prop="deviceName"
/> />
<el-table-column align="center" label="所属项目" prop="inProjectName" />
<!-- <el-table-column label="设备当前值" align="left" width="200px" prop="currentValue" > <!-- <el-table-column label="设备当前值" align="left" width="200px" prop="currentValue" >
<template slot-scope="scope"> <template slot-scope="scope">
<span style="text-overflow: ellipsis; overflow: hidden; white-space: nowrap;">{{scope.row.currentValue}}</span> <span style="text-overflow: ellipsis; overflow: hidden; white-space: nowrap;">{{scope.row.currentValue}}</span>
</template> </template>
</el-table-column> --> </el-table-column> -->
<el-table-column label="推送内容" align="left" prop="alarmContent" /> <el-table-column align="left" label="推送内容" prop="alarmContent" />
<el-table-column <el-table-column
label="预警时间"
align="center" align="center"
sortable="custom" label="预警时间"
prop="alarmTime" prop="alarmTime"
sortable="custom"
width="150" width="150"
> >
<template slot-scope="scope"> <template slot-scope="scope">
@ -92,24 +102,21 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="处理状态"
width="100px"
align="center"
prop="processState"
:formatter="stateFormatter" :formatter="stateFormatter"
/>
<el-table-column
label="处理结果"
align="left"
sortable="custom"
width="150px"
prop="processResult"
/>
<el-table-column
label="处理时间"
align="center" align="center"
label="处理状态"
prop="processState"
/>
<el-table-column
align="left"
label="处理结果"
prop="processResult"
sortable="custom"
/>
<el-table-column
align="center"
label="处理时间"
prop="processTime" prop="processTime"
width="150"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ <span>{{
@ -118,31 +125,29 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="告警类型"
align="left" align="left"
width="150px" label="告警类型"
prop="typeName" prop="typeName"
/> />
<!-- <el-table-column label="类型编码" align="left" width="150px" prop="typeCode" /> --> <!-- <el-table-column label="类型编码" align="left" width="150px" prop="typeCode" /> -->
<el-table-column <el-table-column
label="操作"
width="150"
align="center" align="center"
class-name="small-padding fixed-width" class-name="small-padding fixed-width"
label="操作"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
v-show="scope.row.processStatus === '0'"
icon="el-icon-edit"
size="mini" size="mini"
type="text" type="text"
icon="el-icon-edit"
v-show="scope.row.processStatus === '0'"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
>处理</el-button >处理</el-button
> >
<el-button <el-button
icon="el-icon-document-add"
size="mini" size="mini"
type="text" type="text"
icon="el-icon-document-add"
@click="handleWork(scope.row)" @click="handleWork(scope.row)"
>创建工单</el-button >创建工单</el-button
> >
@ -152,9 +157,9 @@
<pagination <pagination
v-show="total > 0" v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
:page.sync="queryParams.pageNum"
:total="total"
@pagination="getList" @pagination="getList"
/> />
</div> </div>
@ -168,6 +173,7 @@ import {
addAlarmRecord, addAlarmRecord,
handlerRecord, handlerRecord,
} from "@/api/alarm/record"; } from "@/api/alarm/record";
import { listProject } from "@/api/tenant/project";
export default { export default {
name: "WarningRecord", name: "WarningRecord",
@ -198,6 +204,7 @@ export default {
pageSize: 10, pageSize: 10,
typeName: null, typeName: null,
typeCode: null, typeCode: null,
inProject: null,
beginTime: null, beginTime: null,
endTime: null, endTime: null,
alarmDivide: "WARNING", alarmDivide: "WARNING",
@ -209,12 +216,25 @@ export default {
// //
rules: {}, rules: {},
time: [], time: [],
inProjectList:[],
}; };
}, },
created() { created() {
this.getList(); this.getList();
this.getInProjectList();
}, },
methods: { methods: {
//
getInProjectList() {
listProject({
pageNum: 1,
pageSize: 100,
orderByColumn: 'createTime',
isAsc: 'desc'
}).then(response => {
this.inProjectList = response.rows;
});
},
// //
handleUpdate(row) { handleUpdate(row) {
const recordId = row.recordId || this.ids; const recordId = row.recordId || this.ids;

View File

@ -14,6 +14,16 @@
:model="queryParams" :model="queryParams"
label-width="68px" label-width="68px"
> >
<el-form-item label="所属项目" prop="inProject">
<el-select v-model="queryParams.inProject" clearable placeholder="请选择所属项目" size="small">
<el-option
v-for="(item, index) in inProjectList"
:key="item.projectId"
:label="item.projectName"
:value="item.projectId"
/>
</el-select>
</el-form-item>
<el-form-item label="型号名称" prop="modelName"> <el-form-item label="型号名称" prop="modelName">
<el-input <el-input
v-model="queryParams.modelName" v-model="queryParams.modelName"
@ -129,7 +139,7 @@
align="center" align="center"
label="序号" label="序号"
type="index" type="index"
width="80px" width="60px"
></el-table-column> ></el-table-column>
<el-table-column align="left" label="设备名称" prop="deviceName" > <el-table-column align="left" label="设备名称" prop="deviceName" >
<template slot-scope="scope"> <template slot-scope="scope">
@ -137,6 +147,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="left" label="所属型号" prop="modelName" /> <el-table-column align="left" label="所属型号" prop="modelName" />
<el-table-column align="center" label="所属项目" prop="inProjectName" />
<el-table-column align="left" label="设备key" prop="deviceKey" /> <el-table-column align="left" label="设备key" prop="deviceKey" />
<el-table-column <el-table-column
align="center" align="center"
@ -167,7 +178,6 @@
align="center" align="center"
label="设备状态" label="设备状态"
prop="deviceState" prop="deviceState"
width="120"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.deviceState === 'ONLINE'" type="success" <el-tag v-if="scope.row.deviceState === 'ONLINE'" type="success"
@ -437,6 +447,7 @@ import GatewayDetail from "@/views/profile/DeviceDetailsView/index";
import EDialogTableInput from "@/components/EDialogTableInput"; import EDialogTableInput from "@/components/EDialogTableInput";
import DialogTemplate from "@/components/DialogTemplate"; import DialogTemplate from "@/components/DialogTemplate";
import JsBarcode from "jsbarcode" import JsBarcode from "jsbarcode"
import { listProject } from "@/api/tenant/project";
const deviceStatusOpt = { const deviceStatusOpt = {
ONLINE: "在线", ONLINE: "在线",
@ -459,6 +470,7 @@ const selectModelTable = {
params: { params: {
protocolType: "", protocolType: "",
modelName: "", modelName: "",
}, },
inline: true, inline: true,
queryChilds: [ queryChilds: [
@ -680,6 +692,8 @@ export default {
title: "", title: "",
// //
open: false, open: false,
//
inProjectList:[],
// //
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
@ -690,6 +704,7 @@ export default {
deviceState: null, deviceState: null,
deviceType: null, deviceType: null,
modelName: null, modelName: null,
inProject: null,
orderByColumn: "createTime", orderByColumn: "createTime",
isAsc: "desc", isAsc: "desc",
}, },
@ -730,6 +745,7 @@ export default {
created() { created() {
console.log(this.$route); console.log(this.$route);
this.init(); this.init();
this.getInProjectList();
}, },
methods: { methods: {
listModel, listModel,
@ -742,6 +758,17 @@ export default {
this.form.prodKey = e.prodKey; this.form.prodKey = e.prodKey;
this.deviceTypeChange(this.form.deviceType); this.deviceTypeChange(this.form.deviceType);
}, },
//
getInProjectList() {
listProject({
pageNum: 1,
pageSize: 100,
orderByColumn: 'createTime',
isAsc: 'desc'
}).then(response => {
this.inProjectList = response.rows;
});
},
handleDeviceDialogEvent(e) { handleDeviceDialogEvent(e) {
this.form.parentId = e.deviceId; this.form.parentId = e.deviceId;
this.form.parentName = e.deviceName; this.form.parentName = e.deviceName;

View File

@ -2,40 +2,50 @@
<!-- 告警记录功能 --> <!-- 告警记录功能 -->
<div class="app-container alarm-record"> <div class="app-container alarm-record">
<el-form <el-form
:model="queryParams" v-show="showSearch"
ref="queryForm" ref="queryForm"
:inline="true" :inline="true"
v-show="showSearch" :model="queryParams"
label-width="68px" label-width="68px"
> >
<el-form-item label="所属项目" prop="inProject">
<el-select v-model="queryParams.inProject" clearable placeholder="请选择所属项目" size="small">
<el-option
v-for="(item, index) in inProjectList"
:key="item.projectId"
:label="item.projectName"
:value="item.projectId"
/>
</el-select>
</el-form-item>
<el-form-item label="预警时间" prop="alarmTime"> <el-form-item label="预警时间" prop="alarmTime">
<el-date-picker <el-date-picker
v-model="time" v-model="time"
size="small"
@change="queryTimeChange"
clearable
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
:default-time="['00:00:00', '23:59:59']" :default-time="['00:00:00', '23:59:59']"
clearable
end-placeholder="结束日期" end-placeholder="结束日期"
range-separator="至"
size="small"
start-placeholder="开始日期"
type="datetimerange"
@change="queryTimeChange"
> >
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="告警类型" prop="typeName"> <el-form-item label="警类型" prop="typeName">
<el-input <el-input
v-model="queryParams.typeName" v-model="queryParams.typeName"
placeholder="请输入告警类型"
clearable clearable
placeholder="请输入预警类型"
size="small" size="small"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button
type="primary"
icon="el-icon-search" icon="el-icon-search"
size="mini" size="mini"
type="primary"
@click="handleQuery" @click="handleQuery"
>搜索</el-button >搜索</el-button
> >
@ -48,12 +58,12 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['iot:record:export']" v-hasPermi="['iot:record:export']"
icon="el-icon-download"
plain
size="mini"
type="warning"
@click="handleExport"
>导出</el-button >导出</el-button
> >
</el-col> </el-col>
@ -70,30 +80,31 @@
@sort-change="sortChange" @sort-change="sortChange"
> >
<el-table-column <el-table-column
type="index"
label="序号"
align="center"
:index="indexFormatter" :index="indexFormatter"
align="center"
label="序号"
type="index"
width="80px" width="80px"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
label="设备名称"
align="left" align="left"
width="200px" label="设备名称"
prop="deviceName" prop="deviceName"
width="200px"
/> />
<el-table-column align="center" label="所属项目" prop="inProjectName" />
<!-- <el-table-column label="设备当前值" align="left" width="200px" prop="currentValue" > <!-- <el-table-column label="设备当前值" align="left" width="200px" prop="currentValue" >
<template slot-scope="scope"> <template slot-scope="scope">
<span style="text-overflow: ellipsis; overflow: hidden; white-space: nowrap;">{{scope.row.currentValue}}</span> <span style="text-overflow: ellipsis; overflow: hidden; white-space: nowrap;">{{scope.row.currentValue}}</span>
</template> </template>
</el-table-column> --> </el-table-column> -->
<el-table-column label="推送内容" align="left" prop="alarmContent" /> <el-table-column align="left" label="推送内容" prop="alarmContent" />
<el-table-column <el-table-column
label="预警时间"
align="center" align="center"
label="预警时间"
prop="alarmTime" prop="alarmTime"
width="150"
sortable="custom" sortable="custom"
width="150"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ <span>{{
@ -102,24 +113,24 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="处理状态"
width="100px"
align="center"
prop="processState"
:formatter="stateFormatter" :formatter="stateFormatter"
/>
<el-table-column
label="处理结果"
align="left"
width="150px"
prop="processResult"
/>
<el-table-column
label="处理时间"
align="center" align="center"
label="处理状态"
prop="processState"
width="100px"
/>
<el-table-column
align="left"
label="处理结果"
prop="processResult"
width="150px"
/>
<el-table-column
align="center"
label="处理时间"
prop="processTime" prop="processTime"
width="150"
sortable="custom" sortable="custom"
width="150"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ <span>{{
@ -128,31 +139,31 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="告警类型"
align="left" align="left"
width="150px" label="告警类型"
prop="typeName" prop="typeName"
width="150px"
/> />
<!-- <el-table-column label="类型编码" align="left" width="150px" prop="typeCode" /> --> <!-- <el-table-column label="类型编码" align="left" width="150px" prop="typeCode" /> -->
<el-table-column <el-table-column
label="操作"
width="200"
align="center" align="center"
class-name="small-padding fixed-width" class-name="small-padding fixed-width"
label="操作"
width="200"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
v-show="scope.row.processStatus === '0'"
icon="el-icon-edit"
size="mini" size="mini"
type="text" type="text"
icon="el-icon-edit"
v-show="scope.row.processStatus === '0'"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
>处理</el-button >处理</el-button
> >
<el-button <el-button
icon="el-icon-document-add"
size="mini" size="mini"
type="text" type="text"
icon="el-icon-document-add"
@click="handleWork(scope.row)" @click="handleWork(scope.row)"
>创建工单</el-button >创建工单</el-button
> >
@ -162,9 +173,9 @@
<pagination <pagination
v-show="total > 0" v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
:page.sync="queryParams.pageNum"
:total="total"
@pagination="getList" @pagination="getList"
/> />
</div> </div>
@ -174,6 +185,7 @@
import { listRecord, exportRecord } from "@/api/personal/alarm"; import { listRecord, exportRecord } from "@/api/personal/alarm";
import { addAlarmRecord } from "@/api/alarm/tenantAlarm"; import { addAlarmRecord } from "@/api/alarm/tenantAlarm";
import { handlerRecord } from "@/api/alarm/record"; import { handlerRecord } from "@/api/alarm/record";
import { listProject } from "@/api/tenant/project";
export default { export default {
name: "WarningRecord", name: "WarningRecord",
@ -204,6 +216,7 @@ export default {
pageSize: 10, pageSize: 10,
typeName: null, typeName: null,
typeCode: null, typeCode: null,
inProject: null,
beginTime: null, beginTime: null,
endTime: null, endTime: null,
alarmDivide: "WARNING", alarmDivide: "WARNING",
@ -213,12 +226,25 @@ export default {
// //
rules: {}, rules: {},
time: [], time: [],
inProjectList:[],
}; };
}, },
created() { created() {
this.getList(); this.getList();
this.getInProjectList();
}, },
methods: { methods: {
//
getInProjectList() {
listProject({
pageNum: 1,
pageSize: 100,
orderByColumn: 'createTime',
isAsc: 'desc'
}).then(response => {
this.inProjectList = response.rows;
});
},
sortChange(column) { sortChange(column) {
const sort = { const sort = {
isAsc: column.order === "descending" ? "desc" : "asc", isAsc: column.order === "descending" ? "desc" : "asc",