Files
pqs-9100_client/frontend/src/views/home/components/test.vue

939 lines
28 KiB
Vue
Raw Normal View History

<template>
2024-12-18 20:26:18 +08:00
<div class="dialog" v-bind="dialogBig">
2024-12-18 15:56:59 +08:00
<div class="dialog-title">
2024-12-18 18:53:55 +08:00
<el-progress
style="width: 90%"
:percentage="percentage"
:color="customColors"/>
<el-button
type="primary"
2024-12-20 20:34:39 +08:00
v-if="testStatus=='process' && activeIndex < TEST_TOTAL"
2024-12-18 18:53:55 +08:00
:disabled="activeIndex===0"
:icon="VideoPause"
2024-12-20 20:34:39 +08:00
@click="emit('update:testStatus','paused')">停止检测
2024-12-18 18:53:55 +08:00
</el-button>
<el-button type="success" v-if="activeIndex >= TEST_TOTAL" :icon="Check" disabled>检测完成</el-button>
2024-12-18 18:53:55 +08:00
<el-button
type="warning"
2024-12-20 20:34:39 +08:00
v-if="testStatus=='paused' && activeIndex < TEST_TOTAL"
2024-12-18 18:53:55 +08:00
:icon="Refresh"
2024-12-20 20:20:08 +08:00
@click="emit('update:testStatus','process')"
2024-12-18 18:53:55 +08:00
>继续检测
</el-button>
<el-button type="text" :icon="InfoFilled" @click="showTestLog">检测项进度</el-button>
2024-12-18 18:53:55 +08:00
<!-- <el-button
type="warning"
v-if="activeIndex >= TEST_TOTAL"
2024-12-18 18:53:55 +08:00
:icon="Refresh"
@click="handleReCheck"
>重新检测</el-button
> -->
<!-- <el-button type="danger" :icon="Close" @click="handleFinishTest"
>停止检测</el-button
> -->
</div>
2024-11-20 21:30:05 +08:00
2024-12-18 20:26:18 +08:00
<div class="dialog-content">
2024-12-23 13:23:28 +08:00
<el-table :data="checkResultView" :cell-class-name="tableCell" row-key="scriptId" height="450px"
2024-12-18 18:53:55 +08:00
:header-cell-style="{ background: '#003078', color: '#eee', textAlign: 'center' } " style="width: 100%"
border>
2024-12-23 13:23:28 +08:00
<el-table-column fixed prop="scriptItemName" label="检测项目" width="140px" align="center">
2024-12-18 18:53:55 +08:00
</el-table-column>
<template v-if="chnSum<=MAX_CHN_SUM">
2024-12-21 12:41:06 +08:00
<el-table-column v-for="(item,index1) in deviceList" :key="item.deviceId" :label="item.deviceName"
:min-width="110" align="center">
2024-12-21 12:41:06 +08:00
<el-table-column v-for="(chnItem,index2) in item.chnNum" :key="`${item.deviceId}${chnItem}`"
:label="'通道'+chnItem" align="center">
<template #default="{row}">
<el-tooltip
2024-12-20 10:43:17 +08:00
:content="row.devices[index1].chnResult[index2].resultType==='info' ? '暂无数据' : '点击查看详情'"
placement="top">
2024-12-18 18:53:55 +08:00
<el-button
2024-12-20 10:43:17 +08:00
:disabled="row.devices[index1].chnResult[index2].resultType=='info'"
:type="row.devices[index1].chnResult[index2].resultType"
2024-12-18 18:53:55 +08:00
size="small"
2024-12-23 13:23:28 +08:00
@click="handleClick(row.scriptId,item.deviceId,chnItem)"
2024-12-18 15:56:59 +08:00
>
2024-12-20 10:43:17 +08:00
{{ row.devices[index1].chnResult[index2].resultValue }}
2024-12-18 15:56:59 +08:00
</el-button>
</el-tooltip>
2024-12-18 18:53:55 +08:00
</template>
</el-table-column>
</el-table-column>
</template>
<template v-else>
2024-12-21 12:41:06 +08:00
<el-table-column v-for="(item,index) in deviceList" :key="item.deviceId" :label="item.deviceName"
:min-width="110" align="center">
<template #default="{row}">
<el-tooltip :content="row.devices[index].chnResult[0].resultType==='info' ? '暂无数据' : '点击查看详情'"
placement="top">
2024-12-18 18:53:55 +08:00
<el-button
:disabled="row.devices[index].chnResult[0].resultType=='info'"
:type="row.devices[index].chnResult[0].resultType"
2024-12-18 18:53:55 +08:00
size="small"
2024-12-23 13:23:28 +08:00
@click="handleClick(row.scriptId,item.deviceId,-1)"
2024-12-18 18:53:55 +08:00
>
{{ row.devices[index].chnResult[0].resultValue }}
2024-12-18 18:53:55 +08:00
</el-button>
</el-tooltip>
2024-12-18 15:56:59 +08:00
</template>
2024-12-18 18:53:55 +08:00
</el-table-column>
</template>
2024-12-18 15:56:59 +08:00
2024-12-18 18:53:55 +08:00
</el-table>
</div>
2024-12-20 20:14:52 +08:00
2024-12-20 20:20:08 +08:00
</div>
<el-drawer v-model="drawer" title="检测项进度">
<!-- <div ref="scrollContainer" > -->
<p v-for="(item, index) in testLogList"
:key="index"
:style="{color:item.type==='error'?'#F56C6C':'var(--el-text-color-regular)'}">
{{ item.log }}<br/>
</p>
<!-- </div> -->
2024-12-20 10:21:36 +08:00
</el-drawer>
2024-12-18 18:53:55 +08:00
<resultPopup
:visible="resultDialogVisible"
@update:visible="resultDialogVisible = $event"
></resultPopup>
<dataCheckSingleChannelSingleTestPopup ref="dataCheckSingleChannelSingleTestPopupRef"/>
</template>
<script lang="tsx" setup name="test">
2024-12-20 20:14:52 +08:00
import {Check, InfoFilled, Refresh, VideoPause} from '@element-plus/icons-vue'
import resultPopup from './resultPopup.vue'
import dataCheckSingleChannelSingleTestPopup from './dataCheckSingleChannelSingleTestPopup.vue'
import {reactive, ref} from "vue";
2024-12-18 20:26:18 +08:00
import {dialogBig} from "@/utils/elementBind";
import {CheckData} from "@/api/check/interface"
import {useCheckStore} from "@/stores/modules/check";
2024-12-20 19:14:07 +08:00
const checkStore = useCheckStore()
const drawer = ref(false)
2024-12-20 20:20:08 +08:00
const showTestLog = () => {
2024-12-20 10:21:36 +08:00
drawer.value = true
}
// 总测试项数
const TEST_TOTAL = 12
// 最大通道数
const MAX_CHN_SUM = 10
// 当前进行的测试项索引
2024-11-21 23:02:43 +08:00
const activeIndex = ref(0)
const dataCheckSingleChannelSingleTestPopupRef = ref();
// const currentRow = ref<{
// id: number;
// scriptItemName: string;
// name: string;
// address: string;
// hasChildren?: boolean;
// children?: User[]
// } | null>(null);
2024-11-20 21:30:05 +08:00
// const currentRow = ref(null); // 用于存储当前选中的行
const deviceList = reactive<CheckData.Device[]>([
// {
// deviceID: '1',
// deviceName: '240001',
// chnNum: 1,
// monitorIdx: 1,
// label: '240001',
// prop: 'Result1',
// },
// {
// deviceID: '2',
// deviceName: '240002',
// chnNum: 1,
// monitorIdx: 2,
// label: '240002',
// prop: 'Result2',
// },
// {
// deviceID: '3',
// deviceName: '240003',
// chnNum: 2,
// monitorIdx: 1,
// label: '240003',
// prop: 'Result3',
// },
// {
// deviceID: '4',
// deviceName: '240004',
// chnNum: 4,
// monitorIdx: 2,
// label: '240004',
// prop: 'Result4',
// }
2024-11-20 21:30:05 +08:00
])
2024-12-13 08:56:42 +08:00
2024-12-18 15:56:59 +08:00
// 总通道数
const chnSum = computed(() => {
let sum = 0
deviceList.forEach((item) => {
2024-12-18 15:56:59 +08:00
sum += item.chnNum
})
return sum
})
onBeforeMount(() => {
initScriptData()
initDeviceList()
initCheckResult()
})
2024-12-13 08:56:42 +08:00
// 检测脚本数据
const scriptData = reactive<CheckData.ScriptItem[]>([])
// 初始化检测脚本数据
const initScriptData = () => {
Object.assign(scriptData, [
{
id: '1',
scriptItemName: '频率'
},
{
id: '2',
scriptItemName: '电压'
},
{
id: '3',
scriptItemName: '谐波电压'
},
{
id: '4',
scriptItemName: '谐波电流'
},
{
id: '5',
scriptItemName: '谐波有功功率'
},
{
id: '6',
scriptItemName: '间谐波电压'
},
{
id: '7',
scriptItemName: '间谐波电流'
},
{
id: '8',
scriptItemName: '暂态'
},
{
id: '9',
scriptItemName: '电流'
},
{
id: '10',
scriptItemName: '电压不平衡度'
},
{
id: '11',
scriptItemName: '电流不平衡度'
},
{
id: '12',
scriptItemName: '短时闪变'
},
])
}
// 初始化设备列表
const initDeviceList = () => {
checkStore.devices.forEach(item => {
deviceList.push({
2024-12-21 12:41:06 +08:00
deviceId: item.deviceId,
deviceName: item.deviceName,
chnNum: item.chnNum,
})
})
}
// 真正的检测结果(详细到通道)
const checkResult = reactive<CheckData.ScriptChnItem[]>([])
// 初始化检测结果 (详细到通道)
const initCheckResult = () => {
scriptData.forEach(item => {
// 处理当前节点的数据
let temp: CheckData.ScriptChnItem = {
2024-12-21 12:41:06 +08:00
scriptId: item.id,
scriptItemName: item.scriptItemName,
devices: []
}
for (let i = 0; i < deviceList?.length; i++) {
let tempChnResult: CheckData.ChnCheckResultEnum[] = []
for (let j = 0; j < deviceList[i].chnNum; j++) {
tempChnResult.push(CheckData.ChnCheckResultEnum.UNKNOWN)
2024-11-21 23:02:43 +08:00
}
temp.devices.push({
2024-12-21 12:41:06 +08:00
deviceId: deviceList[i].deviceId,
deviceName: deviceList[i].deviceName,
chnResult: tempChnResult
})
}
checkResult.push(temp)
})
}
// 更新检测结果(详细到通道)
const updateCheckResult = (data: CheckData.ScriptChnItem) => {
2024-12-21 12:41:06 +08:00
const {scriptId} = {...data}
checkResult.forEach(item => {
2024-12-21 12:41:06 +08:00
if (item.scriptId == scriptId) {
item.devices.forEach((device, index) => {
device.chnResult = [...data.devices[index].chnResult]
})
}
})
}
// 用来展示的检测结果
const checkResultView = computed(() => {
2024-11-21 23:02:43 +08:00
let result: CheckData.ScriptChnViewItem[] = checkResult.map(item => {
let temp: CheckData.ScriptChnViewItem = {
2024-12-21 12:41:06 +08:00
scriptId: item.scriptId,
scriptItemName: item.scriptItemName,
devices: []
}
item.devices.forEach(device => {
let tempChnBtnResult: CheckData.ButtonResult[] = []
if (chnSum.value <= MAX_CHN_SUM) {
for (let j = 0; j < device.chnResult.length; j++) {
if (device.chnResult[j] == CheckData.ChnCheckResultEnum.UNKNOWN) {
tempChnBtnResult.push({resultType: 'info', resultValue: '-'})
} else if (device.chnResult[j] == CheckData.ChnCheckResultEnum.FAIL) {
tempChnBtnResult.push({resultType: 'danger', resultValue: '×'})
} else {
tempChnBtnResult.push({resultType: 'success', resultValue: '√'})
}
}
} else {
let tempChnResult: CheckData.ChnCheckResultEnum = device.chnResult[0]
if (device.chnResult.some(item => item == CheckData.ChnCheckResultEnum.FAIL)) {
tempChnResult = CheckData.ChnCheckResultEnum.FAIL
}
if (tempChnResult == CheckData.ChnCheckResultEnum.UNKNOWN) {
tempChnBtnResult.push({resultType: 'info', resultValue: '-'})
} else if (tempChnResult == CheckData.ChnCheckResultEnum.FAIL) {
tempChnBtnResult.push({resultType: 'danger', resultValue: '×'})
} else {
tempChnBtnResult.push({resultType: 'success', resultValue: '√'})
}
}
temp.devices.push({
2024-12-21 12:41:06 +08:00
deviceId: device.deviceId,
deviceName: device.deviceName,
chnResult: tempChnBtnResult
})
})
return temp
})
return result
})
const scrollContainer = ref<HTMLElement | null>(null); // 声明 scrollContainer
2024-11-21 23:02:43 +08:00
const scrollToBottom = () => {
2024-12-18 18:53:55 +08:00
if (scrollContainer.value) {
scrollContainer.value.scrollTop = scrollContainer.value.scrollHeight;
}
};
2024-11-21 23:02:43 +08:00
function getRandomInt(max: number): number {
return Math.floor(Math.random() * max)
2024-11-21 23:02:43 +08:00
}
2024-12-11 17:46:59 +08:00
//判断该检测项(例如 频率准确度检测)是否全部合格(所有设备所有通道所有子检测项目全部合格为合格,否则为不合格)
2024-12-18 18:53:55 +08:00
function getItemCheckResult(index: number): boolean {
let items = errorCheckItem.filter((item) => item === index.toString())
2024-12-18 18:53:55 +08:00
if (items.length > 0) {
2024-12-11 17:46:59 +08:00
return false
} else {
2024-12-11 17:46:59 +08:00
return true
}
2024-12-11 17:46:59 +08:00
}
2024-12-18 18:53:55 +08:00
2024-12-11 17:46:59 +08:00
//测试项开始检测时间(或继续检测时间)
const startData = ref(new Date())
//测试项检测结束时间(或暂停时的时间)
2024-12-18 18:53:55 +08:00
const endData = ref(new Date())
const timeDifference = ref(0)
2024-12-11 17:46:59 +08:00
2024-12-18 18:53:55 +08:00
function getTimeDifference(timeDifference: number): string {
2024-12-11 17:46:59 +08:00
// 将时间差转换为天、小时、分钟、秒
const millisecondsPerDay = 1000 * 60 * 60 * 24;
const millisecondsPerHour = 1000 * 60 * 60;
const millisecondsPerMinute = 1000 * 60;
const millisecondsPerSecond = 1000;
const days = Math.floor(timeDifference / millisecondsPerDay);
const hours = Math.floor((timeDifference % millisecondsPerDay) / millisecondsPerHour);
const minutes = Math.floor((timeDifference % millisecondsPerHour) / millisecondsPerMinute);
const seconds = Math.floor((timeDifference % millisecondsPerMinute) / millisecondsPerSecond);
2024-12-18 18:53:55 +08:00
if (days > 0) {
2024-12-11 18:48:54 +08:00
return `: ${days} 天, ${hours} 小时, ${minutes} 分钟, ${seconds}`
2024-12-18 18:53:55 +08:00
} else if (hours > 0) {
2024-12-11 18:48:54 +08:00
return `: ${hours} 小时, ${minutes} 分钟, ${seconds}`
2024-12-18 18:53:55 +08:00
} else {
2024-12-11 18:48:54 +08:00
return `: ${minutes} 分钟, ${seconds}`
}
2024-12-11 17:46:59 +08:00
}
// 用来存放检测日志
const testLogList = ref<CheckData.LogItem[]>([{type: 'info', log: '暂无数据,等待检测开始'}])
// 更新日志
2024-11-21 23:02:43 +08:00
const updateLog = () => {
const currentTime = ref(new Date().toLocaleString());
let timeDifferenceItem = 0
2024-11-21 23:02:43 +08:00
2024-12-18 18:53:55 +08:00
switch (activeIndex.value) {
case 1:
2024-12-11 18:48:54 +08:00
timeDifference.value = 0;
2024-11-21 23:02:43 +08:00
testLogList.value.length = 0; // 清空数组
testLogList.value.push({
type: 'info',
2024-12-11 18:48:54 +08:00
log: currentTime.value + ':检测开始',
2024-11-21 23:02:43 +08:00
})
2024-12-11 18:48:54 +08:00
startData.value = new Date();
2024-11-21 23:02:43 +08:00
break;
2024-12-18 18:53:55 +08:00
case 2:
2024-12-11 18:48:54 +08:00
endData.value = new Date();
timeDifferenceItem = endData.value.getTime() - startData.value.getTime();
timeDifference.value += timeDifferenceItem
2024-12-18 18:53:55 +08:00
if (getItemCheckResult(activeIndex.value - 1)) {
2024-12-11 17:46:59 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'info',
log: currentTime.value + ':频率准确度检测合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
} else {
2024-12-11 17:46:59 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'error',
log: currentTime.value + ':频率准确度检测不合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
2024-12-11 17:46:59 +08:00
}
2024-12-11 18:48:54 +08:00
startData.value = new Date();
2024-11-21 23:02:43 +08:00
break;
2024-12-18 18:53:55 +08:00
case 3:
2024-12-11 18:48:54 +08:00
endData.value = new Date();
timeDifferenceItem = endData.value.getTime() - startData.value.getTime();
timeDifference.value += timeDifferenceItem
2024-12-18 18:53:55 +08:00
if (getItemCheckResult(activeIndex.value - 1)) {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'info',
log: currentTime.value + ':电压准确度检测合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
} else {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'error',
log: currentTime.value + ':电压准确度检测不合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
2024-12-11 18:48:54 +08:00
}
startData.value = new Date();
break;
2024-12-18 18:53:55 +08:00
case 4:
2024-12-11 18:48:54 +08:00
endData.value = new Date();
timeDifferenceItem = endData.value.getTime() - startData.value.getTime();
timeDifference.value += timeDifferenceItem
2024-12-18 18:53:55 +08:00
if (getItemCheckResult(activeIndex.value - 1)) {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'info',
log: currentTime.value + ':谐波电压准确度检测合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
} else {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'error',
log: currentTime.value + ':谐波电压准确度检测不合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
2024-12-11 18:48:54 +08:00
}
startData.value = new Date();
break;
2024-12-18 18:53:55 +08:00
case 5:
2024-12-11 18:48:54 +08:00
endData.value = new Date();
timeDifferenceItem = endData.value.getTime() - startData.value.getTime();
timeDifference.value += timeDifferenceItem
2024-12-18 18:53:55 +08:00
if (getItemCheckResult(activeIndex.value - 1)) {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'info',
log: currentTime.value + ':谐波电流准确度检测合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
} else {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'error',
log: currentTime.value + ':谐波电流准确度检测不合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
2024-12-11 18:48:54 +08:00
}
startData.value = new Date();
break;
2024-12-18 18:53:55 +08:00
case 6:
2024-12-11 18:48:54 +08:00
endData.value = new Date();
timeDifferenceItem = endData.value.getTime() - startData.value.getTime();
timeDifference.value += timeDifferenceItem
2024-12-18 18:53:55 +08:00
if (getItemCheckResult(activeIndex.value - 1)) {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'info',
log: currentTime.value + ':谐波有功功率准确度检测合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
} else {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'error',
log: currentTime.value + ':谐波有功功率准确度检测不合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
2024-12-11 18:48:54 +08:00
}
startData.value = new Date();
break;
2024-12-18 18:53:55 +08:00
case 7:
2024-12-11 18:48:54 +08:00
endData.value = new Date();
timeDifferenceItem = endData.value.getTime() - startData.value.getTime();
timeDifference.value += timeDifferenceItem
2024-12-18 18:53:55 +08:00
if (getItemCheckResult(activeIndex.value - 1)) {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'info',
log: currentTime.value + ':间谐波电压准确度检测合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
} else {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'error',
log: currentTime.value + ':间谐波电压准确度检测不合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
2024-12-11 18:48:54 +08:00
}
startData.value = new Date();
break;
2024-12-18 18:53:55 +08:00
case 8:
2024-12-11 18:48:54 +08:00
endData.value = new Date();
timeDifferenceItem = endData.value.getTime() - startData.value.getTime();
timeDifference.value += timeDifferenceItem
2024-12-18 18:53:55 +08:00
if (getItemCheckResult(activeIndex.value - 1)) {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'info',
log: currentTime.value + ':间谐波电流准确度检测合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
} else {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'error',
log: currentTime.value + ':间谐波电流准确度检测不合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
2024-12-11 18:48:54 +08:00
}
startData.value = new Date();
break;
2024-12-18 18:53:55 +08:00
case 9:
2024-12-11 18:48:54 +08:00
endData.value = new Date();
timeDifferenceItem = endData.value.getTime() - startData.value.getTime();
timeDifference.value += timeDifferenceItem
2024-12-18 18:53:55 +08:00
if (getItemCheckResult(activeIndex.value - 1)) {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'info',
log: currentTime.value + ':暂态准确度检测合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
} else {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'error',
log: currentTime.value + ':暂态准确度检测不合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
2024-12-11 18:48:54 +08:00
}
startData.value = new Date();
break;
2024-12-18 18:53:55 +08:00
case 10:
2024-12-11 18:48:54 +08:00
endData.value = new Date();
timeDifferenceItem = endData.value.getTime() - startData.value.getTime();
timeDifference.value += timeDifferenceItem
2024-12-18 18:53:55 +08:00
if (getItemCheckResult(activeIndex.value - 1)) {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'info',
log: currentTime.value + ':电流准确度检测合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
} else {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'error',
log: currentTime.value + ':电流准确度检测不合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
2024-12-11 18:48:54 +08:00
}
startData.value = new Date();
break;
2024-12-18 18:53:55 +08:00
case 11:
2024-12-11 18:48:54 +08:00
endData.value = new Date();
timeDifferenceItem = endData.value.getTime() - startData.value.getTime();
timeDifference.value += timeDifferenceItem
2024-12-18 18:53:55 +08:00
if (getItemCheckResult(activeIndex.value - 1)) {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'info',
log: currentTime.value + ':电压不平衡度检测合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
} else {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'error',
log: currentTime.value + ':电压不平衡度检测不合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
2024-12-11 18:48:54 +08:00
}
startData.value = new Date();
break;
2024-12-18 18:53:55 +08:00
case 12:
2024-12-11 18:48:54 +08:00
endData.value = new Date();
timeDifferenceItem = endData.value.getTime() - startData.value.getTime();
timeDifference.value += timeDifferenceItem
2024-12-18 18:53:55 +08:00
if (getItemCheckResult(activeIndex.value - 1)) {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'info',
log: currentTime.value + ':电流不平衡度检测合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
} else {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'error',
log: currentTime.value + ':电流不平衡度检测不合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
2024-12-11 18:48:54 +08:00
}
startData.value = new Date();
break;
2024-12-18 18:53:55 +08:00
case 13:
2024-12-11 18:48:54 +08:00
endData.value = new Date();
timeDifferenceItem = endData.value.getTime() - startData.value.getTime();
timeDifference.value += timeDifferenceItem
2024-12-18 18:53:55 +08:00
if (getItemCheckResult(activeIndex.value - 1)) {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'info',
log: currentTime.value + ':闪变准确度检测合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
} else {
2024-12-11 18:48:54 +08:00
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'error',
log: currentTime.value + ':闪变准确度检测不合格,用时' + getTimeDifference(timeDifferenceItem),
2024-12-18 18:53:55 +08:00
})
2024-12-11 18:48:54 +08:00
}
2024-12-18 15:56:59 +08:00
2024-12-11 18:48:54 +08:00
testLogList.value.push({
type: 'info',
2024-12-18 18:53:55 +08:00
log: currentTime.value + ':检测结束,总用时' + getTimeDifference(timeDifference.value),
2024-12-11 18:48:54 +08:00
})
2024-11-21 23:02:43 +08:00
break;
2024-12-18 18:53:55 +08:00
}
scrollToBottom();
2024-11-21 23:02:43 +08:00
}
// 用来存放检测出现失败的测试项id。只要有一个通道检测不合格则该检测项的id会被加入该数组。
2024-12-20 20:34:39 +08:00
const errorCheckItem = reactive<string[]>([]);
2024-11-25 21:11:10 +08:00
// 动态获取表格单元格样式
2024-12-18 18:53:55 +08:00
function tableCell({row, columnIndex}) {
2024-12-23 13:23:28 +08:00
let items = errorCheckItem.filter((item) => item === row.scriptId)
2024-12-05 21:33:52 +08:00
2024-12-18 18:53:55 +08:00
if (columnIndex === 0 && items.length > 0) {
2024-12-05 21:33:52 +08:00
return 'warning-row'
}
2024-12-18 18:53:55 +08:00
if (columnIndex === 0) {
2024-12-05 21:33:52 +08:00
return 'header-row'
}
2024-11-25 21:11:10 +08:00
}
2024-11-20 21:30:05 +08:00
// 百分比
const percentage = ref(0);
const customColors = [
2024-12-18 18:53:55 +08:00
{color: "#5cb87a", percentage: 100}, //绿
];
const resultDialogVisible = ref(false)
2024-11-20 21:30:05 +08:00
function clear() {
}
2024-12-23 13:23:28 +08:00
const updateCheckResultView = (scriptId: string) => {
const temp = simulateCheck(scriptId)
updateCheckResult(temp)
// traverseTableData(scriptData, id);
};
// 模拟检测 todo 可移除
2024-12-21 12:41:06 +08:00
const simulateCheck = (scriptId: string) => {
let devices = []
devices = deviceList.map(item => {
let tempChnResult: CheckData.ChnCheckResultEnum[] = []
for (let i = 0; i < item.chnNum; i++) {
tempChnResult.push(CheckData.ChnCheckResultEnum.SUCCESS)
}
let randomNum = getRandomInt(item.chnNum * 2)
if (activeIndex.value >= 4 && activeIndex.value <= 6) {
if (randomNum <= item.chnNum) {
tempChnResult[randomNum] = CheckData.ChnCheckResultEnum.FAIL
2024-12-21 12:41:06 +08:00
errorCheckItem.push(scriptId)
2024-11-21 23:02:43 +08:00
}
}
2024-11-20 21:30:05 +08:00
return {
2024-12-21 12:41:06 +08:00
deviceId: item.deviceId,
deviceName: item.deviceName,
chnResult: tempChnResult,
2024-11-21 23:02:43 +08:00
}
})
2024-11-20 21:30:05 +08:00
let tempScriptChnItem: CheckData.ScriptChnItem = {
2024-12-21 12:41:06 +08:00
scriptId,
devices,
}
return tempScriptChnItem
}
2024-11-20 21:30:05 +08:00
2024-11-25 21:11:10 +08:00
const handleReCheck = () => {
2024-12-18 18:53:55 +08:00
activeIndex.value = 0;
percentage.value = 0;
// tableData.value.length = 0;
2024-12-18 18:53:55 +08:00
testLogList.value.length = 0;
errorCheckItem.length = 0;
//tableData.value = JSON.parse(JSON.stringify(operatorTableData.value));
2024-12-18 18:53:55 +08:00
resumeTimer()
2024-11-25 21:11:10 +08:00
};
// 用来保存定时器
2024-12-20 20:20:08 +08:00
const timer: any = ref("");
// 处理暂停、继续按钮点击事件
const handlePauseOrContinue = () => {
2024-12-11 19:12:04 +08:00
const currentTime = ref(new Date().toLocaleString());
2024-11-20 21:30:05 +08:00
2024-12-20 20:34:39 +08:00
if (testStatus.value == "paused") {
2024-12-11 19:12:04 +08:00
endData.value = new Date();
const Pausetime = endData.value.getTime() - startData.value.getTime();
timeDifference.value += Pausetime
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'info',
log: currentTime.value + ':暂停检测',
})
2024-11-21 23:02:43 +08:00
pauseTimer()
2024-12-20 20:34:39 +08:00
}
if(testStatus.value == "process"){
2024-12-11 19:12:04 +08:00
startData.value = new Date();
testLogList.value.push({
2024-12-18 18:53:55 +08:00
type: 'info',
log: currentTime.value + ':继续检测',
})
2024-11-21 23:02:43 +08:00
resumeTimer()
}
};
2024-12-18 15:56:59 +08:00
// 点击查看设备通道检测详情。参数1设备信息参数2通道号-1代表查看全部通道
2024-12-23 13:23:28 +08:00
const handleClick = (scriptId:string,deviceId: any, chnNum: number) => {
dataCheckSingleChannelSingleTestPopupRef.value?.open(scriptId, deviceId, chnNum);
};
2024-12-20 19:14:07 +08:00
const props = defineProps({
2024-12-18 18:53:55 +08:00
testStatus: {
2024-12-20 19:14:07 +08:00
type: String,
2024-12-20 20:14:52 +08:00
default: 'waiting'
2024-12-20 19:14:07 +08:00
}
})
const testStatus = toRef(props, 'testStatus');
//监听goods_sn的变化
watch(testStatus, function (newValue, oldValue) {
if (newValue == 'start') {
2024-12-20 20:20:08 +08:00
emit('update:testStatus', 'process')
2024-12-20 19:14:07 +08:00
startTimer()
}
if (newValue == 'paused' && oldValue == 'process') {
handlePauseOrContinue()
}
if (newValue === 'process' && oldValue == 'paused') {
handlePauseOrContinue()
2024-11-25 21:11:10 +08:00
}
})
const emit = defineEmits(['update:testStatus']);
2024-11-25 21:11:10 +08:00
const startTimer = () => {
//if (timer.value !== null) return; // 如果定时器已经启动,则不再重复启动
timer.value = setInterval(() => {
if (activeIndex.value <= TEST_TOTAL) {
2024-12-18 18:53:55 +08:00
activeIndex.value++;
updateLog()
switch (activeIndex.value) {
case 1:
// todo 向后端获取检测结果
// updateCheckResult(null)
// updateCheckResultView("1-1-1")
// updateCheckResultView("1-1-2")
// updateCheckResultView("1-1-3")
// updateCheckResultView("1-1-4")
// updateCheckResultView("1-1")
// updateCheckResultView("1-2-1")
// updateCheckResultView("1-2")
// updateCheckResultView("1-3-1")
// updateCheckResultView("1-3")
updateCheckResultView("1")
2024-12-18 18:53:55 +08:00
break;
case 2:
// updateCheckResultView("2-1-1")
// updateCheckResultView("2-1-2")
// updateCheckResultView("2-1-3")
// updateCheckResultView("2-1-4")
// updateCheckResultView("2-1-5")
// updateCheckResultView("2-1")
// updateCheckResultView("2-2-1")
// updateCheckResultView("2-2")
// updateCheckResultView("2-3-1")
// updateCheckResultView("2-3")
updateCheckResultView("2")
2024-12-18 18:53:55 +08:00
break;
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
updateCheckResultView(activeIndex.value.toString())
2024-12-18 18:53:55 +08:00
break;
}
2024-12-05 21:33:52 +08:00
2024-12-18 18:53:55 +08:00
if (percentage.value < 100) {
percentage.value = Math.trunc(activeIndex.value / TEST_TOTAL * 100);
2024-12-18 18:53:55 +08:00
} else {
percentage.value = 100;
clearInterval(timer.value)
timer.value = null;
2024-12-20 20:20:08 +08:00
emit('update:testStatus', 'success')
2024-11-29 13:45:48 +08:00
2024-12-18 18:53:55 +08:00
ElMessageBox.alert('检测全部结束,你可以停留在此页面查看检测结果,或返回首页进行复检、报告生成和归档等操作', '检测完成', {
2024-11-25 21:11:10 +08:00
// if you want to disable its autofocus
// autofocus: false,
confirmButtonText: '确定',
})
clear();
2024-12-18 18:53:55 +08:00
}
} else {
clearInterval(timer.value)
timer.value = null;
2024-12-20 20:20:08 +08:00
emit('update:testStatus', 'success')
2024-12-18 18:53:55 +08:00
scrollToBottom();
}
2024-11-25 21:11:10 +08:00
}, 2000);
};
const pauseTimer = () => {
if (timer.value) {
2024-11-25 21:11:10 +08:00
clearInterval(timer.value);
timer.value = null;
}
console.log('暂停中')
2024-11-25 21:11:10 +08:00
};
const resumeTimer = () => {
if (!timer.value) {
2024-11-25 21:11:10 +08:00
startTimer();
}
console.log('开始继续检测')
2024-11-25 21:11:10 +08:00
};
2024-12-20 20:34:39 +08:00
//完成检测
const handleFinishTest = () => {
resultDialogVisible.value = true
ElMessage.success("完成检测");
};
2024-11-25 21:11:10 +08:00
</script>
2024-11-25 21:11:10 +08:00
<style scoped lang="scss">
2024-12-18 15:56:59 +08:00
2024-12-05 21:33:52 +08:00
:deep(.el-table .header-row) {
2024-11-25 21:11:10 +08:00
// background-color:var(--el-color-warning-light-9);
2024-12-18 18:53:55 +08:00
background-color: #f5f7fa;
2024-11-25 21:11:10 +08:00
// color:red;
// font-size:30px;
// --el-table-tr-bg-color: var(--el-color-warning-light-9);
}
2024-12-18 18:53:55 +08:00
2024-12-05 21:33:52 +08:00
:deep(.el-table .warning-row) {
// background-color:var(--el-color-warning-light-9);
//background-color:#bed96557;
2024-12-18 18:53:55 +08:00
color: red;
2024-12-05 21:33:52 +08:00
// font-size:30px;
// --el-table-tr-bg-color: var(--el-color-warning-light-9);
2024-12-06 15:06:38 +08:00
// background-color:#f5f7fa;
// position: relative;
2024-12-05 21:33:52 +08:00
}
2024-12-06 15:06:38 +08:00
// :deep(.el-table .warning-row::before) {
// content: '*'; /* 必须设置content属性 */
// position: absolute;
// color:red;
// background-color:#f5f7fa;
// }
2024-11-25 21:11:10 +08:00
.el-table .success-row {
--el-table-tr-bg-color: var(--el-color-success-light-9);
}
2024-12-18 18:53:55 +08:00
.dialog {
display: flex;
flex-direction: column;
2024-12-18 20:26:18 +08:00
overflow-y: hidden;
overflow-x: hidden;
2024-11-25 21:11:10 +08:00
}
2024-12-18 18:53:55 +08:00
.dialog-title {
display: flex;
justify-content: space-between;
align-items: center;
margin-right: 10px;
margin-bottom: 10px;
2024-11-25 21:11:10 +08:00
}
2024-12-11 19:12:04 +08:00
2024-12-18 18:53:55 +08:00
.dialog-content {
2024-12-05 15:22:46 +08:00
max-height: 450px;
2024-12-18 20:26:18 +08:00
overflow-y: hidden;
2024-11-25 21:11:10 +08:00
}
2024-12-18 18:53:55 +08:00
:deep(.el-collapse-item__header) {
height: 30px;
}
2024-12-11 19:12:04 +08:00
2024-12-18 18:53:55 +08:00
.dialog-log {
2024-12-11 19:12:04 +08:00
height: 50px;
2024-12-18 20:26:18 +08:00
overflow-y: hidden;
2024-11-25 21:11:10 +08:00
// flex-grow: 1;
// display: flex;
// flex-direction: column-reverse;
2024-12-11 19:12:04 +08:00
p {
margin: 5px 0;
font-size: 14px;
}
}
2024-11-21 23:02:43 +08:00
</style>
2024-12-18 20:26:18 +08:00
2024-12-05 15:22:46 +08:00
<style lang="scss" scoped>
:deep(.el-button--small) {
2024-12-18 18:53:55 +08:00
height: 20px !important;
width: 20px !important;
2024-12-05 15:22:46 +08:00
}
2024-12-18 18:53:55 +08:00
:deep(.el-table--default td ) {
2024-12-05 15:22:46 +08:00
padding: 5px 0 !important;
}
2024-12-20 10:21:36 +08:00
2024-12-05 15:22:46 +08:00
</style>