新增首触故障码搜索

This commit is contained in:
geting 2024-12-23 13:57:50 +08:00
parent b167bfc36e
commit 464a74cd5c
6 changed files with 165 additions and 107 deletions

View File

@ -1,6 +1,7 @@
export default { export default {
select: '请选择', select: '请选择',
selectDate: '选择日期时间', selectDate: '选择日期时间',
firstTriggeredCode: '首触故障码',
type: '类别', type: '类别',
alarmTime: '告警时间', alarmTime: '告警时间',
} }

View File

@ -22,10 +22,22 @@
:placeholder="t('alarm.select') + t('airBlower.airBlowerNumber')" :placeholder="t('alarm.select') + t('airBlower.airBlowerNumber')"
class="alarmSelect" class="alarmSelect"
clearable clearable
@change="handleairBlowerChange"
> >
<el-option v-for="v in airBlowerList" :key="v.value" :label="v.label" :value="v.value"></el-option> <el-option v-for="v in airBlowerList" :key="v.value" :label="v.label" :value="v.value"></el-option>
</el-select> </el-select>
<div style="width: 20px"></div> <div style="width: 20px"></div>
<div style="width: fit-content; white-space: nowrap">{{ t('alarm.firstTriggeredCode') }}</div>
<el-select
v-model="firstTriggeredCode"
:placeholder="t('alarm.select') + t('alarm.firstTriggeredCode')"
class="alarmSelect firstTriggeredCodeSelect"
clearable
filterable
>
<el-option v-for="v in firstTriggeredCodes" :key="v.code" :label="v.description" :value="v.code"></el-option>
</el-select>
<div style="width: 20px"></div>
<div style="width: fit-content; min-width: 30px">{{ t('alarm.type') }}</div> <div style="width: fit-content; min-width: 30px">{{ t('alarm.type') }}</div>
<el-select v-model="alarmTypeValue" :placeholder="t('alarm.select') + t('alarm.type')" class="alarmSelect" clearable> <el-select v-model="alarmTypeValue" :placeholder="t('alarm.select') + t('alarm.type')" class="alarmSelect" clearable>
<el-option v-for="v in alarmTypes" :key="v.value" :label="v.label" :value="v.value"></el-option> <el-option v-for="v in alarmTypes" :key="v.value" :label="v.label" :value="v.value"></el-option>
@ -156,7 +168,7 @@ const getFormattedDate = (offset: number) => {
// //
const airBlowerNumberValue = ref('') const airBlowerNumberValue = ref('')
const airBlowerList = ref([{ label: '', value: '' }]) const airBlowerList = ref([{ label: '', value: '', model: '', madeinFactory: '' }])
// //
const alarmTypeValue = ref(2) const alarmTypeValue = ref(2)
const alarmTypes = ref([ const alarmTypes = ref([
@ -164,6 +176,8 @@ const alarmTypes = ref([
{ label: '告警', value: 1 }, { label: '告警', value: 1 },
{ label: '提示', value: 0 }, { label: '提示', value: 0 },
]) ])
const firstTriggeredCode = ref('')
const firstTriggeredCodes: any = ref([])
const isLoading = ref(false) const isLoading = ref(false)
const searchOperate = () => { const searchOperate = () => {
isLoading.value = true isLoading.value = true
@ -189,6 +203,7 @@ const searchalarms = (): GetAlarmsTableParam => {
deviceCode: deviceCode, deviceCode: deviceCode,
pageNum: paginationOptions.current, pageNum: paginationOptions.current,
pageSize: paginationOptions.pageSize, pageSize: paginationOptions.pageSize,
firstTriggeredCode: firstTriggeredCode.value,
} }
} }
@ -207,28 +222,27 @@ const getcurrentPage = () => {
const getalarmsList = async () => { const getalarmsList = async () => {
const transparams = searchalarms() const transparams = searchalarms()
console.log('🚀 ~ getalarmsList ~ transparams:', transparams) getAlarmListReq(transparams)
getAlarmListReq(transparams).then((res: any) => { .then((res: any) => {
isLoading.value = false isLoading.value = false
if (res.code == 200) { if (res.code == 200) {
paginationOptions.total = res.total paginationOptions.total = res.total
alarmsTableData.value = res.rows.map((item: any) => { alarmsTableData.value = res.rows.map((item: any) => {
console.log('🚀 ~ alarmsTableData.value=res.rows.map ~ item:', item) const descriptions = descriptionMap.value[`${item.madeinFactory}_${item.model}`] || {}
const descriptions = descriptionMap.value[`${item.madeinFactory}_${item.model}`] || {} return {
return { ...item,
...item, eventTimeFormate: timestampToTime(item.eventTime),
eventTimeFormate: timestampToTime(item.eventTime), codeDescriptions: descriptions[item.firstTriggeredCode] || item.firstTriggeredCode,
codeDescriptions: descriptions[item.firstTriggeredCode] || item.firstTriggeredCode, }
} })
}) } else {
} else { ElMessage.error(res.msg ?? '查询失败')
ElMessage.error(res.msg ?? '查询失败') }
} })
}) .catch((err) => {
// .catch((err) => { isLoading.value = false
// isLoading.value = false ElMessage.error(err ?? '查询失败')
// ElMessage.error(err ?? '') })
// })
} }
const descriptionMap = computed(() => { const descriptionMap = computed(() => {
@ -239,8 +253,6 @@ const descriptionMap = computed(() => {
return acc return acc
}, {}) }, {})
}) })
console.log('🚀 ~ map[item.key]=item.value.reduce ~ map:', map)
return map return map
}) })
@ -322,54 +334,64 @@ const getDateRange = (type: 'week' | 'month') => {
} }
} }
const handleairBlowerChange = (value: any) => {
if (value) {
const selectObj: any = airBlowerList.value.find((item) => {
return item.value == value
})
firstTriggeredCode.value = ''
firstTriggeredCodes.value = faultCodeMap[`${selectObj.madeinFactory}_${selectObj.model}`]
} else {
firstTriggeredCode.value = ''
firstTriggeredCodes.value = faultCodeMap[`${airBlowerList.value[0].madeinFactory}_${airBlowerList.value[0].model}`]
}
}
const faultCodeMap: any = {} const faultCodeMap: any = {}
onMounted(() => {
equipList({ onMounted(async () => {
// orgId: adminInfo.orgid, try {
objectType: 10002, const res = await equipList({
}).then((res) => { objectType: 10002,
})
if (res.code == 200) { if (res.code == 200) {
airBlowerList.value = res.data.map((item: any) => { airBlowerList.value = res.data.map((item: any) => {
return { return {
label: item.name, label: item.name,
value: item.code, value: item.code,
madeinFactory: item.madeinFactory,
model: item.model,
} }
}) })
getalarmsList()
}
})
theoreticalpowerCurveList() const theoreticalRes = await theoreticalpowerCurveList()
.then((res: any) => { if (theoreticalRes.code == 200) {
if (res.code == 200) { await getfaultCodeDict(theoreticalRes.rows)
paginationOptions.total = res.total firstTriggeredCodes.value = faultCodeMap[`${airBlowerList.value[0].madeinFactory}_${airBlowerList.value[0].model}`]
res.rows.forEach((item: any, index: number) => { console.log(firstTriggeredCodes.value)
getfaultCodeDict(item)
})
} else { } else {
ElMessage.error(res.msg ?? '查询失败') ElMessage.error(theoreticalRes.msg ?? '查询失败')
} }
}) }
.catch((err) => { } catch (err) {
ElMessage.error(err?.response?.data?.msg ?? '查询失败') ElMessage.error(err ?? '查询失败')
}) }
}) })
const getfaultCodeDict = (data: any) => { const getfaultCodeDict = async (data: any) => {
queryfaultCodeDict({ madeinfactory: data.madeinfactory, model: data.model }).then((res: any) => { const promises = data.map(async (item: any) => {
const res = await queryfaultCodeDict({ madeinfactory: item.madeinfactory, model: item.model })
if (res.code == 200) { if (res.code == 200) {
const deflautList: any = [] const deflautList = res.data.map((faultItem: any) => ({
res.data.forEach((item: any) => { code: faultItem.code,
deflautList.push({ description: faultItem.description,
code: item.code, }))
description: item.description, faultCodeMap[`${item.madeinfactory}_${item.model}`] = deflautList
})
})
faultCodeMap[`${data.madeinfactory}_${data.model}`] = deflautList
} else { } else {
ElMessage.warning('查询失败') ElMessage.warning('查询失败')
} }
}) })
await Promise.all(promises)
} }
const openDefalt = (row: any) => { const openDefalt = (row: any) => {
@ -414,11 +436,14 @@ $paginationHeight: 32px;
align-items: center; align-items: center;
// width: 320px; // width: 320px;
.alarmSelect { .alarmSelect {
width: 200px; width: 150px;
:deep(.el-select__wrapper) { :deep(.el-select__wrapper) {
height: 40px; height: 40px;
} }
} }
.firstTriggeredCodeSelect {
width: 220px;
}
} }
} }
.mainMain { .mainMain {

View File

@ -26,6 +26,7 @@ export type GetAlarmsTableParam = {
eventLevel?: string | number | null eventLevel?: string | number | null
pageNum?: Number pageNum?: Number
pageSize?: Number pageSize?: Number
firstTriggeredCode: string | number | null
} }
export enum AlarmsFieldsEnums { export enum AlarmsFieldsEnums {

View File

@ -8,7 +8,7 @@
v-model="windBlowerValue" v-model="windBlowerValue"
@change="selectWindBlower" @change="selectWindBlower"
:placeholder="'请选择' + t('statAnalysis.deviceId')" :placeholder="'请选择' + t('statAnalysis.deviceId')"
class="windBlowerSelect commonSelect" class="commonSelect"
> >
<el-option v-for="v in windBlowerList" :key="v.irn" :label="v.name" :value="v.irn"></el-option> <el-option v-for="v in windBlowerList" :key="v.irn" :label="v.name" :value="v.irn"></el-option>
</el-select> </el-select>
@ -29,11 +29,16 @@
<el-select v-model="interval" :placeholder="'请选择' + t('statAnalysis.interval')" class="commonSelect"> <el-select v-model="interval" :placeholder="'请选择' + t('statAnalysis.interval')" class="commonSelect">
<el-option v-for="v in intervals" :key="v.value" :label="v.label" :value="v.value"></el-option> <el-option v-for="v in intervals" :key="v.value" :label="v.label" :value="v.value"></el-option>
</el-select> </el-select>
<div style="width: 20px"></div>
<div style="min-width: 30px">{{ t('statAnalysis.calFunction') }}</div>
<el-select v-model="calFunction" :placeholder="'请选择' + t('statAnalysis.calFunction')" class="commonSelect">
<el-option v-for="v in calFunctions" :key="v.value" :label="v.label" :value="v.value"></el-option>
</el-select>
</el-space> </el-space>
<div> <div>
<el-space style="margin-top: 10px"> <el-space style="margin-top: 10px">
<div style="min-width: 30px">模板</div> <div style="min-width: 30px">模板</div>
<el-select v-model="template" placeholder="请选择模板" class="commonSelect" @change="changeTemplate"> <el-select v-model="template" placeholder="请选择模板" class="templateSelect commonSelect" @change="changeTemplate">
<el-option v-for="v in reportTemplateList" :key="v.value" :label="v.label" :value="v.value"> <el-option v-for="v in reportTemplateList" :key="v.value" :label="v.label" :value="v.value">
<template #default> <template #default>
<div class="tamplateOption"> <div class="tamplateOption">
@ -131,6 +136,7 @@ import { WindBlowerList, RequestData, Devices } from './type'
import { import {
queryWindTurbinesPages, queryWindTurbinesPages,
historyReq, historyReq,
windowReq,
getReportTemplateListReq, getReportTemplateListReq,
addReportTemplateListReq, addReportTemplateListReq,
delReportTemplateListReq, delReportTemplateListReq,
@ -212,6 +218,13 @@ const intervals = [
{ label: '一天', value: '1d' }, { label: '一天', value: '1d' },
{ label: '原始', value: 'NONE' }, { label: '原始', value: 'NONE' },
] ]
const calFunction = ref('interpolation')
const calFunctions = [
{ label: '瞬时值', value: 'interpolation' },
{ label: '平均值', value: 'average' },
{ label: '最大值', value: 'max' },
{ label: '最小值', value: 'min' },
]
// //
const template = ref('') const template = ref('')
const reportTemplateList = ref<{ label: string; value: string; columns: any[]; interval: string }[]>([]) const reportTemplateList = ref<{ label: string; value: string; columns: any[]; interval: string }[]>([])
@ -441,55 +454,70 @@ const queryHistoryData = () => {
interval: interval.value, interval: interval.value,
startTime: new Date(timeRange.value[0]).getTime(), startTime: new Date(timeRange.value[0]).getTime(),
endTime: new Date(timeRange.value[1]).getTime(), endTime: new Date(timeRange.value[1]).getTime(),
} as any calFunction: calFunction.value,
historyReq(requestData) } as anyObj
.then((res) => { if (calFunction.value == 'interpolation') {
if (res.code == 200) { historyReq(requestData)
const result = res.data .then((res) => {
if (Object.keys(result)?.length) { handleRes(res, attributeCodes)
const realResult = result[windBlowerValue.value] })
let tableData = [] as any .finally(() => {
attributeCodes.forEach((item: any) => {
if (Object.keys(realResult).includes(item)) {
tableData.push({
name: item,
times: realResult[item].times,
value: realResult[item].values.map((val: any) => (val === 0 ? 0 : val?.toFixed(2))),
})
}
})
const processedData = new Map()
idCounter.value = 0
if (tableData.length) {
tableData.forEach(({ name, times, value }: any) => {
times.forEach((time: number, index: number) => {
if (!processedData.has(time)) {
processedData.set(time, { id: idCounter.value++, time: timestampToTime(time) })
}
const values = value[index]
processedData.get(time)[name] = enumStore.keys.includes(name) ? enumStore.data?.[name]?.[values] : values
})
})
}
reportTableData.value = Array.from(processedData.values())
if (!reportTableData.value.length) {
ElMessage.warning('查询数据为空!')
reportTableData.value = []
}
reportLoading.value = false
} else {
ElMessage.warning('查询数据为空!')
reportTableData.value = []
reportLoading.value = false
}
} else {
reportLoading.value = false reportLoading.value = false
ElMessage.warning('查询失败') })
} else {
windowReq(requestData)
.then((res) => {
handleRes(res, attributeCodes)
})
.finally(() => {
reportLoading.value = false
})
}
}
const handleRes = (res: any, attributeCodes: any) => {
if (res.code == 200) {
const result = res.data
if (Object.keys(result)?.length) {
const realResult = result[windBlowerValue.value]
let tableData = [] as any
attributeCodes.forEach((item: any) => {
if (Object.keys(realResult).includes(item)) {
tableData.push({
name: item,
times: realResult[item].times,
value: realResult[item].values.map((val: any) => (val === 0 ? 0 : val?.toFixed(2))),
})
}
})
const processedData = new Map()
idCounter.value = 0
if (tableData.length) {
tableData.forEach(({ name, times, value }: any) => {
times.forEach((time: number, index: number) => {
if (!processedData.has(time)) {
processedData.set(time, { id: idCounter.value++, time: timestampToTime(time) })
}
const values = value[index]
processedData.get(time)[name] = enumStore.keys.includes(name) ? enumStore.data?.[name]?.[values] : values
})
})
}
reportTableData.value = Array.from(processedData.values())
if (!reportTableData.value.length) {
ElMessage.warning('查询数据为空!')
reportTableData.value = []
} }
})
.finally(() => {
reportLoading.value = false reportLoading.value = false
}) } else {
ElMessage.warning('查询数据为空!')
reportTableData.value = []
reportLoading.value = false
}
} else {
reportLoading.value = false
ElMessage.warning('查询失败')
}
} }
// //
@ -560,11 +588,14 @@ onMounted(() => {
} }
.commonSelect { .commonSelect {
min-width: 250px; min-width: 150px;
:deep(.el-select__wrapper) { :deep(.el-select__wrapper) {
height: 40px; height: 40px;
} }
} }
.templateSelect {
min-width: 223px;
}
.button { .button {
height: 40px; height: 40px;

View File

@ -269,7 +269,7 @@ const statAnalysisSelectOptions: any = reactive({
{ label: '原始', value: 'NONE' }, { label: '原始', value: 'NONE' },
], ],
calFunction: [ calFunction: [
{ label: '值', value: 'interpolation' }, { label: '瞬时值', value: 'interpolation' },
{ label: '平均值', value: 'average' }, { label: '平均值', value: 'average' },
{ label: '最大值', value: 'max' }, { label: '最大值', value: 'max' },
{ label: '最小值', value: 'min' }, { label: '最小值', value: 'min' },

View File

@ -162,7 +162,7 @@ const statAnalysisSelectOptions: any = reactive({
{ label: '原始', value: 'NONE' }, { label: '原始', value: 'NONE' },
], ],
calFunction: [ calFunction: [
{ label: '值', value: 'interpolation' }, { label: '瞬时值', value: 'interpolation' },
{ label: '平均值', value: 'average' }, { label: '平均值', value: 'average' },
{ label: '最大值', value: 'max' }, { label: '最大值', value: 'max' },
{ label: '最小值', value: 'min' }, { label: '最小值', value: 'min' },