|
@@ -11,8 +11,7 @@
|
|
|
<template #extra>
|
|
|
<a-radio-group v-model:value="tableType" button-style="solid" size="small">
|
|
|
<a-radio-button value="fall">跌倒统计</a-radio-button>
|
|
|
- <a-radio-button value="alarmRetention">异常滞留</a-radio-button>
|
|
|
- <a-radio-button value="generalRetention">一般滞留</a-radio-button>
|
|
|
+ <a-radio-button value="alarm">告警统计</a-radio-button>
|
|
|
</a-radio-group>
|
|
|
</template>
|
|
|
|
|
@@ -26,26 +25,16 @@
|
|
|
/>
|
|
|
</a-form-item>
|
|
|
|
|
|
- <a-form-item v-if="tableType === 'alarmRetention'" label="告警类型">
|
|
|
+ <a-form-item v-if="tableType === 'alarm'" label="告警类型">
|
|
|
<a-select
|
|
|
v-model:value="searchState.eventType"
|
|
|
placeholder="请选择"
|
|
|
- style="width: 120px"
|
|
|
+ style="width: 150px"
|
|
|
:options="alarmEventTypeOptions"
|
|
|
@change="searchHandler"
|
|
|
/>
|
|
|
</a-form-item>
|
|
|
|
|
|
- <a-form-item v-if="tableType === 'generalRetention'" label="滞留类型">
|
|
|
- <a-select
|
|
|
- v-model:value="searchState.type"
|
|
|
- placeholder="请选择"
|
|
|
- style="width: 120px"
|
|
|
- :options="stayEventTypeOptions"
|
|
|
- @change="searchHandler"
|
|
|
- />
|
|
|
- </a-form-item>
|
|
|
-
|
|
|
<a-form-item>
|
|
|
<a-space>
|
|
|
<a-button type="primary" @click="searchHandler"> 搜索 </a-button>
|
|
@@ -97,16 +86,13 @@
|
|
|
<script setup lang="ts">
|
|
|
import { computed, ref, watch } from 'vue'
|
|
|
import { useSearch } from '@/hooks/useSearch'
|
|
|
-import { fallColumns, generalRetentionColumns, alarmRetentionColumns } from './const'
|
|
|
+import { fallColumns, alarmColumns } from './const'
|
|
|
import * as statsApi from '@/api/stats'
|
|
|
-import type {
|
|
|
- StatsFallQueryDataRow,
|
|
|
- StatsAlarmRetentionQueryDataRow,
|
|
|
- StatsGeneralRetentionQueryDataRows,
|
|
|
-} from '@/api/stats/types'
|
|
|
-import { useDict } from '@/hooks/useDict'
|
|
|
+import type { StatsFallQueryDataRow, StatsAlarmQueryDataRow } from '@/api/stats/types'
|
|
|
+import { useDict, type DictItem } from '@/hooks/useDict'
|
|
|
import { useDictName } from '@/hooks/useDictName'
|
|
|
import { formatSeconds } from '@/utils'
|
|
|
+import * as alarmApi from '@/api/alarm'
|
|
|
|
|
|
defineOptions({
|
|
|
name: 'DeviceStatsDrawer',
|
|
@@ -130,27 +116,12 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
width: 900,
|
|
|
})
|
|
|
|
|
|
-watch(
|
|
|
- () => props.open,
|
|
|
- (newVal) => {
|
|
|
- if (newVal) {
|
|
|
- console.log('🌸🌸 DeviceStatsDrawer PROPS 🌸🌸', props)
|
|
|
- fetchList()
|
|
|
- }
|
|
|
- },
|
|
|
- {
|
|
|
- immediate: true,
|
|
|
- }
|
|
|
-)
|
|
|
-
|
|
|
// 表格统计类型展示 跌倒、一般滞留、异常滞留
|
|
|
-const tableType = ref<'fall' | 'generalRetention' | 'alarmRetention'>('fall')
|
|
|
+const tableType = ref<'fall' | 'alarm'>('fall')
|
|
|
|
|
|
const columns = computed(() => {
|
|
|
- if (tableType.value === 'generalRetention') {
|
|
|
- return generalRetentionColumns
|
|
|
- } else if (tableType.value === 'alarmRetention') {
|
|
|
- return alarmRetentionColumns
|
|
|
+ if (tableType.value === 'alarm') {
|
|
|
+ return alarmColumns
|
|
|
} else {
|
|
|
return fallColumns
|
|
|
}
|
|
@@ -192,15 +163,29 @@ const close = async () => {
|
|
|
|
|
|
// 获取字典数据
|
|
|
const { dictList: personPoseList, fetchDict: fetchPersonPose } = useDict('person_pose') // 姿势字典
|
|
|
-const { dictList: alarmEventTypeList, fetchDict: fetchAlarmEventType } = useDict('alarm_event_type') // 异常告警字典
|
|
|
-const { dictList: stayEventTypeList, fetchDict: fetchStayEventType } = useDict('stay_event_type') // 停留类型字典
|
|
|
fetchPersonPose()
|
|
|
-fetchAlarmEventType()
|
|
|
-fetchStayEventType()
|
|
|
|
|
|
+const alarmEventTypeList = ref<DictItem[]>([])
|
|
|
const { dictNameMap: personPoseName } = useDictName(personPoseList)
|
|
|
const { dictNameMap: alarmEventTypeName } = useDictName(alarmEventTypeList)
|
|
|
-const { dictNameMap: stayEventTypeName } = useDictName(stayEventTypeList)
|
|
|
+
|
|
|
+const fetchEventTypeList = async () => {
|
|
|
+ try {
|
|
|
+ const res = await alarmApi.getAlarmEventTypeList()
|
|
|
+ console.log('获取事件类型下拉列表成功✅', res)
|
|
|
+ const data = res.data
|
|
|
+ alarmEventTypeList.value =
|
|
|
+ (Array.isArray(data) &&
|
|
|
+ data.map((item) => ({
|
|
|
+ label: item.eventDesc,
|
|
|
+ value: item.eventVal,
|
|
|
+ }))) ||
|
|
|
+ []
|
|
|
+ } catch (err) {
|
|
|
+ console.log('获取事件类型下拉列表失败❌', err)
|
|
|
+ }
|
|
|
+}
|
|
|
+fetchEventTypeList()
|
|
|
|
|
|
// 异常滞留 事件类型
|
|
|
const alarmEventTypeOptions = computed(() => [
|
|
@@ -213,28 +198,14 @@ const alarmEventTypeOptions = computed(() => [
|
|
|
value: item.value,
|
|
|
})),
|
|
|
])
|
|
|
-// 一般滞留 滞留类型
|
|
|
-const stayEventTypeOptions = computed(() => [
|
|
|
- {
|
|
|
- label: '全部',
|
|
|
- value: null,
|
|
|
- },
|
|
|
- ...stayEventTypeList.value.map((item) => ({
|
|
|
- label: item.label,
|
|
|
- value: item.value,
|
|
|
- })),
|
|
|
-])
|
|
|
|
|
|
-const tableList = ref<
|
|
|
- (StatsFallQueryDataRow | StatsGeneralRetentionQueryDataRows | StatsAlarmRetentionQueryDataRow)[]
|
|
|
->([])
|
|
|
+const tableList = ref<(StatsFallQueryDataRow | StatsAlarmQueryDataRow)[]>([])
|
|
|
const tableTotal = ref<number>(0)
|
|
|
const current = ref<number>(1)
|
|
|
const pageSize = ref<number>(10)
|
|
|
|
|
|
const fallList = ref<StatsFallQueryDataRow[]>([])
|
|
|
-const generalRetentionList = ref<StatsGeneralRetentionQueryDataRows[]>([])
|
|
|
-const alarmRetentionList = ref<StatsAlarmRetentionQueryDataRow[]>([])
|
|
|
+const alarmList = ref<StatsAlarmQueryDataRow[]>([])
|
|
|
|
|
|
// 搜索
|
|
|
const searchHandler = async () => {
|
|
@@ -281,61 +252,30 @@ const fetchFallList = async () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// 获取一般滞留数据
|
|
|
-const fetchGeneralRetentionList = async () => {
|
|
|
- console.log('🚀🚀🚀fetchGeneralRetentionList')
|
|
|
- try {
|
|
|
- loading.value = true
|
|
|
- const res = await statsApi.statsGeneralRetentionQuery({
|
|
|
- pageNo: current.value,
|
|
|
- pageSize: pageSize.value,
|
|
|
- devId: props.devId,
|
|
|
- createTimeStart: searchState.createTimeStart,
|
|
|
- createTimeEnd: searchState.createTimeEnd,
|
|
|
- type: searchState.type as ID,
|
|
|
- })
|
|
|
- console.log('✅ 获取一般滞留统计数据成功', res)
|
|
|
- const { rows, total } = res.data
|
|
|
- generalRetentionList.value = rows as StatsGeneralRetentionQueryDataRows[]
|
|
|
- generalRetentionList.value.forEach((item) => {
|
|
|
- console.log('item.pose', item)
|
|
|
- item.typeName = stayEventTypeName(String(item.type))
|
|
|
- })
|
|
|
- tableList.value = generalRetentionList.value
|
|
|
- tableTotal.value = Number(total)
|
|
|
- loading.value = false
|
|
|
- } catch (error) {
|
|
|
- console.error('❌ 获取一般滞留统计数据失败', error)
|
|
|
- loading.value = false
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// 获取异常滞留数据
|
|
|
-const fetchAlarmRetentionList = async () => {
|
|
|
- console.log('🚀🚀🚀fetchAlarmRetentionList')
|
|
|
+// 获取告警统计数据
|
|
|
+const fetchAlarmList = async () => {
|
|
|
+ console.log('🚀🚀🚀fetchAlarmList')
|
|
|
try {
|
|
|
loading.value = true
|
|
|
- const res = await statsApi.statsAlarmRetentionQuery({
|
|
|
+ const res = await statsApi.statsAlarmQuery({
|
|
|
pageNo: current.value,
|
|
|
pageSize: pageSize.value,
|
|
|
- devId: props.devId,
|
|
|
+ clientId: props.devId,
|
|
|
createTimeStart: searchState.createTimeStart,
|
|
|
createTimeEnd: searchState.createTimeEnd,
|
|
|
eventType: searchState.eventType as ID,
|
|
|
})
|
|
|
- console.log('✅ 获取异常滞留统计数据成功', res)
|
|
|
+ console.log('✅ 获取告警统计数据成功', res)
|
|
|
const { rows, total } = res.data
|
|
|
- alarmRetentionList.value = rows as StatsAlarmRetentionQueryDataRow[]
|
|
|
- alarmRetentionList.value.forEach((item) => {
|
|
|
- console.log('item.pose', item)
|
|
|
- item.poseName = personPoseName(String(item.pose))
|
|
|
+ alarmList.value = rows as StatsAlarmQueryDataRow[]
|
|
|
+ alarmList.value.forEach((item) => {
|
|
|
item.eventTypeName = alarmEventTypeName(String(item.eventType))
|
|
|
})
|
|
|
- tableList.value = alarmRetentionList.value
|
|
|
+ tableList.value = alarmList.value
|
|
|
tableTotal.value = Number(total)
|
|
|
loading.value = false
|
|
|
} catch (error) {
|
|
|
- console.error('❌ 获取异常滞留统计数据失败', error)
|
|
|
+ console.error('❌ 获取告警统计数据失败', error)
|
|
|
loading.value = false
|
|
|
}
|
|
|
}
|
|
@@ -344,11 +284,8 @@ const fetchList = () => {
|
|
|
if (tableType.value === 'fall') {
|
|
|
fetchFallList()
|
|
|
}
|
|
|
- if (tableType.value === 'generalRetention') {
|
|
|
- fetchGeneralRetentionList()
|
|
|
- }
|
|
|
- if (tableType.value === 'alarmRetention') {
|
|
|
- fetchAlarmRetentionList()
|
|
|
+ if (tableType.value === 'alarm') {
|
|
|
+ fetchAlarmList()
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -359,6 +296,19 @@ watch(
|
|
|
},
|
|
|
{ immediate: true }
|
|
|
)
|
|
|
+
|
|
|
+watch(
|
|
|
+ () => props.open,
|
|
|
+ (newVal) => {
|
|
|
+ if (newVal) {
|
|
|
+ console.log('🌸🌸 DeviceStatsDrawer PROPS 🌸🌸', props)
|
|
|
+ fetchList()
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ immediate: true,
|
|
|
+ }
|
|
|
+)
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="less">
|