|
@@ -1,66 +1,49 @@
|
|
|
<template>
|
|
<template>
|
|
|
<div class="app-container">
|
|
<div class="app-container">
|
|
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
|
|
- <el-form-item label="农机编号" prop="machineId">
|
|
|
|
|
- <el-input
|
|
|
|
|
- v-model="queryParams.machineId"
|
|
|
|
|
- placeholder="请输入农机编号关键词"
|
|
|
|
|
- clearable
|
|
|
|
|
- @keyup.enter.native="handleQuery"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <el-form-item label="农机编号" prop="machineCode">
|
|
|
|
|
+ <el-input v-model="queryParams.machineCode" placeholder="请输入农机编号关键词" clearable
|
|
|
|
|
+ @keyup.enter.native="handleQuery" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="农机名称" prop="machineName">
|
|
<el-form-item label="农机名称" prop="machineName">
|
|
|
- <el-input
|
|
|
|
|
- v-model="queryParams.machineName"
|
|
|
|
|
- placeholder="请输入农机名称关键词"
|
|
|
|
|
- clearable
|
|
|
|
|
- @keyup.enter.native="handleQuery"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <el-input v-model="queryParams.machineName" placeholder="请输入农机名称关键词" clearable
|
|
|
|
|
+ @keyup.enter.native="handleQuery" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
+
|
|
|
<el-form-item label="告警等级" prop="alarmLevel">
|
|
<el-form-item label="告警等级" prop="alarmLevel">
|
|
|
<el-select v-model="queryParams.alarmLevel" placeholder="所有告警等级" clearable>
|
|
<el-select v-model="queryParams.alarmLevel" placeholder="所有告警等级" clearable>
|
|
|
- <el-option label="提示" value="3" />
|
|
|
|
|
- <el-option label="告警" value="2" />
|
|
|
|
|
- <el-option label="紧急" value="1" />
|
|
|
|
|
|
|
+ <el-option v-for="dict in dict.type.machine_alarm_level" :key="dict.value" :label="dict.label"
|
|
|
|
|
+ :value="dict.value" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
<el-form-item label="农机类型" prop="machineType">
|
|
<el-form-item label="农机类型" prop="machineType">
|
|
|
<el-select v-model="queryParams.machineType" placeholder="所有农机类型" clearable>
|
|
<el-select v-model="queryParams.machineType" placeholder="所有农机类型" clearable>
|
|
|
- <el-option label="拖拉机" value="tractor" />
|
|
|
|
|
- <el-option label="收割机" value="harvester" />
|
|
|
|
|
- <el-option label="播种机" value="seeder" />
|
|
|
|
|
- <el-option label="喷药机" value="sprayer" />
|
|
|
|
|
- <el-option label="耕地机" value="cultivator" />
|
|
|
|
|
|
|
+ <el-option v-for="dict in dict.type.agricultural_machine_type" :key="dict.value" :label="dict.label"
|
|
|
|
|
+ :value="dict.value" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
- <el-form-item label="所属农场" prop="farmId">
|
|
|
|
|
- <el-select v-model="queryParams.farmId" placeholder="所有农场" clearable>
|
|
|
|
|
- <el-option label="绿野农场" value="1" />
|
|
|
|
|
- <el-option label="丰收农场" value="2" />
|
|
|
|
|
- <el-option label="田园农场" value="3" />
|
|
|
|
|
- <el-option label="生态农场" value="4" />
|
|
|
|
|
- <el-option label="科技农场" value="5" />
|
|
|
|
|
- </el-select>
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ <el-form-item label="所属农场" prop="deptIdList">
|
|
|
|
|
+ <treeselect v-model="queryParams.deptIdList" :options="deptOptions" multiple :flat="true" :limit="1"
|
|
|
|
|
+ :limitText="count => `+${count}`" style="width:200px" :show-count="true" placeholder="请选所属农场" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
+
|
|
|
<el-form-item label="告警时间">
|
|
<el-form-item label="告警时间">
|
|
|
- <el-date-picker
|
|
|
|
|
- v-model="daterangeAlarmTime"
|
|
|
|
|
- style="width: 240px"
|
|
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
|
|
- type="daterange"
|
|
|
|
|
- range-separator="至"
|
|
|
|
|
- start-placeholder="年/月/日"
|
|
|
|
|
- end-placeholder="年/月/日"
|
|
|
|
|
- ></el-date-picker>
|
|
|
|
|
|
|
+ <el-date-picker v-model="daterangeAlarmTime" style="width: 240px" value-format="yyyy-MM-dd" type="daterange"
|
|
|
|
|
+ range-separator="至" start-placeholder="年/月/日" end-placeholder="年/月/日"></el-date-picker>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
+
|
|
|
<el-form-item label="处理状态" prop="handledStatus">
|
|
<el-form-item label="处理状态" prop="handledStatus">
|
|
|
<el-select v-model="queryParams.handledStatus" placeholder="所有状态" clearable>
|
|
<el-select v-model="queryParams.handledStatus" placeholder="所有状态" clearable>
|
|
|
- <el-option label="未处理" value="0" />
|
|
|
|
|
- <el-option label="已处理" value="1" />
|
|
|
|
|
- <el-option label="处理中" value="2" />
|
|
|
|
|
- <el-option label="忽略" value="3" />
|
|
|
|
|
|
|
+ <el-option v-for="dict in dict.type.machine_handled_status" :key="dict.value" :label="dict.label"
|
|
|
|
|
+ :value="dict.value" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</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 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 icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
@@ -82,7 +65,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- </el-col>
|
|
|
|
|
|
|
+ </el-col>
|
|
|
<el-col :span="6">
|
|
<el-col :span="6">
|
|
|
<div class="stat-card emergency">
|
|
<div class="stat-card emergency">
|
|
|
<div class="stat-header">
|
|
<div class="stat-header">
|
|
@@ -95,7 +78,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- </el-col>
|
|
|
|
|
|
|
+ </el-col>
|
|
|
<el-col :span="6">
|
|
<el-col :span="6">
|
|
|
<div class="stat-card warning">
|
|
<div class="stat-card warning">
|
|
|
<div class="stat-header">
|
|
<div class="stat-header">
|
|
@@ -108,7 +91,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- </el-col>
|
|
|
|
|
|
|
+ </el-col>
|
|
|
<el-col :span="6">
|
|
<el-col :span="6">
|
|
|
<div class="stat-card info">
|
|
<div class="stat-card info">
|
|
|
<div class="stat-header">
|
|
<div class="stat-header">
|
|
@@ -127,14 +110,8 @@
|
|
|
|
|
|
|
|
<el-row :gutter="10" class="mb8">
|
|
<el-row :gutter="10" class="mb8">
|
|
|
<el-col :span="1.5">
|
|
<el-col :span="1.5">
|
|
|
- <el-button
|
|
|
|
|
- type="warning"
|
|
|
|
|
- plain
|
|
|
|
|
- icon="el-icon-download"
|
|
|
|
|
- size="mini"
|
|
|
|
|
- @click="handleExport"
|
|
|
|
|
- v-hasPermi="['base:machineAlarmRecords:export']"
|
|
|
|
|
- >导出</el-button>
|
|
|
|
|
|
|
+ <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
|
|
|
|
|
+ v-hasPermi="['base:machineAlarmRecords:export']">导出</el-button>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
|
|
</el-row>
|
|
</el-row>
|
|
@@ -142,38 +119,54 @@
|
|
|
<el-table v-loading="loading" :data="machineAlarmRecordsList" @selection-change="handleSelectionChange">
|
|
<el-table v-loading="loading" :data="machineAlarmRecordsList" @selection-change="handleSelectionChange">
|
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
|
<el-table-column label="告警ID" align="center" prop="id" />
|
|
<el-table-column label="告警ID" align="center" prop="id" />
|
|
|
- <el-table-column label="告警等级" align="center" prop="alarmLevel">
|
|
|
|
|
|
|
+ <!-- <el-table-column label="告警等级" align="center" prop="alarmLevel">
|
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
|
<span :class="['custom-tag', 'level-tag', getAlertLevelClass(scope.row.alarmLevel)]">
|
|
<span :class="['custom-tag', 'level-tag', getAlertLevelClass(scope.row.alarmLevel)]">
|
|
|
{{ getAlertLevelText(scope.row.alarmLevel) }}
|
|
{{ getAlertLevelText(scope.row.alarmLevel) }}
|
|
|
</span>
|
|
</span>
|
|
|
</template>
|
|
</template>
|
|
|
- </el-table-column>
|
|
|
|
|
- <el-table-column label="农机名称" align="center" prop="machineName">
|
|
|
|
|
|
|
+</el-table-column> -->
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="告警等级" align="center" prop="alarmLevel">
|
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
|
- <span>{{ getMachineName(scope.row.machineId) }}</span>
|
|
|
|
|
|
|
+ <dict-tag :options="dict.type.machine_alarm_level" :value="scope.row.alarmLevel" />
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column label="农机编号" align="center" prop="machineId" />
|
|
|
|
|
- <el-table-column label="农机类型" align="center" prop="machineType">
|
|
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="农机名称" align="center" key="machineName" prop="machineName" />
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="农机编号" align="center" prop="machineCode" />
|
|
|
|
|
+
|
|
|
|
|
+ <!-- <el-table-column label="农机类型" align="center" prop="machineType">
|
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
|
<span>{{ getMachineType(scope.row.machineId) }}</span>
|
|
<span>{{ getMachineType(scope.row.machineId) }}</span>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
+ </el-table-column> -->
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="农机类型" align="center" prop="machineType">
|
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
|
+ <dict-tag :options="dict.type.agricultural_machine_type" :value="scope.row.machineType" />
|
|
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column label="所属农场" align="center" prop="farmName">
|
|
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="所属农场" align="center" key="deptName" prop="deptName" />
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ <!-- <el-table-column label="所属农场" align="center" prop="farmName">
|
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
|
<span>{{ getFarmName(scope.row.machineId) }}</span>
|
|
<span>{{ getFarmName(scope.row.machineId) }}</span>
|
|
|
</template>
|
|
</template>
|
|
|
- </el-table-column>
|
|
|
|
|
|
|
+ </el-table-column> -->
|
|
|
<el-table-column label="告警类型" align="center" prop="alarmType">
|
|
<el-table-column label="告警类型" align="center" prop="alarmType">
|
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
|
- <dict-tag :options="dict.type.machine_alarm_type" :value="scope.row.alarmType"/>
|
|
|
|
|
|
|
+ <dict-tag :options="dict.type.machine_alarm_type" :value="scope.row.alarmType" />
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
<el-table-column label="告警内容" align="center" prop="alarmDesc" />
|
|
<el-table-column label="告警内容" align="center" prop="alarmDesc" />
|
|
|
<el-table-column label="告警时间" align="center" prop="alarmTime" width="180">
|
|
<el-table-column label="告警时间" align="center" prop="alarmTime" width="180">
|
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
|
- <span>{{ parseTime(scope.row.alarmTime, '{y}-{m}-{d}') }}</span>
|
|
|
|
|
|
|
+ <span>{{ scope.row.alarmTime }}</span>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
<el-table-column label="处理状态" align="center" prop="handledStatus">
|
|
<el-table-column label="处理状态" align="center" prop="handledStatus">
|
|
@@ -186,36 +179,22 @@
|
|
|
<el-table-column label="处理人" align="center" prop="handlerName" />
|
|
<el-table-column label="处理人" align="center" prop="handlerName" />
|
|
|
<el-table-column label="处理时间" align="center" prop="handleTime" width="180">
|
|
<el-table-column label="处理时间" align="center" prop="handleTime" width="180">
|
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
|
- <span>{{ parseTime(scope.row.handleTime, '{y}-{m}-{d}') }}</span>
|
|
|
|
|
|
|
+ <span>{{ scope.row.handleTime }}</span>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
|
- <el-button
|
|
|
|
|
- size="mini"
|
|
|
|
|
- type="text"
|
|
|
|
|
- icon="el-icon-view"
|
|
|
|
|
- @click="handleDetail(scope.row)"
|
|
|
|
|
- >查看</el-button>
|
|
|
|
|
|
|
+ <el-button size="mini" type="text" icon="el-icon-view" @click="handleDetail(scope.row)">查看</el-button>
|
|
|
<el-button
|
|
<el-button
|
|
|
v-if="scope.row.handledStatus == 0 || scope.row.handledStatus == '0' || scope.row.handledStatus == 2 || scope.row.handledStatus == '2'"
|
|
v-if="scope.row.handledStatus == 0 || scope.row.handledStatus == '0' || scope.row.handledStatus == 2 || scope.row.handledStatus == '2'"
|
|
|
- size="mini"
|
|
|
|
|
- type="text"
|
|
|
|
|
- icon="el-icon-edit"
|
|
|
|
|
- @click="handleProcess(scope.row)"
|
|
|
|
|
- v-hasPermi="['base:machineAlarmRecords:edit']"
|
|
|
|
|
- >处理</el-button>
|
|
|
|
|
|
|
+ size="mini" type="text" icon="el-icon-edit" @click="handleProcess(scope.row)"
|
|
|
|
|
+ v-hasPermi="['base:machineAlarmRecords:edit']">处理</el-button>
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
</el-table>
|
|
</el-table>
|
|
|
-
|
|
|
|
|
- <pagination
|
|
|
|
|
- v-show="total>0"
|
|
|
|
|
- :total="total"
|
|
|
|
|
- :page.sync="queryParams.pageNum"
|
|
|
|
|
- :limit.sync="queryParams.pageSize"
|
|
|
|
|
- @pagination="getList"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+
|
|
|
|
|
+ <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
|
|
|
|
|
+ @pagination="getList" />
|
|
|
|
|
|
|
|
<!-- 告警详情对话框 -->
|
|
<!-- 告警详情对话框 -->
|
|
|
<el-dialog title="告警详情" :visible.sync="detailOpen" width="600px" append-to-body>
|
|
<el-dialog title="告警详情" :visible.sync="detailOpen" width="600px" append-to-body>
|
|
@@ -231,13 +210,13 @@
|
|
|
</div>
|
|
</div>
|
|
|
<div class="alert-time">{{ parseTime(currentRecord.alarmTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</div>
|
|
<div class="alert-time">{{ parseTime(currentRecord.alarmTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
<!-- 告警内容 -->
|
|
<!-- 告警内容 -->
|
|
|
<div class="alert-content">
|
|
<div class="alert-content">
|
|
|
{{ getAlertContent(currentRecord) }}
|
|
{{ getAlertContent(currentRecord) }}
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
<!-- 设备信息 -->
|
|
<!-- 设备信息 -->
|
|
|
<div class="section">
|
|
<div class="section">
|
|
|
<div class="section-title">设备信息</div>
|
|
<div class="section-title">设备信息</div>
|
|
@@ -245,24 +224,26 @@
|
|
|
<div class="info-grid">
|
|
<div class="info-grid">
|
|
|
<div class="info-item">
|
|
<div class="info-item">
|
|
|
<span class="label">农机名称</span>
|
|
<span class="label">农机名称</span>
|
|
|
- <span class="value">{{ getMachineName(currentRecord.machineId) }}</span>
|
|
|
|
|
|
|
+ <span class="value">{{ currentRecord.machineName }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="info-item">
|
|
<div class="info-item">
|
|
|
<span class="label">农机编号</span>
|
|
<span class="label">农机编号</span>
|
|
|
- <span class="value">{{ currentRecord.machineId }}</span>
|
|
|
|
|
|
|
+ <span class="value">{{ currentRecord.machineCode }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="info-item">
|
|
<div class="info-item">
|
|
|
<span class="label">农机类型</span>
|
|
<span class="label">农机类型</span>
|
|
|
- <span class="value">{{ getMachineType(currentRecord.machineId) }}</span>
|
|
|
|
|
|
|
+ <span class="value status">
|
|
|
|
|
+ <dict-tag :options="dict.type.agricultural_machine_type" :value="currentRecord.machineType" />
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="info-item">
|
|
|
|
|
+ <span class="label">所属农场</span>
|
|
|
|
|
+ <span class="value">{{ currentRecord.deptName }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="info-item">
|
|
|
|
|
- <span class="label">所属农场</span>
|
|
|
|
|
- <span class="value">{{ getFarmName(currentRecord.machineId) }}</span>
|
|
|
|
|
- </div>
|
|
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
<!-- 处理状态 -->
|
|
<!-- 处理状态 -->
|
|
|
<div class="section">
|
|
<div class="section">
|
|
|
<div class="section-title">处理状态</div>
|
|
<div class="section-title">处理状态</div>
|
|
@@ -270,19 +251,23 @@
|
|
|
<div class="status-item">
|
|
<div class="status-item">
|
|
|
<span class="label">当前状态</span>
|
|
<span class="label">当前状态</span>
|
|
|
<span class="value status">
|
|
<span class="value status">
|
|
|
- <span :class="['custom-tag', 'status-tag', getProcessStatusClass(currentRecord.handledStatus)]">
|
|
|
|
|
|
|
+ <!-- <span :class="['custom-tag', 'status-tag', getProcessStatusClass(currentRecord.handledStatus)]">
|
|
|
{{ getProcessStatusText(currentRecord.handledStatus) }}
|
|
{{ getProcessStatusText(currentRecord.handledStatus) }}
|
|
|
- </span>
|
|
|
|
|
|
|
+ </span> -->
|
|
|
|
|
+ <dict-tag :options="dict.type.machine_handled_status" :value="currentRecord.handledStatus" />
|
|
|
</span>
|
|
</span>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="status-item">
|
|
<div class="status-item">
|
|
|
<span class="label">处理人</span>
|
|
<span class="label">处理人</span>
|
|
|
<span class="value">{{ currentRecord.handlerName || '-' }}</span>
|
|
<span class="value">{{ currentRecord.handlerName || '-' }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="status-item">
|
|
|
|
|
- <span class="label">处理时间</span>
|
|
|
|
|
- <span class="value">{{ currentRecord.handleTime ? parseTime(currentRecord.handleTime, '{y}-{m}-{d} {h}:{i}:{s}') : '-' }}</span>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <div class="status-item">
|
|
|
|
|
+ <span class="label">处理时间</span>
|
|
|
|
|
+ <span class="value">{{
|
|
|
|
|
+ currentRecord.handleTime
|
|
|
|
|
+
|
|
|
|
|
+ }}</span>
|
|
|
|
|
+ </div>
|
|
|
<div class="status-item full-width">
|
|
<div class="status-item full-width">
|
|
|
<span class="label">处理记录</span>
|
|
<span class="label">处理记录</span>
|
|
|
<div class="process-record">
|
|
<div class="process-record">
|
|
@@ -291,13 +276,14 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
<!-- 附件信息 -->
|
|
<!-- 附件信息 -->
|
|
|
<div class="section">
|
|
<div class="section">
|
|
|
<div class="section-title">附件信息</div>
|
|
<div class="section-title">附件信息</div>
|
|
|
<div class="attachment-info">
|
|
<div class="attachment-info">
|
|
|
<div v-if="currentRecord.attachments && currentRecord.attachments.length > 0" class="attachment-list">
|
|
<div v-if="currentRecord.attachments && currentRecord.attachments.length > 0" class="attachment-list">
|
|
|
- <div v-for="(attachment, index) in getAttachmentList(currentRecord.attachments)" :key="index" class="attachment-item">
|
|
|
|
|
|
|
+ <div v-for="(attachment, index) in getAttachmentList(currentRecord.attachments)" :key="index"
|
|
|
|
|
+ class="attachment-item">
|
|
|
<div class="attachment-preview">
|
|
<div class="attachment-preview">
|
|
|
<i v-if="isImage(attachment.name)" class="el-icon-picture-outline"></i>
|
|
<i v-if="isImage(attachment.name)" class="el-icon-picture-outline"></i>
|
|
|
<i v-else class="el-icon-document"></i>
|
|
<i v-else class="el-icon-document"></i>
|
|
@@ -308,7 +294,8 @@
|
|
|
</div>
|
|
</div>
|
|
|
<div class="attachment-actions">
|
|
<div class="attachment-actions">
|
|
|
<el-button size="mini" type="text" @click="downloadAttachment(attachment)">下载</el-button>
|
|
<el-button size="mini" type="text" @click="downloadAttachment(attachment)">下载</el-button>
|
|
|
- <el-button v-if="isImage(attachment.name)" size="mini" type="text" @click="previewImage(attachment)">预览</el-button>
|
|
|
|
|
|
|
+ <el-button v-if="isImage(attachment.name)" size="mini" type="text"
|
|
|
|
|
+ @click="previewImage(attachment)">预览</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -319,7 +306,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
<div slot="footer" class="dialog-footer">
|
|
<div slot="footer" class="dialog-footer">
|
|
|
<el-button @click="detailOpen = false">关闭</el-button>
|
|
<el-button @click="detailOpen = false">关闭</el-button>
|
|
|
</div>
|
|
</div>
|
|
@@ -329,19 +316,19 @@
|
|
|
<el-dialog title="处理告警" :visible.sync="processOpen" width="500px" append-to-body>
|
|
<el-dialog title="处理告警" :visible.sync="processOpen" width="500px" append-to-body>
|
|
|
<el-form ref="processForm" :model="processForm" :rules="processRules" label-width="80px">
|
|
<el-form ref="processForm" :model="processForm" :rules="processRules" label-width="80px">
|
|
|
<el-form-item label="告警信息">
|
|
<el-form-item label="告警信息">
|
|
|
- <div class="process-alert-info">
|
|
|
|
|
- <div class="info-item-row">
|
|
|
|
|
- <span class="label">农机编号:</span>
|
|
|
|
|
- <span class="value">{{ processForm.machineId }}</span>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="info-item-row">
|
|
|
|
|
- <span class="label">农机名称:</span>
|
|
|
|
|
- <span class="value">{{ getMachineName(processForm.machineId) }}</span>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="alert-content-preview">
|
|
|
|
|
- {{ getAlertContent(processForm) }}
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <div class="process-alert-info">
|
|
|
|
|
+ <div class="info-item-row">
|
|
|
|
|
+ <span class="label">农机编号:</span>
|
|
|
|
|
+ <span class="value">{{ processForm.machineCode }}</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="info-item-row">
|
|
|
|
|
+ <span class="label">农机名称:</span>
|
|
|
|
|
+ <span class="value">{{ processForm.machineName }}</span>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="alert-content-preview">
|
|
|
|
|
+ {{ getAlertContent(processForm) }}
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="处理结果" prop="handledStatus">
|
|
<el-form-item label="处理结果" prop="handledStatus">
|
|
|
<el-select v-model="processForm.handledStatus" placeholder="请选择处理结果">
|
|
<el-select v-model="processForm.handledStatus" placeholder="请选择处理结果">
|
|
@@ -350,21 +337,16 @@
|
|
|
<el-option label="处理中" :value="2"></el-option>
|
|
<el-option label="处理中" :value="2"></el-option>
|
|
|
<el-option label="忽略" :value="3"></el-option>
|
|
<el-option label="忽略" :value="3"></el-option>
|
|
|
</el-select>
|
|
</el-select>
|
|
|
|
|
+
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
- <el-form-item label="处理备注" prop="handleDesc">
|
|
|
|
|
- <el-input
|
|
|
|
|
- v-model="processForm.handleDesc"
|
|
|
|
|
- type="textarea"
|
|
|
|
|
- :rows="4"
|
|
|
|
|
- placeholder="请输入处理备注..."
|
|
|
|
|
- maxlength="500"
|
|
|
|
|
- show-word-limit
|
|
|
|
|
- />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- <el-form-item label="附件上传">
|
|
|
|
|
- <file-upload v-model="processForm.attachments" :limit="5" />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- </el-form>
|
|
|
|
|
|
|
+ <el-form-item label="处理备注" prop="handleDesc">
|
|
|
|
|
+ <el-input v-model="processForm.handleDesc" type="textarea" :rows="4" placeholder="请输入处理备注..." maxlength="500"
|
|
|
|
|
+ show-word-limit />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="附件上传">
|
|
|
|
|
+ <file-upload v-model="processForm.attachments" :limit="5" />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-form>
|
|
|
<div slot="footer" class="dialog-footer">
|
|
<div slot="footer" class="dialog-footer">
|
|
|
<el-button type="primary" @click="submitProcess" :loading="processLoading">确 定</el-button>
|
|
<el-button type="primary" @click="submitProcess" :loading="processLoading">确 定</el-button>
|
|
|
<el-button @click="cancelProcess">取 消</el-button>
|
|
<el-button @click="cancelProcess">取 消</el-button>
|
|
@@ -379,32 +361,21 @@
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="报警类型" prop="alarmType">
|
|
<el-form-item label="报警类型" prop="alarmType">
|
|
|
<el-select v-model="form.alarmType" placeholder="请选择报警类型">
|
|
<el-select v-model="form.alarmType" placeholder="请选择报警类型">
|
|
|
- <el-option
|
|
|
|
|
- v-for="dict in dict.type.machine_alarm_type"
|
|
|
|
|
- :key="dict.value"
|
|
|
|
|
- :label="dict.label"
|
|
|
|
|
- :value="dict.value"
|
|
|
|
|
- ></el-option>
|
|
|
|
|
|
|
+ <el-option v-for="dict in dict.type.machine_alarm_type" :key="dict.value" :label="dict.label"
|
|
|
|
|
+ :value="dict.value"></el-option>
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="报警级别" prop="alarmLevel">
|
|
<el-form-item label="报警级别" prop="alarmLevel">
|
|
|
<el-select v-model="form.alarmLevel" placeholder="请选择报警级别">
|
|
<el-select v-model="form.alarmLevel" placeholder="请选择报警级别">
|
|
|
- <el-option
|
|
|
|
|
- v-for="dict in dict.type.machine_alarm_level"
|
|
|
|
|
- :key="dict.value"
|
|
|
|
|
- :label="dict.label"
|
|
|
|
|
- :value="dict.value"
|
|
|
|
|
- ></el-option>
|
|
|
|
|
|
|
+ <el-option v-for="dict in dict.type.machine_alarm_level" :key="dict.value" :label="dict.label"
|
|
|
|
|
+ :value="dict.value"></el-option>
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="报警描述" prop="alarmDesc">
|
|
<el-form-item label="报警描述" prop="alarmDesc">
|
|
|
<el-input v-model="form.alarmDesc" type="textarea" placeholder="请输入内容" />
|
|
<el-input v-model="form.alarmDesc" type="textarea" placeholder="请输入内容" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="报警时间" prop="alarmTime">
|
|
<el-form-item label="报警时间" prop="alarmTime">
|
|
|
- <el-date-picker clearable
|
|
|
|
|
- v-model="form.alarmTime"
|
|
|
|
|
- type="date"
|
|
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
|
|
|
|
+ <el-date-picker clearable v-model="form.alarmTime" type="date" value-format="yyyy-MM-dd"
|
|
|
placeholder="请选择报警时间">
|
|
placeholder="请选择报警时间">
|
|
|
</el-date-picker>
|
|
</el-date-picker>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -413,11 +384,9 @@
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="处理状态" prop="handledStatus">
|
|
<el-form-item label="处理状态" prop="handledStatus">
|
|
|
<el-radio-group v-model="form.handledStatus">
|
|
<el-radio-group v-model="form.handledStatus">
|
|
|
- <el-radio
|
|
|
|
|
- v-for="dict in dict.type.machine_handled_status"
|
|
|
|
|
- :key="dict.value"
|
|
|
|
|
- :label="parseInt(dict.value)"
|
|
|
|
|
- >{{dict.label}}</el-radio>
|
|
|
|
|
|
|
+ <el-radio v-for="dict in dict.type.machine_handled_status" :key="dict.value"
|
|
|
|
|
+ :label="parseInt(dict.value)">{{
|
|
|
|
|
+ dict.label }}</el-radio>
|
|
|
</el-radio-group>
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="处理人ID" prop="handlerId">
|
|
<el-form-item label="处理人ID" prop="handlerId">
|
|
@@ -427,10 +396,7 @@
|
|
|
<el-input v-model="form.handlerName" placeholder="请输入处理人姓名" />
|
|
<el-input v-model="form.handlerName" placeholder="请输入处理人姓名" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="处理时间" prop="handleTime">
|
|
<el-form-item label="处理时间" prop="handleTime">
|
|
|
- <el-date-picker clearable
|
|
|
|
|
- v-model="form.handleTime"
|
|
|
|
|
- type="date"
|
|
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
|
|
|
|
+ <el-date-picker clearable v-model="form.handleTime" type="date" value-format="yyyy-MM-dd"
|
|
|
placeholder="请选择处理时间">
|
|
placeholder="请选择处理时间">
|
|
|
</el-date-picker>
|
|
</el-date-picker>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -438,10 +404,7 @@
|
|
|
<el-input v-model="form.handleDesc" type="textarea" placeholder="请输入内容" />
|
|
<el-input v-model="form.handleDesc" type="textarea" placeholder="请输入内容" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="解决时间" prop="resolvedTime">
|
|
<el-form-item label="解决时间" prop="resolvedTime">
|
|
|
- <el-date-picker clearable
|
|
|
|
|
- v-model="form.resolvedTime"
|
|
|
|
|
- type="date"
|
|
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
|
|
|
|
+ <el-date-picker clearable v-model="form.resolvedTime" type="date" value-format="yyyy-MM-dd"
|
|
|
placeholder="请选择解决时间">
|
|
placeholder="请选择解决时间">
|
|
|
</el-date-picker>
|
|
</el-date-picker>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -459,10 +422,13 @@
|
|
|
|
|
|
|
|
<script>
|
|
<script>
|
|
|
import { listMachineAlarmRecords, getMachineAlarmRecords, delMachineAlarmRecords, addMachineAlarmRecords, updateMachineAlarmRecords } from "@/api/base/machineAlarmRecords"
|
|
import { listMachineAlarmRecords, getMachineAlarmRecords, delMachineAlarmRecords, addMachineAlarmRecords, updateMachineAlarmRecords } from "@/api/base/machineAlarmRecords"
|
|
|
-
|
|
|
|
|
|
|
+import { deptTreeSelect } from "@/api/system/user";
|
|
|
|
|
+import Treeselect from "@riophae/vue-treeselect";
|
|
|
|
|
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
|
|
export default {
|
|
export default {
|
|
|
name: "MachineAlarmRecords",
|
|
name: "MachineAlarmRecords",
|
|
|
- dicts: ['machine_alarm_level', 'machine_alarm_type', 'machine_handled_status', 'machine_type', 'farm_list'],
|
|
|
|
|
|
|
+ components: { Treeselect },
|
|
|
|
|
+ dicts: ['machine_alarm_level', 'machine_alarm_type', 'machine_handled_status', 'agricultural_machine_type'],
|
|
|
data() {
|
|
data() {
|
|
|
return {
|
|
return {
|
|
|
// 遮罩层
|
|
// 遮罩层
|
|
@@ -496,6 +462,9 @@ export default {
|
|
|
handledStatus: [{ required: true, message: '请选择处理结果', trigger: 'change' }],
|
|
handledStatus: [{ required: true, message: '请选择处理结果', trigger: 'change' }],
|
|
|
handleDesc: [{ required: true, message: '请输入处理备注', trigger: 'blur' }],
|
|
handleDesc: [{ required: true, message: '请输入处理备注', trigger: 'blur' }],
|
|
|
},
|
|
},
|
|
|
|
|
+
|
|
|
|
|
+ // 部门树选项
|
|
|
|
|
+ deptOptions: undefined,
|
|
|
// 处理按钮加载中
|
|
// 处理按钮加载中
|
|
|
processLoading: false,
|
|
processLoading: false,
|
|
|
// 告警时间范围
|
|
// 告警时间范围
|
|
@@ -504,13 +473,14 @@ export default {
|
|
|
queryParams: {
|
|
queryParams: {
|
|
|
pageNum: 1,
|
|
pageNum: 1,
|
|
|
pageSize: 10,
|
|
pageSize: 10,
|
|
|
- machineId: null,
|
|
|
|
|
|
|
+ machineCode: null,
|
|
|
machineName: null,
|
|
machineName: null,
|
|
|
alarmLevel: null,
|
|
alarmLevel: null,
|
|
|
machineType: null,
|
|
machineType: null,
|
|
|
|
|
+ handledStatus: null,
|
|
|
farmId: null,
|
|
farmId: null,
|
|
|
alarmTime: null,
|
|
alarmTime: null,
|
|
|
- handledStatus: null,
|
|
|
|
|
|
|
+ deptIdList: [],
|
|
|
},
|
|
},
|
|
|
// 表单参数
|
|
// 表单参数
|
|
|
form: {},
|
|
form: {},
|
|
@@ -550,9 +520,19 @@ export default {
|
|
|
},
|
|
},
|
|
|
created() {
|
|
created() {
|
|
|
this.getList()
|
|
this.getList()
|
|
|
- this.getStatistics()
|
|
|
|
|
|
|
+ this.getDeptTree();
|
|
|
|
|
+ //this.getStatistics()
|
|
|
},
|
|
},
|
|
|
methods: {
|
|
methods: {
|
|
|
|
|
+
|
|
|
|
|
+ /** 查询部门下拉树结构 */
|
|
|
|
|
+ getDeptTree() {
|
|
|
|
|
+ deptTreeSelect().then(response => {
|
|
|
|
|
+ this.deptOptions = response.data;
|
|
|
|
|
+ });
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
/** 查询农机故障告警记录列表 */
|
|
/** 查询农机故障告警记录列表 */
|
|
|
getList() {
|
|
getList() {
|
|
|
this.loading = true
|
|
this.loading = true
|
|
@@ -597,43 +577,53 @@ export default {
|
|
|
if (!this.machineAlarmRecordsList || this.machineAlarmRecordsList.length === 0) {
|
|
if (!this.machineAlarmRecordsList || this.machineAlarmRecordsList.length === 0) {
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 重置统计数据
|
|
// 重置统计数据
|
|
|
this.levelStatistics = {
|
|
this.levelStatistics = {
|
|
|
emergency: { total: 0, unprocessed: 0 },
|
|
emergency: { total: 0, unprocessed: 0 },
|
|
|
warning: { total: 0, unprocessed: 0 },
|
|
warning: { total: 0, unprocessed: 0 },
|
|
|
info: { total: 0, unprocessed: 0 }
|
|
info: { total: 0, unprocessed: 0 }
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 今日日期
|
|
// 今日日期
|
|
|
- const today = new Date().toISOString().slice(0, 10)
|
|
|
|
|
- let todayCount = 0
|
|
|
|
|
-
|
|
|
|
|
|
|
+ const toDateStr = (dateLike) =>
|
|
|
|
|
+ new Date(dateLike).toISOString().slice(0, 10);
|
|
|
|
|
+
|
|
|
|
|
+ const today = toDateStr(new Date());
|
|
|
|
|
+ const yesterday = toDateStr(Date.now() - 86400000);
|
|
|
|
|
+
|
|
|
|
|
+ let todayCount = 0;
|
|
|
|
|
+ let yesterdayCount = 0;
|
|
|
|
|
+
|
|
|
// 遍历记录统计
|
|
// 遍历记录统计
|
|
|
this.machineAlarmRecordsList.forEach(record => {
|
|
this.machineAlarmRecordsList.forEach(record => {
|
|
|
// 统计今日告警
|
|
// 统计今日告警
|
|
|
- if (record.alarmTime && record.alarmTime.includes(today)) {
|
|
|
|
|
- todayCount++
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
|
|
+ if (!record.alarmTime) return; // 空值跳过
|
|
|
|
|
+ const alertDay = toDateStr(record.alarmTime);
|
|
|
|
|
+
|
|
|
|
|
+ if (alertDay === today) todayCount++;
|
|
|
|
|
+ if (alertDay === yesterday) yesterdayCount++;
|
|
|
|
|
+
|
|
|
// 统计各等级告警
|
|
// 统计各等级告警
|
|
|
const level = record.alarmLevel
|
|
const level = record.alarmLevel
|
|
|
const isUnprocessed = record.handledStatus == 0 || record.handledStatus == '0' || record.handledStatus == 2 || record.handledStatus == '2'
|
|
const isUnprocessed = record.handledStatus == 0 || record.handledStatus == '0' || record.handledStatus == 2 || record.handledStatus == '2'
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 根据告警等级统计 (1-紧急, 2-告警, 3-提示)
|
|
// 根据告警等级统计 (1-紧急, 2-告警, 3-提示)
|
|
|
- if (level == 1 || level == '1') {
|
|
|
|
|
- this.levelStatistics.emergency.total++
|
|
|
|
|
- if (isUnprocessed) this.levelStatistics.emergency.unprocessed++
|
|
|
|
|
- } else if (level == 2 || level == '2') {
|
|
|
|
|
- this.levelStatistics.warning.total++
|
|
|
|
|
- if (isUnprocessed) this.levelStatistics.warning.unprocessed++
|
|
|
|
|
- } else if (level == 3 || level == '3') {
|
|
|
|
|
|
|
+ // 根据告警等级统计 (1-提示, 2-告警, 3-紧急)
|
|
|
|
|
+ if (level == 1 || level === '1') {
|
|
|
this.levelStatistics.info.total++
|
|
this.levelStatistics.info.total++
|
|
|
if (isUnprocessed) this.levelStatistics.info.unprocessed++
|
|
if (isUnprocessed) this.levelStatistics.info.unprocessed++
|
|
|
|
|
+ } else if (level == 2 || level === '2') {
|
|
|
|
|
+ this.levelStatistics.warning.total++
|
|
|
|
|
+ if (isUnprocessed) this.levelStatistics.warning.unprocessed++
|
|
|
|
|
+ } else if (level == 3 || level === '3') {
|
|
|
|
|
+ this.levelStatistics.emergency.total++
|
|
|
|
|
+ if (isUnprocessed) this.levelStatistics.emergency.unprocessed++
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 更新今日统计 (这里只是示例,实际应该从后端获取完整统计)
|
|
// 更新今日统计 (这里只是示例,实际应该从后端获取完整统计)
|
|
|
|
|
+ this.todayStatistics.change = todayCount - yesterdayCount;
|
|
|
if (todayCount > 0) {
|
|
if (todayCount > 0) {
|
|
|
this.todayStatistics.total = todayCount
|
|
this.todayStatistics.total = todayCount
|
|
|
}
|
|
}
|
|
@@ -648,6 +638,8 @@ export default {
|
|
|
this.form = {
|
|
this.form = {
|
|
|
id: null,
|
|
id: null,
|
|
|
machineId: null,
|
|
machineId: null,
|
|
|
|
|
+ machineCode: null,
|
|
|
|
|
+ machineName: null,
|
|
|
alarmType: null,
|
|
alarmType: null,
|
|
|
alarmLevel: null,
|
|
alarmLevel: null,
|
|
|
alarmDesc: null,
|
|
alarmDesc: null,
|
|
@@ -681,7 +673,7 @@ export default {
|
|
|
// 多选框选中数据
|
|
// 多选框选中数据
|
|
|
handleSelectionChange(selection) {
|
|
handleSelectionChange(selection) {
|
|
|
this.ids = selection.map(item => item.id)
|
|
this.ids = selection.map(item => item.id)
|
|
|
- this.single = selection.length!==1
|
|
|
|
|
|
|
+ this.single = selection.length !== 1
|
|
|
this.multiple = !selection.length
|
|
this.multiple = !selection.length
|
|
|
},
|
|
},
|
|
|
/** 新增按钮操作 */
|
|
/** 新增按钮操作 */
|
|
@@ -723,12 +715,12 @@ export default {
|
|
|
/** 删除按钮操作 */
|
|
/** 删除按钮操作 */
|
|
|
handleDelete(row) {
|
|
handleDelete(row) {
|
|
|
const ids = row.id || this.ids
|
|
const ids = row.id || this.ids
|
|
|
- this.$modal.confirm('是否确认删除农机故障告警记录编号为"' + ids + '"的数据项?').then(function() {
|
|
|
|
|
|
|
+ this.$modal.confirm('是否确认删除农机故障告警记录编号为"' + ids + '"的数据项?').then(function () {
|
|
|
return delMachineAlarmRecords(ids)
|
|
return delMachineAlarmRecords(ids)
|
|
|
}).then(() => {
|
|
}).then(() => {
|
|
|
this.getList()
|
|
this.getList()
|
|
|
this.$modal.msgSuccess("删除成功")
|
|
this.$modal.msgSuccess("删除成功")
|
|
|
- }).catch(() => {})
|
|
|
|
|
|
|
+ }).catch(() => { })
|
|
|
},
|
|
},
|
|
|
/** 导出按钮操作 */
|
|
/** 导出按钮操作 */
|
|
|
handleExport() {
|
|
handleExport() {
|
|
@@ -801,7 +793,7 @@ export default {
|
|
|
getAlertLevelClass(level) {
|
|
getAlertLevelClass(level) {
|
|
|
const levelMap = {
|
|
const levelMap = {
|
|
|
'1': 'emergency',
|
|
'1': 'emergency',
|
|
|
- '2': 'warning',
|
|
|
|
|
|
|
+ '2': 'warning',
|
|
|
'3': 'info',
|
|
'3': 'info',
|
|
|
1: 'emergency',
|
|
1: 'emergency',
|
|
|
2: 'warning',
|
|
2: 'warning',
|
|
@@ -816,7 +808,7 @@ export default {
|
|
|
'2': '告警',
|
|
'2': '告警',
|
|
|
'3': '提示',
|
|
'3': '提示',
|
|
|
1: '紧急',
|
|
1: '紧急',
|
|
|
- 2: '告警',
|
|
|
|
|
|
|
+ 2: '告警',
|
|
|
3: '提示'
|
|
3: '提示'
|
|
|
}
|
|
}
|
|
|
return levelMap[level] || '未知'
|
|
return levelMap[level] || '未知'
|
|
@@ -828,7 +820,7 @@ export default {
|
|
|
// this.currentRecord = response.data
|
|
// this.currentRecord = response.data
|
|
|
// this.detailOpen = true
|
|
// this.detailOpen = true
|
|
|
// })
|
|
// })
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 当前直接使用列表数据显示
|
|
// 当前直接使用列表数据显示
|
|
|
this.currentRecord = { ...record }
|
|
this.currentRecord = { ...record }
|
|
|
this.detailOpen = true
|
|
this.detailOpen = true
|
|
@@ -838,9 +830,9 @@ export default {
|
|
|
if (!record.alarmDesc) {
|
|
if (!record.alarmDesc) {
|
|
|
return '暂无告警内容'
|
|
return '暂无告警内容'
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
let content = record.alarmDesc
|
|
let content = record.alarmDesc
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 尝试去掉设备名称前缀
|
|
// 尝试去掉设备名称前缀
|
|
|
// 匹配模式:设备XXX + 告警内容
|
|
// 匹配模式:设备XXX + 告警内容
|
|
|
const devicePatterns = [
|
|
const devicePatterns = [
|
|
@@ -852,7 +844,7 @@ export default {
|
|
|
/^.+?号(.+)$/,
|
|
/^.+?号(.+)$/,
|
|
|
/^.+?站(.+)$/
|
|
/^.+?站(.+)$/
|
|
|
]
|
|
]
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 如果告警内容包含设备信息,尝试去掉设备前缀
|
|
// 如果告警内容包含设备信息,尝试去掉设备前缀
|
|
|
if (record.machineId && content.includes(record.machineId)) {
|
|
if (record.machineId && content.includes(record.machineId)) {
|
|
|
// 去掉设备编号前缀
|
|
// 去掉设备编号前缀
|
|
@@ -867,29 +859,19 @@ export default {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 清理开头的标点符号
|
|
// 清理开头的标点符号
|
|
|
content = content.replace(/^[::,,\s]+/, '')
|
|
content = content.replace(/^[::,,\s]+/, '')
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
return content || record.alarmDesc
|
|
return content || record.alarmDesc
|
|
|
},
|
|
},
|
|
|
/** 处理告警 */
|
|
/** 处理告警 */
|
|
|
handleProcess(record) {
|
|
handleProcess(record) {
|
|
|
this.resetProcessForm()
|
|
this.resetProcessForm()
|
|
|
- this.currentRecord = { ...record }
|
|
|
|
|
- this.processForm = {
|
|
|
|
|
- id: record.id,
|
|
|
|
|
- machineId: record.machineId,
|
|
|
|
|
- alarmType: record.alarmType,
|
|
|
|
|
- alarmLevel: record.alarmLevel,
|
|
|
|
|
- alarmDesc: record.alarmDesc,
|
|
|
|
|
- alarmTime: record.alarmTime,
|
|
|
|
|
- locationInfo: record.locationInfo,
|
|
|
|
|
- handledStatus: 0, // 默认设为未处理,用户可以修改
|
|
|
|
|
- handleDesc: '',
|
|
|
|
|
- handlerName: '',
|
|
|
|
|
- attachments: ''
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // this.currentRecord = { ...record }
|
|
|
|
|
+ this.processForm = {
|
|
|
|
|
+ ...record
|
|
|
|
|
+ }
|
|
|
this.processOpen = true
|
|
this.processOpen = true
|
|
|
},
|
|
},
|
|
|
/** 提交处理 */
|
|
/** 提交处理 */
|
|
@@ -897,16 +879,15 @@ export default {
|
|
|
this.$refs.processForm.validate((valid) => {
|
|
this.$refs.processForm.validate((valid) => {
|
|
|
if (valid) {
|
|
if (valid) {
|
|
|
this.processLoading = true
|
|
this.processLoading = true
|
|
|
-
|
|
|
|
|
- // 准备要更新的数据
|
|
|
|
|
- const updateData = {
|
|
|
|
|
- id: this.processForm.id,
|
|
|
|
|
- handledStatus: this.processForm.handledStatus,
|
|
|
|
|
- handleDesc: this.processForm.handleDesc,
|
|
|
|
|
- handlerName: this.processForm.handlerName || '当前用户',
|
|
|
|
|
- attachments: this.processForm.attachments
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 准备要更新的数据
|
|
|
|
|
+ const updateData = {
|
|
|
|
|
+ id: this.processForm.id,
|
|
|
|
|
+ handledStatus: this.processForm.handledStatus,
|
|
|
|
|
+ handleDesc: this.processForm.handleDesc,
|
|
|
|
|
+ attachments: this.processForm.attachments
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
updateMachineAlarmRecords(updateData).then(response => {
|
|
updateMachineAlarmRecords(updateData).then(response => {
|
|
|
this.$modal.msgSuccess("处理成功")
|
|
this.$modal.msgSuccess("处理成功")
|
|
|
this.processOpen = false
|
|
this.processOpen = false
|
|
@@ -927,19 +908,19 @@ export default {
|
|
|
},
|
|
},
|
|
|
/** 重置处理表单 */
|
|
/** 重置处理表单 */
|
|
|
resetProcessForm() {
|
|
resetProcessForm() {
|
|
|
- this.processForm = {
|
|
|
|
|
- id: null,
|
|
|
|
|
- machineId: null,
|
|
|
|
|
- alarmType: null,
|
|
|
|
|
- alarmLevel: null,
|
|
|
|
|
- alarmDesc: null,
|
|
|
|
|
- alarmTime: null,
|
|
|
|
|
- locationInfo: null,
|
|
|
|
|
- handledStatus: 0,
|
|
|
|
|
- handleDesc: null,
|
|
|
|
|
- handlerName: null,
|
|
|
|
|
- attachments: null
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ this.processForm = {
|
|
|
|
|
+ id: null,
|
|
|
|
|
+ machineId: null,
|
|
|
|
|
+ alarmType: null,
|
|
|
|
|
+ alarmLevel: null,
|
|
|
|
|
+ alarmDesc: null,
|
|
|
|
|
+ alarmTime: null,
|
|
|
|
|
+ locationInfo: null,
|
|
|
|
|
+ handledStatus: 0,
|
|
|
|
|
+ handleDesc: null,
|
|
|
|
|
+ handlerName: null,
|
|
|
|
|
+ attachments: null
|
|
|
|
|
+ }
|
|
|
if (this.$refs.processForm) {
|
|
if (this.$refs.processForm) {
|
|
|
this.$refs.processForm.resetFields()
|
|
this.$refs.processForm.resetFields()
|
|
|
}
|
|
}
|
|
@@ -1066,7 +1047,7 @@ export default {
|
|
|
padding: 20px;
|
|
padding: 20px;
|
|
|
background: #fff;
|
|
background: #fff;
|
|
|
border-radius: 12px;
|
|
border-radius: 12px;
|
|
|
- box-shadow: 0 1px 3px rgba(0,0,0,0.08);
|
|
|
|
|
|
|
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/* 统一各部分间距 */
|
|
/* 统一各部分间距 */
|
|
@@ -1091,7 +1072,7 @@ export default {
|
|
|
justify-content: space-between;
|
|
justify-content: space-between;
|
|
|
transition: all 0.3s ease;
|
|
transition: all 0.3s ease;
|
|
|
cursor: pointer;
|
|
cursor: pointer;
|
|
|
- box-shadow: 0 4px 15px rgba(0,0,0,0.1), 0 2px 6px rgba(0,0,0,0.05);
|
|
|
|
|
|
|
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1), 0 2px 6px rgba(0, 0, 0, 0.05);
|
|
|
position: relative;
|
|
position: relative;
|
|
|
overflow: hidden;
|
|
overflow: hidden;
|
|
|
color: #fff;
|
|
color: #fff;
|
|
@@ -1099,7 +1080,7 @@ export default {
|
|
|
|
|
|
|
|
.stat-card:hover {
|
|
.stat-card:hover {
|
|
|
transform: translateY(-3px);
|
|
transform: translateY(-3px);
|
|
|
- box-shadow: 0 8px 25px rgba(0,0,0,0.15), 0 4px 10px rgba(0,0,0,0.1);
|
|
|
|
|
|
|
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15), 0 4px 10px rgba(0, 0, 0, 0.1);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.stat-card.total {
|
|
.stat-card.total {
|
|
@@ -1184,7 +1165,7 @@ export default {
|
|
|
padding: 20px;
|
|
padding: 20px;
|
|
|
margin-bottom: 20px;
|
|
margin-bottom: 20px;
|
|
|
border: 1px solid #e9ecef;
|
|
border: 1px solid #e9ecef;
|
|
|
- box-shadow: 0 2px 4px rgba(0,0,0,0.05);
|
|
|
|
|
|
|
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
|
|
|
border-left: 4px solid #f56c6c;
|
|
border-left: 4px solid #f56c6c;
|
|
|
}
|
|
}
|
|
|
|
|
|