系数校准

This commit is contained in:
sjl
2024-12-20 10:21:36 +08:00
parent 2715871017
commit d11e4822ed
6 changed files with 1378 additions and 1108 deletions

View File

@@ -1,8 +1,7 @@
<template>
<el-dialog v-model='dialogVisible' title="系数校准" width="1200px" height="1000px">
<el-dialog v-model='dialogVisible' title="系数校准" v-bind="dialogBig" width="1400px" @close="handleCancel">
<div class="test-dialog" >
<div class="dialog-content">
<div class="right-title">
<!-- <div>系数校准表</div> -->
<div>{{ outputDsc }}</div>
@@ -16,34 +15,82 @@
<el-button type="primary" :disabled="true" v-if="activeIndex === activeTotalNum">通道系数已校准3台/共3台</el-button> -->
</div>
</div>
<div class="right-content">
<el-tabs type="border-card">
<el-empty description="暂无数据,等待检测开始" v-if="activeIndex === 0" />
<el-tab-pane label="240001" v-if="activeIndex > 0">
<channelsTestTable :tableData="tableData1"></channelsTestTable>
</el-tab-pane>
<el-tab-pane label="240002" v-if="activeIndex > 1">
<template #label>
<span class="custom-tabs-label">
<span>240002</span>
<el-icon>
<Failed />
</el-icon>
</span>
</template>
<channelsTestTable :tableData="tableData2"></channelsTestTable>
</el-tab-pane>
<el-tab-pane label="240003" v-if="activeIndex > 2">
<channelsTestTable :tableData="tableData3"></channelsTestTable>
</el-tab-pane>
<el-tab-pane label="240004" v-if="activeIndex > 3">
<channelsTestTable :tableData="tableData4"></channelsTestTable>
</el-tab-pane>
</el-tabs>
<div class="container">
<div class="dialog-left">
<el-steps direction="vertical" :active="active" :process-status="currentStepStatus" finish-status="success">
<el-step title="开始" />
<el-step title="大电压/电流下装"/>
<el-step>
<template #title>
<span>源输出为</span><br/>
<span>Ua=Ub=Uc=57.74V</span><br/>
<span>Ia=Ib=Ic=1A</span>
</template>
</el-step>
<el-step title="小电压/电流下装"/>
<el-step>
<template #title>
<span>源输出为</span><br/>
<span>Ua=Ub=Uc=57.74V</span><br/>
<span>Ia=Ib=Ic=1A</span>
</template>
</el-step>
<el-step title="结束"/>
</el-steps>
</div>
<div class="right-content">
<el-tabs type="border-card">
<div v-if="activeIndex > 0">
<el-tab-pane v-for="(device, index) in name.slice(0, activeIndex + 1)" :key="index" :label="device">
<template #label>
<span class="custom-tabs-label">
<span>{{ device }}</span>
<el-icon v-if="errorStates[index]">
<Failed />
</el-icon>
</span>
</template>
<channelsTestTable :tableData="getTableDataForChannel(index)"></channelsTestTable>
</el-tab-pane>
</div>
<el-empty description="暂无数据,等待检测开始" v-if="activeIndex === 0" />
</el-tabs>
<!-- <el-tabs type="border-card">
<el-empty description="暂无数据,等待检测开始" v-if="activeIndex === 0" />
<el-tab-pane label="240001" v-if="activeIndex > 0">
<template #label>
<span class="custom-tabs-label">
<span>240001</span>
<el-icon>
<Failed />
</el-icon>
</span>
</template>
<channelsTestTable :tableData="tableData1"></channelsTestTable>
</el-tab-pane>
<el-tab-pane label="240002" v-if="activeIndex > 1">
<template #label>
<span class="custom-tabs-label">
<span>240002</span>
<el-icon>
<Failed />
</el-icon>
</span>
</template>
<channelsTestTable :tableData="tableData2"></channelsTestTable>
</el-tab-pane>
<el-tab-pane label="240003" v-if="activeIndex > 2">
<channelsTestTable :tableData="tableData3"></channelsTestTable>
</el-tab-pane>
<el-tab-pane label="240004" v-if="activeIndex > 3">
<channelsTestTable :tableData="tableData4"></channelsTestTable>
</el-tab-pane>
</el-tabs> -->
</div>
</div>
</div>
</div>
</div>
<template #footer>
<div class="dialog-footer">
@@ -54,15 +101,28 @@
</template>
<script lang="tsx" setup name="channelsTest">
import { type Device } from '@/api/device/interface/device';
import { SuccessFilled, Failed } from '@element-plus/icons-vue'
import { ref, toRef, watch } from 'vue'
import { type Ref, ref, toRef, watch } from 'vue'
import {dialogBig} from '@/utils/elementBind'
const activeIndex = ref(0)
const activeTotalNum = ref(4)
const qualified = ref(0)
const outputDsc = ref('电压误差为±0.1Un% 电流误差为±0.5%')
const total = ref(0)
const dialogVisible = ref(false)
const active = ref(0)
let intervalId: NodeJS.Timeout | null = null;
const name = ref<string[]>([])//系数校准所选设备名字数组
const channel = ref<number[]>([])//系数校准所选设备通道数组
// 在 setup 函数中
const errorStates = ref(new Array(name.value.length).fill(false));
// 更新错误状态的方法
const updateErrorState = (index: number, hasError: boolean) => {
errorStates.value[index] = hasError;
};
const activities = [
{
content: '开始检测',
@@ -92,231 +152,346 @@ const activities = [
hollow: true,
},
]
const tableData1 = ref([
const tableData1 = ref<TableDataItem[]>([
{
id: '1',
updateTime: '2024-10-10 10:30:00',
deviceName: '240001',
deviceName: '大电压大电流1',
MonitorIdx: 1,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
Result: '合格',
UaData: 57.74,
UaChannel: 1.0003,
UbData: 57.74,
UbChannel: 1.0003,
UcData: 57.74,
UcChannel: 1.0003,
IaData: 5,
IaChannel: 1.0001,
IbData: 5,
IbChannel: 1.0001,
IcData: 5,
IcChannel: 1.0001,
},
{
id: '1',
deviceName: '大电压大电流',
MonitorIdx: 1,
UaData: 57.74,
UaChannel: 1.0003,
UbData: 57.74,
UbChannel: 1.0003,
UcData: 57.74,
UcChannel: 1.0003,
IaData: 5,
IaChannel: 1.0001,
IbData: 5,
IbChannel: 1.0001,
IcData: 5,
IcChannel: 1.0001,
},
{
id: '1',
deviceName: '小电压小电流',
MonitorIdx: 1,
UaData: 57.74,
UaChannel: '合格',
UbData: 57.74,
UbChannel: '合格',
UcData: 57.74,
UcChannel: '合格',
IaData: 5,
IaChannel: '合格',
IbData: 5,
IbChannel: '合格',
IcData: 5,
IcChannel: '合格',
},
{
id: '1',
deviceName: '小电压小电流',
MonitorIdx: 1,
UaData: 57.74,
UaChannel: "合格",
UbData: 57.74,
UbChannel: '合格',
UcData: 57.74,
UcChannel: '合格',
IaData: 5,
IaChannel: '合格',
IbData: 5,
IbChannel: '合格',
IcData: 5,
IcChannel: '合格',
},
{
id: '2',
updateTime: '2024-10-10 10:30:00',
deviceName: '240001',
MonitorIdx: 2,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
Result: '合格',
},
{
id: '3',
updateTime: '2024-10-10 10:30:00',
deviceName: '240001',
MonitorIdx: 3,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
Result: '合格',
},
{
id: '4',
updateTime: '2024-10-10 10:30:00',
deviceName: '240001',
MonitorIdx: 4,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
Result: '合格',
},
])
const tableData2 = ref([
{
id: '1',
updateTime: '2024-10-10 10:30:00',
deviceName: '240002',
MonitorIdx: 1,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
Result: '合格',
UaData: 57.74,
UaChannel: 1.0003,
UbData: 57.74,
UbChannel: 1.0003,
UcData: 57.74,
UcChannel: 1.0003,
IaData: 5,
IaChannel: 1.0001,
IbData: 5,
IbChannel: 1.0001,
IcData: 5,
IcChannel: 1.0001,
},
{
id: '2',
updateTime: '2024-10-10 10:30:00',
deviceName: '240002',
deviceName: '240001',
MonitorIdx: 2,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
Result: '不合格',
},
{
id: '3',
updateTime: '2024-10-10 10:30:00',
deviceName: '240002',
MonitorIdx: 3,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
Result: '合格',
},
{
id: '4',
updateTime: '2024-10-10 10:30:00',
deviceName: '240002',
MonitorIdx: 4,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
Result: '不合格',
},
])
const tableData3 = ref([
{
id: '1',
updateTime: '2024-10-10 10:30:00',
deviceName: '240003',
MonitorIdx: 1,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
Result: '合格',
UaData: 57.74,
UaChannel: 1.0003,
UbData: 57.74,
UbChannel: 1.0003,
UcData: 57.74,
UcChannel: 1.0003,
IaData: 5,
IaChannel: 1.0001,
IbData: 5,
IbChannel: 1.0001,
IcData: 5,
IcChannel: 1.0001,
},
{
id: '2',
updateTime: '2024-10-10 10:30:00',
deviceName: '240003',
deviceName: '240001',
MonitorIdx: 2,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
Result: '合格',
},
{
id: '3',
updateTime: '2024-10-10 10:30:00',
deviceName: '240003',
MonitorIdx: 3,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
Result: '合格',
},
{
id: '4',
updateTime: '2024-10-10 10:30:00',
deviceName: '240003',
MonitorIdx: 4,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
Result: '合格',
},
])
const tableData4 = ref([
{
id: '1',
updateTime: '2024-10-10 10:30:00',
deviceName: '240004',
MonitorIdx: 1,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
Result: '合格',
UaData: 57.74,
UaChannel: '合格',
UbData: 57.74,
UbChannel: '合格',
UcData: 57.74,
UcChannel: '合格',
IaData: 5,
IaChannel: '合格',
IbData: 5,
IbChannel: '合格',
IcData: 5,
IcChannel: '合格',
},
{
id: '2',
updateTime: '2024-10-10 10:30:00',
deviceName: '240004',
deviceName: '240001',
MonitorIdx: 2,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
UaData: 57.74,
UaChannel: '合格',
UbData: 57.74,
UbChannel: '合格',
UcData: 57.74,
UcChannel:'合格',
IaData: 5,
IaChannel: '合格',
IbData: 5,
IbChannel: '合格',
IcData: 5,
IcChannel: '合格',
},
])
const tableData2 = ref<TableDataItem[]>([
{
id: '1',
deviceName: '大电压大电流2',
MonitorIdx: 1,
UaData: 57.74,
UaChannel: 1.0003,
UbData: 57.74,
UbChannel: 1.0003,
UcData: 57.74,
UcChannel: 1.0003,
IaData: 5,
IaChannel: 1.0001,
IbData: 5,
IbChannel: 1.0001,
IcData: 5,
IcChannel: 1.0001,
},
{
id: '1',
deviceName: '大电压大电流',
MonitorIdx: 1,
UaData: 57.74,
UaChannel: 1.0003,
UbData: 57.74,
UbChannel: 1.0003,
UcData: 57.74,
UcChannel: 1.0003,
IaData: 5,
IaChannel: 1.0001,
IbData: 5,
IbChannel: 1.0001,
IcData: 5,
IcChannel: 1.0001,
},
{
id: '1',
deviceName: '小电压小电流',
MonitorIdx: 1,
UaData: 57.74,
UaChannel: '合格',
UbData: 57.74,
UbChannel: '合格',
UcData: 57.74,
UcChannel: '合格',
IaData: 5,
IaChannel: '合格',
IbData: 5,
IbChannel: '不合格',
IcData: 5,
IcChannel: '合格',
},
{
id: '1',
deviceName: '小电压小电流',
MonitorIdx: 1,
UaData: 57.74,
UaChannel: "合格",
UbData: 57.74,
UbChannel: '合格',
UcData: 57.74,
UcChannel: '合格',
IaData: 5,
IaChannel: '合格',
IbData: 5,
IbChannel: '合格',
IcData: 5,
IcChannel: '合格',
},
])
const tableData3 = ref<TableDataItem[]>([
{
id: '1',
updateTime: '2024-10-10 10:30:00',
deviceName: '大电压大电流',
MonitorIdx: 1,
UaData: 57.74,
UaChannel: 1.0003,
UbData: 57.74,
UbChannel: 1.0003,
UcData: 57.74,
UcChannel: 1.0003,
IaData: 5,
IaChannel: 1.0001,
IbData: 5,
IbChannel: 1.0001,
IcData: 5,
IcChannel: 1.0001,
Result: '合格',
},
{
id: '3',
id: '1',
updateTime: '2024-10-10 10:30:00',
deviceName: '240004',
MonitorIdx: 3,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
deviceName: '大电压大电流',
MonitorIdx: 1,
UaData: 57.74,
UaChannel: 1.0003,
UbData: 57.74,
UbChannel: 1.0003,
UcData: 57.74,
UcChannel: 1.0003,
IaData: 5,
IaChannel: 1.0001,
IbData: 5,
IbChannel: 1.0001,
IcData: 5,
IcChannel: 1.0001,
Result: '合格',
},
{
id: '4',
id: '1',
updateTime: '2024-10-10 10:30:00',
deviceName: '240004',
MonitorIdx: 4,
Ua: 1.0003,
Ub: 1.0003,
Uc: 0.0096,
Ia: 1.0003,
Ib: 1.0003,
Ic: 1.0008,
deviceName: '小电压小电流',
MonitorIdx: 1,
UaData: 57.74,
UaChannel: '合格',
UbData: 57.74,
UbChannel: '合格',
UcData: 57.74,
UcChannel: '合格',
IaData: 5,
IaChannel: '合格',
IbData: 5,
IbChannel: 1.0001,
IcData: 5,
IcChannel: '合格',
Result: '合格',
},
{
id: '1',
updateTime: '2024-10-10 10:30:00',
deviceName: '小电压小电流',
MonitorIdx: 1,
UaData: 57.74,
UaChannel: "合格",
UbData: 57.74,
UbChannel: '合格',
UcData: 57.74,
UcChannel: '不合格',
IaData: 5,
IaChannel: '合格',
IbData: 5,
IbChannel: '合格',
IcData: 5,
IcChannel: '合格',
Result: '合格',
},
])
const currentStepStatus = ref<'error' | 'finish' | 'wait' | 'success' | 'process'>('finish');
// 打开弹窗,可能是新增,也可能是编辑
const open = () => {
const open = (selection: Device.ResPqDev[]) => {
name.value = selection.map(item => item.name)
channel.value = selection.map(item => item.devChns)
dialogVisible.value = true;
activeIndex.value = 1
total.value = name.value.length
}
const handleCancel=() => {
// 清空 name, channel, total
name.value = [];
channel.value = [];
total.value = 0;
activeIndex.value = 0
qualified.value = 0
dialogVisible.value = false
}
// 定义 TableDataItem 接口
interface TableDataItem {
id: string;
deviceName: string;
MonitorIdx: number;
UaData?: number;
UaChannel?: number | string;
UbData?: number;
UbChannel?: number | string;
UcData?: number;
UcChannel?: number | string;
IaData?: number;
IaChannel?: number | string;
IbData?: number;
IbChannel?: number | string;
IcData?: number;
IcChannel?: number | string;
Result?: string;
updateTime?: string;
}
const tableDataMap = new Map<number, Ref<TableDataItem[]>>([
[0, tableData1],
[1, tableData2],
[2, tableData3],
]);
const getTableDataForChannel = (index: number): any[] => {
const data = tableDataMap.get(index);
return data ? data.value : [];
}
// const props = defineProps({
// testStatus: {
// type: String,
@@ -364,33 +539,80 @@ const currentStepStatus = ref<'error' | 'finish' | 'wait' | 'success' | 'process
watch(activeIndex, function (newValue, oldValue) {
if(activeIndex.value === 1)
{
outputDsc.value = "电压误差为±0.1Un% 电流误差为±0.5%当前源输出为Ua=Ub=Uc=57.74V Ia=Ib=Ic=1A";
}
if(activeIndex.value === 1)
{
outputDsc.value = "电压误差为±0.1Un% 电流误差为±0.5%";
// 当前源输出为Ua=Ub=Uc=57.74V Ia=Ib=Ic=1A"
}
})
const handleSubmit = () => {
let timer = setInterval(() => {
if (activeIndex.value < activeTotalNum.value) {
activeIndex.value++
if(activeIndex.value > 1)
qualified.value = activeIndex.value -1;//演示效果,实际运行时使用后端传来的真实数据即可
else
qualified.value = activeIndex.value;
}
else if (activeIndex.value === activeTotalNum.value) {
clearInterval(timer)
}
else {
clearInterval(timer)
}
total.value = activeTotalNum.value
}, 1000);
// 示例的 checkForErrors 函数,根据实际需求进行调整
const checkForErrors = (data: TableDataItem[]): boolean => {
// 这里假设不合格字段的标准是 status 为 '不合格' 或 isValid 为 false
return data.some(item =>
item.UaChannel === '不合格' ||
item.UbChannel === '不合格' ||
item.UcChannel === '不合格' ||
item.IaChannel === '不合格' ||
item.IbChannel === '不合格' ||
item.IcChannel === '不合格'
);
};
const handleSubmit = () => {
if (intervalId !== null) {
clearInterval(intervalId);
}
intervalId = setInterval(() => {
console.log('开始')
if (activeIndex.value < name.value.length) {
activeIndex.value++;
console.log('active index',activeIndex.value)
// 获取当前活动索引对应的 tableData
const currentDataRef = tableDataMap.get(activeIndex.value);
if (currentDataRef) {
const currentData = currentDataRef.value;
// 检查当前数据中有无不合格字段
const hasError = checkForErrors(currentData);
if (hasError) {
qualified.value++;
}
updateErrorState(activeIndex.value, hasError);
}
} else {
console.log('停')
clearInterval(intervalId!); // 停止定时器
}
}, 3000); // 每隔3秒显示下一个tab
// let timer = setInterval(() => {
// if (activeIndex.value < activeTotalNum.value) {
// activeIndex.value++
// if(activeIndex.value > 1)
// qualified.value = activeIndex.value -1;//演示效果,实际运行时使用后端传来的真实数据即可
// else
// qualified.value = activeIndex.value;
// }
// else if (activeIndex.value === activeTotalNum.value) {
// clearInterval(timer)
// }
// else {
// clearInterval(timer)
// }
// total.value = activeTotalNum.value
// }, 1000);
let timer2 = setInterval(() => {
active.value++
if (active.value++ > 4) {
clearInterval(timer2)
}
}, 1000);
};
// 对外映射
@@ -407,11 +629,6 @@ const handleSubmit = () => {
justify-content: space-between;
margin-bottom: 10px;
}
.right-content {
/* max-height: 400px; */
}
.custom-tabs-label .el-icon {
vertical-align: middle;
}
@@ -422,13 +639,24 @@ const handleSubmit = () => {
}
.dialog-content {
height: 472px;
height: 500px;
}
.el-tabs--border-card {
height: 425px;
height: 470px;
}
.el-icon svg {
color: #ff7171;
}
.container {
display: flex;
}
.dialog-left {
flex: 1;
}
.right-content {
flex: 5;
}
</style>