Browse Source

fix:回算功能优化

pull/83/head
xjf 4 weeks ago
parent
commit
85e1e05dd2
  1. 19
      src/views/run/calc/calc.data.ts
  2. 182
      src/views/run/calc/index.vue

19
src/views/run/calc/calc.data.ts

@ -5,6 +5,7 @@ import type { BasicColumn, FormSchema } from '@/components/Table'
import { DICT_TYPE, getDictOptions } from '@/utils/dict'
import { optionListApi, subSystemListApi } from '@/api/alert/model/select'
import type { systemSelectParams } from '@/api/alert/model/model/optionsModel'
import {Tag} from "ant-design-vue";
export const columns: BasicColumn[] = [
{
@ -30,7 +31,7 @@ export const columns: BasicColumn[] = [
{
title: '模式覆盖率',
dataIndex: 'CoveredPercent',
width: 100,
width: 100
},
{
title: '报警次数',
@ -46,6 +47,7 @@ export const columns: BasicColumn[] = [
title: '系统维度',
dataIndex: 'Dimension',
width: 100,
},
{
title: '计算耗时(s)',
@ -54,10 +56,11 @@ export const columns: BasicColumn[] = [
},
{
title: '状态',
dataIndex: 'status',
dataIndex: 'calcStatus',
width: 100,
slots: { customRender: 'status' },
fixed: 'right',
slots: { customRender: 'calcStatus' },
},
]
@ -65,6 +68,7 @@ const optionList = await optionListApi()
const systemOptions = ref<any>([])
systemOptions.value = optionList.systems
console.log(systemOptions.value)
export const searchFormSchema: FormSchema[] = [
{
label: '机组',
@ -80,10 +84,6 @@ export const searchFormSchema: FormSchema[] = [
placeholder: '请选择机组',
options: optionList.units.map(unit => ({ value: unit.id, label: unit.name })),
onChange: async (e: any) => {
// const { reload } = tableAction
// reload()
// or
console.log(e)
const param: systemSelectParams = {
unitId: e,
typeId: formModel.type,
@ -106,15 +106,12 @@ export const searchFormSchema: FormSchema[] = [
placeholder: '请选择系统',
options: optionList.types.map(type => ({ value: type.id, label: type.name })),
onChange: async (e: any) => {
// const { reload } = tableAction
// reload()
// or
console.log(e)
const param: systemSelectParams = {
unitId: formModel.unit,
typeId: e,
}
systemOptions.value = await subSystemListApi(param)
console.log(systemOptions.value)
},
}
},

182
src/views/run/calc/index.vue

@ -1,27 +1,35 @@
<script lang="ts" setup>
import { Space,Badge, Button, Divider, Switch } from 'ant-design-vue'
import { onMounted, ref, reactive } from 'vue'
import {Space, Tag,Badge, Button, Divider, Switch} from 'ant-design-vue'
import {onMounted, ref, reactive} from 'vue'
import moment from 'moment'
import HistoryModal from '../../exa/config/HistoryModal.vue'
import { calcFormSchemas, columns, searchFormSchema } from './calc.data'
import {calcFormSchemas, columns, searchFormSchema} from './calc.data'
import { BasicTable, TableAction, useTable } from '@/components/Table'
import { BasicForm, useForm } from '@/components/Form'
import {BasicTable, TableAction, useTable} from '@/components/Table'
import {BasicForm, useForm} from '@/components/Form'
import {calcInstant, getInstantCount, getInstantPage, updateInstant} from '@/api/alert/run/instant'
import { getExaNow } from '@/api/alert/exa'
import { useI18n } from '@/hooks/web/useI18n'
import { router } from '@/router'
import { useMessage } from '@/hooks/web/useMessage'
import { IconEnum } from '@/enums/appEnum'
import { useModal } from '@/components/Modal'
defineOptions({ name: 'InstantCalc' })
const { createMessage } = useMessage()
const { t } = useI18n()
import {getExaNow} from '@/api/alert/exa'
import {useI18n} from '@/hooks/web/useI18n'
import {router} from '@/router'
import {useMessage} from '@/hooks/web/useMessage'
import {IconEnum} from '@/enums/appEnum'
import {useModal} from '@/components/Modal'
defineOptions({name: 'InstantCalc'})
const {createMessage} = useMessage()
const {t} = useI18n()
//
const statusMap = {
0: { label: '待计算', color: 'default' },
1: { label: '计算中', color: 'processing' },
2: { label: '计算成功', color: 'success' },
3: { label: '计算失败', color: 'error' },
}
//
const selectedRowss = ref<any[]>([])
const [registerTable, { getForm, reload, getDataSource, updateTableDataRecord }] = useTable({
const [registerTable, {getForm, reload, getDataSource, updateTableDataRecord}] = useTable({
title: '实例列表',
api: getInstantPage,
rowKey: 'mpId',
@ -34,7 +42,7 @@ const [registerTable, { getForm, reload, getDataSource, updateTableDataRecord }]
actionColOptions: {
span: 2,
style: {
textAlign: 'left' ,
textAlign: 'left',
marginLeft: '10px',
},
},
@ -57,13 +65,27 @@ const [registerTable, { getForm, reload, getDataSource, updateTableDataRecord }]
console.log(24)
selectedRowss.value = selectedRows
}
}
},
//
// 使
// 👉 afterFetch
afterFetch: (data) =>
data.map(item => ({
...item,
CoveredPercent: '-',
AlarmNumber: '-',
AlarmToatlMinutes: '-',
CalcSeconds: '-',
Dimension:'-',
calcStatus: 0,
})),
})
/**
* BasicForm绑定注册;
*/
const [registerForm,{getFieldsValue,validate,validateFields}] = useForm({
const [registerForm, {getFieldsValue, validate, validateFields}] = useForm({
//
schemas: calcFormSchemas,
// false
@ -73,13 +95,13 @@ const [registerForm,{getFieldsValue,validate,validateFields}] = useForm({
// // // 1
// alwaysShowLines: 1,
layout: 'horizontal',
model: { time: [moment().subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss'), moment().format('YYYY-MM-DD HH:mm:ss')] },
model: {time: [moment().subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss'), moment().format('YYYY-MM-DD HH:mm:ss')]},
fieldMapToTime: [
// datastartTimeendTime
['time', ['st', 'et'], 'YYYY-MM-DD HH:mm:ss']
],
actionColOptions: { span: 5,style: { textAlign: 'left' ,marginLeft: '10px',} },
actionColOptions: {span: 5, style: {textAlign: 'left', marginLeft: '10px',}},
showSubmitButton: false,
showResetButton: false,
})
@ -97,21 +119,18 @@ function handleExport(values: any) {
console.log('导出按钮数据::::', values)
}
async function handlebeforeCalc(rowMpId?: string) {
console.log('点击回算按钮数据::::', rowMpId)
let targetMpIds: string[] = []
async function handlebeforeCalc(record?: Recordable) {
let targetRows: Recordable[] = []
// 1. 使mpId
if (rowMpId) {
alert("行内回算")
targetMpIds = [rowMpId]
if (record) {
targetRows = [record]
}
// 2. 使
else {
alert("表单回算")
targetRows = selectedRowss.value
targetMpIds = selectedRowss.value.map(row => row.mpId)
if (targetMpIds.length === 0) {
if (targetRows.length === 0) {
createMessage.error('请选择要回算的实例')
return
}
@ -119,79 +138,94 @@ async function handlebeforeCalc(rowMpId?: string) {
//
const formData = await validate()
// id
formData.mpIds = targetMpIds;
handleCalc(formData)
// id
formData.records = targetRows;
handleCalc(formData)
}
//
async function handleCalc(formData: any) {
calcLoading.value = true
console.log('点击回算按钮数据::::', formData)
//
for (const mpId of formData.mpIds) {
rowCalcLoading[mpId] = true
console.log('行内回算loading状态:', mpId, rowCalcLoading[mpId])
try {
// -
formData.mpId=mpId
// -
console.log(formData)
const res = await calcInstant(formData)
console.log('回算结果:', res)
//
// updateTableDataRecord(res)
createMessage.success(t('common.success'))
} catch (error) {
createMessage.error(t('common.fail'))
} finally {
rowCalcLoading[mpId] = false
}
async function handleCalc(formData: any) {
calcLoading.value = true
console.log('点击回算按钮数据::::', formData)
//
for (const record of formData.records) {
updateTableDataRecord(record.mpId, {calcStatus:1})
rowCalcLoading[record.mpId] = true
console.log('行内回算loading状态:', record.mpId, rowCalcLoading[record.mpId])
try {
// -
formData.mpId = record.mpId
// -
console.log(formData)
const res = await calcInstant(formData)
console.log('回算结果:', res)
console.log(record)
res.calcStatus = 2
//
updateTableDataRecord(record.mpId, res)
createMessage.success(t('common.successText'))
} catch (error) {
updateTableDataRecord(record.mpId, {calcStatus:3})
createMessage.error(t('common.failText'))
} finally {
rowCalcLoading[record.mpId] = false
}
calcLoading.value = false
}
calcLoading.value = false
}
onMounted(async () => {
const { setFieldsValue } = getForm()
await setFieldsValue({ system: null })
})
</script>
<template>
<div>
<BasicTable @register="registerTable">
<template #form-formFooter>
<!-- <a-button v-auth="['run:instant:create']" type="primary" :pre-icon="IconEnum.ADD" @click="handleCreate">
{{ t('action.create') }}
</a-button> -->
<Divider orientation="left">
回算
</Divider>
<!-- <Divider orientation="left">-->
<!-- 回算-->
<!-- </Divider>-->
<!-- 自定义表单 -->
<BasicForm @register="registerForm">
<template #advanceBefore>
<Space>
<a-button type="primary" :loading="calcLoading" :pre-icon="IconEnum.BACK_CALC" @click="handlebeforeCalc()">
{{ t('action.backCalc') }}
</a-button>
<a-button type="primary" :pre-icon="IconEnum.EXPORT" @click="handleExport">
{{ t('action.export') }}
</a-button>
<a-button type="primary" :loading="calcLoading" :pre-icon="IconEnum.BACK_CALC"
@click="handlebeforeCalc()">
{{ t('action.backCalc') }}
</a-button>
<a-button type="primary" :pre-icon="IconEnum.EXPORT" @click="handleExport">
{{ t('action.export') }}
</a-button>
</Space>
</template>
</BasicForm>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<!-- <TableAction-->
<!-- :actions="[-->
<!-- { icon: IconEnum.BACK_CALC,label: rowCalcLoading[record.mpId] ? t('action.calcIng') : t('action.backCalc'), onClick: handleCalc.bind(null, record) },-->
<!-- ]"-->
<!-- />-->
<!-- <TableAction-->
<!-- :actions="[-->
<!-- { icon: IconEnum.BACK_CALC,label: rowCalcLoading[record.mpId] ? t('action.calcIng') : t('action.backCalc'), onClick: handleCalc.bind(null, record) },-->
<!-- ]"-->
<!-- />-->
<TableAction
:actions="[
{ icon: IconEnum.BACK_CALC,label: rowCalcLoading[record.mpId] ? t('action.calcIng') : t('action.backCalc'),
onClick: () => handlebeforeCalc(record.mpId),
onClick: () => handlebeforeCalc(record),
disabled: rowCalcLoading[record.mpId]},
]"
@click.stop
/>
</template>
</template>
<!-- 修改calcStatus列的渲染 -->
<template #calcStatus="{ record }">
<Tag :color="statusMap[record.calcStatus].color">
{{ statusMap[record.calcStatus].label }}
</Tag>
</template>
</BasicTable>
</div>
</template>

Loading…
Cancel
Save