修改右侧表格结构

This commit is contained in:
caozehui
2025-01-06 08:51:14 +08:00
parent 99bc54349b
commit 1be15ee849
3 changed files with 294 additions and 126 deletions

View File

@@ -8,25 +8,58 @@ export namespace CheckData {
} }
export interface PhaseCheckResult { export interface PhaseCheckResult {
standardValue: number, // 检测源定值-标准值
resultData: number,
// 装置原始数据-被检值
data: number,
// 第几次谐波
num?: number,
//符合、不符合
isData?: number,
//最大误差值
radius?: string,
} }
/** /**
* 用于定义 查看(设备)通道检测结果 类型 * 用于定义 查看(设备)通道检测结果响应数据 类型
*/
export interface ResCheckResult {
dataA?: PhaseCheckResult | null,
dataB?: PhaseCheckResult | null,
dataC?: PhaseCheckResult | null,
dataT?: PhaseCheckResult | null,
// 第几次谐波
//num: number | null,
//符合、不符合
isData: number,
//最大误差值
radius: string,
}
/**
* 用于定义 查看(设备)通道检测结果表格展示数据 类型
*/ */
export interface CheckResult { export interface CheckResult {
chnNum: string, aStd?: number,
standardValue: number, aData?: number,
dataA?: number, aError?: number,
A_errValue?: number, bStd?: number,
B?: number, bData?: number,
B_errValue?: number, bError?: number,
C?: number, cStd?: number,
C_errValue?: number, cData?: number,
T?: number, cError?: number,
T_errValue?: number, tStd?: number,
maxErrVaule: number, tData?: number,
result: string, tError?: number,
//最大误差值
maxError?: string,
//符合、不符合
result?: number
} }
/** /**

View File

@@ -1,73 +1,72 @@
<template> <template>
<div class="table-main"> <div class="table-main">
<el-table :data="tableData" height="335px" :header-cell-style="{ textAlign: 'center' } " <el-table v-if="info.length <= 0" :data="tableData" height="335px" :header-cell-style="{ textAlign: 'center' } "
:cell-style="{ textAlign: 'center' }"> :cell-style="{ textAlign: 'center' }">
<!-- <el-table-column prop="chnNum" label="通道号" width="80">--> <!-- <el-table-column prop="chnNum" label="通道号" width="80">-->
<!-- <template #default="{row}">--> <!-- <template #default="{row}">-->
<!-- {{ '通道' + row.chnNum }}--> <!-- {{ '通道' + row.chnNum }}-->
<!-- </template>--> <!-- </template>-->
<!-- </el-table-column>--> <!-- </el-table-column>-->
<template v-if="phaseFlag === 0"> <template v-if="phaseFlag === 0">
<el-table-column :label="`A${unit}`"> <el-table-column :label="`A${unit}`">
<el-table-column prop="standardValue" width="74" label="标准值V"/> <el-table-column prop="aStd" width="79" label="标准值"/>
<el-table-column prop="A" width="74" label="被检值"> <el-table-column prop="aData" width="79" label="被检值"/>
<el-table-column prop="aError" width="79" label="误差值"/>
</el-table-column>
<el-table-column prop="A_errValue" width="74" label="误差值">
</el-table-column>
</el-table-column> </el-table-column>
<el-table-column :label="`B${unit}`"> <el-table-column :label="`B${unit}`">
<el-table-column prop="standardValue" width="74" label="标准值V"/> <el-table-column prop="bStd" width="79" label="标准值"/>
<el-table-column prop="B" width="74" label="被检值"> <el-table-column prop="bData" width="79" label="被检值"/>
<el-table-column prop="bError" width="79" label="误差值"/>
</el-table-column>
<el-table-column prop="B_errValue" width="74" label="误差值">
</el-table-column>
</el-table-column> </el-table-column>
<el-table-column :label="`C${unit}`"> <el-table-column :label="`C${unit}`">
<el-table-column prop="standardValue" width="74" label="标准值V"/> <el-table-column prop="cStd" width="79" label="标准值"/>
<el-table-column prop="C" width="74" label="被检值"> <el-table-column prop="cData" width="79" label="被检值"/>
<el-table-column prop="cError" width="79" label="误差值"/>
</el-table-column>
<el-table-column prop="C_errValue" width="74" label="误差值">
</el-table-column>
</el-table-column>
<el-table-column prop="maxErrVaule" label="最大误差V">
</el-table-column> </el-table-column>
<el-table-column prop="maxError" :label="`最大误差(${unit}`"/>
<el-table-column prop="result" label="检测结果" width="70"> <el-table-column prop="result" label="检测结果" width="70">
<template #default="scope"> <template #default="scope">
<el-tag type="danger" v-if="scope.row.result === '不合'">{{ scope.row.result }}</el-tag> <el-tag type="danger" v-if="scope.row.result === '不合'">{{ scope.row.result }}</el-tag>
<span v-if="scope.row.result != '不合'">{{ scope.row.result }}</span> <span v-if="scope.row.result != '不合'">{{ scope.row.result }}</span>
</template> </template>
</el-table-column> </el-table-column>
</template> </template>
<template v-if="phaseFlag === 1"> <template v-if="phaseFlag === 1">
<el-table-column :label="`T${unit}`"> <el-table-column :label="`T${unit}`">
<el-table-column prop="standardValue" label="标准值V"/> <el-table-column prop="tStd" label="标准值V"/>
<el-table-column prop="T" label="被检值"> <el-table-column prop="tData" label="被检值"/>
<el-table-column prop="tError" label="误差值"/>
</el-table-column>
<el-table-column prop="T_errValue" label="误差值">
</el-table-column>
</el-table-column>
<el-table-column prop="maxErrVaule" label="最大误差V">
</el-table-column> </el-table-column>
<el-table-column prop="maxError" label="最大误差V"/>
<el-table-column prop="result" label="检测结果"> <el-table-column prop="result" label="检测结果">
<template #default="scope"> <template #default="scope">
<el-tag type="danger" v-if="scope.row.result === '不合'">{{ scope.row.result }}</el-tag> <el-tag type="danger" v-if="scope.row.result === '不合'">{{ scope.row.result }}</el-tag>
<span v-if="scope.row.result != '不合'">{{ scope.row.result }}</span> <span v-if="scope.row.result != '不合'">{{ scope.row.result }}</span>
</template> </template>
</el-table-column> </el-table-column>
</template> </template>
</el-table> </el-table>
<el-collapse v-else v-model="activeNames">
<el-collapse-item v-for="(item, index) in info" :key="index" :title="item.title" :name="item.name">
<el-table :data="[tableData[index]]" :header-cell-style="{ textAlign: 'center' } "
:cell-style="{ textAlign: 'center' }">
<el-table-column :label="`T${unit}`">
<el-table-column prop="tStd" label="标准值V"/>
<el-table-column prop="tData" label="被检值"/>
<el-table-column prop="tError" label="误差值"/>
</el-table-column>
<el-table-column prop="maxError" label="最大误差V"/>
<el-table-column prop="result" label="检测结果">
<template #default="scope">
<el-tag type="danger" v-if="scope.row.result === '不符合'">{{ scope.row.result }}</el-tag>
<span v-if="scope.row.result != '不符合'">{{ scope.row.result }}</span>
</template>
</el-table-column>
</el-table>
</el-collapse-item>
</el-collapse>
</div> </div>
@@ -78,9 +77,12 @@ import {defineProps} from 'vue';
import {CheckData} from "@/api/check/interface"; import {CheckData} from "@/api/check/interface";
const {tableData} = defineProps<{ const {tableData} = defineProps<{
info: { title: string, name: string }[],
tableData: CheckData.CheckResult[], tableData: CheckData.CheckResult[],
}>(); }>();
const activeNames = ref(["Voltage"])
const unit = computed(() => { const unit = computed(() => {
return "V" return "V"
}) })
@@ -88,7 +90,7 @@ const unit = computed(() => {
const phaseFlag = computed(() => { const phaseFlag = computed(() => {
let result = 0; let result = 0;
if (tableData.length > 0) { if (tableData.length > 0) {
result = !tableData[0].T ? 0:1; result = !tableData[0].tData ? 0 : 1;
} }
return result; return result;
}) })

View File

@@ -22,6 +22,12 @@
:value="item.value"/> :value="item.value"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item v-if="harmNumList.length" label='谐波次数'>
<el-select v-model="currentHarmNum">
<el-option v-for="item in harmNumList" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
</el-form-item>
</el-form> </el-form>
</div> </div>
@@ -53,7 +59,8 @@
<div class="content-right"> <div class="content-right">
<div class="content-right-title"> <div class="content-right-title">
<span class="content-right-title-text">当前检测项目</span> <span class="content-right-title-text">当前检测项目</span>
<el-popover trigger="hover" :content="currentDesc? currentDesc : '无'" popper-class="popover-class" width="33%" placement="right"> <el-popover trigger="hover" :content="currentDesc? currentDesc : '无'" popper-class="popover-class"
width="32%" placement="right-start">
<template #reference> <template #reference>
<el-button type="text" style="font-size: 16px;"> <el-button type="text" style="font-size: 16px;">
{{ currentScriptTypeName ? currentScriptTypeName : '无' }} {{ currentScriptTypeName ? currentScriptTypeName : '无' }}
@@ -68,7 +75,7 @@
<div class="content-right-Tabs"> <div class="content-right-Tabs">
<el-tabs type="border-card" v-model="activeTab"> <el-tabs type="border-card" v-model="activeTab">
<el-tab-pane label="检测结果" name="resultTab"> <el-tab-pane label="检测结果" name="resultTab">
<DataCheckResultTable :tableData="checkResultTableData"/> <DataCheckResultTable :tableData="checkResultData" :info="infoMsg"/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="原始数据" name="rawDataTab"> <el-tab-pane label="原始数据" name="rawDataTab">
<DataCheckRawDataTable :tableData="rawTableData"/> <DataCheckRawDataTable :tableData="rawTableData"/>
@@ -105,6 +112,9 @@ const checkStore = useCheckStore()
const visible = ref(false) const visible = ref(false)
// 格式化数字
const fixed = 4;
// 表单数据 // 表单数据
const formContent = reactive<CheckData.DataCheck>({ const formContent = reactive<CheckData.DataCheck>({
scriptName: '', scriptName: '',
@@ -113,6 +123,11 @@ const formContent = reactive<CheckData.DataCheck>({
deviceName: '', deviceName: '',
chnNum: '', chnNum: '',
}) })
// 当前选中的谐波次数
const currentHarmNum = ref<string>("-1")
// 谐波次数列表
const harmNumList = reactive([])
let deviceId: string = '' let deviceId: string = ''
let scriptType: string | null = null let scriptType: string | null = null
@@ -125,8 +140,7 @@ let switchItem = 0
// 左侧树数据 // 左侧树数据
let treeDataUnqualified: CheckData.TreeItem[] = [] let treeDataUnqualified: CheckData.TreeItem[] = []
let treeDataAll: CheckData.TreeItem[] = [] let treeDataAll: CheckData.TreeItem[] = []
// const treeDataUnqualified=reactive<CheckData.TreeItem[]>([])
// const treeDataAll=reactive<CheckData.TreeItem[]>([])
// 左侧树被选中的叶子节点id // 左侧树被选中的叶子节点id
const checkIndex = ref<string>('') const checkIndex = ref<string>('')
@@ -138,8 +152,14 @@ const currentDesc = ref('');
// 右侧Tab选中项 // 右侧Tab选中项
const activeTab = ref<string>('resultTab') const activeTab = ref<string>('resultTab')
//存放相应的表格数据
let resTableData: { resultData: Map<string, any>, rawData: Map<string, any> } = {}
// 检测结果表格数据 // 检测结果表格数据
const checkResultTableData = reactive<CheckData.CheckResult[]>([]) const checkResultData = reactive<CheckData.CheckResult[]>([])
const infoMsg = reactive<{ title: string, name: string }[]>([])
// 原始数据表格数据 // 原始数据表格数据
const rawTableData = reactive<CheckData.RawDataItem[]>([]) const rawTableData = reactive<CheckData.RawDataItem[]>([])
@@ -172,7 +192,6 @@ watch(() => formContent.chnNum, async (newVal, oldVal) => {
code: checkStore.planCode code: checkStore.planCode
}) })
treeDataAll = resTreeDataTemp treeDataAll = resTreeDataTemp
// treeDataAll = [ // treeDataAll = [
// { // {
// scriptTypeName: "频率准确度检测", // scriptTypeName: "频率准确度检测",
@@ -278,6 +297,14 @@ watch(() => formContent.chnNum, async (newVal, oldVal) => {
} }
}) })
watch(currentHarmNum, (newVal, oldVal) => {
console.log("谐波次数", newVal);
if(newVal !== '-1'){
let resCheckResult: CheckData.ResCheckResult = resTableData.resultData.get(newVal.toString())
setCheckResultData(resCheckResult)
}
})
const handleSwitchChange = async (data: any) => { const handleSwitchChange = async (data: any) => {
console.log("切换不合格测试项、全部测试项", data); console.log("切换不合格测试项、全部测试项", data);
@@ -311,20 +338,139 @@ const updateTableData = async () => {
if (checkIndex.value) { if (checkIndex.value) {
console.log("更新表格数据"); console.log("更新表格数据");
// 发起请求,查询该测试项的检测结果 // 发起请求,查询该测试项的检测结果
// const result = await getTableData({checkStore.scriptId,deviceId, formContent.chnNum, scriptType,checkIndex}) // const {data} = await getTableData({checkStore.scriptId,deviceId, formContent.chnNum, scriptType,checkIndex})
// resTableData =data
Object.assign(checkResultTableData, [{ let resultData = new Map()
chnNum: '1', // resultData.set("频率", [{
standardValue: 57.74, // dataT: {
A: 57.73, // data: 57.7401,
A_errValue: 0.01, // resultData: 57.7301,
B: 57.73, // },
B_errValue: 0.01, // dataB: {
C: 57.73, // data: 57.7401,
C_errValue: 0.01, // resultData: 57.7301,
maxErrVaule: 0.05774, // },
result: '合格', // dataC: {
// data: 57.7401,
// resultData: 57.7301,
// },
// radius: 0.05774,
// isData: '符合',
// }])
// resultData.set('3', [{
// dataA: {
// data: 57.7401,
// resultData: 57.7301,
// },
// dataB: {
// data: 57.7401,
// resultData: 57.7301,
// },
// dataC: {
// data: 57.7401,
// resultData: 57.7301,
// },
// radius: 0.05774,
// isData: '符合',
// }])
// resultData.set('5', [{
// dataA: {
// data: 57.7402,
// resultData: 57.7301,
// },
// dataB: {
// data: 57.7402,
// resultData: 57.7301,
// },
// dataC: {
// data: 57.7402,
// resultData: 57.7301,
// },
// radius: 0.05774,
// isData: '符合',
// }])
// resultData.set('7', [{
// dataA: {
// data: 57.7403,
// resultData: 57.7301,
// },
// dataB: {
// data: 57.7403,
// resultData: 57.7301,
// },
// dataC: {
// data: 57.7403,
// resultData: 57.7301,
// },
// radius: 0.05774,
// isData: '符合',
// }])
resultData.set("电压幅值", [{
dataT: {
data: 57.7401,
resultData: 57.7301,
},
radius: 0.05774,
isData: '符合',
}]) }])
resultData.set("持续时间", [{
dataT: {
data: 57.7402,
resultData: 57.7302,
},
radius: 0.05774,
isData: '符合',
}])
let rawData = new Map()
resTableData = {
resultData: resultData,
rawData: rawData
}
let resCheckResult: CheckData.ResCheckResult = []
let tempInfoMsg: { title: string, name: string } = []
if (resTableData.resultData.size === 1) {
resCheckResult = resTableData.resultData.values().next().value
Object.assign(harmNumList, [])
currentHarmNum.value = '-1'
setCheckResultData(resCheckResult)
} else {
if (resTableData.resultData.get('电压幅值') || resTableData.resultData.get('持续时间')) {
if (resTableData.resultData.get('电压幅值')) {
tempInfoMsg.push({title: '电压幅值', name: 'Voltage'})
resCheckResult.push(...resTableData.resultData.get('电压幅值'))
}
if (resTableData.resultData.get('持续时间')) {
tempInfoMsg.push({title: '持续时间', name: 'Duration'})
resCheckResult.push(...resTableData.resultData.get('持续时间'))
}
Object.assign(harmNumList, [])
currentHarmNum.value = '-1'
Object.assign(infoMsg, tempInfoMsg)
setCheckResultData(resCheckResult)
} else {
let tempHarmNumList = []
resTableData.resultData.forEach((value, key) => {
tempHarmNumList.push({
value: key,
label: key
})
})
Object.assign(harmNumList, tempHarmNumList)
currentHarmNum.value = harmNumList[0].value
}
}
// setCheckResultData(resCheckResult)
Object.assign(rawTableData, [ Object.assign(rawTableData, [
{ {
@@ -507,6 +653,11 @@ const close = () => {
treeDataAll = [] treeDataAll = []
Object.assign(treeDataUnqualified, []) Object.assign(treeDataUnqualified, [])
Object.assign(treeDataAll, []) Object.assign(treeDataAll, [])
Object.assign(harmNumList, [])
currentHarmNum.value = '-1'
Object.assign(checkResultData, [])
Object.assign(infoMsg, [])
Object.assign(rawTableData, [])
defaultExpandedKeys = [] defaultExpandedKeys = []
checkIndex.value = '' checkIndex.value = ''
activeTab.value = 'resultTab' activeTab.value = 'resultTab'
@@ -517,6 +668,34 @@ const close = () => {
visible.value = false; visible.value = false;
}; };
const setCheckResultData = (data: CheckData.ResCheckResult[]) => {
let result: CheckData.CheckResult[] = []
data.forEach((item: CheckData.ResCheckResult) => {
let temp: CheckData.CheckResult = {
aStd: item.dataA?.resultData,
aData: item.dataA?.data,
aError: Math.abs(item.dataA?.data - item.dataA?.resultData).toFixed(fixed),
bStd: item.dataB?.resultData,
bData: item.dataB?.data,
bError: Math.abs(item.dataB?.data - item.dataB?.resultData).toFixed(fixed),
cStd: item.dataC?.resultData,
cData: item.dataC?.data,
cError: Math.abs(item.dataC?.data - item.dataC?.resultData).toFixed(fixed),
tStd: item.dataT?.resultData,
tData: item.dataT?.data,
tError: Math.abs(item.dataT?.data - item.dataT?.resultData).toFixed(fixed),
maxError: item.radius,
result: item.isData,
}
result.push(temp)
})
Object.assign(checkResultData, result)
}
// const toFixed = (num: number, pow: number): string => {
// return Math.floor(num * Math.pow(10, pow)) / Math.pow(10, pow)
// }
const findFirstLeafNode = (node: any): any => { const findFirstLeafNode = (node: any): any => {
if (!node.children || node.children.length === 0) { if (!node.children || node.children.length === 0) {
return node; return node;
@@ -534,52 +713,6 @@ const getDefaultNode = (data: any[]) => {
return findFirstLeafNode(firstElement); return findFirstLeafNode(firstElement);
} }
// let treeD: any = [{
// "scriptTypeName": "暂态",
// "sort": null,
// "fly": null,
// "children": [
// {
// "scriptTypeName": "额定工作条件下的测量1",
// "sort": null,
// "fly": null,
// "children": [
// {
// "scriptTypeName": "输入:频率=50.0Hz Ua=100.0%Un Ub=100.0%Un Uc=100.0%Un Ia=100.0%In Ib=100.0%In Ic=100.0%In 暂态 A相(暂态深度=null% 暂态持续时间=null%) B相(暂态深度=null% 暂态持续时间=null%) C相(暂态深度=null% 暂态持续时间=null%) ",
// "sort": 81,
// "fly": 1,
// "children": null
// },
// {
// "scriptTypeName": "输入:频率=45.0Hz Ua=100.0%Un Ub=100.0%Un Uc=100.0%Un Ia=100.0%In Ib=100.0%In Ic=100.0%In 暂态 A相(暂态深度=null% 暂态持续时间=null%) B相(暂态深度=null% 暂态持续时间=null%) C相(暂态深度=null% 暂态持续时间=null%) ",
// "sort": 81,
// "fly": 0,
// "children": null
// }
// ]
// },
// {
// "scriptTypeName": "额定工作条件下的测量2",
// "sort": null,
// "fly": null,
// "children": [
// {
// "scriptTypeName": "输入:频率=50.0Hz Ua=100.0%Un Ub=100.0%Un Uc=100.0%Un Ia=100.0%In Ib=100.0%In Ic=100.0%In 暂态 A相(暂态深度=null% 暂态持续时间=null%) B相(暂态深度=null% 暂态持续时间=null%) C相(暂态深度=null% 暂态持续时间=null%) ",
// "sort": 81,
// "fly": 1,
// "children": null
// },
// {
// "scriptTypeName": "输入:频率=45.0Hz Ua=100.0%Un Ub=100.0%Un Uc=100.0%Un Ia=100.0%In Ib=100.0%In Ic=100.0%In 暂态 A相(暂态深度=null% 暂态持续时间=null%) B相(暂态深度=null% 暂态持续时间=null%) C相(暂态深度=null% 暂态持续时间=null%) ",
// "sort": 81,
// "fly": 0,
// "children": null
// }
// ]
// }
// ]
// }]
// fly: 1合格 2不合格 4数据错误 // fly: 1合格 2不合格 4数据错误
const filterTree = (treeData: any[], fly: number): any[] => { const filterTree = (treeData: any[], fly: number): any[] => {
if (!treeData || treeData.length === 0) { if (!treeData || treeData.length === 0) {
@@ -638,7 +771,7 @@ defineExpose({
flex-direction: row; flex-direction: row;
.content-left-tree { .content-left-tree {
width: 25%; width: 22%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
@@ -663,7 +796,7 @@ defineExpose({
} }
.content-right { .content-right {
width: 75%; width: 78%;
margin-left: 10px; margin-left: 10px;
flex: 1; flex: 1;