Browse Source

报警处理

master
xh 1 week ago
parent
commit
968ae33306
  1. 29
      web/src/api/gas/handalarm/index.ts
  2. 2
      web/src/utils/formatTime.ts
  3. 34
      web/src/views/gas/batteryAlarm/index.vue
  4. 115
      web/src/views/gas/handalarm/HandAlarmForm.vue
  5. 31
      web/src/views/gas/handalarm/index.vue
  6. 114
      web/src/views/gas/offlineAlarm/HandAlarmForm.vue
  7. 21
      web/src/views/gas/offlineAlarm/index.vue

29
web/src/api/gas/handalarm/index.ts

@ -1,32 +1,37 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs'
/** GAS手持探测器警报信息 */
export interface HandAlarm {
id: number // 主键ID
detectorId: number // 手持表id
sn: string // 设备编号
id?: number // 主键ID
detectorId?: number // 手持表id
sn?: string // 设备编号
name?: string // 持有人名称
alarmLevel?: number // 警报方式/级别(0:正常状态;1:一级警报;2:二级警报;3:弹窗警报)
alarmType?: number // 报警类型 1:气体报警 2:电量报警 3:离线报警
gasType?: string // 气体类型
unit?: string // 单位
location: string // 位置描述
picX: number // 在区域图X坐标值
location?: string // 位置描述
picX?: number // 在区域图X坐标值
picY?: number // 在区域图X坐标值
vAlarmFirst: number // 首报值
vAlarmMaximum: number // 最值
tAlarmStart: string | Dayjs // 开始时间
tAlarmEnd: string | Dayjs // 结束时间
status: number // 状态(0:待处理;1:处理中;1:已处理)
valarmFirst?: number // 首报值
valarmMaximum?: number // 最值
talarmStart?: number // 开始时间
talarmEnd?: number // 结束时间
status?: number // 状态(0:待处理;1:处理中;1:已处理)
remark?: string // 备注
createTime?: string | string[] // 创建时间
}
// GAS手持探测器警报 API
export const HandAlarmApi = {
// 查询GAS手持探测器警报分页
getHandAlarmPage: async (params: any) => {
return await request.get({ url: `/gas/hand-alarm/page`, params })
return await request.get<{
list: HandAlarm[],
total: number
}>({ url: `/gas/hand-alarm/page`, params })
},
// 查询GAS手持探测器警报详情

2
web/src/utils/formatTime.ts

@ -63,7 +63,7 @@ export const defaultShortcuts = [
* @description format + + "YYYY-MM-DD HH:mm:ss WWW QQQQ ZZZ"
* @returns
*/
export function formatDate(date: Date, format?: string): string {
export function formatDate(date: Date|number|string , format?: string): string {
// 日期不存在,则返回空
if (!date) {
return ''

34
web/src/views/gas/batteryAlarm/index.vue

@ -70,9 +70,9 @@
</el-select>
</el-form-item>
<!-- <el-form-item label="开始时间" prop="tAlarmStart">
<!-- <el-form-item label="开始时间" prop="talarmStart">
<el-date-picker
v-model="queryParams.tAlarmStart"
v-model="queryParams.talarmStart"
value-format="YYYY-MM-DD"
type="date"
placeholder="选择开始时间"
@ -80,9 +80,9 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="结束时间" prop="tAlarmEnd">
<el-form-item label="结束时间" prop="talarmEnd">
<el-date-picker
v-model="queryParams.tAlarmEnd"
v-model="queryParams.talarmEnd"
value-format="YYYY-MM-DD"
type="date"
placeholder="选择结束时间"
@ -205,7 +205,7 @@
:formatter="dateFormatter"
width="180px"
/> -->
<el-table-column label="操作" align="center" width="140px">
<!-- <el-table-column label="操作" align="center" width="140px">
<template #default="scope">
<el-button
@ -216,16 +216,8 @@
>
编辑
</el-button>
<!-- <el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['gas:hand-alarm:delete']"
>
删除
</el-button> -->
</template>
</el-table-column>
</el-table-column> -->
</el-table>
<!-- 分页 -->
<Pagination
@ -237,13 +229,13 @@
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<HandAlarmForm
<!-- <HandAlarmForm
ref="formRef"
@success="getList"
:handDetector="handDetectorStore.getHandDetectorList"
:gasTypes="handDetectorStore.getGasTypes"
:alarmTypes="handDetectorStore.getAlarmTypes"
/>
/> -->
</template>
<script setup lang="ts">
@ -277,10 +269,10 @@ const queryParams = reactive({
location: undefined,
picX: undefined,
picY: undefined,
vAlarmFirst: undefined,
vAlarmMaximum: undefined,
tAlarmStart: undefined,
tAlarmEnd: undefined,
valarmFirst: undefined,
valarmMaximum: undefined,
talarmStart: undefined,
talarmEnd: undefined,
status: undefined,
remark: undefined,
createTime: []
@ -331,7 +323,7 @@ const handleDeleteBatch = async () => {
const checkedIds = ref<number[]>([])
const handleRowCheckboxChange = (records: HandAlarm[]) => {
checkedIds.value = records.map((item) => item.id)
checkedIds.value = records.map((item) => item.id as number)
}
/** 导出按钮操作 */

115
web/src/views/gas/handalarm/HandAlarmForm.vue

@ -7,39 +7,15 @@
label-width="120px"
v-loading="formLoading"
>
<el-form-item label="持有人" prop="detectorId">
<el-select
v-model="formData.detectorId"
placeholder="请选择持有人"
@change="handleDetectorIdChange"
>
<el-option
v-for="item in props.handDetector"
:key="item.id"
:label="item.name"
:value="Number(item.id)"
/>
</el-select>
<el-form-item label="持有人" prop="name">
{{ formData.name }}
</el-form-item>
<el-form-item label="设备编号" prop="sn">
<el-input v-model="formData.sn" placeholder="请输入设备编号" :disabled="true" />
{{ formData.sn }}
</el-form-item>
<el-form-item label="报警类型" prop="alarmType">
<el-select
v-model="formData.alarmType"
@change="handleAlarmTypeChange"
placeholder="请选择报警类型"
>
<el-option
v-for="item in props.alarmTypes"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="警报方式/级别" prop="alarmLevel">
<el-select v-model="formData.alarmLevel" placeholder="请选择警报方式/级别" :disabled="true">
<el-form-item label="警报级别" prop="alarmLevel">
<el-select v-model="formData.alarmLevel" placeholder="请选择警报级别" :disabled="true">
<el-option
v-for="item in getIntDictOptions(DICT_TYPE.HAND_DETECTOR_ALARM_LEVEL)"
:key="item.value"
@ -49,40 +25,24 @@
</el-select>
</el-form-item>
<el-form-item label="气体类型" prop="gasType">
<el-select
v-model="formData.gasType"
placeholder="请选择气体类型"
@change="handleGasTypeChange"
>
<el-option
v-for="item in props.gasTypes"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
{{ formData.gasType }}
</el-form-item>
<el-form-item label="单位" prop="unit">
<el-input v-model="formData.unit" placeholder="请输入单位" :disabled="true" />
</el-form-item>
<el-form-item label="首报值" prop="vAlarmFirst">
<el-input-number v-model="formData.vAlarmFirst" />
<el-form-item label="首报值" prop="valarmFirst">
{{ formData.valarmFirst }} {{ formData.unit }}
</el-form-item>
<el-form-item label="最值" prop="vAlarmMaximum">
<el-input-number v-model="formData.vAlarmMaximum" />
<el-form-item label="最值" prop="valarmMaximum">
{{ formData.valarmMaximum }} {{ formData.unit }}
</el-form-item>
<el-form-item label="开始时间" prop="tAlarmStart">
<el-date-picker
v-model="formData.tAlarmStart"
type="date"
value-format="x"
placeholder="选择开始时间"
/>
<el-form-item label="开始时间" prop="talarmStart">
{{ formData.talarmStart ? formatDate(formData.talarmStart) : '' }}
</el-form-item>
<el-form-item label="结束时间" prop="tAlarmEnd">
<el-form-item label="结束时间" prop="talarmEnd">
<el-date-picker
v-model="formData.tAlarmEnd"
type="date"
v-model="formData.talarmEnd"
type="datetime"
value-format="x"
placeholder="选择结束时间"
/>
@ -111,6 +71,8 @@
<script setup lang="ts">
import { HandAlarmApi, HandAlarm } from '@/api/gas/handalarm'
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { formatDate } from '@/utils/formatTime'
import { HandDetector } from '@/api/gas/handdetector'
import { AlarmType } from '@/api/gas/alarmtype'
import { Type } from '@/api/gas/gastype'
@ -138,7 +100,7 @@ const props = defineProps({
required: true
}
})
const formData = ref({
const formData = ref<HandAlarm>({
id: undefined,
detectorId: undefined,
sn: '',
@ -149,19 +111,15 @@ const formData = ref({
location: undefined,
picX: undefined,
picY: undefined,
vAlarmFirst: undefined,
vAlarmMaximum: undefined,
tAlarmStart: undefined,
tAlarmEnd: undefined,
valarmFirst: undefined,
valarmMaximum: undefined,
talarmStart: undefined,
talarmEnd: undefined,
status: 0,
remark: undefined
})
const formRules = reactive({
detectorId: [{ required: true, message: '持有人不能为空', trigger: 'change' }],
alarmType: [{ required: true, message: '报警类型不能为空', trigger: 'change' }],
gasType: [{ required: true, message: '气体类型不能为空', trigger: 'change' }],
unit: [{ required: true, message: '单位不能为空', trigger: 'blur' }],
remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }]
})
const formRef = ref() // Ref
@ -220,30 +178,13 @@ const resetForm = () => {
location: undefined,
picX: undefined,
picY: undefined,
vAlarmFirst: undefined,
vAlarmMaximum: undefined,
tAlarmStart: undefined,
tAlarmEnd: undefined,
valarmFirst: undefined,
valarmMaximum: undefined,
talarmStart: undefined,
talarmEnd: undefined,
status: 0,
remark: undefined
}
formRef.value?.resetFields()
}
/** 气体类型改变 */
const handleGasTypeChange = (value: number) => {
formData.value.unit = props.gasTypes.find((item) => item.id === value)?.unit || ''
}
/** 手持表id改变 */
const handleDetectorIdChange = (value: number) => {
formData.value.sn = props.handDetector.find((item) => item.id === value)?.sn || ''
}
/** 报警类型改变 */
const handleAlarmTypeChange = (value: number) => {
formData.value.alarmLevel = props.alarmTypes.find((item) => item.id === value)?.level || 0
formData.value.gasType = props.gasTypes.find((item) => item.id === value)?.name || ''
formData.value.unit = props.gasTypes.find((item) => item.id === value)?.unit || ''
}
</script>

31
web/src/views/gas/handalarm/index.vue

@ -52,10 +52,10 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="报警类型" prop="alarmLevel">
<el-form-item label="报警级别" prop="alarmLevel">
<el-select
v-model="queryParams.alarmLevel"
placeholder="请选择报警类型"
placeholder="请选择报警级别"
clearable
class="!w-240px"
>
@ -84,9 +84,9 @@
</el-select>
</el-form-item>
<!-- <el-form-item label="开始时间" prop="tAlarmStart">
<!-- <el-form-item label="开始时间" prop="talarmStart">
<el-date-picker
v-model="queryParams.tAlarmStart"
v-model="queryParams.talarmStart"
value-format="YYYY-MM-DD"
type="date"
placeholder="选择开始时间"
@ -94,9 +94,9 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="结束时间" prop="tAlarmEnd">
<el-form-item label="结束时间" prop="talarmEnd">
<el-date-picker
v-model="queryParams.tAlarmEnd"
v-model="queryParams.talarmEnd"
value-format="YYYY-MM-DD"
type="date"
placeholder="选择结束时间"
@ -284,7 +284,12 @@ const handDetectorStore = useHandDetectorStore()
const loading = ref(true) //
const list = ref<HandAlarm[]>([]) //
const total = ref(0) //
const queryParams = reactive({
const queryParams = reactive<
{
pageNo: number
pageSize: number
} & HandAlarm
>({
pageNo: 1,
pageSize: 10,
alarmType: 1, // 1 2 3线
@ -298,13 +303,13 @@ const queryParams = reactive({
location: undefined,
picX: undefined,
picY: undefined,
vAlarmFirst: undefined,
vAlarmMaximum: undefined,
tAlarmStart: undefined,
tAlarmEnd: undefined,
valarmFirst: undefined,
valarmMaximum: undefined,
talarmStart: undefined,
talarmEnd: undefined,
status: undefined,
remark: undefined,
createTime: []
createTime: [] as string[]
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
@ -352,7 +357,7 @@ const handleDeleteBatch = async () => {
const checkedIds = ref<number[]>([])
const handleRowCheckboxChange = (records: HandAlarm[]) => {
checkedIds.value = records.map((item) => item.id)
checkedIds.value = records.map((item) => item.id as number)
}
/** 导出按钮操作 */

114
web/src/views/gas/offlineAlarm/HandAlarmForm.vue

@ -7,82 +7,32 @@
label-width="120px"
v-loading="formLoading"
>
<el-form-item label="持有人" prop="detectorId">
<el-select
v-model="formData.detectorId"
placeholder="请选择持有人"
@change="handleDetectorIdChange"
>
<el-form-item label="持有人" prop="name">
{{ formData.name }}
<!-- <el-select v-model="formData.detectorId" placeholder="请选择持有人">
<el-option
v-for="item in props.handDetector"
:key="item.id"
:label="item.name"
:value="Number(item.id)"
/>
</el-select>
</el-select> -->
</el-form-item>
<el-form-item label="设备编号" prop="sn">
<el-input v-model="formData.sn" placeholder="请输入设备编号" :disabled="true" />
</el-form-item>
<el-form-item label="报警类型" prop="alarmType">
<el-select
v-model="formData.alarmType"
@change="handleAlarmTypeChange"
placeholder="请选择报警类型"
>
<el-option
v-for="item in props.alarmTypes"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="警报方式/级别" prop="alarmLevel">
<el-select v-model="formData.alarmLevel" placeholder="请选择警报方式/级别" :disabled="true">
<el-option
v-for="item in getIntDictOptions(DICT_TYPE.HAND_DETECTOR_ALARM_LEVEL)"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
{{ formData.sn }}
</el-form-item>
<el-form-item label="气体类型" prop="gasType">
<el-select
v-model="formData.gasType"
placeholder="请选择气体类型"
@change="handleGasTypeChange"
>
<el-option
v-for="item in props.gasTypes"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="单位" prop="unit">
<el-input v-model="formData.unit" placeholder="请输入单位" :disabled="true" />
</el-form-item>
<el-form-item label="首报值" prop="vAlarmFirst">
<el-input-number v-model="formData.vAlarmFirst" />
{{ formData.gasType }}
</el-form-item>
<el-form-item label="最值" prop="vAlarmMaximum">
<el-input-number v-model="formData.vAlarmMaximum" />
</el-form-item>
<el-form-item label="开始时间" prop="tAlarmStart">
<el-date-picker
v-model="formData.tAlarmStart"
type="date"
value-format="x"
placeholder="选择开始时间"
/>
<el-form-item label="开始时间" prop="talarmStart">
{{ formatDate(formData.talarmStart) }}
</el-form-item>
<el-form-item label="结束时间" prop="tAlarmEnd">
<el-form-item label="结束时间" prop="talarmEnd">
<el-date-picker
v-model="formData.tAlarmEnd"
type="date"
v-model="formData.talarmEnd"
type="datetime"
value-format="x"
placeholder="选择结束时间"
/>
@ -114,8 +64,9 @@ import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { HandDetector } from '@/api/gas/handdetector'
import { AlarmType } from '@/api/gas/alarmtype'
import { Type } from '@/api/gas/gastype'
import { formatDate } from '@/utils/formatTime'
/** GAS手持探测器警报 表单 */
defineOptions({ name: 'HandAlarmForm' })
defineOptions({ name: 'OfflineAlarmForm' })
const { t } = useI18n() //
const message = useMessage() //
@ -141,6 +92,7 @@ const props = defineProps({
const formData = ref({
id: undefined,
detectorId: undefined,
name: '',
sn: '',
alarmType: undefined,
alarmLevel: 0,
@ -151,24 +103,20 @@ const formData = ref({
picY: undefined,
vAlarmFirst: undefined,
vAlarmMaximum: undefined,
tAlarmStart: undefined,
tAlarmEnd: undefined,
talarmStart: '',
talarmEnd: '',
status: 0,
remark: undefined
})
const formRules = reactive({
detectorId: [{ required: true, message: '持有人不能为空', trigger: 'change' }],
alarmType: [{ required: true, message: '报警类型不能为空', trigger: 'change' }],
gasType: [{ required: true, message: '气体类型不能为空', trigger: 'change' }],
unit: [{ required: true, message: '单位不能为空', trigger: 'blur' }],
remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }]
// remark: [{ required: true, message: '', trigger: 'blur' }]
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
dialogTitle.value = '离线报警'
formType.value = type
resetForm()
//
@ -212,6 +160,7 @@ const resetForm = () => {
formData.value = {
id: undefined,
detectorId: undefined,
name: '',
sn: '',
alarmType: undefined,
alarmLevel: 0,
@ -222,28 +171,11 @@ const resetForm = () => {
picY: undefined,
vAlarmFirst: undefined,
vAlarmMaximum: undefined,
tAlarmStart: undefined,
tAlarmEnd: undefined,
talarmStart: '',
talarmEnd: '',
status: 0,
remark: undefined
}
formRef.value?.resetFields()
}
/** 气体类型改变 */
const handleGasTypeChange = (value: number) => {
formData.value.unit = props.gasTypes.find((item) => item.id === value)?.unit || ''
}
/** 手持表id改变 */
const handleDetectorIdChange = (value: number) => {
formData.value.sn = props.handDetector.find((item) => item.id === value)?.sn || ''
}
/** 报警类型改变 */
const handleAlarmTypeChange = (value: number) => {
formData.value.alarmLevel = props.alarmTypes.find((item) => item.id === value)?.level || 0
formData.value.gasType = props.gasTypes.find((item) => item.id === value)?.name || ''
formData.value.unit = props.gasTypes.find((item) => item.id === value)?.unit || ''
}
</script>

21
web/src/views/gas/offlineAlarm/index.vue

@ -70,9 +70,9 @@
</el-select>
</el-form-item>
<!-- <el-form-item label="开始时间" prop="tAlarmStart">
<!-- <el-form-item label="开始时间" prop="talarmStart">
<el-date-picker
v-model="queryParams.tAlarmStart"
v-model="queryParams.talarmStart"
value-format="YYYY-MM-DD"
type="date"
placeholder="选择开始时间"
@ -80,9 +80,9 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="结束时间" prop="tAlarmEnd">
<el-form-item label="结束时间" prop="talarmEnd">
<el-date-picker
v-model="queryParams.tAlarmEnd"
v-model="queryParams.talarmEnd"
value-format="YYYY-MM-DD"
type="date"
placeholder="选择结束时间"
@ -190,12 +190,13 @@
:formatter="dateFormatter"
width="160px"
/>
<el-table-column label="状态" align="center" prop="status" width="80px">
<el-table-column label="状态" align="center" prop="status" width="90px">
<template #default="scope">
{{ getDictLabel(DICT_TYPE.HAND_DETECTOR_HANDLE_STATUS, scope.row.status) }}
<!-- {{ getDictLabel(DICT_TYPE.HAND_DETECTOR_HANDLE_STATUS, scope.row.status) }} -->
<DictTag :type="DICT_TYPE.HAND_DETECTOR_HANDLE_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<!-- <el-table-column label="备注" align="center" prop="remark" /> -->
<el-table-column label="备注" align="center" prop="remark" />
<!-- <el-table-column
label="创建时间"
align="center"
@ -280,8 +281,8 @@ const queryParams = reactive({
picY: undefined,
vAlarmFirst: undefined,
vAlarmMaximum: undefined,
tAlarmStart: undefined,
tAlarmEnd: undefined,
talarmStart: undefined,
talarmEnd: undefined,
status: undefined,
remark: undefined,
createTime: []
@ -332,7 +333,7 @@ const handleDeleteBatch = async () => {
const checkedIds = ref<number[]>([])
const handleRowCheckboxChange = (records: HandAlarm[]) => {
checkedIds.value = records.map((item) => item.id)
checkedIds.value = records.map((item) => item.id as number)
}
/** 导出按钮操作 */

Loading…
Cancel
Save