You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

90 lines
2.4 KiB

<script lang="ts" setup>
import { Card } from 'ant-design-vue'
import { onBeforeUpdate, onMounted, onUpdated } from 'vue'
import { BasicTable, useTable } from '@/components/Table'
import { getExaNow } from '@/api/alert/exa'
const props = defineProps({
data: {
type: Object,
default: () => {},
},
})
function getInterval(record: any) {
console.log(record)
if (record.originValue === '-')
return '-'
record.originValue = Number(record.originValue).toFixed(2)
const threshold = record.ResidualThreshold
console.log(threshold)
const originValue = record.originValue || 0
return `[${Number(originValue) - threshold},${Number(originValue) + threshold}]`
}
const [registerTable, { setTableData }] = useTable({
dataSource: [],
rowKey: 'ID',
size: 'small',
immediate: false,
columns: props.data.Columns,
useSearchForm: false,
showTableSetting: false,
showIndexColumn: false,
})
// 页面挂载时批量请求并更新数据(避免在模板中调用异步)
onBeforeUpdate(async () => {
const rr = [] as any[]
const rows = props.data.Content || []
for (const item of rows) {
try {
// 如果后端需要同时传 ObservedPoint 和 PredictedPoint,用逗号拼接(请根据后端接口调整)
const param = item.PredictedPoint ? `${item.ObservedPoint},${item.PredictedPoint}` : `${item.ObservedPoint}`
const res = await getExaNow(param)
let origin: any = '-'
let predict: any = '-'
if (res != null) {
if (Array.isArray(res)) {
origin = res[0] ?? '-'
predict = res[1] ?? '-'
}
else if (typeof res === 'object') {
origin = res.originValue ?? res[0] ?? '-'
predict = res.predictValue ?? res[1] ?? '-'
}
else {
origin = String(res)
}
}
rr.push(Object.assign({}, item, { originValue: origin, predictValue: predict }))
}
catch (e) {
}
}
setTableData(rr)
})
</script>
<template>
<Card :title="props.data.Header" v-bind="$attrs">
<!-- <template #extra>
<a-button type="link">
更多
</a-button>
</template> -->
<BasicTable @register="registerTable">
<template #threshold="{ record }">
<span>{{ getInterval(record) }}</span>
</template>
</BasicTable>
</Card>
</template>
<style scoped>
::v-deep(.ant-card-body) {
padding:5px;
}
</style>