14 Commits

Author SHA1 Message Date
caozehui
ad02fac4ff 比对模式根据配置文件动态展示原始数据、历史趋势图 2026-02-02 10:14:41 +08:00
caozehui
e4de4fe43c 微调 2026-01-27 11:06:31 +08:00
caozehui
bc7d6b24b7 微调 2026-01-23 11:27:42 +08:00
caozehui
3de7461960 微调 2026-01-23 11:24:47 +08:00
caozehui
bff94f4521 微调 2026-01-23 11:20:03 +08:00
caozehui
e63a3dfa92 数据库变更 2026-01-22 15:42:02 +08:00
caozehui
7efb738d54 微调 2026-01-22 15:25:30 +08:00
caozehui
84763eb414 微调 2026-01-22 11:26:42 +08:00
caozehui
820a6bb233 系数调整 2026-01-21 13:59:57 +08:00
caozehui
31e44cfc69 比对系数下发全局配置 2026-01-19 14:22:24 +08:00
caozehui
fb9460e307 Merge remote-tracking branch 'origin/master' 2026-01-16 10:46:11 +08:00
caozehui
99a8c97b17 比对系数下发全局配置 2026-01-16 10:46:00 +08:00
caozehui
c30569f5e1 比对系数下发全局配置 2026-01-16 10:44:41 +08:00
caozehui
cdc19e1db9 更新后端jar包 2026-01-06 10:29:29 +08:00
72 changed files with 903 additions and 802 deletions

View File

@@ -115,3 +115,4 @@ activate:
private-key: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCcUyYhVqczGxblL+o/xZzF/8nf+LjrfUE/dS1aRHM7uMDD0cgCArhjtfneFePrMxt+Z7W8yNBzSarub8qsfhaVNikV7Es7oaeTygfjQXTi2n4AFkir3fM07J08RpWhl5M8f8uWTCuvFUYAw00gq55typqmnbkmJa2VIUy/iQf+cMCP7abz4/jNhUzUR3qA7TV4oMRgTdIEDUp63YF8dOC+JH8XxYrCVeHXV6fLCwmesdMzl0lB2VTEKMfLbXhOmF5g7P9y/16VCcN8UBuZlbyYfn+GAxJOSbeHi5HshOKfoSuD7Jz+3WQZpNavOWjIFExKIU38/CvnJCOP7XBCqpSTAgMBAAECggEAYeWokWRE3TpvwiOZnUpR/aVMdVi75a3ROL5XIpqPV61B+t/bU3cEpl0GF9C5pUeiRi0IoStZb3mI9D1KPW/REKyUWkhabQO1gFYbTnRlkNOn6MILzKX4cwJjDaZeeo4EBPU7N+qHyOOXrU6hdH5FfxhMdV983ajm5eeuupxER1C2kAcIklTeVpTX6EKOgZb5LBp5ssOVm2P42pOauvcRozRcvZmqnErXmukv0H4l3EVNt4rHpTn9riHUC63e8JfiYzVaF6zuNUxv6nHEft0/SRMw11XSTnNfDzcKqgjz6ksFBS/6eQQYKESk+ONC53HUuYHFAknkwsPupDCT2W8FIQKBgQDLHT/xCU3nxGr4vFKBDNaO2D5oK20ECbBO4oDvLWWmQG7f+6TsMy8PgVdMnoL4RfqGlwFAKEpS6KVFHnBVqnNEhcdy9uCI7x7Xx8UnyUtxj1EDTm76uta9Ki9OrlqB6tImDM9+Ya3vGktW37ht4WOx2OsJRhG1dbf6RLwFlH7DWwKBgQDFBxvi5I1BR6hg6Tj7xd2SqOT2Y+BED3xuSYENhWbmMhLJDResaB7mjztbxlYaY2mOE0holWm2uDmVFFhMh4jYXik4hYH8nmDzq9mDpZCZ9pyjYqnAP8THoAa8EbgrUWB8A6BPH4iL3KbMnBfBKY0pIr2xrvnjQjNBAgta7KDRKQKBgCe6oe4wxrdF2TKsC2tIqpMoQxS3Icy/ZGgZr+SYuaBKTCWtoDW/UT40K3JGMxIDBhzbXphBCUCsVt9tM8Xd4EwP6tJW7dZ7B0pnve2pVwNwaAVAiz6p2yUHIle+jN+Koe5lZRSwYIg7WW81tWpwwsJfzqFyvjYDP6hJV4mz4ROvAoGAaRcdnKvjXApomShMqJ4lTPChD3q+SA8qg3jZSOj6tZXHx00gb2kp8jg7pPvpOTIFPy6x1Ha9aCRjMk0ju84fA6lVuzwa1S907wOehUVuF3Eeo1cgy9Y3k3KbpPyeixxgpkUY4JslLdSHc2NemD0dee951qhJyRmqVOZOQDUuoeECgYEAqBw2cAFk3vM97WY06TSldGA8ajVHx3BYRjj+zl62NTQthy8fw3tqxb3c5e8toOmZWKjZvDhg2TRLhsDDQWEYg3LZG87REqVIjgEPcpjNLidjygGX8n3JF2o0O5I/EMvl0s/+LVQONfduOBvhwDqr8QNisbLsyneiAq7umewMolo=" private-key: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCcUyYhVqczGxblL+o/xZzF/8nf+LjrfUE/dS1aRHM7uMDD0cgCArhjtfneFePrMxt+Z7W8yNBzSarub8qsfhaVNikV7Es7oaeTygfjQXTi2n4AFkir3fM07J08RpWhl5M8f8uWTCuvFUYAw00gq55typqmnbkmJa2VIUy/iQf+cMCP7abz4/jNhUzUR3qA7TV4oMRgTdIEDUp63YF8dOC+JH8XxYrCVeHXV6fLCwmesdMzl0lB2VTEKMfLbXhOmF5g7P9y/16VCcN8UBuZlbyYfn+GAxJOSbeHi5HshOKfoSuD7Jz+3WQZpNavOWjIFExKIU38/CvnJCOP7XBCqpSTAgMBAAECggEAYeWokWRE3TpvwiOZnUpR/aVMdVi75a3ROL5XIpqPV61B+t/bU3cEpl0GF9C5pUeiRi0IoStZb3mI9D1KPW/REKyUWkhabQO1gFYbTnRlkNOn6MILzKX4cwJjDaZeeo4EBPU7N+qHyOOXrU6hdH5FfxhMdV983ajm5eeuupxER1C2kAcIklTeVpTX6EKOgZb5LBp5ssOVm2P42pOauvcRozRcvZmqnErXmukv0H4l3EVNt4rHpTn9riHUC63e8JfiYzVaF6zuNUxv6nHEft0/SRMw11XSTnNfDzcKqgjz6ksFBS/6eQQYKESk+ONC53HUuYHFAknkwsPupDCT2W8FIQKBgQDLHT/xCU3nxGr4vFKBDNaO2D5oK20ECbBO4oDvLWWmQG7f+6TsMy8PgVdMnoL4RfqGlwFAKEpS6KVFHnBVqnNEhcdy9uCI7x7Xx8UnyUtxj1EDTm76uta9Ki9OrlqB6tImDM9+Ya3vGktW37ht4WOx2OsJRhG1dbf6RLwFlH7DWwKBgQDFBxvi5I1BR6hg6Tj7xd2SqOT2Y+BED3xuSYENhWbmMhLJDResaB7mjztbxlYaY2mOE0holWm2uDmVFFhMh4jYXik4hYH8nmDzq9mDpZCZ9pyjYqnAP8THoAa8EbgrUWB8A6BPH4iL3KbMnBfBKY0pIr2xrvnjQjNBAgta7KDRKQKBgCe6oe4wxrdF2TKsC2tIqpMoQxS3Icy/ZGgZr+SYuaBKTCWtoDW/UT40K3JGMxIDBhzbXphBCUCsVt9tM8Xd4EwP6tJW7dZ7B0pnve2pVwNwaAVAiz6p2yUHIle+jN+Koe5lZRSwYIg7WW81tWpwwsJfzqFyvjYDP6hJV4mz4ROvAoGAaRcdnKvjXApomShMqJ4lTPChD3q+SA8qg3jZSOj6tZXHx00gb2kp8jg7pPvpOTIFPy6x1Ha9aCRjMk0ju84fA6lVuzwa1S907wOehUVuF3Eeo1cgy9Y3k3KbpPyeixxgpkUY4JslLdSHc2NemD0dee951qhJyRmqVOZOQDUuoeECgYEAqBw2cAFk3vM97WY06TSldGA8ajVHx3BYRjj+zl62NTQthy8fw3tqxb3c5e8toOmZWKjZvDhg2TRLhsDDQWEYg3LZG87REqVIjgEPcpjNLidjygGX8n3JF2o0O5I/EMvl0s/+LVQONfduOBvhwDqr8QNisbLsyneiAq7umewMolo="
public-key: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnFMmIVanMxsW5S/qP8Wcxf/J3/i4631BP3UtWkRzO7jAw9HIAgK4Y7X53hXj6zMbfme1vMjQc0mq7m/KrH4WlTYpFexLO6Gnk8oH40F04tp+ABZIq93zNOydPEaVoZeTPH/LlkwrrxVGAMNNIKuebcqapp25JiWtlSFMv4kH/nDAj+2m8+P4zYVM1Ed6gO01eKDEYE3SBA1Ket2BfHTgviR/F8WKwlXh11enywsJnrHTM5dJQdlUxCjHy214TpheYOz/cv9elQnDfFAbmZW8mH5/hgMSTkm3h4uR7ITin6Erg+yc/t1kGaTWrzloyBRMSiFN/Pwr5yQjj+1wQqqUkwIDAQAB" public-key: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnFMmIVanMxsW5S/qP8Wcxf/J3/i4631BP3UtWkRzO7jAw9HIAgK4Y7X53hXj6zMbfme1vMjQc0mq7m/KrH4WlTYpFexLO6Gnk8oH40F04tp+ABZIq93zNOydPEaVoZeTPH/LlkwrrxVGAMNNIKuebcqapp25JiWtlSFMv4kH/nDAj+2m8+P4zYVM1Ed6gO01eKDEYE3SBA1Ket2BfHTgviR/F8WKwlXh11enywsJnrHTM5dJQdlUxCjHy214TpheYOz/cv9elQnDfFAbmZW8mH5/hgMSTkm3h4uR7ITin6Erg+yc/t1kGaTWrzloyBRMSiFN/Pwr5yQjj+1wQqqUkwIDAQAB"

View File

@@ -1 +1 @@
34820 74476

Binary file not shown.

View File

@@ -6,3 +6,4 @@
.\binlog.000028 .\binlog.000028
.\binlog.000029 .\binlog.000029
.\binlog.000030 .\binlog.000030
.\binlog.000031

View File

@@ -19,9 +19,9 @@ VITE_API_URL=/api
# 开发环境跨域代理,支持配置多个 # 开发环境跨域代理,支持配置多个
#VITE_PROXY=[["/api","http://127.0.0.1:18092/"]] VITE_PROXY=[["/api","http://127.0.0.1:18092/"]]
#VITE_PROXY=[["/api","http://192.168.1.124:18092/"]] #VITE_PROXY=[["/api","http://192.168.1.124:18092/"]]
VITE_PROXY=[["/api","http://192.168.2.125:18092/"]] #VITE_PROXY=[["/api","http://192.168.2.125:18092/"]]
# VITE_PROXY=[["/api","http://192.168.1.138:8080/"]]张文 # VITE_PROXY=[["/api","http://192.168.1.138:8080/"]]张文
# 开启激活验证 # 开启激活验证
VITE_ACTIVATE_OPEN=false VITE_ACTIVATE_OPEN=false

View File

@@ -23,6 +23,6 @@ VITE_PWA=true
# 线上环境接口地址 # 线上环境接口地址
#VITE_API_URL="/api" # 打包时用 #VITE_API_URL="/api" # 打包时用
VITE_API_URL="http://127.0.0.1:18093/" VITE_API_URL="http://127.0.0.1:18092/"
# 开启激活验证 # 开启激活验证
VITE_ACTIVATE_OPEN=true VITE_ACTIVATE_OPEN=false

View File

@@ -14,7 +14,8 @@ export const getScriptList = (params: {
devId:string, devId:string,
chnNum:number, chnNum:number,
num:number, num:number,
planId:string planId:string,
code:string
}) => { }) => {
return http.post('/result/getCheckItem', params, {loading: false}) return http.post('/result/getCheckItem', params, {loading: false})
} }

View File

@@ -35,9 +35,25 @@ export namespace StandardDevice {
updateBy?: string | null; //更新用户 updateBy?: string | null; //更新用户
updateTime?: string | null; //更新时间 updateTime?: string | null; //更新时间
disabled?: boolean; disabled?: boolean;
gainList?:Gain[]
} }
interface Gain{
stdDevMonitorId:string;
uaGain:number;
ubGain:number;
ucGain:number;
u0Gain:number;
iaGain:number;
ibGain:number;
icGain:number;
i0Gain:number;
uabGain:number;
ubcGain:number;
ucaGain:number;
}
/** /**
* 标准设备表格查询分页返回的对象; * 标准设备表格查询分页返回的对象;
*/ */

View File

@@ -14,6 +14,7 @@ export namespace Base {
createTime?: string| null; //创建时间 createTime?: string| null; //创建时间
updateBy?: string| null; //更新用户 updateBy?: string| null; //更新用户
updateTime?: string| null; //更新时间 updateTime?: string| null; //更新时间
coefficient:number //比对监测后,当电压、电流不符合时,是否对标准设备进行系数校准
} }
} }

View File

@@ -57,3 +57,14 @@ export const getPublicKey = (username: string) => {
export const getAutoGenerate = () => { export const getAutoGenerate = () => {
return http.get('/sysTestConfig/getAutoGenerate', {}, {loading: false}) return http.get('/sysTestConfig/getAutoGenerate', {}, {loading: false})
} }
/**
* 获取比对模式下是否能够进行系数校准
*/
export const getCanCoefficient=()=>{
return http.get('/prepare/canCoefficient', {}, {loading: false})
}
export const startCoefficient=()=>{
return http.get('/prepare/startCoefficient', {}, {loading: false})
}

View File

@@ -190,7 +190,7 @@ export default class SocketService {
* WebSocket连接配置 * WebSocket连接配置
*/ */
private config: SocketConfig = { private config: SocketConfig = {
url: 'ws://127.0.0.1:7777/hello', url: 'ws://127.0.0.1:7778/hello',
//url: 'ws://192.168.1.124:7777/hello', //url: 'ws://192.168.1.124:7777/hello',
heartbeatInterval: 9000, // 9秒心跳间隔 heartbeatInterval: 9000, // 9秒心跳间隔
reconnectDelay: 5000, // 5秒重连延迟 reconnectDelay: 5000, // 5秒重连延迟

View File

@@ -29,7 +29,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="数据原则"> <el-form-item label="数据原则">
<!-- <el-input v-model="formContent.dataRule" :disabled="true" />--> <!-- <el-input v-model="formContent.dataRule" :disabled="true" />-->
<el-select <el-select
:disabled="checkStore.showDetailType === 2 || checkStore.showDetailType === 0" :disabled="checkStore.showDetailType === 2 || checkStore.showDetailType === 0"
v-model="formContent.dataRule" v-model="formContent.dataRule"
@@ -45,11 +45,11 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="设备名称"> <el-form-item label="设备名称">
<el-input v-model="formContent.deviceName" :disabled="true" /> <el-input v-model="formContent.deviceName" :disabled="true"/>
</el-form-item> </el-form-item>
<el-form-item label="通道号"> <el-form-item label="通道号">
<el-select v-model="formContent.chnNum" @change="handleChnNumChange" :disabled="sourceKey == 1"> <el-select v-model="formContent.chnNum" @change="handleChnNumChange" :disabled="sourceKey == 1">
<el-option v-for="item in chnList" :key="item" :label="item" :value="item" /> <el-option v-for="item in chnList" :key="item" :label="item" :value="item"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="检测次数"> <el-form-item label="检测次数">
@@ -115,7 +115,7 @@
:value="item.value" :value="item.value"
> >
<div style="display: flex; align-items: center; justify-content: space-between"> <div style="display: flex; align-items: center; justify-content: space-between">
<span v-if="item.resultFlag === 1" >{{ item.label }}</span> <span v-if="item.resultFlag === 1">{{ item.label }}</span>
<span v-else-if="item.resultFlag === 2" style="color: #ee6666;">{{ item.label }}</span> <span v-else-if="item.resultFlag === 2" style="color: #ee6666;">{{ item.label }}</span>
<span v-else-if="item.resultFlag === 4" style="color: #fac858;">{{ item.label }}</span> <span v-else-if="item.resultFlag === 4" style="color: #fac858;">{{ item.label }}</span>
</div> </div>
@@ -137,7 +137,7 @@
v-if="isWaveData" v-if="isWaveData"
> >
<el-select v-model="waveNumber" @change="handleWaveNumberChange"> <el-select v-model="waveNumber" @change="handleWaveNumberChange">
<el-option v-for="i in waveNumCount" :key="i" :label="i" :value="i" /> <el-option v-for="i in waveNumCount" :key="i" :label="i" :value="i"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@@ -165,7 +165,7 @@
:currentScriptTypeName="currentScriptTypeName" :currentScriptTypeName="currentScriptTypeName"
/> />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="原始数据" name="rawDataTab"> <el-tab-pane label="原始数据" name="rawDataTab" v-if="!isBusiness">
<CompareDataCheckRawDataTable <CompareDataCheckRawDataTable
v-if="activeTab === 'rawDataTab'" v-if="activeTab === 'rawDataTab'"
:tableData="rawTableData.length == 0 ? [] : currentRawTableData" :tableData="rawTableData.length == 0 ? [] : currentRawTableData"
@@ -173,7 +173,7 @@
:currentScriptTypeName="currentScriptTypeName" :currentScriptTypeName="currentScriptTypeName"
/> />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="历史趋势" name="chartTab" v-if="!isWaveData"> <el-tab-pane label="历史趋势" name="chartTab" v-if="!isWaveData&&!isBusiness">
<CompareDataCheckChart <CompareDataCheckChart
v-if="activeTab === 'chartTab'" v-if="activeTab === 'chartTab'"
:tableData="rawTableData.length == 0 ? [] : currentRawTableData" :tableData="rawTableData.length == 0 ? [] : currentRawTableData"
@@ -187,29 +187,24 @@
</el-dialog> </el-dialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { dialogBig } from '@/utils/elementBind' import {dialogBig} from '@/utils/elementBind'
import { computed, reactive, ref } from 'vue' import {computed, reactive, ref} from 'vue'
import CompareDataCheckResultTable from './compareDataCheckResultTable.vue' import CompareDataCheckResultTable from './compareDataCheckResultTable.vue'
import CompareDataCheckRawDataTable from './compareDataCheckRawDataTable.vue' import CompareDataCheckRawDataTable from './compareDataCheckRawDataTable.vue'
import CompareDataCheckChart from './compareDataCheckChart.vue' import CompareDataCheckChart from './compareDataCheckChart.vue'
import { CheckData } from '@/api/check/interface' import {CheckData} from '@/api/check/interface'
import { useCheckStore } from '@/stores/modules/check' import {useCheckStore} from '@/stores/modules/check'
import { Histogram, Postcard } from '@element-plus/icons-vue' import {Histogram, Postcard} from '@element-plus/icons-vue'
import {generateDevReport, getPqErrSysList} from '@/api/plan/plan' import {generateDevReport, getPqErrSysList} from '@/api/plan/plan'
import { useModeStore } from '@/stores/modules/mode' // 引入模式 store import {useModeStore} from '@/stores/modules/mode' // 引入模式 store
import { useDictStore } from '@/stores/modules/dict' import {useDictStore} from '@/stores/modules/dict'
import { import {changeErrorSystem, deleteTempTable, getContrastFormContent, getContrastResult, getScriptList, reCalculate} from '@/api/check/test'
changeErrorSystem, import {ElMessage} from 'element-plus'
deleteTempTable, import {ResultEnum} from '@/enums/httpEnum'
getContrastFormContent,
getContrastResult,
getScriptList,
reCalculate
} from '@/api/check/test'
import { ElMessage } from 'element-plus'
import { ResultEnum } from '@/enums/httpEnum'
const { appendToBody = true } = defineProps<{ const isShowRawData = import.meta.env.VITE_IS_SHOW_RAW_DATA
const {appendToBody = true} = defineProps<{
appendToBody: boolean appendToBody: boolean
}>() }>()
@@ -237,7 +232,7 @@ const selectedScriptName = ref('')
const pattern = ref('') const pattern = ref('')
// 添加以下内容 // 添加以下内容
const isWaveData = ref(false) const isWaveData = ref(false)
const scriptNameOptions = ref<{ label: string; value: string;resultFlag:number }[]>([]) const scriptNameOptions = ref<{ label: string; value: string; resultFlag: number }[]>([])
// 表单数据 // 表单数据
const formContent = reactive<CheckData.DataCheck>({ const formContent = reactive<CheckData.DataCheck>({
@@ -275,6 +270,11 @@ const currentRawTableData = computed(() => {
return Array.isArray(data) ? data : [] return Array.isArray(data) ? data : []
}) })
const isBusiness = computed(() => {
console.log(isShowRawData)
return modeStore.currentMode === '比对式' && isShowRawData
})
const open = async (row: any, chnNum: string, deviceId: string | null, source: number) => { const open = async (row: any, chnNum: string, deviceId: string | null, source: number) => {
activeTab.value = 'resultTab' activeTab.value = 'resultTab'
isWaveData.value = false isWaveData.value = false
@@ -302,7 +302,7 @@ const open = async (row: any, chnNum: string, deviceId: string | null, source: n
pqErrorList.length = 0 pqErrorList.length = 0
// 获取误差体系 // 获取误差体系
let { data: resPqErrorList } = await getPqErrSysList() let {data: resPqErrorList} = await getPqErrSysList()
Object.assign(pqErrorList, resPqErrorList) Object.assign(pqErrorList, resPqErrorList)
initGetResult() initGetResult()
@@ -319,7 +319,7 @@ const initGetResult = async () => {
scriptNameOptions.value = selectScript.value.map(item => ({ scriptNameOptions.value = selectScript.value.map(item => ({
label: item.scriptName, label: item.scriptName,
value: item.scriptName, value: item.scriptName,
resultFlag: item.resultFlag?? 0 resultFlag: item.resultFlag ?? 0
})) }))
// 默认选中第一个选项 // 默认选中第一个选项
@@ -344,7 +344,8 @@ const initScriptData = async () => {
devId: formContent.deviceId, devId: formContent.deviceId,
chnNum: formContent.chnNum, chnNum: formContent.chnNum,
num: formContent.num, num: formContent.num,
planId: checkStore.plan.id planId: checkStore.plan.id,
code: checkStore.plan.code + (formContent.errorSysId != checkStore.plan.errorSysId || formContent.dataRule != checkStore.plan.dataRule ? '_temp' : '')
}) })
// 格式化脚本数据 // 格式化脚本数据
@@ -538,7 +539,7 @@ const getResults = async (code: any) => {
waveNum: isWaveDataRequest ? waveNumber.value : null, waveNum: isWaveDataRequest ? waveNumber.value : null,
isWave: isWaveDataRequest, isWave: isWaveDataRequest,
patternId: pattern.value, patternId: pattern.value,
code: checkStore.plan.code + (formContent.errorSysId!=checkStore.plan.errorSysId || formContent.dataRule!=checkStore.plan.dataRule? '_temp':'') code: checkStore.plan.code + (formContent.errorSysId != checkStore.plan.errorSysId || formContent.dataRule != checkStore.plan.dataRule ? '_temp' : '')
}).then((res: any) => { }).then((res: any) => {
let list: string[] = [] let list: string[] = []
for (let key in res.data.resultMap) { for (let key in res.data.resultMap) {
@@ -579,7 +580,7 @@ const close = async () => {
} }
} }
const handleErrorSysChange = async (msg:string) => { const handleErrorSysChange = async (msg: string) => {
changeErrorSystem({ changeErrorSystem({
planId: checkStore.plan.id, planId: checkStore.plan.id,
scriptId: '', scriptId: '',
@@ -620,10 +621,10 @@ const handleGenerateReport = async () => {
planId: checkStore.plan.id, planId: checkStore.plan.id,
devIdList: [formContent.deviceId], devIdList: [formContent.deviceId],
scriptId: checkStore.plan.scriptId, scriptId: checkStore.plan.scriptId,
planCode: checkStore.plan.code + (formContent.errorSysId!=checkStore.plan.errorSysId||formContent.dataRule!=checkStore.plan.dataRule ? '_temp':'') planCode: checkStore.plan.code + (formContent.errorSysId != checkStore.plan.errorSysId || formContent.dataRule != checkStore.plan.dataRule ? '_temp' : '')
}).then(res => { }).then(res => {
if (res.code === ResultEnum.SUCCESS) { if (res.code === ResultEnum.SUCCESS) {
ElMessage.success({ message: `报告生成成功!` }) ElMessage.success({message: `报告生成成功!`})
handleChnNumChange(formContent.chnNum) handleChnNumChange(formContent.chnNum)
} }
}) })
@@ -688,6 +689,7 @@ defineExpose({
overflow-y: auto; overflow-y: auto;
overflow-x: auto; overflow-x: auto;
margin-right: 10px; margin-right: 10px;
.content-tree { .content-tree {
width: 100%; width: 100%;
height: 100%; height: 100%;
@@ -724,10 +726,12 @@ defineExpose({
margin-top: 10px; margin-top: 10px;
margin-bottom: 10px; margin-bottom: 10px;
display: flex; display: flex;
.el-tabs { .el-tabs {
width: 100%; width: 100%;
} }
} }
.content-left { .content-left {
height: 100%; height: 100%;
border: 1px solid #e0e0e0; border: 1px solid #e0e0e0;
@@ -739,6 +743,7 @@ defineExpose({
} }
} }
} }
:deep(.el-tabs--border-card > .el-tabs__content) { :deep(.el-tabs--border-card > .el-tabs__content) {
height: 367px; height: 367px;
} }

View File

@@ -128,7 +128,7 @@ import {CheckData} from '@/api/check/interface'
import {useCheckStore} from '@/stores/modules/check' import {useCheckStore} from '@/stores/modules/check'
import {ElMessage, ElMessageBox} from 'element-plus' import {ElMessage, ElMessageBox} from 'element-plus'
import {getBigTestItem} from '@/api/check/test' import {getBigTestItem} from '@/api/check/test'
import {getAutoGenerate} from '@/api/user/login' import {getAutoGenerate, getCanCoefficient, startCoefficient} from '@/api/user/login'
import { generateDevReport } from '@/api/plan/plan' import { generateDevReport } from '@/api/plan/plan'
import {useModeStore} from '@/stores/modules/mode' // 引入模式 store import {useModeStore} from '@/stores/modules/mode' // 引入模式 store
import {useDictStore} from '@/stores/modules/dict' import {useDictStore} from '@/stores/modules/dict'
@@ -157,11 +157,6 @@ const props = defineProps({
const emit = defineEmits([ const emit = defineEmits([
'update:testStatus', 'update:testStatus',
'update:webMsgSend',
'sendPause',
'sendResume',
'sendReCheck',
'closeWebSocket'
]) ])
// 用来保存测试项进度抽屉是否打开 // 用来保存测试项进度抽屉是否打开
@@ -684,6 +679,20 @@ const updatePercentage = async () => {
}) })
} }
stopTimeCount(1) stopTimeCount(1)
let { data: canCoefficient } = await getCanCoefficient()
if(canCoefficient) {
ElMessageBox.confirm('存在系数偏差,是否进行系数校准?', '系数校准', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(async ()=>{
// 调用系数校准接口
await startCoefficient()
ElMessage.success({ message: '系数下发中,请稍等...', duration: 15000 ,onClose() {
ElMessage.success('系数下发成功!')
},})
}).catch(()=>{
ElMessageBox.alert( ElMessageBox.alert(
'检测全部结束,你可以停留在此页面查看检测结果,或返回首页进行复检、报告生成和归档等操作', '检测全部结束,你可以停留在此页面查看检测结果,或返回首页进行复检、报告生成和归档等操作',
'检测完成', '检测完成',
@@ -691,9 +700,16 @@ const updatePercentage = async () => {
confirmButtonText: '确定' confirmButtonText: '确定'
} }
) )
// 关闭WebSocket连接 })
emit('closeWebSocket') }else{
//clear(); ElMessageBox.alert(
'检测全部结束,你可以停留在此页面查看检测结果,或返回首页进行复检、报告生成和归档等操作',
'检测完成',
{
confirmButtonText: '确定'
}
)
}
} }
} }
// ========== 时间计数器管理函数 ========== // ========== 时间计数器管理函数 ==========
@@ -862,7 +878,6 @@ const handleClick = (item: any, chnNum: number, scriptType: string) => {
} }
const handlePause = () => { const handlePause = () => {
//emit('sendPause')
testLogList.push({ testLogList.push({
type: 'error', type: 'error',
log: `${new Date().toLocaleString()}:当前测试小项正在执行中,将在该小项执行结束后暂停...` log: `${new Date().toLocaleString()}:当前测试小项正在执行中,将在该小项执行结束后暂停...`

View File

@@ -198,8 +198,8 @@
</template> </template>
<script setup lang="tsx" name="useProTable"> <script setup lang="tsx" name="useProTable">
import { onBeforeMount, onMounted, type PropType, reactive, ref, watch } from 'vue' import {onBeforeMount, onMounted, type PropType, reactive, ref, watch} from 'vue'
import { type Action, ElMessage, ElMessageBox } from 'element-plus' import {type Action, ElMessage, ElMessageBox} from 'element-plus'
import TestPopup from './testPopup.vue' import TestPopup from './testPopup.vue'
import dataCheckPopup from './dataCheckSingleChannelSingleTestPopup.vue' import dataCheckPopup from './dataCheckSingleChannelSingleTestPopup.vue'
import CompareDataCheckSingleChannelSingleTestPopup from '@/views/home/components/compareDataCheckSingleChannelSingleTestPopup.vue' import CompareDataCheckSingleChannelSingleTestPopup from '@/views/home/components/compareDataCheckSingleChannelSingleTestPopup.vue'
@@ -207,20 +207,20 @@ import ProTable from '@/components/ProTable/index.vue'
import SelectTestItemPopup from '@/views/home/components/selectTestItemPopup.vue' import SelectTestItemPopup from '@/views/home/components/selectTestItemPopup.vue'
import WriteTHPopup from '@/views/home/components/writeTHPopup.vue' import WriteTHPopup from '@/views/home/components/writeTHPopup.vue'
import DeviceConnectionPopup from '@/views/home/components/deviceConnectionPopup.vue' import DeviceConnectionPopup from '@/views/home/components/deviceConnectionPopup.vue'
import { type Device } from '@/api/device/interface/device' import {type Device} from '@/api/device/interface/device'
import { type ColumnProps, type ProTableInstance } from '@/components/ProTable/interface' import {type ColumnProps, type ProTableInstance} from '@/components/ProTable/interface'
import { type Plan } from '@/api/plan/interface' import {type Plan} from '@/api/plan/interface'
import { type StandardDevice } from '@/api/device/interface/standardDevice' import {type StandardDevice} from '@/api/device/interface/standardDevice'
import { downloadDevData, generateDevReport, getBoundPqDevList } from '@/api/plan/plan' import {downloadDevData, generateDevReport, getBoundPqDevList} from '@/api/plan/plan'
import { getPqDev } from '@/api/device/device' import {getPqDev} from '@/api/device/device'
import { useAppSceneStore, useModeStore } from '@/stores/modules/mode' // 引入模式 store import {useAppSceneStore, useModeStore} from '@/stores/modules/mode' // 引入模式 store
import { useCheckStore } from '@/stores/modules/check' import {useCheckStore} from '@/stores/modules/check'
import { CheckData } from '@/api/check/interface' import {CheckData} from '@/api/check/interface'
import { useAuthStore } from '@/stores/modules/auth' import {useAuthStore} from '@/stores/modules/auth'
import { useDownload } from '@/hooks/useDownload' import {useDownload} from '@/hooks/useDownload'
import { documentedPqDev } from '@/api/device/report' import {documentedPqDev} from '@/api/device/report'
import { ResultEnum } from '@/enums/httpEnum' import {ResultEnum} from '@/enums/httpEnum'
import { getPqMonList } from '@/api/device/monitor/index' import {getPqMonList} from '@/api/device/monitor/index'
import ReportResultPopup from '@/views/home/components/reportResultPopup.vue' import ReportResultPopup from '@/views/home/components/reportResultPopup.vue'
const checkStore = useCheckStore() const checkStore = useCheckStore()
@@ -539,6 +539,7 @@ const columns = reactive<ColumnProps<Device.ResPqDev>[]>([
{ prop: 'operation', label: '操作', fixed: 'right', minWidth :200,isShow: operationShow } { prop: 'operation', label: '操作', fixed: 'right', minWidth :200,isShow: operationShow }
]) ])
let testType = 'test' // 检测类型:'test'-检测 'reTest'-复检 let testType = 'test' // 检测类型:'test'-检测 'reTest'-复检
let qualifiedCount = 0 //合格数量
//比对单个报告生成 //比对单个报告生成
@@ -568,12 +569,14 @@ const handleSelectionChange = (selection: any[]) => {
} }
// 统计已完成检测的设备数量 // 统计已完成检测的设备数量
const result = selection.filter(item => item.checkResult != 0) let result = selection.filter(item => item.checkState == 0)
if (result.length > 0) { if (result.length > 0) {
testType = 'test' testType = 'test'
} else { } else {
testType = 'reTest' testType = 'reTest'
} }
qualifiedCount=selection.filter(item => item.checkResult == 1).length
let devices: CheckData.Device[] = selection.map((item: any) => { let devices: CheckData.Device[] = selection.map((item: any) => {
return { return {
deviceId: item.id, deviceId: item.id,
@@ -925,6 +928,7 @@ const handleTest = async (val: string) => {
distinguishCancelAndClose: true, distinguishCancelAndClose: true,
confirmButtonText: '不合格项复检', confirmButtonText: '不合格项复检',
cancelButtonText: '全部复检', cancelButtonText: '全部复检',
showConfirmButton:qualifiedCount<=0,
type: 'warning' type: 'warning'
}) })
.then(() => { .then(() => {

View File

@@ -1,15 +1,15 @@
<template> <template>
<el-dialog :title="dialogTitle" v-model='dialogVisible' @close="close" v-bind="dialogBig" align-center> <el-dialog :title="dialogTitle" v-model='dialogVisible' @close="close" v-bind="dialogBig" align-center>
<el-tabs type="border-card"> <el-tabs type="border-card" v-model="activeName">
<el-tab-pane label="设备台账信息"> <el-tab-pane label="设备台账信息" name="devInfo">
<div > <div>
<el-form :model='formContent' ref='dialogFormRef' :rules='rules' :disabled="false" label-width="auto" class="form-three"> <el-form :model='formContent' ref='dialogFormRef' :rules='rules' :disabled="false" label-width="auto" class="form-three">
<el-divider >设备信息</el-divider> <el-divider>设备信息</el-divider>
<el-form-item label="设备名称" prop="name" > <el-form-item label="设备名称" prop="name">
<el-input v-model='formContent.name' placeholder="请输入设备名称" maxlength="32" show-word-limit/> <el-input v-model='formContent.name' placeholder="请输入设备名称" maxlength="32" show-word-limit/>
</el-form-item> </el-form-item>
<el-form-item label='设备类型' prop='devType' > <el-form-item label='设备类型' prop='devType'>
<el-select v-model="formContent.devType" filterable clearable placeholder="请选择设备类型" @change="handleDevTypeChange"> <el-select v-model="formContent.devType" filterable clearable placeholder="请选择设备类型" @change="handleDevTypeChange">
<el-option <el-option
v-for="item in devTypeOptions" v-for="item in devTypeOptions"
@@ -30,7 +30,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-divider >参数信息</el-divider> <el-divider>参数信息</el-divider>
<el-form-item label='通讯协议' prop='protocol'> <el-form-item label='通讯协议' prop='protocol'>
<el-select v-model="formContent.protocol" clearable placeholder="请选择通讯协议"> <el-select v-model="formContent.protocol" clearable placeholder="请选择通讯协议">
<el-option <el-option
@@ -44,10 +44,10 @@
<el-form-item label="IP地址" prop="ip" placeholder="请输入IP地址"> <el-form-item label="IP地址" prop="ip" placeholder="请输入IP地址">
<el-input v-model="formContent.ip"/> <el-input v-model="formContent.ip"/>
</el-form-item> </el-form-item>
<el-form-item label="端口号" prop="port" placeholder="请输入端口号" > <el-form-item label="端口号" prop="port" placeholder="请输入端口号">
<el-input v-model="formContent.port" /> <el-input v-model="formContent.port"/>
</el-form-item> </el-form-item>
<el-form-item label='可检通道数' prop='inspectChannel' > <el-form-item label='可检通道数' prop='inspectChannel'>
<el-select v-model="formContent.inspectChannel" multiple collapse-tags :max-collapse-tags="4" placeholder="请选择可检通道数" clearable> <el-select v-model="formContent.inspectChannel" multiple collapse-tags :max-collapse-tags="4" placeholder="请选择可检通道数" clearable>
<el-option <el-option
v-for="(option, index) in pqChannelArray" v-for="(option, index) in pqChannelArray"
@@ -57,7 +57,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label='是否加密' prop='encryptionFlag' > <el-form-item label='是否加密' prop='encryptionFlag'>
<el-select v-model="formContent.encryptionFlag" clearable placeholder="请选择是否加密"> <el-select v-model="formContent.encryptionFlag" clearable placeholder="请选择是否加密">
<el-option label="是" :value="1"></el-option> <el-option label="是" :value="1"></el-option>
<el-option label="否" :value="0"></el-option> <el-option label="否" :value="0"></el-option>
@@ -72,9 +72,50 @@
</el-form> </el-form>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="通道系数" name="gainInfo">
<el-tabs type="border-card" style="margin: 15px 0px;">
<el-tab-pane v-for="(item, index) in formContent.gainList" :label="'通道'+(index+1)">
<el-form :model='item' ref='gainFormRef' :disabled="true" class="form-four">
<el-form-item label-width="30" label-position="left" label="ua" prop="uaGain">
<el-input v-model="item.uaGain"/>
</el-form-item>
<el-form-item label-width="30" label-position="left" label="ub" prop="ubGain">
<el-input v-model="item.ubGain"/>
</el-form-item>
<el-form-item label-width="30" label-position="left" label="uc" prop="ucGain">
<el-input v-model="item.ucGain"/>
</el-form-item>
<el-form-item label-width="30" label-position="left" label="u0" prop="u0Gain">
<el-input v-model="item.u0Gain"/>
</el-form-item>
<el-form-item label-width="30" label-position="left" label="ia" prop="iaGain">
<el-input v-model="item.iaGain"/>
</el-form-item>
<el-form-item label-width="30" label-position="left" label="ib" prop="ibGain">
<el-input v-model="item.ibGain"/>
</el-form-item>
<el-form-item label-width="30" label-position="left" label="ic" prop="icGain">
<el-input v-model="item.icGain"/>
</el-form-item>
<el-form-item label-width="30" label-position="left" label="i0" prop="i0Gain">
<el-input v-model="item.i0Gain"/>
</el-form-item>
<el-form-item label-width="30" label-position="left" label="uab" prop="uabGain">
<el-input v-model="item.uabGain"/>
</el-form-item>
<el-form-item label-width="30" label-position="left" label="ubc" prop="uabGain">
<el-input v-model="item.ubcGain"/>
</el-form-item>
<el-form-item label-width="30" label-position="left" label="uca" prop="ucaGain">
<el-input v-model="item.ucaGain"/>
</el-form-item>
</el-form>
</el-tab-pane>
</el-tabs>
</el-tab-pane>
</el-tabs> </el-tabs>
<template #footer> <template #footer>
<div > <div>
<el-button @click='close()'> </el-button> <el-button @click='close()'> </el-button>
<el-button type="primary" @click='save()'>保存</el-button> <el-button type="primary" @click='save()'>保存</el-button>
</div> </div>
@@ -84,17 +125,14 @@
</template> </template>
<script setup lang='ts'> <script setup lang='ts'>
import IPAddress from '@/components/IpAddress/index.vue' import {dialogBig} from '@/utils/elementBind'
import { dialogBig } from '@/utils/elementBind'
import {type StandardDevice} from '@/api/device/interface/standardDevice.ts' import {type StandardDevice} from '@/api/device/interface/standardDevice.ts'
import { ElMessage, type FormItemRule } from 'element-plus' import {ElMessage, type FormItemRule} from 'element-plus'
import { addPqStandardDev, updatePqStandardDev} from '@/api/device/standardDevice/index.ts' import {addPqStandardDev, updatePqStandardDev} from '@/api/device/standardDevice/index.ts'
import { computed, reactive, type Ref, ref } from 'vue' import {computed, reactive, type Ref, ref} from 'vue'
import { useDictStore } from '@/stores/modules/dict' import {useDictStore} from '@/stores/modules/dict'
import { CirclePlus, Delete, EditPen } from '@element-plus/icons-vue'
import {type Device} from '@/api/device/interface/device.ts' import {type Device} from '@/api/device/interface/device.ts'
// 使用 dayjs 库格式化 // 使用 dayjs 库格式化
import dayjs from 'dayjs'
// 存储设备类型选项 // 存储设备类型选项
const devTypeOptions = ref<Device.ResDev[]>([]) const devTypeOptions = ref<Device.ResDev[]>([])
@@ -120,82 +158,84 @@ const pqChannelArray = ref([
label: '4', label: '4',
}, },
]) ])
const activeName=ref('devInfo')
function useMetaInfo() {
function useMetaInfo() {
const dialogVisible = ref(false) const dialogVisible = ref(false)
const titleType = ref('add') const titleType = ref('add')
const formContent = reactive<StandardDevice.ResPqStandardDevice>({ const formContent = reactive<StandardDevice.ResPqStandardDevice>({
id: '', id: '',
name: '', name: '',
devType:'', devType: '',
manufacturer:'', manufacturer: '',
protocol: 'MMS', protocol: 'MMS',
ip: '', ip: '',
port: 102, port: 102,
inspectChannel:'', inspectChannel: '',
encryptionFlag: 0, encryptionFlag: 0,
state: 1, state: 1,
}) })
return { dialogVisible, titleType, formContent } return {dialogVisible, titleType, formContent}
} }
const { dialogVisible, titleType, formContent } = useMetaInfo() const {dialogVisible, titleType, formContent} = useMetaInfo()
// 清空formContent // 清空formContent
const resetFormContent = () => { const resetFormContent = () => {
Object.assign( Object.assign(
formContent,{ formContent, {
id: '', id: '',
name: '', name: '',
devType:'', devType: '',
manufacturer:'', manufacturer: '',
protocol: 'MMS', protocol: 'MMS',
ip: '', ip: '',
port: 102, port: 102,
inspectChannel:'', inspectChannel: '',
encryptionFlag: 0, encryptionFlag: 0,
state: 1, state: 1,
} }
) )
} }
let dialogTitle = computed(() => { let dialogTitle = computed(() => {
return titleType.value === 'add' ? '新增标准设备' : '编辑标准设备' return titleType.value === 'add' ? '新增标准设备' : '编辑标准设备'
}) })
//定义校验规则 //定义校验规则
const rules: Ref<Record<string, Array<FormItemRule>>> = ref({ const rules: Ref<Record<string, Array<FormItemRule>>> = ref({
name : [{ required: true, message: '设备名称必填!', trigger: 'blur' }], name: [{required: true, message: '设备名称必填!', trigger: 'blur'}],
devType: [{ required: true, message: '设备类型必选!', trigger: 'change' }], devType: [{required: true, message: '设备类型必选!', trigger: 'change'}],
manufacturer:[{ required: true, message: '生产厂家必选!', trigger: 'change' }], manufacturer: [{required: true, message: '生产厂家必选!', trigger: 'change'}],
ip: [ ip: [
{ required: true, message: 'IP地址必填', trigger: 'blur' }, {required: true, message: 'IP地址必填', trigger: 'blur'},
{ pattern: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/, message: 'IP地址格式错误', trigger: 'blur' } {pattern: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/, message: 'IP地址格式错误', trigger: 'blur'}
], ],
port: [ port: [
{ required: true, message: '端口号必填!', trigger: 'blur' }, {required: true, message: '端口号必填!', trigger: 'blur'},
{ pattern: /^(6553[0-5]|655[0-2][0-9]|64[0-9]{3}|[1-5]?[0-9]{1,4})$/, message: '端口号范围0到65535的整数', trigger: 'blur' } {pattern: /^(6553[0-5]|655[0-2][0-9]|64[0-9]{3}|[1-5]?[0-9]{1,4})$/, message: '端口号范围0到65535的整数', trigger: 'blur'}
], ],
inspectChannel:[ { required: true, message: '可检通道数必选', trigger: 'change' }], inspectChannel: [{required: true, message: '可检通道数必选', trigger: 'change'}],
encryptionFlag: [{ required: true, message: '是否加密必选!', trigger: 'change' }], encryptionFlag: [{required: true, message: '是否加密必选!', trigger: 'change'}],
series: [{ required: true, message: '请输入识别码', trigger: 'blur' }], series: [{required: true, message: '请输入识别码', trigger: 'blur'}],
devKey: [{ required: true, message: '请输入密钥', trigger: 'blur' }], devKey: [{required: true, message: '请输入密钥', trigger: 'blur'}],
protocol: [{required: true, message: '通讯协议必选!', trigger: 'change'}], protocol: [{required: true, message: '通讯协议必选!', trigger: 'change'}],
}) })
// 关闭弹窗 // 关闭弹窗
const close = () => { const close = () => {
dialogVisible.value = false dialogVisible.value = false
// 清空dialogForm中的值 // 清空dialogForm中的值
resetFormContent() resetFormContent()
// 重置表单 // 重置表单
dialogFormRef.value?.resetFields() dialogFormRef.value?.resetFields()
} }
// 保存数据 // 保存数据
const save = () => { const save = () => {
try { try {
dialogFormRef.value?.validate(async (valid: boolean) => { dialogFormRef.value?.validate(async (valid: boolean) => {
if (formContent.encryptionFlag === 0) { if (formContent.encryptionFlag === 0) {
@@ -204,7 +244,7 @@ const pqChannelArray = ref([
} }
if (valid) { if (valid) {
//保存时判是否加密,把识别码密钥字段清空 //保存时判是否加密,把识别码密钥字段清空
if(formContent.encryptionFlag === 0){ if (formContent.encryptionFlag === 0) {
formContent.series = null formContent.series = null
formContent.devKey = null formContent.devKey = null
} }
@@ -224,7 +264,7 @@ const pqChannelArray = ref([
try { try {
if (formContent.id) { if (formContent.id) {
await updatePqStandardDev(formContent); await updatePqStandardDev(formContent);
ElMessage.success({ message: `${dialogTitle.value}成功!` }) ElMessage.success({message: `${dialogTitle.value}成功!`})
} else { } else {
// 新增需要把通讯协议转成字典ID // 新增需要把通讯协议转成字典ID
const protocolItem = dictStore.getDictData('Protocol').find(item => item.name === formContent.protocol); const protocolItem = dictStore.getDictData('Protocol').find(item => item.name === formContent.protocol);
@@ -233,7 +273,7 @@ const pqChannelArray = ref([
} }
await addPqStandardDev(formContent); await addPqStandardDev(formContent);
ElMessage.success({ message: `${dialogTitle.value}成功!` }) ElMessage.success({message: `${dialogTitle.value}成功!`})
} }
close() close()
// 刷新表格 // 刷新表格
@@ -258,13 +298,15 @@ const pqChannelArray = ref([
// 打开弹窗,可能是新增,也可能是编辑 // 打开弹窗,可能是新增,也可能是编辑
const open = async (sign: string, data: StandardDevice.ResPqStandardDevice,devType:Device.ResDev[]) => { const open = async (sign: string, data: StandardDevice.ResPqStandardDevice, devType: Device.ResDev[]) => {
activeName.value = 'devInfo'
// 重置表单 // 重置表单
dialogFormRef.value?.resetFields() dialogFormRef.value?.resetFields()
devTypeOptions.value = devType devTypeOptions.value = devType
titleType.value = sign titleType.value = sign
if (data.id) { if (data.id) {
Object.assign(formContent,{ ...data }) Object.assign(formContent, {...data})
console.log(formContent)
if (typeof formContent.inspectChannel === 'string') { if (typeof formContent.inspectChannel === 'string') {
formContent.inspectChannel = formContent.inspectChannel.split(',').filter(Boolean) formContent.inspectChannel = formContent.inspectChannel.split(',').filter(Boolean)
} }
@@ -281,11 +323,11 @@ const open = async (sign: string, data: StandardDevice.ResPqStandardDevice,devTy
const handleDevTypeChange = (value: string) => { const handleDevTypeChange = (value: string) => {
// 在这里处理选中事件的逻辑 // 在这里处理选中事件的逻辑
const dev = devTypeOptions.value.find(t =>t.id === value) const dev = devTypeOptions.value.find(t => t.id === value)
if (dev) { if (dev) {
const maxChannel = dev.devChns const maxChannel = dev.devChns
// 动态设置 pqChannelArray 从 1 到 dev.devChns.length // 动态设置 pqChannelArray 从 1 到 dev.devChns.length
pqChannelArray.value = Array.from({ length: dev.devChns }, (_, i) => ({ pqChannelArray.value = Array.from({length: dev.devChns}, (_, i) => ({
value: String(i + 1), value: String(i + 1),
label: String(i + 1), label: String(i + 1),
})) }))
@@ -301,10 +343,10 @@ const handleDevTypeChange = (value: string) => {
} else { } else {
// 可选:恢复默认值 // 可选:恢复默认值
pqChannelArray.value = [ pqChannelArray.value = [
{ value: '1', label: '1' }, {value: '1', label: '1'},
{ value: '2', label: '2' }, {value: '2', label: '2'},
{ value: '3', label: '3' }, {value: '3', label: '3'},
{ value: '4', label: '4' }, {value: '4', label: '4'},
] ]
@@ -312,7 +354,7 @@ const handleDevTypeChange = (value: string) => {
} }
// 对外映射 // 对外映射
defineExpose({ open }) defineExpose({open})
const props = defineProps<{ const props = defineProps<{
refreshTable: (() => Promise<void>) | undefined; refreshTable: (() => Promise<void>) | undefined;
}>() }>()

View File

@@ -99,13 +99,11 @@ const handleInputRetainTime = value => {
ElMessage.warning("持续时间不能小于0周波") ElMessage.warning("持续时间不能小于0周波")
props.childForm[0].dipData.retainTime = 0 props.childForm[0].dipData.retainTime = 0
emit('setRetainTime', 0 ) emit('setRetainTime', 0 )
}else if (value > 300) { }else if (value > 3000) {
ElMessage.warning("持续时间不能大于300周波") ElMessage.warning("持续时间不能大于3000周波")
props.childForm[0].dipData.retainTime = 300 props.childForm[0].dipData.retainTime = 3000
emit('setRetainTime', 300 ) emit('setRetainTime', 3000 )
}else{ }else{
emit('setRetainTime', value ) emit('setRetainTime', value )
} }
} }

View File

@@ -342,7 +342,7 @@
v-model="formContent.testConfig!.realTime" v-model="formContent.testConfig!.realTime"
:precision="0" :precision="0"
:step="1" :step="1"
:min="40" :min="20"
placeholder="请输入实时数据有效组数" placeholder="请输入实时数据有效组数"
/> />
</el-form-item> </el-form-item>

View File

@@ -25,6 +25,11 @@
<el-input number v-model.number='TestConfigForm.scale' placeholder="请输入误差保留小数位" onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)))"/> <el-input number v-model.number='TestConfigForm.scale' placeholder="请输入误差保留小数位" onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)))"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8" v-if="modeStore.currentMode=='比对式'">
<el-form-item label='是否进行系数校准' prop='coefficient' :label-width="140">
<el-switch v-model="TestConfigForm.coefficient" :active-value="1" :inactive-value="0" active-color="#13ce66" inactive-color="#ff4949"></el-switch>
</el-form-item>
</el-col>
<!-- <el-col :span="8">--> <!-- <el-col :span="8">-->
<!-- <el-form-item label='数据处理原则' prop='dataRule' :label-width="140">--> <!-- <el-form-item label='数据处理原则' prop='dataRule' :label-width="140">-->
<!-- <el-select v-model="TestConfigForm.dataRule" clearable placeholder="请选择数据处理原则">--> <!-- <el-select v-model="TestConfigForm.dataRule" clearable placeholder="请选择数据处理原则">-->
@@ -235,6 +240,7 @@ const TestConfigForm = ref<Base.ResTestConfig>({
maxTime: 3, maxTime: 3,
state: 1, //状态 state: 1, //状态
scale:4, scale:4,
coefficient:0,
}) })
const RegResForm = ref<VersionRegister.ResSys_Reg_Res>({ const RegResForm = ref<VersionRegister.ResSys_Reg_Res>({