2025-08-08 13:18:01 +08:00
|
|
|
<template>
|
|
|
|
|
<el-dialog :append-to-body="appendToBody" class="dialog" title="数据查询" :model-value='visible' @close="close"
|
|
|
|
|
v-bind="dialogBig" :draggable="false" width="1400px">
|
|
|
|
|
<div class="data-check-dialog">
|
2025-08-08 15:27:17 +08:00
|
|
|
<div >
|
2025-08-08 13:18:01 +08:00
|
|
|
<el-form :model='formContent' label-width="auto" class="form-three ">
|
|
|
|
|
<el-form-item label="误差体系">
|
|
|
|
|
<el-select :disabled="checkStore.showDetailType===2 || checkStore.showDetailType===0" v-model="formContent.errorSysId" placeholder="请选择误差体系" autocomplete="off"
|
|
|
|
|
@change="handleErrorSysChange">
|
|
|
|
|
<el-option
|
|
|
|
|
v-for="(option) in pqErrorList"
|
|
|
|
|
:key="option.id"
|
|
|
|
|
:label="option.name"
|
|
|
|
|
:value="option.id"/>
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="数据原则">
|
|
|
|
|
<el-input v-model='formContent.dataRule' :disabled="true"/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="设备名称">
|
|
|
|
|
<el-input v-model='formContent.deviceName' :disabled="true"/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label='通道号'>
|
|
|
|
|
<el-select v-model="formContent.chnNum">
|
|
|
|
|
<el-option v-for="item in chnList" :key="item.value" :label="item.label" :value="item.value"/>
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="data-check-body">
|
|
|
|
|
<div class="content-right">
|
|
|
|
|
<div class="content-right-Tabs">
|
|
|
|
|
<el-tabs type="border-card" v-model="activeTab">
|
|
|
|
|
<el-tab-pane label="检测结果" name="resultTab">
|
|
|
|
|
<CompareDataCheckResultTable :tableData="checkResultData" :currentScriptTypeName="currentScriptTypeName"/>
|
|
|
|
|
</el-tab-pane>
|
|
|
|
|
<el-tab-pane label="原始数据" name="rawDataTab">
|
|
|
|
|
<CompareDataCheckRawDataTable :tableData="rawTableData" :currentScriptTypeName="currentScriptTypeName" @exportRawDataHandler="exportRawDataHandler"/>
|
|
|
|
|
</el-tab-pane>
|
|
|
|
|
</el-tabs>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
|
|
|
|
|
</template>
|
|
|
|
|
<script setup lang='ts'>
|
|
|
|
|
import {dialogBig} from '@/utils/elementBind'
|
|
|
|
|
import {reactive, ref, watch} from 'vue'
|
|
|
|
|
import CompareDataCheckResultTable from './compareDataCheckResultTable.vue'
|
|
|
|
|
import CompareDataCheckRawDataTable from './compareDataCheckRawDataTable.vue'
|
|
|
|
|
import {CheckData} from "@/api/check/interface";
|
|
|
|
|
import {useCheckStore} from "@/stores/modules/check";
|
|
|
|
|
|
|
|
|
|
const {appendToBody} = withDefaults(defineProps<{
|
|
|
|
|
appendToBody: boolean
|
|
|
|
|
}>(), {appendToBody: true})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const checkStore = useCheckStore()
|
|
|
|
|
|
|
|
|
|
const visible = ref(false)
|
|
|
|
|
const treeRef = ref()
|
|
|
|
|
const searchValue = ref<string>('')
|
|
|
|
|
const pqErrorList = reactive<{ id: string; name: string; }[]>([])
|
|
|
|
|
watch(searchValue, (val) => {
|
|
|
|
|
treeRef.value!.filter(val)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// 表单数据
|
|
|
|
|
const formContent = reactive<CheckData.DataCheck>({
|
|
|
|
|
scriptName: '',
|
|
|
|
|
errorSysId: '',
|
|
|
|
|
dataRule: '',
|
|
|
|
|
deviceName: '',
|
|
|
|
|
chnNum: '',
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// 通道下拉列表
|
|
|
|
|
let chnList: any[] = []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 当前检测项目名称
|
|
|
|
|
const currentScriptTypeName = ref('')
|
|
|
|
|
// 检测结果表格数据
|
|
|
|
|
const checkResultData = reactive<CheckData.CheckResult[]>([])
|
|
|
|
|
|
|
|
|
|
// 原始数据表格数据
|
|
|
|
|
const rawTableData = reactive<CheckData.RawDataItem[]>([])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const open = async (_deviceId: string, chnNum: string, _scriptType: string | null) => {
|
|
|
|
|
visible.value = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
defineExpose({
|
|
|
|
|
open
|
|
|
|
|
})
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
.dialog {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
overflow-y: hidden;
|
|
|
|
|
overflow-x: hidden;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.data-check-dialog {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
overflow-y: hidden;
|
|
|
|
|
|
|
|
|
|
.data-check-head {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: row;
|
|
|
|
|
width: 100%;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.data-check-body {
|
|
|
|
|
height: 500px;
|
|
|
|
|
width: 100%;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: row;
|
|
|
|
|
|
|
|
|
|
.content-left-tree {
|
|
|
|
|
width: 18%;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
align-items: center;
|
|
|
|
|
max-height: 495px;
|
|
|
|
|
|
|
|
|
|
padding: 10px 0.5% 0px 0.5%;
|
|
|
|
|
border: 1px solid #ccc;
|
|
|
|
|
overflow-y: auto;
|
|
|
|
|
overflow-x: auto;
|
|
|
|
|
|
|
|
|
|
.content-tree {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
margin-top: 10px;
|
|
|
|
|
|
|
|
|
|
.custom-tree-node {
|
|
|
|
|
overflow-x: hidden !important;
|
|
|
|
|
white-space: nowrap !important;
|
|
|
|
|
text-overflow: ellipsis !important;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.content-right {
|
|
|
|
|
width: 82%;
|
|
|
|
|
margin-left: 10px;
|
|
|
|
|
flex: 1;
|
|
|
|
|
|
|
|
|
|
.content-right-title {
|
|
|
|
|
display: flex;
|
|
|
|
|
padding: 10px 0;
|
|
|
|
|
margin-top: 10px;
|
|
|
|
|
line-height: 1.5;
|
|
|
|
|
|
|
|
|
|
.content-right-title-text {
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.content-right-Tabs {
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
margin-top: 10px;
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
max-height: 400px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</style>
|