<style scoped>
|
.custom-table .el-table__header-wrapper th {
|
background-color: #87CEEB; /* 只对带有my-custom-table类的表格生效 */
|
color: #fff;
|
}
|
.container {
|
overflow: auto; /* 确保容器能包裹浮动元素 */
|
margin-bottom: 10px;
|
}
|
|
.right-button {
|
float: right;
|
}
|
.inspection {
|
height: 100%;
|
overflow-y: auto;
|
}
|
|
.inspection::-webkit-scrollbar {
|
width: 0;
|
}
|
|
.title {
|
height: 60px;
|
line-height: 60px;
|
}
|
|
.search {
|
width: 100%;
|
margin-bottom: 10px;
|
background-color: #fff;
|
border-radius: 3px;
|
}
|
|
.search .form-inline {
|
padding-top: 20px;
|
padding-left: 0px;
|
text-align: left;
|
}
|
|
.center {
|
width: calc(100% - 40px);
|
/* max-height: 580px; */
|
background-color: #fff;
|
border-radius: 3px;
|
padding: 20px;
|
overflow: auto;
|
}
|
|
.center-box {
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
flex-direction: column;
|
flex-wrap: wrap;
|
width: 100%;
|
overflow-x: hidden;
|
/* overflow-x: scroll; */
|
cursor: grab;
|
}
|
|
.center-box:active{
|
cursor: grabbing;
|
}
|
|
.tables {
|
table-layout: fixed;
|
margin: 5px 5px 16px;
|
}
|
|
.tables td {
|
height: 40px;
|
width: 100px;
|
text-align: center;
|
font-size: 14px;
|
word-wrap: break-word;
|
white-space: normal;
|
}
|
.thermal-table{
|
min-width: calc(100% - 10px);
|
margin: 5px 5px 0;
|
table-layout: fixed;
|
}
|
.thermal-table td {
|
min-width: 70px;
|
text-align: center;
|
font-size: 14px;
|
word-wrap: break-word;
|
white-space: normal;
|
padding: 5px;
|
}
|
.table-container {
|
overflow-x: auto; /* 使容器支持横向滚动 */
|
max-width: 100%; /* 限制容器的最大宽度 */
|
margin-bottom: 16px;
|
}
|
|
.content {
|
display: flex;
|
height: 100%;
|
align-items: center;
|
justify-content: left;
|
padding: 5px;
|
box-sizing: border-box;
|
overflow: hidden;
|
user-select: none;
|
}
|
|
.content *{
|
user-select: none;
|
}
|
|
.content-h-0 {
|
justify-content: center;
|
}
|
|
.content-h-1 {
|
justify-content: start;
|
}
|
|
.content-h-2 {
|
justify-content: end;
|
}
|
|
.content-v-0 {
|
align-items: center;
|
}
|
|
.content-v-1 {
|
align-items: start;
|
}
|
|
.content-v-2 {
|
align-items: end;
|
}
|
|
.table_input {
|
width: 100%;
|
height: 100%;
|
}
|
.table_input >>>.el-input__inner{
|
border-color: rgba(0, 0, 0, 0.5) !important;
|
}
|
|
.collection {
|
width: 50px;
|
height: 100%;
|
margin-left: 5px;
|
border-color: transparent;
|
background-color: #409eff;
|
color: #fff;
|
border-radius: 4px;
|
font-size: 12px;
|
}
|
|
.collection:active {
|
opacity: .7;
|
}
|
.table_caret{
|
font-size: 16px;
|
margin: 0 5px;
|
color: rgba(0, 0, 0, 0.5);
|
}
|
.table_caret:hover{
|
color: #409eff;
|
cursor: pointer;
|
}
|
|
.table_caret:active{
|
opacity: .8;
|
}
|
>>>input::-webkit-inner-spin-button {
|
-webkit-appearance: none !important; /* 隐藏微调按钮 */
|
margin: 0 !important; /* 移除微调按钮的边距 */
|
}
|
|
>>>input[type=number] {
|
-moz-appearance: textfield !important; /* 针对 Firefox */
|
}
|
>>>.el-form-item__content{
|
display: inline-flex;
|
align-items: center;
|
}
|
.history-btn{
|
display: flex;
|
align-items: center;
|
}
|
.noShow{
|
opacity: 0;
|
}
|
</style>
|
<style>
|
.inspection .el-form-item__label {
|
color: #000;
|
}
|
|
.inspection .el-drawer__header::before {
|
content: "";
|
display: inline-block;
|
width: 4px;
|
height: 30.24px;
|
background: #3A7BFA;
|
border-radius: 10px;
|
margin-left: 32px;
|
margin-right: 8.5px;
|
}
|
|
.inspection .el-drawer__header {
|
color: #303133;
|
text-align: left;
|
}
|
|
.inspection .el-input-group__append {
|
padding: 0 14px;
|
color: #3A7BFA;
|
background-color: #fff;
|
height: 100%;
|
display: flex;
|
align-items: center;
|
}
|
|
.inspection .center-box .el-input__inner {
|
font-size: 12px;
|
padding: 0 6px;
|
text-align: center;
|
}
|
|
.inspection .el-textarea__inner {
|
padding: 2px;
|
}
|
|
.inspection .el-textarea__inner::-webkit-scrollbar {
|
width: 0;
|
}
|
|
.inspection .el-select {
|
display: flex;
|
align-items: center;
|
}
|
|
.inspection .el-textarea__inner {
|
min-height: 100% !important;
|
}
|
|
.inspection .tables .el-input{
|
display: flex;
|
align-items: center;
|
}
|
.thermal-table .el-input{
|
display: flex;
|
align-items: center;
|
}
|
.custom-dialog .el-dialog__body {
|
max-width: 1000px; /* 设置最大宽度 */
|
}
|
</style>
|
<template>
|
<div v-loading="loading" class="inspection">
|
<el-row class="title">
|
<el-col :span="12" style="padding-left: 20px;text-align: left;" :class="{noShow:noBack}">检验单详情
|
</el-col>
|
<el-col :span="12" style="text-align: right;display: flex;align-items: center;justify-content: end">
|
<el-button size="small" type="primary" @click="versionDialogVisible=true" v-if="state==1&&tableLists.find(m=>m.templateId==currentTable)&&tableLists.find(m=>m.templateId==currentTable).templateName.includes('电路试验')">电调/非电调模板切换</el-button>
|
<el-select v-model="template" size="medium" placeholder="电路预设模板" style="margin-right: 10px;margin-left: 10px;" v-if="state==1&&tableLists.find(m=>m.templateId==currentTable)&&tableLists.find(m=>m.templateId==currentTable).templateName.includes('电路试验')"
|
@change="selectInsProductTemplateById">
|
<el-option v-for="(a, ai) in templates" :key="ai" :value="a.id" :label="a.name">
|
<span style="float: left">{{ a.name }}</span>
|
<i class="el-icon-delete" style="float: right; color: #66b1ff; font-size: 16px;line-height: 34px;"
|
@click.stop="handleDelete(a)" v-if="addInsProductTemplatePower"></i>
|
</el-option>
|
</el-select>
|
<el-button size="medium" @click="templateDia=true" v-if="state==1&&tableLists.find(m=>m.templateId==currentTable)&&tableLists.find(m=>m.templateId==currentTable).templateName.includes('电路试验')&&addInsProductTemplatePower">
|
<span style="color: #3A7BFA;">保存模板</span>
|
</el-button>
|
<el-button size="small" type="primary" @click="sampleVisible=true;uploadSample()">样品切换</el-button>
|
<el-button size="small" type="primary" @click="taskVisible=true" v-show="!isLook">任务切换</el-button>
|
<el-button size="small" type="primary" @click="handleSubmit" v-if="state==1"
|
:loading="submitLoading">提交</el-button>
|
<!-- 复核 -->
|
<el-button size="small" type="primary" @click="upInsReview(1,'继续试验')" :loading="reviewLoading"
|
v-if="state>1&&!isLook">继续试验</el-button>
|
<el-button size="small" @click="upInsReview(0,'再次试验')" v-if="state>1&&!isLook" type="danger">再次试验</el-button>
|
<el-button size="small" @click="upInsReview(2,'结束试验')" v-if="state>1&&!isLook">结束试验</el-button>
|
<el-button size="small" @click="handleBack" v-if="!noBack">返回</el-button>
|
</el-col>
|
</el-row>
|
<div class="search" v-show="!isLook">
|
<el-form :inline="true" :model="searchForm" class="form-inline" label-width="100px" label-position="right">
|
<el-form-item label="委托编号:">
|
<el-input clearable v-model="insOrder.entrustCode" disabled size="small" placeholder="请输入"></el-input>
|
</el-form-item>
|
<el-form-item label="样品编号:">
|
<el-tooltip :disabled="!currentSample.sampleCode" :content="currentSample.sampleCode">
|
<el-input clearable v-model="currentSample.sampleCode" disabled size="small" placeholder="请输入" tooltip></el-input>
|
</el-tooltip>
|
</el-form-item>
|
<el-form-item label="样品名称:">
|
<el-input clearable v-model="currentSample.sample" disabled size="small" placeholder="请输入"></el-input>
|
</el-form-item>
|
<el-form-item label="样品数量:">
|
<el-input clearable v-model="sampleProduct.length" disabled size="small" placeholder="请输入" ></el-input>
|
</el-form-item>
|
<el-form-item label="试验标准:">
|
<span>{{ currentSample.testRequirements?currentSample.testRequirements:'-' }}</span>
|
</el-form-item>
|
<el-form-item label="下发时间:">
|
<el-input clearable v-model="insOrder.sendTime" disabled size="small" placeholder="请输入"></el-input>
|
</el-form-item>
|
<el-form-item label="紧急程度:">
|
<el-input clearable v-model="insOrder.typeName" disabled size="small" placeholder="请输入"></el-input>
|
</el-form-item>
|
<el-form-item label="约定时间:">
|
<el-input clearable v-model="insOrder.appointed" disabled size="small" placeholder="请输入"></el-input>
|
</el-form-item>
|
<el-form-item label="当前样品位数:">
|
<el-tag v-if="currentKey">{{ `NO.${currentKey}` }}</el-tag>
|
</el-form-item>
|
<el-form-item label="" v-if="insOrder.rule">
|
<el-tag>{{ !insOrder.rule.includes('不考虑不确定度')?insOrder.rule.split('-')[0]+' '+insOrder.rule.split('-')[1]+'%':insOrder.rule }}</el-tag>
|
</el-form-item>
|
<el-form-item label="备注:">
|
<span style="color:red">{{ insOrder.remark?insOrder.remark:'-' }}</span>
|
</el-form-item>
|
</el-form>
|
</div>
|
<div class="center">
|
<div class="search" style="text-align: left;display: flex;align-items: center;justify-content: space-between;">
|
<div style="display: flex;align-items: center;">
|
<span v-if="tableList.length>0">检验模板:</span>
|
<el-radio-group v-model="currentTable" size="small">
|
<el-radio-button :label="item.templateId" v-for="(item,index) in tableLists" :key="index"
|
size="small">{{ item.templateName }}</el-radio-button>
|
</el-radio-group>
|
<!-- <span style="margin-left: 20px;margin-right: 10px;">模板版本:</span>
|
<el-radio-group v-model="currentTableState" size="small">
|
<el-radio-button label="0" size="small">版本一</el-radio-button>
|
<el-radio-button label="1" size="small">版本二</el-radio-button>
|
</el-radio-group> -->
|
</div>
|
<div style="display: flex;align-items: center;">
|
<el-form :inline="true" :model="otherForm" class="form-inline" label-width="50px" style="padding-top: 0;padding-left: 10px;" v-if="PROJECT=='检测中心'">
|
<el-form-item label="温度:" style="margin-bottom: 0;">
|
<el-input v-model="otherForm.temperature" :disabled="state>1" size="small" placeholder="" style="width: 90px;" @change="m=>subOtherForm(m,'temperature')" ></el-input>
|
<span style="margin-left: 4px;">℃</span>
|
</el-form-item>
|
<el-form-item label="湿度:" style="margin-bottom: 0;">
|
<el-input v-model="otherForm.humidity" :disabled="state>1" size="small" placeholder="" style="width: 90px;" @change="m=>subOtherForm(m,'humidity')"></el-input>
|
<span style="margin-left: 4px;">%</span>
|
</el-form-item>
|
</el-form>
|
<el-button type="primary" size="small" v-if="(isGet||tableLists.find(m=>m.templateId==currentTable)&&tableLists.find(m=>m.templateId==currentTable).templateName=='温度循环检验原始记录'&&temDataAcquisition)&&PROJECT=='检测中心'&&state==1" @click="getDataAcquisitionDevice" :loading="dataAcquisitionLoading">数据采集</el-button>
|
<el-button :type="dataAcquisitionEidtAble?'':'primary'" size="small" v-if="(isGet||(tableLists.find(m=>m.templateId==currentTable)&&tableLists.find(m=>m.templateId==currentTable).templateName=='温度循环检验原始记录'))&&PROJECT=='检测中心'&&collected&&state==1" @click="dataAcquisitionEidtAble=!dataAcquisitionEidtAble">{{dataAcquisitionEidtAble?'关闭编辑':'编辑数采'}}</el-button>
|
</div>
|
<!-- <div class="history-btn" v-if="isLook">
|
<el-button type="primary" icon="el-icon-arrow-left" size="small" @click="goHistory(-1)">上一条记录</el-button>
|
<span style="font-size: 14px;margin: 0 10px;">当前第{{num}}条</span>
|
<el-button type="primary" size="small" @click="goHistory(1)">下一条记录<i class="el-icon-arrow-right el-icon--right"></i></el-button>
|
</div> -->
|
</div>
|
<!-- 常规检验原始记录 -->
|
<div class="center-box" id="nav" v-loading="tableLoading" v-if="!tableLists.find(m=>m.templateId==currentTable)||(!tableLists.find(m=>m.templateId==currentTable).templateName.includes('电路试验')&&!tableLists.find(m=>m.templateId==currentTable).templateName.includes('温湿度试验')&&!tableLists.find(m=>m.templateId==currentTable).templateName.includes('功率容量'))">
|
<table border="1" class="tables" cellpadding="10" v-for="(item,index) in tableList" :key="index+currentTable+currentSample.id">
|
<tbody>
|
<tr v-for="(m,i) in item.arr" :key="i">
|
<td :id='item.templateId+"-"+n.i+"-"+n.r+"-"+n.c' v-for="(n,j) in m" :key="j"
|
v-if="n.v.mc==undefined || Object.keys(n.v.mc).length === 4" :colspan="n.v.mc&&n.v.mc.cs?n.v.mc.cs:1"
|
:rowspan="n.v.mc&&n.v.mc.rs?n.v.mc.rs:1"
|
:style="`background:${n.v.bg?n.v.bg:''};color:${n.v.fc};font-size:${n.v.fs}px;width:${handleWidth(n)}px !important;height:${item.style.rowlen[n.r]}px;font-wight:${n.v.bl?'bold':''};`">
|
<div class="content" :class="`content-h-${n.v.ht} content-v-${n.v.vt}`"
|
:style="`width:${handleWidth(n)}px !important;min-height:${item.style.rowlen[n.r]}px;`">
|
<template v-if="n.v.ps!=undefined && typeof n.v.ps.value ==='string'&& n.v.ps.value.includes('检验值') && state==1">
|
<el-input v-if="getInspectionValueType(n.i) == 1" class="table_input" v-model="n.v.v"
|
:disabled="(getInspectionItemType(n.i) == 1 && !dataAcquisitionEidtAble )|| (n.u != userId && n.u != undefined && n.u != '')"
|
@input="handleInput(n)"
|
@change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`, n,'getDataType')" @mousewheel.native.prevent :key="'abc-'+'000'+index+'000'+i+'000'+j"
|
@keydown.enter="changeInput('',`${item.templateId}-${n.r}-${n.c}-${n.i}`, n, 'getDataType')">
|
<!-- <el-button slot="append" type="primary" icon="el-icon-edit" size="mini"
|
v-if="getInspectionItemType(n.i) == 1" @click="getSystemValue(n)"></el-button> -->
|
</el-input>
|
<el-input v-else-if="getInspectionValueType(n.i) == 2" class="table_input" type="textarea"
|
v-model="n.v.v"
|
:disabled="getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')"
|
@change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`,n,'getDataType')" />
|
<el-select v-else-if="getInspectionValueType(n.i) == 5" class="table_input" v-model="n.v.v"
|
:disabled="state>1||getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')" @visible-change="e=>getDic(e,n.i)"
|
@change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`,n,'getDataType')">
|
<el-option v-for="(e, i) in enumList" :key="i" :label="e.label" :value="e.value"></el-option>
|
</el-select>
|
<span :style="`font-family:${n.v.ff} !important;`"
|
v-else-if="getInspectionValueType(n.i) == 4">/</span>
|
</template>
|
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='结论'">
|
<el-select v-if="(getInspectionValueType(n.i) == 2 || getInspectionValueType(n.i) == 5) && state==1&&PROJECT=='装备电缆'"
|
class="table_input" v-model="n.v.v" @change="saveInsContext()">
|
<el-option label="合格" :value="1"></el-option>
|
<el-option label="不合格" :value="0"></el-option>
|
</el-select>
|
<template v-if="PROJECT=='检测中心'||PROJECT=='装备电缆'&&getInspectionValueType(n.i) != 2 ">
|
<span v-if="n.v.v===1" :style="`font-family:${n.v.ff} !important;color: green;`">合格</span>
|
<span v-else-if="n.v.v===0" :style="`font-family:${n.v.ff} !important;color: red;`">不合格</span>
|
<span v-else-if="n.v.v===3" :style="`font-family:${n.v.ff} !important;color: #3A7BFA;`">不判定</span>
|
<span v-else :style="`font-family:${n.v.ff} !important;`">待定</span>
|
</template>
|
</template>
|
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='设备编码' && state==1">
|
<el-select v-model="n.v.v" placeholder="设备"
|
class="table_input" @visible-change="e=>getEquipOptions(e,n.i)" remote
|
@change="(val)=>changeEquip(val, n)">
|
<el-option v-for="item in equipOptions" :key="item.value" :label="item.value" :value="item.value">
|
</el-option>
|
</el-select>
|
</template>
|
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='设备名称' && state==1">
|
<span>{{ n.v.v }}</span>
|
</template>
|
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='要求值' && state==1">
|
<span :style="`font-family:${n.v.ff} !important;`">{{getTell(n.i)}}</span>
|
</template>
|
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='计算值' && state==1"><span :style="`font-family:${n.v.ff} !important;`">{{ toFixed(n.v.v,n.v.ct) }}</span></template>
|
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='最终值' && state==1">
|
<!-- <el-input class="table_input" type="textarea"
|
:disabled="getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')"
|
v-model="n.v.v" @change="saveInsContext()" v-if="getInspectionValueType(n.i) == 2"></el-input>
|
<el-select v-else-if="getInspectionValueType(n.i) == 5" class="table_input" v-model="n.v.v"
|
:disabled="state>1" @visible-change="e=>getDic(e,n.i)" @change="saveInsContext()">
|
<el-option v-for="(e, i) in enumList" :key="i" :label="e.label" :value="e.value"></el-option>
|
</el-select> -->
|
<span :style="`font-family:${n.v.ff} !important;`">{{ toFixed(n.v.v,n.v.ct) }}</span>
|
</template>
|
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='样品编号'">
|
<div style="display: flex;flex-wrap: nowrap;align-items: center;width: 100%" :title="currentSample.sampleCode">
|
<i class="el-icon-caret-left table_caret" style="width: 16px;" @click="caretSample(-1)" v-if="!currentFiberOpticTape&&!currentFiberOptic"></i>
|
<div :style="`font-family:${n.v.ff} !important;overflow: hidden;white-space: nowrap;width: calc(100% - 32px);`">{{currentSample.sampleCode}}</div>
|
<i class="el-icon-caret-right table_caret" style="width: 16px;"
|
v-if="!currentFiberOpticTape&&!currentFiberOptic" @click="caretSample(1)"></i>
|
</div>
|
</template>
|
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='样品型号'">
|
<div :style="`font-family:${n.v.ff} !important;`" v-if="currentSample.model!==undefined&¤tSample.model!==null">{{currentSample.model}}</div>
|
</template>
|
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='试验标准'">
|
<div :style="`font-family:${n.v.ff} !important;`" v-if="currentSample.testRequirements!==undefined&¤tSample.testRequirements!==null">{{currentSample.testRequirements}}</div>
|
</template>
|
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='套管'">
|
<div style="display: flex;flex-wrap: nowrap;align-items: center;">
|
<!-- <i class="el-icon-caret-left table_caret" @click="caretBushing(-1)"></i> -->
|
<div :style="`font-family:${n.v.ff} !important;`">{{currentBushing?currentBushing.color:''}}</div>
|
<!-- <i class="el-icon-caret-right table_caret" @click="caretBushing(1)"></i> -->
|
</div>
|
</template>
|
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='光纤带'">
|
<div style="display: flex;flex-wrap: nowrap;align-items: center;">
|
<i class="el-icon-caret-left table_caret" @click="caretTape(-1)
|
" v-if="currentFiberOpticTape"></i>
|
<div :style="`font-family:${n.v.ff} !important;`">{{currentFiberOpticTape?currentFiberOpticTape.code:''}}</div>
|
<i class="el-icon-caret-right table_caret"
|
v-if="currentFiberOpticTape"
|
@click="caretTape(1)"></i>
|
</div>
|
</template>
|
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='光纤'">
|
<div style="display: flex;flex-wrap: nowrap;align-items: center;">
|
<i class="el-icon-caret-left table_caret" @click="caretOptic(-1)"
|
v-if="currentFiberOptic"></i>
|
<div :style="`font-family:${n.v.ff} !important;`">{{currentFiberOptic?currentFiberOptic.color:''}}
|
</div>
|
<i
|
v-if="currentFiberOptic" class="el-icon-caret-right table_caret" @click="caretOptic(1)"></i>
|
</div>
|
</template>
|
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='试验前样品检查'">
|
<el-select class="table_input" v-model="n.v.v"
|
:disabled="state>1|| (n.u != userId && n.u != undefined && n.u != '')" @change="(val)=>changeSampleCheck(val, n,'前')">
|
<el-option label="完好" :value="'完好'"></el-option>
|
<el-option label="破损" :value="'破损'"></el-option>
|
</el-select>
|
</template>
|
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='试验后样品检查'">
|
<el-select class="table_input" v-model="n.v.v"
|
:disabled="state>1|| (n.u != userId && n.u != undefined && n.u != '')" @change="(val)=>changeSampleCheck(val, n,'后')">
|
<el-option label="完好" :value="'完好'"></el-option>
|
<el-option label="破损" :value="'破损'"></el-option>
|
</el-select>
|
</template>
|
<span v-else :style="`font-family:${n.v.ff} !important;`" v-html="getValue(n.v)" ></span>
|
</div>
|
</td>
|
</tr>
|
</tbody>
|
</table>
|
</div>
|
<!-- 温度循环检验原始记录 -->
|
<div v-loading="tableLoading" v-else-if="tableLists.find(m=>m.templateId==currentTable).templateName=='温度循环检验原始记录'">
|
<el-divider></el-divider>
|
<h4 style="margin-bottom: 20px;font-size: 24px;font-weight: 400;text-align: center;">温度循环检验原始记录</h4>
|
<el-form :inline="true" :model="wareForm" class="form-inline" label-width="100px" style="justify-content: flex-start;display: flex;align-items: center;width: 100%;">
|
<el-form-item label="型号:" style="margin-bottom: 0;">
|
<el-input clearable v-model="wareForm0.model" disabled size="small" placeholder=""></el-input>
|
</el-form-item>
|
<el-form-item label="试验方法:" style="margin-bottom: 0;">
|
<el-input clearable v-model="wareForm0.methodName" disabled size="small" placeholder=""></el-input>
|
</el-form-item>
|
<!-- <el-form-item label="检测依据:" style="margin-bottom: 0;">
|
<el-input clearable v-model="wareForm0.sample" disabled size="small" placeholder=""></el-input>
|
</el-form-item> -->
|
<el-form-item label="循环次数:" style="margin-bottom: 0;">
|
<el-select v-model="wareForm.inspectionItem" placeholder="请选择" size="small" @change="m=>wareFormChange(m,'inspectionItem')">
|
<el-option
|
v-for="item in numOptions"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="温度:" style="margin-bottom: 0;">
|
<el-select v-model="wareForm.inspectionItemSubclass" placeholder="请选择" size="small" @change="m=>wareFormChange(m,'inspectionItemSubclass')">
|
<el-option
|
v-for="item in temperatureOptions"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value">
|
</el-option>
|
</el-select>
|
<span style="margin-left: 4px;">℃</span>
|
</el-form-item>
|
</el-form>
|
<el-divider></el-divider>
|
<el-form :inline="true" :model="equipForm" label-width="100px" style="justify-content: flex-start;display: flex;align-items: center;width: 100%;">
|
<el-form-item label="仪器名称:">
|
<el-input clearable v-model="equipForm.value0" disabled size="small" placeholder=""></el-input>
|
</el-form-item>
|
<el-form-item label="仪器编号:">
|
<el-select v-model="equipForm.code0" :disabled="state>1" placeholder="请选择" size="small">
|
<el-option
|
v-for="item in equipOptions"
|
:key="item.value"
|
:label="item.value"
|
:value="item.value">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="仪器名称:" >
|
<el-input clearable v-model="equipForm.value1" disabled size="small" placeholder=""></el-input>
|
</el-form-item>
|
<el-form-item label="仪器编号:">
|
<el-select v-model="equipForm.code1" :disabled="state>1" placeholder="请选择" size="small">
|
<el-option
|
v-for="item in equipOptions"
|
:key="item.value"
|
:label="item.value"
|
:value="item.value">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
</el-form>
|
<el-table
|
:data="wareTableData"
|
ref="wareTableData"
|
border
|
v-loading="wareTableDataLoading"
|
style="width: 100%;margin-bottom: 30px;" align="center" v-if="wareForm.inspectionItemSubclass!='20(常温)'&&wareForm.inspectionItemSubclass!='20'||(wareForm.inspectionItemSubclass=='20(常温)'&&wareForm.inspectionItem==1)||(wareForm.inspectionItemSubclass=='20'&&wareForm.inspectionItem==numOptions.length)">
|
<el-table-column
|
label="序号"
|
type="index"
|
width="59"
|
align="center"
|
>
|
</el-table-column>
|
<el-table-column
|
prop="bushColor"
|
label="管色标"
|
width="75"
|
align="center">
|
</el-table-column>
|
<el-table-column
|
prop="code"
|
label="光纤带编号"
|
width="105"
|
align="center">
|
</el-table-column>
|
<el-table-column
|
prop="color"
|
label="光纤色标"
|
align="center"
|
width="90">
|
</el-table-column>
|
<template v-for="(item,index) in wareLength">
|
<el-table-column
|
prop="value0"
|
label="外端"
|
align="center"
|
width="100" :key="(new Date().getTime())+'1234567'">
|
<template slot="header">
|
{{ '外端'+(index+1) }}
|
</template>
|
<template slot-scope="scope">
|
<el-input size="small" v-model="scope.row.arr[index].value0" placeholder="" :disabled="state>1||!dataAcquisitionEidtAble" @change="m=>changeItem(scope.row.arr[index])"></el-input>
|
</template>
|
</el-table-column>
|
<el-table-column
|
prop="value1"
|
label="内端"
|
align="center"
|
width="100" :key="(new Date().getTime())+'23333333'">
|
<template slot="header">
|
{{ '内端'+(index+1) }}
|
</template>
|
<template slot-scope="scope">
|
<el-input size="small" :disabled="state>1||!dataAcquisitionEidtAble" v-model="scope.row.arr[index].value1" placeholder="" @change="m=>changeItem(scope.row.arr[index])"></el-input>
|
</template>
|
</el-table-column>
|
<el-table-column
|
prop="comValue"
|
align="center"
|
min-width="150" :key="(new Date().getTime())+'364654654'">
|
<template slot="header">
|
{{ '衰减系数'+item }}
|
</template>
|
<template slot-scope="scope">
|
<span>{{ scope.row.arr[index].comValue }}</span>
|
</template>
|
</el-table-column>
|
<el-table-column
|
prop="resValue"
|
label="衰减差"
|
align="center"
|
v-if="wareForm.inspectionItemSubclass!='20(常温)'"
|
min-width="90" :key="(new Date().getTime())+'434634634634'">
|
<template slot="header">
|
{{ '衰减差'+(index+1) }}
|
</template>
|
<template slot-scope="scope">
|
<span>{{ scope.row.arr[index].resValue }}</span>
|
</template>
|
</el-table-column>
|
<el-table-column
|
prop="insResult"
|
label="结论"
|
align="center"
|
min-width="70" v-if="wareForm.inspectionItemSubclass!='20(常温)'" :key="(new Date().getTime())+'53457689809808-'">
|
<template slot="header">
|
{{ '结论'+(index+1) }}
|
</template>
|
<template slot-scope="scope">
|
<span v-if="scope.row.arr[index].insResult===1" style="color: green;">合格</span>
|
<span v-else-if="scope.row.arr[index].insResult===0" style="color: red;">不合格</span>
|
<span v-else-if="scope.row.arr[index].insResult===3" style="color: #3A7BFA;">不判定</span>
|
<span v-else>待定</span>
|
</template>
|
</el-table-column>
|
</template>
|
</el-table>
|
</div>
|
<!-- 热循环/温升试验检验原始记录 -->
|
<div v-loading="tableLoading" v-else-if="tableLists.find(m=>m.templateId==currentTable).templateName.includes('热循环')||tableLists.find(m=>m.templateId==currentTable).templateName.includes('温升试验')">
|
<el-divider></el-divider>
|
<h4 style="margin-bottom: 20px;font-size: 24px;font-weight: 400;text-align: center;">{{tableLists.find(m=>m.templateId==currentTable).templateName}}</h4>
|
<el-form :inline="true" :model="wareForm" class="form-inline" label-width="100px" style="justify-content: flex-start;display: flex;align-items: center;width: 100%;">
|
<el-form-item label="仪器名称:" style="margin-bottom: 0;">
|
<el-input clearable v-model="equipForm.value0" disabled size="small" placeholder=""></el-input>
|
</el-form-item>
|
<el-form-item label="仪器名称:" style="margin-bottom: 0;">
|
<el-input clearable v-model="equipForm.value1" disabled size="small" placeholder=""></el-input>
|
</el-form-item>
|
<el-form-item label="型号:" style="margin-bottom: 0;">
|
<el-input clearable v-model="thermalCyclingInfo.model" disabled size="small" placeholder=""></el-input>
|
</el-form-item>
|
<el-form-item label="试验方法:" style="margin-bottom: 0;">
|
<el-input clearable v-model="thermalCyclingInfo.methodName" disabled size="small" placeholder=""></el-input>
|
</el-form-item>
|
</el-form>
|
<el-divider></el-divider>
|
<el-form :inline="true" :model="equipForm" label-width="100px" style="justify-content: flex-start;display: flex;align-items: center;width: 100%;">
|
<el-form-item label="仪器编号:">
|
<el-select v-model="equipForm.code0" :disabled="state>1" placeholder="请选择" size="small">
|
<el-option
|
v-for="item in equipOptions"
|
:key="item.value"
|
:label="item.value"
|
:value="item.value">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="仪器编号:">
|
<el-select v-model="equipForm.code1" :disabled="state>1" placeholder="请选择" size="small">
|
<el-option
|
v-for="item in equipOptions"
|
:key="item.value"
|
:label="item.value"
|
:value="item.value">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="循环次数:" v-if="thermalCyclingInfo.inspectionItemClass=='直流电阻'">
|
<el-input-number v-model="thermalCyclingInfo.inspectionItem" :min="1" :max="thermalCyclingInfo.max" label="" style="margin-top:4px;width: 190px;" size="small" @change="thermalCyclingChange"></el-input-number>
|
</el-form-item>
|
<el-button type="primary" size="small" style="margin-bottom: 22px;margin-left: 30px;" @click="handleAddThermal" v-if="state==1">新增</el-button>
|
<el-button size="small" style="margin-bottom: 22px;" @click="handleDeleteThermal" v-if="state==1">删除</el-button>
|
</el-form>
|
<div class="table-container" v-loading="thermalCyclingLoading">
|
<table border="1" cellpadding="10" class="thermal-table">
|
<tr>
|
<td>检验项目</td>
|
<td :colspan="thermalCyclingInfo.length">检验过程值</td>
|
<td style="width: 100px;">结论</td>
|
</tr>
|
<tr v-for="(item,index) in thermalCyclingInfo.arr">
|
<td style="width: 100px;text-align: center;">{{ item.name }}</td>
|
<td v-for="(m,i) in thermalCyclingInfo.length" style="min-width: 150px;">
|
<div style="display: flex;align-items: center;margin-bottom: 5px;">
|
<label style="width: 100px;white-space: nowrap;font-size: 12px;">温度:</label>
|
<el-input clearable size="small" placeholder="" v-model="item.arr[i].value0" :disabled="state>1" @change="m=>saveThermalCycling(m,item,'value0')"></el-input>
|
<span style="font-size: 12px;margin-left: 13px;margin-right: 13px;"> ℃</span>
|
</div>
|
<div style="display: flex;align-items: center;" v-if="item.name!='环境温度'&&thermalCyclingInfo.inspectionItemClass=='直流电阻'">
|
<label style="width: 100px;white-space: nowrap;font-size: 12px;">直流电阻:</label>
|
<el-input clearable size="small" :disabled="state>1" placeholder="" v-model="item.arr[i].value1" @change="saveThermalCycling"></el-input>
|
<span style="margin-left: 5px;font-size: 12px;"> Ω/km</span>
|
</div>
|
</td>
|
<td>
|
<template v-if="item.name=='环境温度'||item.name=='导线温度'">
|
<span>/</span>
|
</template>
|
<template v-else>
|
<span v-if="item.insResult===1" style="color: green;">合格</span>
|
<span v-else-if="item.insResult===0" style="color: red;">不合格</span>
|
<span v-else-if="item.insResult===3" style="color: #3A7BFA;">不判定</span>
|
<span v-else>待定</span>
|
</template>
|
</td>
|
</tr>
|
</table>
|
</div>
|
</div>
|
<!-- 电路试验 -->
|
<div v-else-if="tableLists.find(m=>m.templateId==currentTable).templateName.includes('电路试验')" style="width: 100%;overflow-x: auto;overflow-y: visible;">
|
<!-- <Circuit></Circuit> -->
|
<CircuitParameters1 v-if="currentTableState==0" :insProduct="currentSample.insProduct" :orderId="id" :sampleId="currentSample.id" :state="state" :num="currentSample.num1" :isLook="isLook" :currentNum="currentNum" ref="CircuitParameters"></CircuitParameters1>
|
<CircuitParameters2 v-if="currentTableState==1" :insProduct="currentSample.insProduct" :orderId="id" :sampleId="currentSample.id" :state="state" :num="currentSample.num1" :isLook="isLook" :currentNum="currentNum" ref="CircuitParameters"></CircuitParameters2>
|
</div>
|
<!-- 温湿度试验 -->
|
<div v-else-if="tableLists.find(m=>m.templateId==currentTable).templateName.includes('温湿度试验')">
|
<Humidity :insProduct="currentSample.insProduct" :orderId="id" :sampleId="currentSample.id" :state="state" :isLook="isLook" :num="currentSample.num1"/>
|
</div>
|
<!-- 功率试验 -->
|
<div v-else-if="tableLists.find(m=>m.templateId==currentTable).templateName.includes('功率容量')">
|
<PowerCapacity :insProduct="currentSample.insProduct" :orderId="id" :sampleId="currentSample.id" :state="state" :isLook="isLook" :num="currentSample.num1"/>
|
</div>
|
<el-upload :action="action"
|
:data="{
|
orderId:id,
|
sonLaboratory:sonLaboratory
|
}"
|
v-if="state==1&&fileAdd"
|
:on-success="handleSuccessUp" :show-file-list="false"
|
accept='.jpg,.jpeg,.png,.gif,.docx,.xls,.xlsx,.pdf,.zip,.rar,.csv' :headers="headers" :on-change="beforeUpload"
|
style="width: 80px !important;"
|
:on-error="onError" ref='upload'>
|
<el-button size="small" type="primary" v-if="state==1">附件上传</el-button></el-upload>
|
<ValueTable class="value-table" ref="fileList" :url="$api.insOrderPlan.getFileList"
|
:componentData="componentData0"
|
:delUrl="$api.insOrderPlan.delfile"
|
:key="upIndex" style="height: 100%;margin-top: 16px;"/>
|
</div>
|
<el-drawer title="样品切换" :visible.sync="sampleVisible" :size="500" :modal="!noBack">
|
<el-table class="el-table" ref="productTable" :data="sampleProduct" height="100%" tooltip-effect="dark" border
|
highlight-current-row @row-click="handleChangeSample" :row-class-name="tableRowClassName"
|
:current-row-key="currentKey" :row-key="record=>record.index" v-if="sampleVisible">
|
<el-table-column type="index" align="center" label="序号" width="70px" :key="Math.random()">
|
</el-table-column>
|
<el-table-column prop="sampleCode" label="样品编号" min-width="100px" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="model" label="样品型号" min-width="100px" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="insState" label="检测状态" width="100px" show-overflow-tooltip>
|
<template slot-scope="scope">
|
<el-tag v-for="(item, i) in typeList" :key="i" v-if="item.value == scope.row.insState" :type="item.type"
|
size="medium" style="margin-right: 5px;">{{item.label}}</el-tag>
|
</template>
|
</el-table-column>
|
<el-table-column prop="checkName" label="检验人" min-width="80px" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="isLeave" label="是否留样" width="95px" show-overflow-tooltip align="center">
|
<template slot-scope="scope">
|
<span>{{ scope.row.isLeave==0?'否':'是' }}</span>
|
</template>
|
</el-table-column>
|
<!-- 检验单会有一个是否有配套样品字段控制显示 -->
|
<el-table-column prop="joinModel" label="配套样品型号" min-width="130px" show-overflow-tooltip
|
v-if="insOrder.mating>0"></el-table-column>
|
<el-table-column prop="joinName" label="配套样品名称" min-width="130px" show-overflow-tooltip
|
v-if="insOrder.mating>0"></el-table-column>
|
<el-table-column prop="joinNum" label="配套样品数量" min-width="130px" show-overflow-tooltip
|
v-if="insOrder.mating>0"></el-table-column>
|
</el-table>
|
</el-drawer>
|
<el-drawer title="任务切换" :visible.sync="taskVisible" :size="500">
|
<ValueTable class="value-table" ref="insOrderPlan" :url="$api.insOrderPlan.inspectionOrderDetailsTaskSwitching"
|
:componentData="componentData" :key="upIndex" style="height: 100%;"/>
|
</el-drawer>
|
<el-dialog title="检验复核" :visible.sync="reviewDia" width="500px">
|
<div class="body" style="display: flex;padding: 10px;" v-if="reviewDia">
|
<div class="search_label" style="width: 150px;"><span class="required-span">* </span>不通过的理由:</div>
|
<div class="search_input" style="width: 100%;">
|
<el-input size="small" clearable v-model="noReason" type="textarea" :autosize="{ minRows: 4}"></el-input>
|
</div>
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="reviewDia = false">取 消</el-button>
|
<el-button type="primary" @click="handleReviewDia" :loading="reviewLoading">确 定</el-button>
|
</span>
|
</el-dialog>
|
<el-dialog title="指定复核人员" :visible.sync="addVerifyDia" width="400px">
|
<div class="body" style="display: flex;padding: 10px;align-items: center;">
|
<div class="search_label" style="width: 150px;"><span class="required-span">*</span>复核人</div>
|
<div class="search_input" style="width: 100%;">
|
<el-select v-model="verifyUser" placeholder="请选择" size="small" style="width: 100%;" clearable filterable>
|
<el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">
|
</el-option>
|
</el-select>
|
</div>
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="addVerifyDia = false">取 消</el-button>
|
<el-button type="primary" @click="submit()">确 定</el-button>
|
</span>
|
</el-dialog>
|
<el-dialog title="数据采集" :visible.sync="dataGetDia" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false" custom-class="custom-dialog">
|
<div>
|
<table border="1" cellpadding="10" class="thermal-table">
|
<tr>
|
<td style="width: 120px;">检验项</td>
|
<td style="width: 120px;">检验子项</td>
|
<td>数采数据</td>
|
</tr>
|
<template v-for="(item,index) in getData">
|
<tr>
|
<td :rowspan="item.child.length">{{item.faName}}</td>
|
<td>{{ item.child[0].name }}</td>
|
<td style="text-align: left;">
|
<el-checkbox-group
|
v-model="getDataIndex" :max="item.child[0].maxNum">
|
<el-checkbox v-for="(n,j) in item.child[0].arr" :label="j" :key="j">{{n}}</el-checkbox>
|
</el-checkbox-group>
|
</td>
|
</tr>
|
<tr v-for="(m,i) in item.child" :key="i+'bbbbbbbbbbbbbb'" v-show="i>0">
|
<td>{{ m.name }}</td>
|
<td style="text-align: left;">
|
<el-checkbox-group
|
v-model="getDataIndex" :max="m.maxNum">
|
<el-checkbox v-for="(n,j) in m.arr" :label="j" :key="j">{{n}}</el-checkbox>
|
</el-checkbox-group>
|
</td>
|
</tr>
|
</template>
|
</table>
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-button type="primary" @click="submitDataGet()" :loading="getDataIndexLoading">确 定</el-button>
|
</span>
|
</el-dialog>
|
<el-dialog
|
title="选择电路检验模板版本"
|
:visible.sync="versionDialogVisible"
|
width="30%"
|
:close-on-click-modal="false"
|
:close-on-press-escape="false"
|
:show-close="false">
|
<el-radio-group v-model="currentTableState">
|
<el-radio :label="0">电调-电路检验原始记录</el-radio>
|
<el-radio :label="1">非电调-电路检验原始记录</el-radio>
|
</el-radio-group>
|
<span slot="footer" class="dialog-footer">
|
<el-button type="primary" :loading="versionLoading" @click="saveVersion">确 定</el-button>
|
</span>
|
</el-dialog>
|
<el-dialog title="试验信息" :visible.sync="experimentDia" width="50%">
|
<div style="height: 80vh;overflow-y: auto;">
|
<div class="body" style="display: flex;padding: 10px;align-items: center;" v-if="experimentDia0">
|
<div class="search_label" style="width: 150px;"><span class="required-span">*</span>实验阶段</div>
|
<div class="search_input" style="width: 100%;">
|
<el-input clearable v-model="experimentInfo.term" size="small" placeholder=""></el-input>
|
</div>
|
</div>
|
<div class="body" style="display: flex;padding: 10px;align-items: center;" v-if="experimentDia0">
|
<div class="search_label" style="width: 150px;"><span class="required-span">*</span>实验操作</div>
|
<div class="search_input" style="width: 100%;">
|
<el-input clearable v-model="experimentInfo.note" size="small" placeholder="" type="textarea"
|
:rows="2"></el-input>
|
</div>
|
</div>
|
<table border="1" cellpadding="10" class="thermal-table">
|
<tr style="font-size: 18px;font-weight: 500;background-color: #F0F1F5;padding: 10px 0;box-sizing: border-box;">
|
<td>样品</td>
|
<td>样品编号</td>
|
<td>型号</td>
|
<td>检验项</td>
|
<td>检验子项</td>
|
<td>工时</td>
|
</tr>
|
<template v-for="(item,index) in sampleProduct">
|
<tr>
|
<td :rowspan="item.insProduct.length+1">{{ item.sample }}</td>
|
<td :rowspan="item.insProduct.length+1">{{ item.sampleCode }}</td>
|
<td :rowspan="item.insProduct.length+1">{{ item.model }}</td>
|
</tr>
|
<tr v-for="(m,i) in item.insProduct" :key="item.id+i">
|
<td>{{ m.inspectionItem }}</td>
|
<td>{{ m.inspectionItemSubclass }}</td>
|
<td><el-input-number v-model="m.outputWorkTime" :min="0" :max="100" label="工时" size="small"></el-input-number></td>
|
</tr>
|
</template>
|
</table>
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="experimentDia = false">取 消</el-button>
|
<el-button type="primary" @click="submit0">确 定</el-button>
|
</span>
|
</el-dialog>
|
<el-dialog
|
title="文件预览"
|
:visible.sync="lookFileVisible"
|
width="60%" fullscreen :modal="false">
|
<filePreview v-if="lookFileVisible" :fileUrl="currentFile.url"
|
:currentFile="currentFile" style="max-height: 87vh;overflow-y: auto;"/>
|
</el-dialog>
|
<el-dialog title="保存模板" :visible.sync="templateDia" width="400px">
|
<div class="body" style="display: flex;align-items: center;" v-if="templateDia">
|
<div class="search_label" style="width: 90px;"><span class="required-span">* </span>模板名称:</div>
|
<div class="search_input">
|
<el-input size="small" clearable v-model="templateName"></el-input>
|
</div>
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="templateDia = false">取 消</el-button>
|
<el-button type="primary" @click="addTemplateDia" :loading="templateLoading">确 定</el-button>
|
</span>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script>
|
import ValueTable from '../../tool/value-table.vue'
|
import file from '../../../util/file'
|
import excelFunction from '../../../util/excelFountion'
|
import CircuitParameters1 from './circuit-parameters1.vue'
|
import CircuitParameters2 from './circuit-parameters2.vue'
|
import Humidity from './humidity.vue'
|
import PowerCapacity from './power-capacity.vue'
|
import filePreview from '../../tool/file-preview.vue'
|
export default {
|
props: ['sonLaboratory', 'orderId', 'state','inspectorList','version','orderStateId','isLook','num1','noBack'],
|
components: {
|
ValueTable,
|
CircuitParameters1,
|
CircuitParameters2,
|
filePreview,
|
Humidity,
|
PowerCapacity,
|
},
|
data() {
|
return {
|
lookFileVisible:false,//预览文件
|
experimentDia:false,
|
experimentDia0:false,
|
experimentInfo:{
|
note:'',
|
term:''
|
},
|
currentNum:0,
|
versionLoading:false,
|
versionDialogVisible:false,
|
currentTableState:0,
|
dataGetDia:false,
|
wareTableDataLoading:false,
|
fileAdd:false,
|
sampleVisible: false,
|
taskVisible: false,
|
submitLoading: false,
|
searchForm: {
|
sampleName: null,
|
state: null
|
},
|
id: 0,
|
componentData: {
|
entity: {
|
sonLaboratory: null,
|
userId: 0
|
},
|
isIndex: false,
|
showSelect: false,
|
select: false,
|
selectMethod: 'handleChangeTask',
|
sort: false,
|
do: [],
|
isPage: false,
|
linkEvent: {},
|
tagField: {
|
type: {
|
select: []
|
},
|
insState: {
|
select: []
|
},
|
},
|
currentId: '',
|
selectField: {},
|
requiredAdd: [],
|
requiredUp: []
|
},
|
componentData0: {
|
entity: {
|
insOrderId:'',
|
sonLaboratory:this.sonLaboratory
|
},
|
isIndex: true,
|
showSelect: false,
|
select: false,
|
sort: false,
|
init:false,
|
do: [
|
{
|
id: 'handleDown',
|
font: '下载',
|
type: 'text',
|
method: 'handleDown'
|
},{
|
id: 'delete',
|
font: '删除',
|
type: 'text',
|
method: 'doDiy',
|
disabFun: (row, index) => {
|
return this.state!=1
|
}
|
},
|
{
|
id: '1',
|
font: '预览',
|
type: 'text',
|
method: 'lookFile',
|
}
|
],
|
isPage: false,
|
linkEvent: {},
|
tagField: {
|
type:{
|
select:[
|
{
|
value: 1,
|
label: '图片'
|
},
|
{
|
value: 2,
|
label: '文件'
|
}
|
]
|
}
|
},
|
currentId: '',
|
selectField: {},
|
requiredAdd: [],
|
requiredUp: []
|
},
|
upIndex: 0,
|
changeType:null,
|
insOrder: {},
|
sampleProduct: [],
|
typeList: [],
|
urgentList: [],
|
currentSample: {}, //当前样品信息
|
tableList: [],
|
loading: false,
|
ps: {},
|
param: {},
|
currentKey: 1,
|
currentKey0: 1,
|
currentKey1: 1,
|
currentKey2: 1,
|
comparisonList: [],
|
excelMethodList: [],
|
equipOptions: [],
|
userId: 0,
|
reviewLoading: false,
|
reviewDia: false,
|
noReason: '',
|
tableWidth: 1000,
|
currentTable: null,
|
tableLists: [],
|
widthList: [],
|
addVerifyDia: false,
|
verifyUser: null,
|
personList: [],
|
enumList: [],
|
fiberOpticTape:[],//光纤带列表
|
fiberOptic:[],//光纤列表
|
bushing:[],//套管列表
|
currentFiberOpticTape:null,//当前光纤带
|
currentFiberOptic:null,//当前光纤
|
currentBushing:null,//当前套管
|
tableLoading:false,
|
upLoading:false,
|
temptList:null,
|
fiber:[],
|
fibers:[],
|
casing:[],
|
currentTab:null,
|
wareForm:{
|
inspectionItem:1,
|
inspectionItemSubclass:'20(常温)',
|
},
|
wareForm0:{},
|
numOptions:[],
|
temperatureOptions:[],
|
wareTableData:[],
|
equipForm:{
|
value0:null,
|
code0:null,
|
value1:null,
|
code1:null,
|
},
|
result: null,
|
worker: null,
|
worker0: null,
|
wareLength:[],
|
dataAcquisitionInfo:{},
|
dataAcquisitionInfoNew:{},
|
dataAcquisitionEidtAble:false,
|
isGet:false,
|
dataAcquisitionLoading:false,
|
collected:false,
|
// 热循环---开始
|
thermalCyclingInfo:{
|
max:0,
|
inspectionItem:1,
|
arr:[],
|
length:1,
|
inspectionItemClass:null,
|
},
|
thermalCyclingLoading:false,
|
temDataAcquisition:false,
|
getData:[],
|
getDataIndex:[],
|
getDataIndexLoading:false,
|
changeType:null,
|
getDataTypeId:'',
|
getDataType:null,
|
num:0,
|
otherForm:{
|
temperature:'',
|
humidity:''
|
},
|
currentFile:{},//当前文件
|
templates:[],//电路试验模板
|
templateDia:false,//电路试验模板保存模板弹框
|
template:null,
|
templateLoading:false,
|
templateName:'',
|
addInsProductTemplatePower:false,//配置模板权限
|
}
|
},
|
// 用于上传文件的信息
|
computed: {
|
headers() {
|
return {
|
'token': sessionStorage.getItem('token')
|
}
|
},
|
action() {
|
return this.javaApi + this.$api.insOrderPlan.uploadFile
|
}
|
},
|
created() {
|
this.componentData.entity.sonLaboratory = this.sonLaboratory;
|
this.id = this.orderId;
|
this.currentTableState = this.version
|
this.num = this.num1
|
this.getUserInfo()
|
},
|
mounted() {
|
this.getTypeDicts()
|
this.getInsStateDicts()
|
this.getComparisonList()
|
this.getAuthorizedPerson()
|
this.scrollInit()
|
this.getPower()
|
this.startWorker()
|
this.selectInsProductTemplate()
|
},
|
watch: {
|
// 监听任务id,获取任务信息
|
id(val) {
|
this.loading = true
|
this.$axios.post(this.$api.insOrderPlan.doInsOrder, {
|
id: val,
|
laboratory: this.sonLaboratory
|
}).then(async res => {
|
this.insOrder = res.data.insOrder;
|
this.componentData0.entity.insOrderId = val;
|
this.$refs.fileList.selectList()
|
this.urgentList.forEach(m => {
|
if (m.value == this.insOrder.type) {
|
this.insOrder.typeName = m.label
|
}
|
})
|
this.loading = false
|
if(!res.data.sampleProduct||res.data.sampleProduct.length==0){
|
return this.$message.error('该任务没有样品信息')
|
}
|
// 赋值当前样品列表
|
this.sampleProduct = res.data.sampleProduct
|
this.currentSample = this.HaveJson(this.sampleProduct[0])
|
let insProduct = this.HaveJson(this.currentSample.insProduct)
|
// 温度、湿度赋值
|
if(insProduct&&insProduct.length>0){
|
let {temperature,humidity} = insProduct[0];
|
this.otherForm = {
|
temperature:temperature?temperature:null,
|
humidity:humidity?humidity:null,
|
}
|
}
|
// 获取当前样品的检验项
|
let list = await this.getCurrentProduct(this.currentSample.id,0)
|
this.currentSample.insProduct = this.HaveJson(list)
|
// 初始化传递到后端的参数
|
this.param = {}
|
this.changeType = 0;
|
this.currentSample.insProduct.forEach(a => {
|
// 是否为成品电缆下的松套管项目,不是则执行初始化
|
if(this.handleCasing(a.inspectionItem)){
|
this.param[a.id] = {
|
insValue: [],
|
comValue: [],
|
resValue: null,
|
equipValue: [],
|
equipName: [],
|
insResult: null,
|
beforeCheck:null,
|
afterCheck:null,
|
}
|
}
|
})
|
this.determineWhetherToCollectData()//是否需要数采
|
if (this.currentSample.index == undefined) this.currentSample['index'] = 1
|
let bushing = this.currentSample.bushing
|
this.getTableLists();//处理模板列表信息
|
|
this.componentData.currentId = val;
|
this.currentKey = 1;
|
// 清空光纤配置相关数据---下面信息暂时可忽略
|
this.fiberOpticTape = []
|
this.currentFiberOpticTape = null;
|
this.fiberOptic = []
|
this.currentFiberOptic = null;
|
this.bushing = []
|
this.currentBushing = null;
|
this.currentTab = null;
|
if(bushing&&bushing.length>0){
|
this.bushing = bushing
|
}
|
})
|
},
|
// 监听当前模板变化
|
currentTable(val1, val0) {
|
if (val0 != null && val1 != val0) {
|
// if(this.tableLists.find(m=>m.templateId==val1)&&(this.tableLists.find(m=>m.templateId==val1).templateName=='成品缆检验原始记录')){
|
// if(this.casing.length>0){
|
// this.handleChange(this.casing[0].id,3)
|
// }
|
// return
|
// }
|
if(this.changeType&&this.changeType>0){
|
// 如果是光纤、光纤带,则不执行下面操作
|
return
|
}
|
this.tableLists.forEach(async (m, i) => {
|
if (m.templateId == val1) {
|
let list = await this.getCurrentProduct(this.currentSample.id,0)
|
this.currentSample.insProduct = this.HaveJson(list)//赋值当前样品的检验项
|
this.param = {}//初始化传到后端的参数
|
this.currentSample.insProduct.forEach((a, j) => {
|
if(this.handleCasing(a.inspectionItem)){
|
this.param[a.id] = {
|
insValue: [],
|
comValue: [],
|
resValue: null,
|
equipValue: [],
|
equipName: [],
|
insResult: null
|
}
|
}
|
})
|
// 去重模板,返回有几个模板
|
const mySet1 = new Set();
|
this.tableLists = this.currentSample.insProduct.filter(m => {
|
let num0 = mySet1.size;
|
if (m.templateId != null&&m.template != null) {
|
try {
|
mySet1.add(JSON.stringify({
|
template: m.template,
|
templateId: m.templateId
|
}))
|
} catch (error) {
|
console.log(222,error);
|
}
|
}
|
let num1 = mySet1.size;
|
if (num1 > num0) {
|
return m
|
}
|
});
|
if (this.tableLists && this.tableLists.length > 0) {
|
this.tableList = null;
|
this.tableList = this.tableLists.filter(m => m.templateId == val1)
|
// 对模板进行处理
|
this.handleTableData()
|
}
|
}
|
})
|
}
|
},
|
// 特殊检验项--监听设备信息改变
|
equipForm:{
|
deep:true,
|
handler(val){
|
if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='温度循环检验原始记录'||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('热循环')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('温升试验'))&&this.equipOptions&&this.equipOptions.length>0){
|
// 初始化设备信息
|
this.param[this.currentSample.insProduct[0].id].equipValue = []
|
this.param[this.currentSample.insProduct[0].id].equipName = []
|
if(this.equipForm.code0){
|
// 赋值第一个设备的信息
|
this.equipForm.value0 = this.equipOptions.find(m=>m.value==this.equipForm.code0).label
|
this.param[this.currentSample.insProduct[0].id].equipValue.push({
|
i:this.currentSample.insProduct[0].id,
|
v:{
|
v:this.equipForm.code0
|
}
|
})
|
this.param[this.currentSample.insProduct[0].id].equipName.push({
|
i:this.currentSample.insProduct[0].id,
|
v:{
|
v:this.equipForm.value0
|
}
|
})
|
}
|
if(this.equipForm.code1){
|
// 赋值第二个设备的信息
|
this.equipForm.value1 = this.equipOptions.find(m=>m.value==this.equipForm.code1).label
|
this.param[this.currentSample.insProduct[0].id].equipValue.push({
|
i:this.currentSample.insProduct[0].id,
|
v:{
|
v:this.equipForm.code1
|
}
|
})
|
this.param[this.currentSample.insProduct[0].id].equipName.push({
|
i:this.currentSample.insProduct[0].id,
|
v:{
|
v:this.equipForm.value1
|
}
|
})
|
}
|
// 保存数据
|
this.saveInsContext(this.currentSample.insProduct[0].id)
|
}
|
}
|
},
|
},
|
beforeDestroy() {
|
// 在组件销毁前确保停止 Worker,避免内存泄漏
|
this.stopWorker();
|
},
|
methods: {
|
// 数据采集
|
getDataAcquisitionDevice(){
|
if(this.tableLists.find(m=>m.templateId==this.currentTable)&&this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='温度循环检验原始记录'){
|
// 温度循环检验原始记录----数采----PK8000
|
let temperature = this.wareForm.inspectionItemSubclass;
|
if(typeof temperature == 'string'&&temperature.includes('(常温)')){
|
temperature = `20℃(常温)`
|
}else{
|
temperature = temperature + '℃'
|
}
|
this.dataAcquisitionLoading = true
|
this.$axios.post(this.$api.deviceScope.temDataAcquisition,{
|
entrustCode:this.insOrder.entrustCode,
|
sampleCode:this.currentSample.sampleCode,
|
model:this.wareForm0.model,
|
cycles:this.wareForm.inspectionItem,
|
temperature:temperature,
|
}, {
|
headers: {
|
'Content-Type': 'application/json'
|
},
|
noQs:true
|
}).then(res=>{
|
this.dataAcquisitionLoading = false
|
if(res.code!=200){
|
return
|
}
|
// 赋值回显PK8000的数据
|
this.wareFormChange()
|
})
|
}else{
|
// 一般的数据采集
|
this.dataAcquisitionLoading = true
|
this.$axios.get(this.$api.deviceScope.dataCollection+'?entrustCode='+this.insOrder.entrustCode+'&sampleCode='+this.currentSample.sampleCode + '&id=' + this.currentSample.id).then(res=>{
|
this.dataAcquisitionLoading = false
|
if(res.code!=200){
|
return
|
}
|
this.dataAcquisitionInfoNew = this.HaveJson(res.data)
|
// 对数采回来的值进行处理
|
this.handleDataAcquisition(res.data)
|
})
|
}
|
},
|
handleDataAcquisition(data){
|
// 是否可以编辑数采数据
|
if(this.dataAcquisitionEidtAble){
|
this.getDataType = 1;
|
}else{
|
this.getDataType = 2;
|
}
|
this.dataAcquisitionInfo = {}
|
this.getData = []
|
for (let i in data){
|
let obj = {
|
faName:i,
|
child:[]
|
}
|
// 循环数采数据
|
for(let j in data[i]){
|
// 拼接字符串 检验项+检验子项
|
let str0 = ''
|
if(i==j){
|
str0 = i+','
|
}else{
|
str0 = i+','+j
|
}
|
if(j!='frequency'&&data[i][j]&&(!data[i][j].result||typeof data[i][j].result == 'string')){
|
// 处理数采信息格式
|
this.dataAcquisitionInfo[str0] = {
|
value:data[i][j].result,
|
frequency:data[i].frequency
|
}
|
let list = this.tableList[0].arr
|
// 循环页面列表信息,判断数采数据对应页面列表信息的检验项是哪个,并给当前检验项绑定设备信息
|
list.forEach((item,index)=>{
|
let num0 = 0;
|
let str = ''
|
item.forEach(m=>{
|
if(m.v.ps&&(m.v.ps.value=='检验子项'||m.v.ps.value=='检验项')){
|
if(m.v.ps&&m.v.ps.value=='检验项'){
|
if(num0==0){
|
str = m.v.v+','
|
num0++
|
}
|
}
|
if(m.v.ps&&m.v.ps.value=='检验子项'){
|
if(num0==1){
|
str = str+m.v.v
|
}
|
}
|
}
|
// 绑定设备信息
|
if(data[i][j].equipName&&data[i][j].equipValue&&m.v&&m.v.ps&&m.v.ps.value=='设备编码'&&str0==str){
|
if(!m.v.v){
|
this.changeEquip(data[i][j].equipValue,m,data[i][j].equipName)
|
}
|
}
|
})
|
})
|
}else if(j!='frequency'&&data[i][j]&&Array.isArray(data[i][j].result)){
|
// 如果返回的数采数据是数组,则处理数组
|
// 以下逻辑为获取每个检验项可输入的检验值的最大个数
|
let str0 = ''
|
if(i==j){
|
str0 = i+','
|
}else{
|
str0 = i+','+j
|
}
|
let list = this.tableList[0].arr
|
let maxNum = 0
|
list.forEach((item,index)=>{
|
let num0 = 0;
|
let str = ''
|
item.forEach(m=>{
|
if(m.v.ps&&(m.v.ps.value=='检验子项'||m.v.ps.value=='检验项')){
|
if(m.v.ps&&m.v.ps.value=='检验项'){
|
if(num0==0){
|
str = m.v.v+','
|
num0++
|
}
|
}
|
if(m.v.ps&&m.v.ps.value=='检验子项'){
|
if(num0==1){
|
str = str+m.v.v
|
}
|
}
|
let num = 0;
|
list[index].forEach(n=>{
|
if(n.v.ps&&n.v.ps.value&&typeof n.v.ps.value == 'string'&&n.v.ps.value.includes('检验值')){
|
num++
|
}
|
})
|
if(str0==str){
|
maxNum = num
|
}
|
}
|
// 绑定设备
|
if(data[i][j].equipName&&data[i][j].equipValue&&m.v&&m.v.ps&&m.v.ps.value=='设备编码'&&str0==str){
|
if(!m.v.v){
|
this.changeEquip(data[i][j].equipValue,m,data[i][j].equipName)
|
}
|
}
|
})
|
})
|
// let arr3 = []
|
// for (let l=0 ;i<data[i][j].result.length;i++){
|
// arr3.push({
|
// id:,
|
// value:
|
// })
|
// }
|
// 获取到最大检验值输入个数后重组数据
|
let obj0 = {
|
name:j,
|
arr:data[i][j].result,
|
maxNum:maxNum,
|
value:[]
|
}
|
// 如果数采返回的数组长度大于最大输入个数,则将数采数据在弹框中展示,用户选择需要手动选择数采的信息
|
if(data[i][j].result&&Array.isArray(data[i][j].result)&&data[i][j].result.length>maxNum){
|
obj.child.push(obj0)
|
}else{
|
this.dataAcquisitionInfo[str0] = {
|
value:data[i][j].result
|
}
|
}
|
}
|
}
|
if(obj.child.length>0){
|
this.getData.push(obj)
|
}
|
}
|
// 如果存在数采返回的数组长度大于最大输入个数,则弹出弹框选择
|
if(this.getData.length>0){
|
this.dataGetDia = true
|
this.getDataIndex = []
|
}else{
|
// 如果都不存在,则,进入处理数采线程里去处理数据
|
try {
|
// 向 Worker 发送消息,开始处理逻辑
|
this.getDataIndexLoading = false
|
this.dataGetDia = false
|
this.getDataTypeId = ''
|
this.worker0.postMessage(JSON.stringify({
|
dataAcquisitionInfo: this.dataAcquisitionInfo,
|
list:this.tableList[0].arr
|
}));
|
} catch (error) {
|
console.log(1111,error);
|
}
|
}
|
// 监听 Worker 返回的结果
|
this.worker0.onmessage = (event) => {
|
let result = JSON.parse(event.data);
|
if(result.method=='changeInput'){
|
// 采集后的数据,需要进行计算的线程进行计算
|
let {list,n} = result.value
|
this.$set(this.tableList[0],'arr',list)
|
this.changeInput('',`${this.currentSample.insProduct[0].templateId}-${n.r}-${n.c}-${n.i}`,n)
|
}else if(result.getDataTypeId){
|
// 获取到数采最后一项,检验项的ID
|
this.getDataTypeId = result.getDataTypeId
|
}
|
};
|
},
|
// 如果存在数采返回的数组长度大于最大输入个数,则弹出弹框选择,这里是弹框的提交
|
submitDataGet(){
|
if(this.getDataIndex.length==0){
|
this.$message.error('请选择需要采集的数据')
|
return
|
}
|
this.getDataIndex.sort((a, b) => a - b);
|
for (let i=0;i<this.getData.length;i++){
|
for(let j=0;j<this.getData[i].child.length;j++){
|
// 对用户选择的数采信息进行处理,赋值
|
let arr = []
|
for(let k=0;k<this.getDataIndex.length;k++){
|
arr.push( this.dataAcquisitionInfoNew[this.getData[i].faName][this.getData[i].child[j].name].result[this.getDataIndex[k]])
|
}
|
this.dataAcquisitionInfoNew[this.getData[i].faName][this.getData[i].child[j].name].result = arr
|
}
|
}
|
this.getDataIndexLoading = true
|
// 赋值完成后需要再次进入处理数采线程里去处理数据
|
this.handleDataAcquisition(this.dataAcquisitionInfoNew)
|
},
|
// 多线程
|
startWorker() {
|
if (this.worker) {
|
this.stopWorker(); // 确保之前的 Worker 已停止
|
}
|
// 创建 Worker 实例
|
this.worker = new Worker('/static/js/worker.js');
|
if (this.worker0) {
|
this.stopWorker(); // 确保之前的 Worker 已停止
|
}
|
// 创建 Worker 实例
|
this.worker0 = new Worker('/static/js/worker0.js');
|
},
|
// 停止多线程
|
stopWorker() {
|
if (this.worker) {
|
this.worker.terminate();
|
this.worker = null;
|
}
|
if (this.worker0) {
|
this.worker0.terminate();
|
this.worker0 = null;
|
}
|
},
|
// 温度循环---开始
|
changeItem(row){
|
// 内端、外端进行赋值逻辑处理
|
|
// 赋值到页面
|
if(row.value0&&!row.value1){
|
// 赋值内端
|
this.$set(row,'comValue',Number(row.value0).toFixed(3))
|
}else if(!row.value0&&row.value1){
|
// 赋值外端
|
this.$set(row,'comValue',Number(row.value1).toFixed(3))
|
}else if(row.value0&&row.value1){
|
// 赋值计算值
|
this.$set(row,'comValue',((Number(row.value0)+Number(row.value1))/2).toFixed(3))
|
}else{
|
return
|
}
|
// 赋值到传到后端的参数---特殊项目必须严格按照这种格式传参,否则后端识别不了
|
// 赋值内外端
|
this.param[row.id].insValue = [
|
{
|
i:row.id,
|
v:{
|
v:row.value0
|
}
|
},
|
{
|
i:row.id,
|
v:{
|
v:row.value1
|
}
|
}
|
]
|
// 赋值计算值
|
this.param[row.id].comValue = [{
|
i:row.id,
|
v:{
|
v:row.comValue
|
}
|
}]
|
// 判断结果,得出结论
|
if(this.wareForm.inspectionItemSubclass!='20(常温)'){
|
// 给页面列表赋值最终值
|
row.resValue = row.comValue?Math.abs(row.comValue-Number(row.insProduct.complue)).toFixed(3):''
|
// 给传递到后端的参数赋值最终值
|
this.param[row.id].resValue.v.v = row.resValue
|
// 判断结论,给页面列表赋值结论
|
if(row.ask&&row.resValue){
|
if(row.ask.includes('<')){
|
row.insResult = row.resValue<row.ask.split('<')[1]?1:0
|
}else if(row.ask.includes('>')){
|
row.insResult = row.resValue<row.ask.split('>')[1]?1:0
|
}else if(row.ask.includes('=')){
|
row.insResult = row.resValue==row.ask.split('=')[1]?1:0
|
}else if(row.ask.includes('≥')){
|
row.insResult = row.resValue>=row.ask.split('≥')[1]?1:0
|
}else if(row.ask.includes('≤')){
|
row.insResult = row.resValue<=row.ask.split('≤')[1]?1:0
|
}
|
// 给传递到后端的参数赋值结论
|
this.param[row.id].insResult.v.v = row.insResult
|
}
|
}else{
|
// 20(常温)默认合格
|
this.param[row.id].insResult.v.v = 1
|
}
|
this.$refs.wareTableData.doLayout()
|
// 进行数据的保存
|
this.saveInsContext()
|
},
|
// 当循环次数、温度点变化、PK8000数采时会调用,主要是获取信息进行回显
|
wareFormChange(m,type){
|
if(this.PROJECT!='检测中心'||!this.tableLists.find(m=>m.templateId==this.currentTable)||this.tableLists.find(m=>m.templateId==this.currentTable).templateName!='温度循环检验原始记录'){
|
return
|
}
|
if(m&&type){
|
this.wareForm[type] = m
|
}
|
let wareForm = {...this.wareForm}
|
if(this.wareForm.inspectionItemSubclass=='20(常温)'){
|
wareForm.inspectionItemSubclass ='20℃(常温)'
|
}else{
|
wareForm.inspectionItemSubclass = wareForm.inspectionItemSubclass+'℃'
|
}
|
this.wareTableDataLoading = true
|
this.$axios.post(this.$api.insOrderPlan.temCycle,{
|
sampleId:this.currentSample.id,
|
...wareForm
|
}).then(res => {
|
this.wareTableDataLoading = false
|
if (res.code == 201) return
|
let {productVos,sampleVo} = res.data
|
this.wareForm0 = sampleVo
|
// 初始化传到后端的参数
|
productVos = productVos.map(m=>{
|
let obj = {...m,...m.insProduct}
|
this.param[obj.id] = {
|
insValue: [],
|
comValue: [],
|
resValue: {
|
i:obj.id,
|
v:{
|
v:null
|
}
|
},
|
equipValue: [],
|
equipName: [],
|
insResult: {
|
i:obj.id,
|
v:{
|
v:null
|
}
|
}
|
}
|
let insProductResult = obj.insProductResult
|
// 给传递到后端的参数进行赋值,给页面数据赋值
|
if(insProductResult){
|
for(let i in insProductResult){
|
switch (i) {
|
// 检验值赋值
|
case 'insValue':
|
let insValue = JSON.parse(insProductResult[i])
|
if(insValue&&insValue.length>1){
|
// 后端的参数进行赋值
|
this.param[obj.id].insValue = [
|
{
|
i:obj.id,
|
v:{
|
v:insValue[0].v
|
}
|
},
|
{
|
i:obj.id,
|
v:{
|
v:insValue[1].v
|
}
|
}
|
]
|
// 页面数据赋值
|
obj.value0 = insValue[0].v
|
obj.value1 = insValue[1].v
|
}else if(insValue&&insValue.length==1){
|
// 后端的参数进行赋值
|
this.param[obj.id].insValue = [
|
{
|
i:obj.id,
|
v:{
|
v:insValue[0].v
|
}
|
},
|
{
|
i:obj.id,
|
v:{
|
v:''
|
}
|
}
|
]
|
// 页面数据赋值
|
obj.value0 = insValue[0].v
|
obj.value1 = ''
|
}
|
break;
|
// 计算值赋值
|
case 'comValue':
|
let comValue = JSON.parse(insProductResult[i])
|
if(comValue&&comValue.length>0){
|
// 后端的参数进行赋值
|
this.param[obj.id].comValue = [
|
{
|
i:obj.id,
|
v:{
|
v:comValue[0].v
|
}
|
}
|
]
|
// 页面数据赋值
|
obj.comValue = comValue[0].v
|
}
|
break;
|
default:
|
break;
|
}
|
}
|
// 最终值赋值
|
// 后端的参数进行赋值
|
this.param[obj.id].resValue = {
|
i:obj.id,
|
v:{
|
v:obj.lastValue
|
}
|
}
|
// 页面数据赋值
|
obj.resValue = obj.lastValue
|
// 结论赋值
|
// 后端的参数进行赋值
|
this.param[obj.id].insResult = {
|
i:obj.id,
|
v:{
|
v:obj.insResult
|
}
|
}
|
}
|
return obj
|
})
|
// 以下是对温度循环页面呈现进行处理,去重、数据重置等等
|
let arr = []
|
let arr0 = []
|
let mySet = new Set()
|
productVos.forEach((m,i)=>{
|
let num0 = mySet.size
|
mySet.add(m.inspectionItemClass)
|
let num1 = mySet.size
|
if(num0!=num1){
|
if(i>0){
|
arr.push(arr0)
|
}
|
arr0 = []
|
arr0.push(m)
|
}else{
|
arr0.push(m)
|
}
|
})
|
arr.push(arr0)
|
let arr1 = []
|
this.wareLength = [];
|
for(let i=0;i<arr.length;i++){
|
this.wareLength.push(arr[i][0].inspectionItemClass)
|
}
|
for(let i=0;i<arr[0].length;i++){
|
arr1.push([])
|
}
|
arr.forEach((item,index)=>{
|
item.forEach((m,i)=>{
|
try {
|
arr1[i].push(m)
|
} catch (e) {
|
console.log(e)
|
}
|
})
|
})
|
let arr2 = []
|
arr1.forEach(item=>{
|
let obj = {
|
bushColor:item[0].bushColor,
|
code:item[0].code,
|
color:item[0].color,
|
arr:item
|
}
|
arr2.push(obj)
|
})
|
// 这是页面最终呈现的格式
|
this.wareTableData = arr2
|
})
|
// 获取设备列表
|
this.getEquipOptions(true,this.currentSample.insProduct[0].id)
|
// this.$refs.wareTableData&&this.$refs.wareTableData.doLayout()
|
},
|
// 温度循环---结束
|
// 热循环---开始
|
// 循环次数切换时调用
|
thermalCyclingChange(){
|
this.thermalCyclingLoading = true
|
this.$axios.post(this.$api.insOrderPlan.temCycle,{
|
sampleId:this.currentSample.id,
|
inspectionItem:this.thermalCyclingInfo.inspectionItem
|
}).then(res => {
|
this.thermalCyclingLoading = false
|
if (res.code == 201) return
|
let {productVos,sampleVo} = res.data
|
this.thermalCyclingInfo = {...this.thermalCyclingInfo,...sampleVo}
|
if(this.thermalCyclingInfo.inspectionItem>1){
|
for(let i in this.param){
|
if(this.param[i].inspectionItemSubclass){
|
delete this.param[i]
|
}
|
}
|
}
|
if(productVos.length>0){
|
this.thermalCyclingInfo.inspectionItemClass = productVos[0].insProduct.inspectionItemClass
|
// 根据检验项,初始化传到后端的参数
|
productVos.forEach(item=>{
|
this.param[item.insProduct.id] = {
|
insValue: [],
|
comValue: [],
|
resValue: {
|
i:item.insProduct.id,
|
r:0,
|
c:0,
|
v:{
|
v:null
|
}
|
},
|
equipValue: [],
|
equipName: [],
|
insResult: {
|
i:item.insProduct.id,
|
v:{
|
v:null
|
}
|
},
|
inspectionItemSubclass: item.insProduct.inspectionItemSubclass,
|
}
|
let obj = {...item,...item.insProduct}
|
let insProductResult = obj.insProductResult
|
if(insProductResult){
|
// 给页面列表赋值,给后端传参赋值
|
for(let i in insProductResult){
|
switch (i) {
|
case 'insValue':
|
// 给页面列表赋值
|
let insValue = JSON.parse(insProductResult[i])
|
if(insValue&&insValue.length>0){
|
this.thermalCyclingInfo.length = 0
|
this.thermalCyclingInfo.arr.forEach(a=>{
|
if(a.name==obj.inspectionItemSubclass){
|
a.arr = []
|
for(let i=0;i<insValue.length;i++){
|
a.arr.push({
|
value0:insValue[i].v,
|
value1:insValue[i].w,
|
})
|
this.thermalCyclingInfo.length++
|
}
|
a.insResult = obj.insResult
|
}
|
})
|
// 给后端传参赋值
|
this.param[obj.id].insValue = []
|
insValue.forEach(m=>{
|
this.param[obj.id].insValue.push({
|
i:obj.id,
|
r:0,
|
c:0,
|
w:m.w,
|
v:{
|
v:m.v
|
}
|
})
|
})
|
}
|
break;
|
}
|
}
|
// 给后端传参赋值
|
this.param[obj.id].insResult = {
|
i:obj.id,
|
v:{
|
v:obj.insResult
|
}
|
}
|
}else{
|
// 给页面列表赋值
|
this.thermalCyclingInfo.arr.forEach(a=>{
|
a.insResult = null
|
a.arr = []
|
a.arr.push(
|
{
|
value0:'',
|
value1:''
|
}
|
)
|
})
|
this.thermalCyclingInfo.length = 1
|
}
|
})
|
}
|
// 获取设备列表
|
this.getEquipOptions(true,this.currentSample.insProduct[0].id)
|
})
|
},
|
// 添加检验值
|
handleAddThermal(){
|
this.thermalCyclingInfo.length++
|
this.thermalCyclingInfo.arr.forEach(item=>{
|
item.arr.push({
|
value0:'',
|
value1:''
|
})
|
})
|
},
|
// 删除检验值
|
handleDeleteThermal(){
|
if(this.thermalCyclingInfo.length==1){
|
this.$message.error('最后一条数据不能删除')
|
return
|
}else{
|
this.thermalCyclingInfo.length--
|
this.thermalCyclingInfo.arr.forEach(item=>{
|
item.arr.pop()
|
})
|
// 删除后需要保存一下数据
|
this.saveThermalCycling(true,{name:'导线温度'},true)
|
}
|
},
|
saveThermalCycling(m,item,type){
|
// 结果判断
|
if(m&&item&&type){
|
if(item.name=='导线温度'||item.name=='耐张温度'||item.name=='接续温度'){
|
this.thermalCyclingInfo.arr.forEach(a=>{
|
if(a.name=='耐张温度'){
|
a.arr.forEach((b,i)=>{
|
// 获取对应的导线温度
|
let num0 = 0
|
this.thermalCyclingInfo.arr.forEach(c=>{
|
if(c.name=='导线温度'){
|
num0 = c.arr[i].value0
|
}
|
})
|
// 判断结论
|
if(!num0||!b.value0){
|
b.state = null
|
}else if(Number(num0)>Number(b.value0)){
|
b.state = 1
|
}else{
|
b.state = 0
|
}
|
})
|
let state = a.arr.filter(b=>b.state==null).length
|
let state0 = a.arr.filter(b=>b.state==0).length
|
let state1 = a.arr.filter(b=>b.state==1).length
|
if(state>0){
|
// 待定
|
a.insResult = null
|
}else if(state0>0){
|
// 不合格
|
a.insResult = 0
|
}else if(state1==a.arr.length){
|
// 合格
|
a.insResult = 1
|
}
|
}
|
if(a.name=='接续温度'){
|
a.arr.forEach((b,i)=>{
|
// 获取对应的导线温度
|
let num0 = 0
|
this.thermalCyclingInfo.arr.forEach(c=>{
|
if(c.name=='导线温度'){
|
num0 = c.arr[i].value0
|
}
|
})
|
if(!num0||!b.value0){
|
b.state = null
|
}else if(Number(num0)>Number(b.value0)){
|
b.state = 1
|
}else{
|
b.state = 0
|
}
|
})
|
let state = a.arr.filter(b=>b.state==null).length
|
let state0 = a.arr.filter(b=>b.state==0).length
|
let state1 = a.arr.filter(b=>b.state==1).length
|
if(state>0){
|
a.insResult = null
|
}else if(state0>0){
|
a.insResult = 0
|
}else if(state1==a.arr.length){
|
a.insResult = 1
|
}
|
}
|
})
|
}
|
}
|
// 给后端传参赋值
|
this.thermalCyclingInfo.arr.forEach(item=>{
|
for (let i in this.param){
|
if(this.param[i].inspectionItemSubclass==item.name){
|
switch (item.name){
|
case '环境温度':
|
this.param[i].insResult.v.v = 1
|
this.param[i].insValue = []
|
item.arr.forEach(insValue=>{
|
this.param[i].insValue.push({
|
i:i,
|
r:0,
|
c:0,
|
v:{
|
v:insValue.value0
|
}
|
})
|
})
|
break;
|
case '导线温度':
|
this.param[i].insResult.v.v = 1
|
this.param[i].insValue = []
|
item.arr.forEach(insValue=>{
|
this.param[i].insValue.push({
|
i:i,
|
r:0,
|
c:0,
|
w:insValue.value1,
|
v:{
|
v:insValue.value0
|
}
|
})
|
})
|
break;
|
case '耐张温度':
|
this.param[i].insValue = []
|
item.arr.forEach(insValue=>{
|
this.param[i].insValue.push({
|
i:i,
|
r:0,
|
c:0,
|
w:insValue.value1,
|
v:{
|
v:insValue.value0
|
}
|
})
|
})
|
this.param[i].insResult.v.v = item.insResult
|
break;
|
case '接续温度':
|
this.param[i].insValue = []
|
item.arr.forEach(insValue=>{
|
this.param[i].insValue.push({
|
i:i,
|
r:0,
|
c:0,
|
w:insValue.value1,
|
v:{
|
v:insValue.value0
|
}
|
})
|
})
|
this.param[i].insResult.v.v = item.insResult
|
break;
|
}
|
}
|
}
|
})
|
// 保存数据
|
this.saveInsContext()
|
},
|
// 热循环---结束
|
// 保存湿度、温度数据
|
subOtherForm(m,type){
|
let ids = []
|
for (let i in this.param) {
|
ids.push(i)
|
}
|
this.$axios.post(this.$api.insOrderPlan.write,{
|
[type]:Number(m),
|
ids
|
}, {
|
headers: {
|
'Content-Type': 'application/json'
|
},
|
noQs:true
|
}).then(res => {
|
if (res.code == 201) return
|
this.$message.success('保存成功')
|
})
|
},
|
// 权限获取
|
getPower(){
|
let power = JSON.parse(sessionStorage.getItem('power'))
|
let fileDel = false
|
let fileAdd = false
|
let collected = false
|
let temDataAcquisition = false
|
let addInsProductTemplatePower = false;
|
for (var i = 0; i < power.length; i++) {
|
if (power[i].menuMethod == 'uploadFile') {
|
fileAdd = true
|
}
|
if (power[i].menuMethod == 'delfile') {
|
fileDel = true
|
}
|
if (power[i].menuMethod == 'isItAllowedToModifyTheCollectedValues') {
|
collected = true
|
}
|
if (power[i].menuMethod == 'temDataAcquisition') {
|
temDataAcquisition = true
|
}
|
if(power[i].menuMethod == 'addInsProductTemplate'){
|
addInsProductTemplatePower = true
|
}
|
}
|
if (!fileDel) {
|
this.componentData0.do.splice(1, 1)
|
}
|
this.fileAdd = fileAdd
|
this.collected = collected
|
this.temDataAcquisition = temDataAcquisition
|
this.addInsProductTemplatePower = addInsProductTemplatePower
|
},
|
uploadSample(){
|
this.$axios.post(this.$api.insOrderPlan.doInsOrder, {
|
id: this.id,
|
laboratory: this.sonLaboratory
|
}).then(async res => {
|
this.sampleProduct = res.data.sampleProduct
|
})
|
},
|
// 根据类型、任务id、实验室来获取样品的检验项信息
|
async getCurrentProduct(id,type){
|
this.tableLoading = true;
|
let res = null;
|
if(!this.isLook){
|
res = await this.$axios.post(this.$api.insOrderPlan.getInsProduct+'?id='+id+'&type='+type+'&laboratory='+this.sonLaboratory)
|
}else{
|
res = await this.$axios.post(this.$api.insOrderPlan.getInsProduct2+'?id='+id+'&type='+type+'&laboratory='+this.sonLaboratory+'&num='+this.num)
|
}
|
this.tableLoading = false;
|
return res.data
|
},
|
// 切换样品
|
async handleChangeSample(row, column, event) {
|
// 初始化数据
|
this.param = {}
|
// 清空光纤配置相关数据
|
this.fiberOpticTape = []
|
this.currentFiberOpticTape = null;
|
this.fiberOptic = []
|
this.currentFiberOptic = null;
|
this.bushing = []
|
this.currentBushing = null;
|
this.sampleVisible = false;
|
// 赋值样品
|
this.currentSample = this.HaveJson(row)
|
let list = await this.getCurrentProduct(row.id,0)
|
// 赋值样品检验项
|
this.currentSample.insProduct = this.HaveJson(list)
|
// 初始化后端传参
|
this.param = {}
|
this.changeType = 0;
|
this.currentSample.insProduct.forEach((a,j) => {
|
if(this.handleCasing(a.inspectionItem)){
|
this.param[a.id] = {
|
insValue: [],
|
comValue: [],
|
resValue: null,
|
equipValue: [],
|
equipName: [],
|
insResult: null,
|
beforeCheck:null,
|
afterCheck:null,
|
}
|
}
|
})
|
let bushing = this.currentSample.bushing
|
if(bushing&&bushing.length>0){
|
this.bushing = bushing
|
}
|
// 处理页面列表数据
|
this.getTableLists();
|
this.currentKey = row.index?row.index:0
|
this.currentTab = null;
|
// 向多线程去保存页面列表数据,后端传参,当前模板信息
|
this.worker.postMessage(JSON.stringify({
|
type: 'saveData',
|
tableList:this.tableList,
|
param:this.param,
|
currentTable:this.currentTable
|
}));
|
},
|
// 松套管的判断\如果changeType不等于3那么页面不展示松套管检验项
|
handleCasing(inspectionItem){
|
if(this.changeType!=3){
|
if(inspectionItem.includes('松套管')){
|
return false
|
}else{
|
return true
|
}
|
}else{
|
return true
|
}
|
},
|
// 套管,光纤带,光纤等切换,对应原始记录模板也要切换
|
async handleChange(m,type){
|
this.changeType = type
|
if(m){
|
// 获取检验项
|
let list = await this.getCurrentProduct(m,type)
|
if(list.length>0){
|
// 初始化后端传参
|
this.param = {}
|
list.forEach(a => {
|
this.param[a.id] = {
|
insValue: [],
|
comValue: [],
|
resValue: null,
|
equipValue: [],
|
equipName: [],
|
insResult: null,
|
beforeCheck:null,
|
afterCheck:null,
|
}
|
})
|
// 页面列表数据处理
|
this.getTableLists0(list)
|
// 向多线程保存数据
|
this.worker.postMessage(JSON.stringify({
|
type: 'saveData',
|
tableList:this.tableList,
|
param:this.param,
|
currentTable:this.currentTable,
|
bushing:m
|
}));
|
}else{
|
this.tableLists = []
|
this.tableList = []
|
this.$message.error('检验项为空')
|
}
|
}
|
},
|
// 改变任务
|
handleChangeTask(row) {
|
if (row.length > 0) this.id = row[0].id;
|
this.taskVisible = false;
|
},
|
// 字典获取信息
|
getTypeDicts() {
|
this.$axios.post(this.$api.enums.selectEnumByCategory, {
|
category: "紧急程度"
|
}).then(res => {
|
let data = res.data
|
data.forEach(ele => {
|
if (ele.value === '0') {
|
ele.type = 'success'
|
} else if (ele.value === '1') {
|
ele.type = 'warning'
|
} else if (ele.value === '2') {
|
ele.type = 'danger'
|
}
|
})
|
this.urgentList = data;
|
this.componentData.tagField.type.select = data
|
})
|
},
|
// 字典获取信息
|
getInsStateDicts() {
|
this.$axios.post(this.$api.enums.selectEnumByCategory, {
|
category: "检验任务状态"
|
}).then(res => {
|
let data = res.data
|
data.forEach(ele => {
|
//0:待检验 1:检验中 2:已检验 3:待复核 4:复核未通过 5:复核通过
|
if (['2', '5'].includes(ele.value)) {
|
ele.type = 'success'
|
} else if (['1', '3'].includes(ele.value)) {
|
ele.type = 'warning'
|
} else if (['0', '4'].includes(ele.value)) {
|
ele.type = 'danger'
|
}
|
})
|
this.typeList = data
|
this.componentData.tagField.insState.select = data
|
})
|
},
|
// 字典获取信息
|
getComparisonList() {
|
this.$axios.post(this.$api.enums.selectEnumByCategory, {
|
category: "表格坐标转换"
|
}).then(res => {
|
let data = res.data
|
this.comparisonList = data;
|
})
|
},
|
// 获取检验值为下拉时的下拉列表
|
selectEnumByCategoryOfSelect(val) {
|
this.enumList = []
|
if (val === undefined || val === null) {
|
return
|
}
|
this.$axios.post(this.$api.enums.selectEnumByCategory, {
|
category: val
|
}).then(res => {
|
this.enumList = res.data;
|
})
|
},
|
tableRowClassName({
|
row,
|
rowIndex
|
}) {
|
row.index = rowIndex + 1;
|
},
|
// 处理页面列表数据--去重,生成检验模板切换列表
|
getTableLists() {
|
const mySet1 = new Set();
|
this.tableLists = this.currentSample.insProduct.filter(m => {
|
let num0 = mySet1.size;
|
if (m.templateId != null&&m.template != null) {
|
try {
|
mySet1.add(JSON.stringify({
|
template: m.template,
|
templateId: m.templateId
|
}))
|
} catch (error) {
|
console.log(222,error);
|
}
|
}
|
let num1 = mySet1.size;
|
if (num1 > num0) {
|
return m
|
}
|
});
|
if (this.tableLists && this.tableLists.length > 0) {
|
this.tableList = null;
|
this.tableList = [this.tableLists[0]]
|
this.currentTable = this.tableLists[0].templateId;
|
if(this.tableLists.find(m=>m.templateId==this.currentTable)&&this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('电路试验')&&this.currentTableState!=0&&this.currentTableState!=1){
|
this.versionDialogVisible = true
|
}
|
// 处理页面列表数据
|
this.handleTableData()
|
}
|
},
|
// 光纤配置相关模板table列表
|
getTableLists0(list){
|
const mySet1 = new Set();
|
this.tableLists = list.filter(m => {
|
let num0 = mySet1.size;
|
if (m.templateId != null&&m.template != null) {
|
try {
|
mySet1.add(JSON.stringify({
|
template: m.template,
|
templateId: m.templateId
|
}))
|
} catch (error) {
|
console.log(333,error);
|
}
|
}
|
let num1 = mySet1.size;
|
if (num1 > num0) {
|
return m
|
}
|
});
|
if (this.tableLists && this.tableLists.length > 0) {
|
this.tableList = null;
|
this.tableList = [this.tableLists[0]]
|
this.currentTable = this.tableLists[0].templateId;
|
this.currentSample.insProduct = this.HaveJson(list)
|
// 处理页面列表数据
|
this.handleTableData()
|
}
|
},
|
// 处理页面列表数据
|
handleTableData() {
|
this.excelMethodList = []//excel函数列表
|
this.widthList = this.tableList[0].style.columnlen;//页面宽度--根据模板来的
|
// 温度循环检验原始记录--开始
|
if(this.tableLists.find(m=>m.templateId==this.currentTable)&&this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='温度循环检验原始记录'){
|
// 对要求值进行拆分处理,进而得出页面内容
|
let ask = this.currentSample.insProduct[0].ask
|
let askList = ask.split(';')
|
// 获取循环次数
|
this.numOptions = []
|
for (let i = 1; i <= askList[askList.length-1]; i++) {
|
this.numOptions.push({
|
value:i,
|
label:i
|
})
|
}
|
let mySet1 = new Set();
|
askList.forEach((m,i) => {
|
if(i<askList.length-1){
|
mySet1.add(m.split(',')[0].replace('℃',''))
|
}
|
})
|
// 获取温度点列表
|
this.temperatureOptions = []
|
mySet1.forEach(m => {
|
this.temperatureOptions.push({
|
value:String(m),
|
label:m
|
})
|
})
|
// 初始化页面数据
|
this.wareTableDataLoading = true
|
this.$axios.post(this.$api.deviceScope.temDataAcquisition2,{
|
entrustCode:this.insOrder.entrustCode,
|
sampleCode:this.currentSample.sampleCode,
|
model:this.currentSample.model,
|
}, {
|
headers: {
|
'Content-Type': 'application/json'
|
},
|
noQs:true
|
}).then(res=>{
|
// console.log(res.data)
|
this.wareFormChange()
|
})
|
// this.wareFormChange()
|
}
|
// 温度循环检验原始记录---结束
|
// 热循环检验原始记录---开始
|
if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('热循环')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('温升试验'))){
|
// 根据要求值拆分数据,得到页面渲染的信息
|
let ask = this.currentSample.insProduct[0].ask
|
let askList = ask.split(';')
|
this.thermalCyclingInfo.max = Number(askList[askList.length-1])
|
let arr = []
|
for (let i = 0; i < askList.length-1; i++) {
|
arr.push(askList[i].split(',')[0])
|
}
|
arr = arr.map(item=>{
|
let obj = {}
|
obj.name = item;
|
if(obj.insResult==null||obj.insResult==undefined){
|
obj.arr = [
|
{
|
value0:'',
|
value1:'',
|
}
|
]
|
obj.insResult = null;
|
}
|
return obj
|
})
|
this.thermalCyclingInfo.arr = arr;
|
// 初始化页面数据
|
this.thermalCyclingChange()
|
}
|
// 热循环检验原始记录---结束
|
// 本次循环主要做页面渲染层面的处理--单元格合并预处理
|
this.tableList.forEach(a => {
|
let mcList = []
|
a.template.forEach(b => {
|
if (b.v.mc != undefined && b.v.mc.cs != undefined && b.v.mc.rs != undefined) {
|
mcList.push(b)
|
}
|
})
|
let count = 0
|
mcList.forEach(b => {
|
for (var c in a.template) {
|
for (var i = 0; i < b.v.mc.cs; i++) {
|
for (var i2 = 0; i2 < b.v.mc.rs; i2++) {
|
if (a.template[c].c === b.c + i && a.template[c].r === b.r + i2) {
|
let bb = this.HaveJson(b)
|
a.template[c].v.v = bb.v.v
|
a.template[c].v.ps = bb.v.ps
|
a.template[c].v.fc = bb.v.fc
|
a.template[c].v.fs = bb.v.fs
|
a.template[c].v.ht = bb.v.ht
|
a.template[c].mc = count
|
break
|
}
|
}
|
}
|
}
|
count++
|
})
|
})
|
// 本次循环主要是控制合并,以及控制检验项信息是否展示出来,以便后续检验
|
this.tableList.forEach(a => {
|
let dels = new Set()//需要删除的行
|
let ids = []//所有检验项的id
|
let set3 = new Set()
|
a.template.forEach(b => {
|
let size1 = set3.size
|
let size2 = set3.add(b.r).size
|
if (size1 < size2) {
|
let str = ''
|
let count4 = 0
|
let isThree = 0
|
a.template.forEach(c => {
|
// 获取到 检验项分类+检验项+检验子项的拼接,如果模板里的信息跟接口返回的检验项信息能够匹配则展示出来
|
if (b.r === c.r) {
|
if(c.v.ps != undefined && c.v.ps.value === '检验项分类'&&count4 === 0){
|
// 三级分类
|
isThree = 1
|
}else if(c.v.ps != undefined && c.v.ps.value === '检验项'&&count4 === 0){
|
// 二级分类
|
isThree = 0
|
}
|
if(isThree==0){
|
if (c.v.ps != undefined && c.v.ps.value === '检验项') {
|
if (count4 === 0) {
|
str += c.v.v
|
count4 += 1
|
}
|
} else if (c.v.ps != undefined && c.v.ps.value === '检验子项') {
|
if (count4 === 1) {
|
str += c.v.v
|
count4 += 1
|
}
|
}
|
}else if(isThree==1){
|
if (c.v.ps != undefined && c.v.ps.value === '检验项分类') {
|
if (count4 === 0) {
|
str += c.v.v
|
count4 += 1
|
}
|
}else if (c.v.ps != undefined && c.v.ps.value === '检验项') {
|
if (count4 === 1) {
|
str += c.v.v
|
count4 += 1
|
}
|
} else if (c.v.ps != undefined && c.v.ps.value === '检验子项') {
|
if (count4 === 2) {
|
str += c.v.v
|
count4 += 1
|
}
|
}
|
}
|
}
|
})
|
if (str != '') {
|
let count2 = 0
|
for (let i in this.currentSample.insProduct) {
|
let inspectionItemClass = this.currentSample.insProduct[i].inspectionItemClass==null||this.currentSample.insProduct[i].inspectionItemClass==undefined?'':this.currentSample.insProduct[i].inspectionItemClass
|
let inspectionItem = this.currentSample
|
.insProduct[i].inspectionItem==null||this.currentSample
|
.insProduct[i].inspectionItem==undefined?'':this.currentSample
|
.insProduct[i].inspectionItem
|
let inspectionItemSubclass = this.currentSample
|
.insProduct[i].inspectionItemSubclass==null||this.currentSample
|
.insProduct[i].inspectionItemSubclass==undefined?'':this.currentSample
|
.insProduct[i].inspectionItemSubclass
|
// 如果相等,那么说明找到了,并且把id存起来,后续检验项也会在页面中显示出来
|
if (this.currentSample.insProduct[i].templateId === a.templateId && inspectionItemClass +inspectionItem+inspectionItemSubclass ===
|
str) {
|
ids.push({
|
r: b.r,
|
id: this.currentSample.insProduct[i].id,
|
product: this.currentSample.insProduct[i]
|
})
|
break
|
}
|
count2++
|
}
|
if (count2 == this.currentSample.insProduct.length) {
|
dels.add(b.r)
|
}
|
}
|
}
|
})
|
// 操作删除
|
dels.forEach(del => {
|
for (let b = 0; b < a.template.length; b++) {
|
if (a.template[b].r === del) {
|
a.template.splice(b, 1)
|
b -= 1
|
}
|
}
|
})
|
console.log(4444,a.template)
|
// 操作赋值--主要赋值单位,试验方法等信息
|
ids.forEach(id => {
|
for (let b = 0; b < a.template.length; b++) {
|
if (a.template[b].r === id.r) {
|
a.template[b].i = id.id
|
if (a.template[b].v.ps != undefined && a.template[b].v.ps.value === '单位') {
|
a.template[b].v.v = id.product.unit
|
}
|
if (a.template[b].v.ps != undefined && (a.template[b].v.ps.value === '试验方法' || a.template[b].v
|
.ps.value === '检测方法')) {
|
a.template[b].v.v = id.product.methodS
|
}
|
// if (a.template[b].v.ps != undefined && (a.template[b].v.ps.value === '试验标准')) {
|
// a.template[b].v.v = id.product.testRequirements
|
// }
|
}
|
}
|
})
|
let set2 = new Set()
|
// 合并的数据处理,cs rs 代表合并的数量
|
a.template.forEach(b => {
|
let size1 = set2.size
|
let size2 = set2.add(b.mc).size
|
if (b.mc != undefined && size1 < size2) {
|
b.v.mc.rs = 0
|
b.v.mc.cs = 0
|
a.template.forEach(c => {
|
if (b.mc === c.mc) {
|
if (b.r === c.r) {
|
b.v.mc.cs += 1
|
}
|
if (b.c === c.c) {
|
b.v.mc.rs += 1
|
}
|
}
|
})
|
}
|
})
|
})
|
// 本次循环主要是对后端传参进行初始化,样式逻辑修改
|
this.tableList.forEach(a => {
|
let arrs = []
|
let set = new Set()
|
let count1 = 0
|
let conclusionList = []; //结论列表
|
let finalList = []; //最终值列表
|
// 结论与最终值在这里一一对应,以下两个列表长度肯定是一样的,如果有不一样,那么多半是模板配置得问题
|
conclusionList = a.template.filter(n => n.v.ps != undefined && n.v.ps.value === '结论')//结论列表
|
finalList = a.template.filter(n => n.v.ps != undefined && n.v.ps.value === '最终值')//最终值列表
|
a.template.forEach( b => {
|
if (b.v.ps != undefined && b.v.ps.value === '序号' && (b.v.mc == undefined || Object.keys(b.v.mc).length === 4)) {
|
// 对序号进行赋值
|
count1++
|
b.v.v = count1
|
}
|
if (b.v.ps != undefined && b.v.ps.value === '要求值') {
|
// 对要求值进行赋值
|
b.v.v = this.getAsk(b.i)
|
}
|
// 对页面的和给后端传参的检验值,计算值,设备编码,设备名称,最终值,结论进行初始化
|
if (b.v.ps != undefined && typeof b.v.ps.value ==='string'&&b.v.ps.value.includes('检验值')) {
|
this.$set(b.v, 'v','' )
|
// b.v.v = ''
|
b.u = ''
|
b.i && this.param[b.i]&&this.param[b.i].insValue.push(b)
|
}
|
if (b.v.ps != undefined && b.v.ps.value === '计算值') {
|
this.$set(b.v, 'v','' )
|
// b.v.v = ''
|
b.i && this.param[b.i]&&this.param[b.i].comValue.push(b)
|
}
|
if (b.v.ps != undefined && b.v.ps.value === '设备编码') {
|
// b.v.v = ''
|
this.$set(b.v, 'v', '' )
|
b.i && this.param[b.i]&&this.param[b.i].equipValue.push(b)
|
}
|
if (b.v.ps != undefined && b.v.ps.value === '设备名称') {
|
this.$set(b.v, 'v', '' )
|
// b.v.v = ''
|
b.i && this.param[b.i]&&this.param[b.i].equipName.push(b)
|
}
|
if (b.v.ps != undefined && b.v.ps.value === '最终值') {
|
// b.v.v = ''
|
this.$set(b.v, 'v', '' )
|
if (b.i !== undefined&&this.param[b.i]&&!this.param[b.i].resValue) {
|
this.param[b.i].resValue = b
|
}
|
}
|
if (b.v.ps != undefined && b.v.ps.value === '结论') {
|
if (b.i !== undefined&&this.param[b.i]&&!this.param[b.i].insResult) {
|
this.param[b.i].insResult = b
|
conclusionList.forEach((n, i) => {
|
if (n.r == b.r && n.c == b.c) {
|
b.v.f =
|
`(${this.comparisonList.find(j=>j.value==(finalList[i].c)).label}${finalList[i].r+1})`
|
|
}
|
})
|
}
|
}
|
if (b.v.ps != undefined && b.v.ps.value === '试验前样品检查') {
|
// b.v.v = ''
|
this.$set(b.v, 'v', '' )
|
this.param[b.i].beforeCheck = b
|
}
|
if (b.v.ps != undefined && b.v.ps.value === '试验后样品检查') {
|
// b.v.v = ''
|
this.$set(b.v, 'v', '' )
|
this.param[b.i].afterCheck = b
|
}
|
set.add(b.r)
|
// 如果模板列表的函数存在,那么加入到excel函数列表里面
|
if (b.v.f) {
|
this.excelMethodList.push(b)
|
}
|
})
|
// 以下是样式处理逻辑
|
set = Array.sort(set)
|
set.forEach(b => {
|
let arr = []
|
a.template.forEach(c => {
|
if (c.r === b) {
|
arr.push(c)
|
}
|
})
|
arrs.push(arr)
|
})
|
a.arr = arrs
|
this.tableWidth = 0
|
for (let i = 0; i < arrs[0].length; i++) {
|
this.tableWidth += (a.style.columnlen[i] === undefined ? 100 : a.style.columnlen[i])
|
}
|
})
|
// 本次循环主要是对页面及后端传参进行初始化赋值
|
this.currentSample.insProduct.forEach(async a => {
|
try {
|
// 计算值赋值
|
let comValue = JSON.parse(a.insProductResult.comValue)
|
for (var i = 0; i < comValue.length; i++) {
|
this.param[a.id].comValue[i].v.v = this.toFixed(comValue[i].v,this.param[a.id].comValue[i].v.ct)
|
}
|
} catch (e) {}
|
try {
|
// 检验值赋值
|
let insValue = JSON.parse(a.insProductResult.insValue)
|
for (let i = 0; i < insValue.length; i++) {
|
if(this.param[a.id].insValue.find(m=>m.c==insValue[i].c&&m.r==insValue[i].r)){
|
this.param[a.id].insValue.find(m=>m.c==insValue[i].c&&m.r==insValue[i].r).v.v = this.toFixed(insValue[i].v,this.param[a.id].insValue.find(m=>m.c==insValue[i].c&&m.r==insValue[i].r).v.ct)
|
this.param[a.id].insValue.find(m=>m.c==insValue[i].c&&m.r==insValue[i].r).u = insValue[i].u
|
// this.param[a.id].insValue[i].v.v = insValue[i].v
|
// this.param[a.id].insValue[i].u = insValue[i].u
|
}
|
}
|
} catch (e) {}
|
try {
|
// 设备编号赋值
|
let equipValue = JSON.parse(a.insProductResult.equipValue)
|
if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='温度循环检验原始记录'||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('热循环')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('温升试验'))){
|
// 特殊项目初始化
|
this.param[a.id].equipValue = []
|
for (let i = 0; i < equipValue.length; i++) {
|
this.param[a.id].equipValue.push({
|
v:{
|
v:''
|
}
|
})
|
}
|
}
|
for (let i = 0; i < equipValue.length; i++) {
|
if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='温度循环检验原始记录'||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('热循环')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('温升试验'))){
|
// 温度循环设备赋值
|
this.$set(this.equipForm,`code`+i,equipValue[i].v)
|
this.param[a.id].equipValue[i].v.v = equipValue[i].v
|
}else{
|
// 普通设备赋值
|
this.param[a.id].equipValue[i].v.v = equipValue[i].v
|
}
|
}
|
} catch (e) {}
|
try {
|
// 设备名称赋值
|
let equipName = JSON.parse(a.insProductResult.equipName)
|
if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='温度循环检验原始记录'||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('热循环')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('温升试验'))){
|
// 设备名称初始化
|
this.param[a.id].equipName = []
|
for (let i = 0; i < equipName.length; i++) {
|
this.param[a.id].equipName.push({
|
v:{
|
v:''
|
}
|
})
|
}
|
}
|
for (let i = 0; i < equipName.length; i++) {
|
if(this.tableLists.find(m=>m.templateId==this.currentTable)&&(this.tableLists.find(m=>m.templateId==this.currentTable).templateName=='温度循环检验原始记录'||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('热循环')||this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('温升试验'))){
|
// 温度循环赋值
|
this.$set(this.equipForm,`value`+i,equipName[i].v)
|
this.param[a.id].equipName[i].v.v = equipName[i].v
|
}else{
|
// 普通设备名称赋值
|
this.param[a.id].equipName[i].v.v = equipName[i].v
|
}
|
}
|
} catch (e) {}
|
try {
|
// 最终值赋值
|
this.param[a.id].resValue = {v:{v:a.lastValue}}
|
// this.param[a.id].resValue.v.v = this.toFixed(a.lastValue,this.param[a.id].resValue.v.ct)
|
// 结论赋值
|
this.param[a.id].insResult = {v:{v:a.insResult}}
|
// this.param[a.id].insResult.v.v = a.insResult
|
// 检验前样品检查赋值
|
this.param[a.id].afterCheck.v.v = a.insProductResult.afterCheck
|
// 检验后样品检查赋值
|
this.param[a.id].beforeCheck.v.v = a.insProductResult.beforeCheck
|
} catch (e) {
|
console.log('error',e)
|
}
|
})
|
// 对excel函数进行处理
|
this.handleExcelMethod()
|
},
|
// 检验值输入后触发的函数
|
changeInput(m, code, n,getDataType) {
|
// 为数采定义一个逻辑参数
|
if(getDataType=='getDataType'){
|
this.getDataType = 2;
|
}
|
let currentInsItemId = null//当前检验项id
|
if (n) {
|
currentInsItemId = JSON.parse(JSON.stringify(n.i))
|
// 需要科学计数法的可以走这里
|
if (this.PROJECT === '检测中心') {
|
if(this.tableList.find(ele=>ele.inspectionItem=='体积电阻率')){
|
if(parseFloat(n.v.v)>=100000){
|
let num2 = new this.$Big(n.v.v)
|
n.v.v = num2.toExponential()
|
}
|
}
|
}
|
// 定义一个函数来验证分数是否有效
|
function isValidFraction(fraction) {
|
const [numerator, denominator] = fraction.split('/'); // 分子和分母
|
return !(!denominator || !numerator);
|
}
|
const isTrue = isValidFraction(n.v.v)
|
if (!isTrue) {
|
n.v.v = n.v.v.replace('/', '')
|
}
|
}
|
// 通信特殊处理,检验值填入之后直接保存数据,判断结果默认为3
|
for (var i in this.param){
|
this.param[i].insResult = {v:{v:3}}
|
}
|
this.saveInsContext(n.i)
|
return;
|
// 以下是正常的判断流程,后面有需要则进入此流程
|
try {
|
// 向 Worker 发送消息,开始处理逻辑
|
this.worker.postMessage(JSON.stringify({
|
code: code,
|
tableList:this.tableList,
|
excelMethodList:this.excelMethodList,
|
comparisonList:this.comparisonList,
|
currentSample:this.currentSample,
|
PROJECT:this.PROJECT,
|
param:this.param,
|
currentTable:this.currentTable,
|
getDataTypeId:this.getDataTypeId
|
}));
|
} catch (error) {
|
console.log(444,error);
|
}
|
// 监听 Worker 返回的结果
|
this.worker.onmessage = (event) => {
|
this.result = JSON.parse(event.data);
|
switch (this.result.method){
|
case 'saveInsContext':
|
this.$nextTick(()=>{
|
// this.$delete(this.tableList[0],'arr')
|
this.$set(this.tableList[0],'arr',this.result.value.tableList[0].arr)
|
this.param = this.result.value.param
|
if(this.result.value.currentInsItemId){
|
currentInsItemId = this.result.value.currentInsItemId
|
}
|
// console.log(this.result,123);
|
// 特殊处理一下结论,会有这种特殊情况
|
for (var i in this.param){
|
if(this.param[i].insResult&&this.param[i].insResult.v&&this.param[i].insResult.v.v){
|
if(this.param[i].insResult.v.v=='合格'){
|
this.$set(this.param[i].insResult.v,'v',1)
|
}else if(this.param[i].insResult.v.v=='不合格'){
|
this.$set(this.param[i].insResult.v,'v',0)
|
}
|
}
|
}
|
this.saveInsContext(currentInsItemId)
|
})
|
break;
|
case 'tableList':
|
this.$nextTick(()=>{
|
// 更新数据
|
this.$delete(this.tableList[0],'arr')
|
this.$set(this.tableList[0],'arr',this.result.value[0].arr)
|
})
|
break;
|
case 'getCurrentInsProduct':
|
// 更新页面数据
|
this.getCurrentInsProduct(this.result.value)
|
break;
|
}
|
};
|
},
|
// 是否需要数采
|
async determineWhetherToCollectData(){
|
let res = await this.$axios.get(this.$api.deviceScope.determineWhetherToCollectData+"?managementNumber=''")
|
this.isGet = res.data
|
},
|
// 根据后端传参更新页面数据 param => this.tableList[0].insProductResult
|
getCurrentInsProduct(pId) {
|
if (!this.tableList[0].insProductResult) {
|
this.tableList[0].insProductResult = {}
|
}
|
for (let m in this.param[pId]) {
|
let value = this.param[pId][m]
|
switch (m) {
|
case 'comValue':
|
// 赋值计算值
|
if (value && value.length > 0) {
|
this.tableList[0].insProductResult[m] = [];
|
value.forEach((a, i) => {
|
let obj = {
|
v: a.v.v,
|
}
|
this.tableList[0].insProductResult[m].push(obj);
|
})
|
try {
|
this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
|
} catch (error) {
|
console.log(555,error);
|
}
|
}
|
break;
|
// 赋值检验值
|
case 'insValue':
|
if (value && value.length > 0) {
|
this.tableList[0].insProductResult[m] = [];
|
value.forEach((a, i) => {
|
let obj = {
|
v: a.v.v,
|
u: a.u,
|
}
|
this.tableList[0].insProductResult[m].push(obj);
|
})
|
try {
|
this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
|
} catch (error) {
|
console.log(666,error);
|
}
|
}
|
break;
|
// 赋值设备编号
|
case 'equipValue':
|
if (value && value.length > 0) {
|
this.tableList[0].insProductResult[m] = [];
|
value.forEach((a, i) => {
|
let obj = {
|
v: a.v.v,
|
}
|
this.tableList[0].insProductResult[m].push(obj);
|
})
|
try {
|
this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
|
} catch (error) {
|
console.log(777,error);
|
}
|
}
|
break;
|
// 赋值设备名称
|
case 'equipName':
|
if (value && value.length > 0) {
|
this.tableList[0].insProductResult[m] = [];
|
value.forEach((a, i) => {
|
let obj = {
|
v: a.v.v,
|
}
|
this.tableList[0].insProductResult[m].push(obj);
|
})
|
try {
|
this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
|
} catch (error) {
|
console.log(888,error);
|
}
|
}
|
break;
|
// 赋值最终值
|
case 'resValue':
|
this.tableList[0].lastValue = value?value.v.v:''
|
break;
|
// 赋值结论
|
case 'insResult':
|
this.tableList[0].insResult = value?value.v.v:''
|
break;
|
}
|
}
|
},
|
// 对EXCEL函数进行处理
|
handleExcelMethod() {
|
if (this.excelMethodList.length > 0) {
|
this.excelMethodList.map(item => {
|
// 得到每个函数的参数列表
|
item.valueList = excelFunction.changeParameter(item.v.f);
|
return item;
|
})
|
}
|
},
|
getValue(v){
|
// 对页面展示数据进行处理,@,代表换行
|
let str = v.v?v.v:(v.v===0?v.v:(v.ct&&v.ct.s?v.ct.s.length>0&&v.ct.s[0].v.replace(new RegExp('\n', 'g'), '<br/>').replace(new RegExp('@', 'g'), '<br/>'):''))
|
// 对数据保留小数点进行处理
|
if(v.ct&&v.ct.fa&&v.ct.fa.includes('.')&&str){
|
let num = 0
|
let str0 = v.ct.fa.split('.')[1]
|
num = str0.length
|
str = Number(str).toFixed(num)
|
}
|
if(v.v&&typeof v.v == 'string'&&v.v.includes('@')){
|
str = v.v.replace(new RegExp('@', 'g'), '<br/>')
|
}
|
return str
|
},
|
// 获取当前输入框类型
|
getInspectionValueType(id) {
|
for (var a in this.currentSample.insProduct) {
|
if (this.currentSample.insProduct[a].id == id) {
|
return this.currentSample.insProduct[a].inspectionValueType
|
}
|
}
|
},
|
// 获取要求描述
|
getTell(id) {
|
for (var a in this.currentSample.insProduct) {
|
if (this.currentSample.insProduct[a].id == id) {
|
return this.currentSample.insProduct[a].tell
|
}
|
}
|
},
|
// 动态获取单元格宽度
|
handleWidth(n) {
|
let sum = 0;
|
if (n.v.mc && n.v.mc.cs && n.v.mc.c != undefined) {
|
for (let i = 0; i < n.v.mc.cs; i++) {
|
let num = this.widthList[i + n.v.mc.c] ? this.widthList[i + n.v.mc.c] : 100
|
sum += num;
|
}
|
} else {
|
sum = this.widthList[n.c] ? this.widthList[n.c] : 100
|
}
|
return sum
|
},
|
// 对输入值进行格式校验
|
handleInput (n) {
|
try {
|
n.v.v = n.v.v.replace(/[^\d.^e\-/+]/g, '');
|
n.v.v = n.v.v.replace(/\.{2,}/g,"."); //只保留第一个. 清除多余的
|
n.v.v = n.v.v.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
|
n.v.v = n.v.v.replace(/\/{2,}/g,"/"); //只保留第一个/清除多余的
|
n.v.v = n.v.v.replace("/","$#$").replace(/\//g,"").replace("$#$","/");
|
} catch (error) {
|
console.log(error);
|
}
|
|
},
|
getInspectionItemType(id) {
|
for (var a in this.currentSample.insProduct) {
|
if (this.currentSample.insProduct[a].id == id) {
|
return this.currentSample.insProduct[a].inspectionItemType
|
}
|
}
|
},
|
// 获取要求值
|
getAsk(id) {
|
for (var a in this.currentSample.insProduct) {
|
if (this.currentSample.insProduct[a].id == id) {
|
return this.currentSample.insProduct[a].ask
|
}
|
}
|
},
|
getSystemValue(n) {
|
let code = null
|
try {
|
this.param[n.i].equipValue.forEach(a=>{
|
if(a.r === n.r){
|
if (a.v.v == null || a.v.v == '') {
|
this.$message.error('请先选择采集的设备')
|
return
|
}else{
|
code = a.v.v
|
}
|
}
|
})
|
} catch (e) {
|
// console.log(e);
|
this.$message.error('找不到设备内容')
|
}
|
// console.log(n, code);
|
fetch('http://localhost:82/微信图片_20240518100811.png').then(res=>res.blob()).then(blob=>{
|
// console.log(blob);
|
const url = URL.createObjectURL(blob)
|
// console.log(url);
|
})
|
/* this.$message.error('采集失败【已开放手动方式】')
|
for (var a in this.currentSample.insProduct) {
|
if (this.currentSample.insProduct[a].id == n.i) {
|
this.currentSample.insProduct[a].inspectionItemType = 0
|
}
|
} */
|
},
|
// 获取设备
|
getEquipOptions(e, id) {
|
if (e) {
|
this.equipOptions = []
|
let product = this.currentSample.insProduct.find(m => m.id == id)
|
this.$axios.post(this.$api.deviceScope.selectDeviceByCategory, {
|
inspectionItem: product.inspectionItem,
|
inspectionItemSubclass: product.inspectionItemSubclass
|
}).then(res => {
|
if (res.code === 200 && res.data) {
|
this.equipOptions = res.data.map(m => {
|
m.value = m.managementNumber
|
m.label = m.deviceName
|
return m
|
})
|
}
|
}).catch(error => {
|
console.error(error)
|
})
|
}
|
},
|
getDic(e, id) {
|
if (e) {
|
for (var a in this.currentSample.insProduct) {
|
if (this.currentSample.insProduct[a].id == id) {
|
let str = this.currentSample.insProduct[a].dic
|
this.selectEnumByCategoryOfSelect(str)
|
return str
|
}
|
}
|
}
|
},
|
getUserInfo() {
|
this.$axios.get(this.$api.user.getUserInfo).then(res => {
|
this.userId = res.data.id
|
this.componentData.entity.userId = res.data.id
|
// console.log(1111,this.userId)
|
})
|
},
|
// 复核
|
upInsReview(e,type) {
|
this.$confirm(`是否${type}?`, "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning"
|
}).then(() => {
|
if (e == 1||e==2) {
|
// 继续试验
|
this.reviewLoading = true;
|
this.$axios.post(this.$api.insOrderPlan.verifyPlan, {
|
orderId: this.orderId,
|
type: e,
|
laboratory: this.sonLaboratory,
|
tell: null
|
}).then(res => {
|
if (res.code === 200) {
|
this.$message.success("操作成功")
|
this.$emit('goback')
|
}
|
this.reviewLoading = false;
|
}).catch(error => {
|
console.error(error)
|
this.reviewLoading = false;
|
})
|
} else{
|
// 再次试验
|
this.reviewDia = true;
|
}
|
})
|
},
|
handleReviewDia() {
|
if (this.noReason) {
|
this.reviewLoading = true;
|
this.$axios.post(this.$api.insOrderPlan.verifyPlan, {
|
orderId: this.orderId,
|
type: 0,
|
laboratory: this.sonLaboratory,
|
tell: this.noReason
|
}).then(res => {
|
if (res.code === 200) {
|
this.$message.success("操作成功")
|
this.$emit('goback')
|
}
|
this.reviewLoading = false;
|
}).catch(error => {
|
console.error(error)
|
this.reviewLoading = false;
|
})
|
} else {
|
this.$message.error('未输入不通过原因')
|
}
|
},
|
submit0(){
|
if(this.sonLaboratory === '电路试验'){
|
if(!this.experimentInfo.term){
|
this.$message.error('请输入实验阶段')
|
return
|
}
|
if(!this.experimentInfo.note){
|
this.$message.error('请输入实验操作')
|
return
|
}
|
}
|
let num =0
|
this.sampleProduct.forEach(item=>{
|
item.insProduct.forEach(a=>{
|
if(!a.outputWorkTime){
|
num++
|
}
|
})
|
})
|
if(num>0){
|
this.$message.error('请输入完成工时')
|
return
|
}
|
this.experimentDia = false
|
this.experimentDia0 = false
|
if(this.insOrder.orderType=='C'){
|
this.verifyUser = this.insOrder.prepareUserId
|
this.submit()
|
}else{
|
this.addVerifyDia = true
|
}
|
},
|
handleSubmit(){
|
if(!this.otherForm.temperature){
|
this.$message.error('请输入温度')
|
return
|
}
|
if(!this.otherForm.humidity){
|
this.$message.error('请输入湿度')
|
return
|
}
|
this.experimentDia = true
|
if (this.sonLaboratory === '电路试验') {
|
this.experimentDia0 = true
|
}
|
},
|
submit() {
|
if (this.verifyUser === null || this.verifyUser === '') {
|
this.$message.error("请指定复核人员")
|
return
|
}
|
this.addVerifyDia = false
|
this.submitLoading = true;
|
this.$axios.post(this.$api.insOrderPlan.checkSubmitPlan, {
|
orderId: this.orderId,
|
laboratory: this.sonLaboratory,
|
}).then(res => {
|
if (res.code === 200) {
|
let auxiliaryOutputWorkingHoursList = []
|
this.sampleProduct.forEach(item=>{
|
item.insProduct.forEach(a=>{
|
let obj = {
|
inspectionItem:a.inspectionItem,
|
outputWorkTime:a.outputWorkTime,
|
inspectionItemSubclass:a.inspectionItemSubclass,
|
sample:item.sampleCode,
|
insProductId:a.id,
|
num:item.num1
|
}
|
auxiliaryOutputWorkingHoursList.push(obj)
|
})
|
})
|
if(!res.data||res.data.length==0){
|
this.$axios.post(this.$api.insOrderPlan.submitPlan, {
|
orderId: this.orderId,
|
laboratory: this.sonLaboratory,
|
verifyUser: this.verifyUser,
|
entrustCode: this.insOrder.entrustCode,
|
auxiliaryOutputWorkingHoursList:auxiliaryOutputWorkingHoursList,
|
...this.experimentInfo
|
}, {
|
headers: {
|
'Content-Type': 'application/json'
|
},
|
noQs:true}).then(res => {
|
if (res.code === 200) {
|
this.$message.success("操作成功")
|
this.$emit('goback')
|
}
|
this.submitLoading = false;
|
}).catch(error => {
|
console.error(error)
|
this.submitLoading = false;
|
})
|
}else{
|
let newData = []
|
const h = this.$createElement
|
for (let i in res.data) {
|
const lastChar = res.data[i].slice(-1);
|
if(lastChar=='-'){
|
res.data[i] = res.data[i].slice(0, -1);
|
}
|
newData.push(h('p', {style: 'font-size: 14px;color: red;'}, (Number(i)+1)+'、'+res.data[i]))
|
}
|
newData.push(h('p', { style: 'font-size: 16px;color:#000;margin-top:12px;overflow-y: auto;max-height:80vh' },'以上项目不合格,确定提交?'))
|
this.$confirm('提示',{
|
title:'提示',
|
message: h('div', null, newData),
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: ""
|
}).then(() => {
|
this.$axios.post(this.$api.insOrderPlan.submitPlan, {
|
orderId: this.orderId,
|
laboratory: this.sonLaboratory,
|
verifyUser: this.verifyUser,
|
auxiliaryOutputWorkingHoursList:auxiliaryOutputWorkingHoursList,
|
...this.experimentInfo
|
}, {
|
headers: {
|
'Content-Type': 'application/json'
|
},
|
noQs:true}).then( res => {
|
if (res.code === 200) {
|
this.submitLoading = false;
|
this.$message.success("操作成功")
|
this.$emit('goback')
|
}
|
}).catch(error => {
|
console.error(error)
|
})
|
}).catch(() => {})
|
}
|
|
}
|
}).catch(error => {
|
console.error(error)
|
this.submitLoading = false;
|
})
|
return
|
},
|
async handleCType(){
|
if(this.insOrder.departmentLims=='质量部'){
|
await this.$axios.post(this.$api.insOrderPlan.verifyPlan, {
|
orderId: this.orderId,
|
type: 1,
|
laboratory: this.sonLaboratory,
|
tell: null
|
}).then(res => {
|
if (res.code === 200) {
|
}
|
}).catch(error => {
|
})
|
}
|
},
|
// 统一在这里保存数据
|
saveInsContext(currentInsItemId) {
|
try {
|
console.log(1111,this.param)
|
if(this.param){
|
let param = null
|
if(currentInsItemId){
|
param = {[currentInsItemId] : this.param[currentInsItemId]}
|
}else{
|
param = this.param
|
}
|
this.$axios.post(this.$api.insOrderPlan.saveInsContext, {
|
param: JSON.stringify(param),
|
currentTable:this.currentTable,
|
num:this.currentSample.num1
|
}).then(res => {
|
if (res.code == 201) {
|
this.$message.error('保存失败')
|
return
|
}
|
this.$message.success('已保存')
|
})
|
// 向 Worker 发送消息,开始处理逻辑
|
this.worker.postMessage(JSON.stringify({
|
type: 'saveData',
|
tableList:this.tableList,
|
param:this.param,
|
currentTable:this.currentTable
|
}));
|
}
|
}catch (error) {
|
console.log(999,error);
|
}
|
},
|
// 设备改变
|
changeEquip(val, n,v) {
|
this.$set(n.v,'v',val)
|
this.tableList[0].arr.forEach((item,index)=>{
|
item.forEach((m,i)=>{
|
if(this.param[m.i]){
|
this.param[m.i].state = 1
|
}
|
if(m.i==n.i&&m.v.ps&&m.v.ps.value=='设备名称'&&v){
|
this.$set(m.v,'v',v)
|
}
|
})
|
})
|
for (let i in this.param) {
|
if(this.param[i].state!=1){
|
delete this.param[i]
|
}
|
}
|
if(val&&v){
|
for (let i1 in this.param[n.i].equipName) {
|
if (this.param[n.i].equipName[i1].i === n.i && this.param[n.i].equipName[i1].r === n.r) {
|
this.$delete(this.param[n.i].equipValue[i1].v,'v')
|
this.$set(this.param[n.i].equipValue[i1].v,'v',val)
|
this.$delete(this.param[n.i].equipName[i1].v,'v')
|
this.$set(this.param[n.i].equipName[i1].v,'v',v)
|
}
|
}
|
}
|
for (let i in this.equipOptions) {
|
if (this.equipOptions[i].value == val) {
|
for (let i1 in this.param[n.i].equipName) {
|
if (this.param[n.i].equipName[i1].i === n.i && this.param[n.i].equipName[i1].r === n.r) {
|
this.$delete(this.param[n.i].equipValue[i1].v,'v')
|
this.$set(this.param[n.i].equipValue[i1].v,'v',val)
|
this.$delete(this.param[n.i].equipName[i1].v,'v')
|
this.$set(this.param[n.i].equipName[i1].v,'v',this.equipOptions[i].label)
|
this.tableList[0].arr.forEach((item,index)=>{
|
item.forEach((m)=>{
|
if(m.i==n.i&&m.v.ps&&m.v.ps.value=='设备名称'){
|
this.$set(m.v,'v',this.equipOptions[i].label)
|
}
|
})
|
})
|
}
|
}
|
}
|
}
|
// 保存数据
|
this.saveInsContext(n.i)
|
},
|
// 样品检查
|
changeSampleCheck(val, n,type){
|
this.$set(n.v,'v',val)
|
if(type=='前'){
|
// 检验前
|
this.saveInsContext(n.i)
|
}else{
|
// 检验后
|
this.saveInsContext(n.i)
|
}
|
},
|
getAuthorizedPerson() {
|
this.$axios.get(this.$api.user.getUserMenu).then(res => {
|
let data = []
|
// let userName = JSON.parse(localStorage.getItem("user")).name;
|
res.data.forEach(a => {
|
if(!this.inspectorList.includes(a.name)) {
|
data.push({
|
label: a.name,
|
value: a.id
|
})
|
}
|
})
|
this.personList = data
|
})
|
},
|
scrollInit() {
|
// 获取要绑定事件的元素
|
const nav = document.getElementById("nav")
|
var flag; // 鼠标按下
|
var downX; // 鼠标点击的x下标
|
var scrollLeft; // 当前元素滚动条的偏移量
|
nav.addEventListener("mousedown", function(event) {
|
flag = true;
|
downX = event.clientX; // 获取到点击的x下标
|
scrollLeft = this.scrollLeft; // 获取当前元素滚动条的偏移量
|
});
|
nav.addEventListener("mousemove", function(event) {
|
if (flag) { // 判断是否是鼠标按下滚动元素区域
|
var moveX = event.clientX; // 获取移动的x轴
|
var scrollX = moveX - downX; // 当前移动的x轴下标减去刚点击下去的x轴下标得到鼠标滑动距离
|
this.scrollLeft = scrollLeft - scrollX // 鼠标按下的滚动条偏移量减去当前鼠标的滑动距离
|
}
|
});
|
// 鼠标抬起停止拖动
|
nav.addEventListener("mouseup", function() {
|
flag = false;
|
});
|
// 鼠标离开元素停止拖动
|
nav.addEventListener("mouseleave", function(event) {
|
flag = false;
|
});
|
},
|
// 页面里面切换样品
|
async caretSample(num){
|
let index = this.currentKey + num
|
if(index < 1){
|
this.$message.error('当前是第一个样品')
|
return
|
} else if(index > this.sampleProduct.length){
|
this.$message.error('当前是最后一个样品')
|
return
|
}
|
this.currentKey = index
|
this.currentSample = this.HaveJson(this.sampleProduct[index - 1])
|
// 获取检验项
|
let list = await this.getCurrentProduct(this.currentSample.id,0)
|
this.currentSample.insProduct = this.HaveJson(list)
|
// 初始化后端传参
|
this.param = {}
|
this.changeType = 0;
|
this.currentSample.insProduct.forEach((a, j) => {
|
if(this.handleCasing(a.inspectionItem)){
|
this.param[a.id] = {
|
insValue: [],
|
comValue: [],
|
resValue: null,
|
equipValue: [],
|
equipName: [],
|
insResult: null,
|
beforeCheck:null,
|
afterCheck:null,
|
}
|
}
|
})
|
// 页面数据处理
|
this.getTableLists()
|
// 更新到多线程
|
this.worker.postMessage(JSON.stringify({
|
type: 'saveData',
|
tableList:this.tableList,
|
param:this.param,
|
currentTable:this.currentTable
|
}));
|
},
|
caretBushing(num){
|
let index = this.currentKey0 + num
|
if(index < 1){
|
this.$message.error('当前是第一个套管')
|
return
|
} else if(index > this.bushing.length){
|
this.$message.error('当前是最后一个套管')
|
return
|
}
|
this.currentKey0 = index
|
this.currentBushing = this.HaveJson(this.bushing[index - 1])
|
this.fiberOpticTape = []
|
this.currentFiberOpticTape = null;
|
this.fiberOptic = []
|
this.currentFiberOptic = null;
|
if( this.currentBushing.fiber&& this.currentBushing.fiber.length>0){
|
// 直接配置光纤
|
this.fiberOptic = this.currentBushing.fiber;
|
}else if( this.currentBushing.fibers&& this.currentBushing.fibers.length>0){
|
// 配置光纤带后,再配置光纤
|
this.fiberOpticTape = this.currentBushing.fibers;
|
}
|
},
|
async caretTape(num){
|
let index = this.currentKey1 + num
|
if(index < 1){
|
this.$message.error('当前是第一个光纤带')
|
return
|
} else if(index > this.fiberOpticTape.length){
|
this.$message.error('当前是最后一个光纤带')
|
return
|
}
|
this.currentKey1 = index
|
this.currentFiberOpticTape = this.HaveJson(this.fiberOpticTape[index - 1])
|
this.param = {}
|
this.fiberOptic = []
|
this.currentFiberOptic = null;
|
this.currentFiberOpticTape.productList.forEach(a => {
|
this.param[a.id] = {
|
insValue: [],
|
comValue: [],
|
resValue: null,
|
equipValue: [],
|
equipName: [],
|
insResult: null
|
}
|
})
|
let list = await this.getCurrentProduct(this.currentFiberOpticTape.id,1)
|
this.getTableLists0(list)
|
if(this.currentFiberOpticTape.fiber&&this.currentFiberOpticTape.fiber.length>0){
|
// 配置光纤
|
this.fiberOptic = this.currentFiberOpticTape.fiber;
|
}
|
},
|
async caretOptic(num){
|
let index = this.currentKey2 + num
|
if(index < 1){
|
this.$message.error('当前是第一个光纤')
|
return
|
} else if(index > this.fiberOptic.length){
|
this.$message.error('当前是最后一个光纤')
|
return
|
}
|
this.currentKey2 = index
|
this.currentFiberOptic = this.HaveJson(this.fiberOptic[index - 1])
|
this.currentFiberOptic.productList.forEach(a => {
|
this.param[a.id] = {
|
insValue: [],
|
comValue: [],
|
resValue: null,
|
equipValue: [],
|
equipName: [],
|
insResult: null
|
}
|
})
|
let list = await this.getCurrentProduct(this.currentFiberOptic.id,2)
|
this.getTableLists0(list)
|
},
|
handleSuccessUp(response, ) {
|
this.upLoading = false;
|
if (response.code == 200) {
|
this.$message.success('上传成功');
|
this.$refs.fileList.selectList()
|
}
|
},
|
beforeUpload(file) {
|
if (file.size > 1024 * 1024 * 10) {
|
this.$message.error('上传文件不超过10M');
|
this.$refs.upload.clearFiles()
|
return false;
|
} else {
|
this.upLoading = true;
|
return true;
|
}
|
},
|
onError(err, file, fileList) {
|
this.$message.error('上传失败')
|
this.$refs.upload.clearFiles()
|
},
|
handleDown(row){
|
this.$axios.post(this.$api.insOrderPlan.downFile, {
|
id: row.id,
|
}).then(res => {
|
if (res.code === 200) {
|
let url = '';
|
if(res.data.type==1){
|
url = this.javaApi+'/img/'+res.data.fileUrl
|
file.downloadIamge(url,row.fileName)
|
}else{
|
url = this.javaApi+'/word/'+res.data.fileUrl
|
const link = document.createElement('a');
|
link.href = url;
|
link.download = row.fileName;
|
link.click();
|
}
|
}
|
}).catch(error => {
|
|
})
|
},
|
/**
|
* 将数值v保留ct.fa中'##'后的指定小数位数,并返回格式化后的字符串。
|
*
|
* @param v 要格式化的数值
|
* @param ct 包含格式化配置的对象
|
* @param ct.fa 格式化配置字符串,若包含'##'则按照其后的内容确定小数位数
|
* @returns 格式化后的字符串或原始数值(若配置不符合要求)
|
*/
|
toFixed(v,ct){
|
if(v&&ct&&ct.fa){
|
if(ct.fa.includes('.')){
|
let num = ct.fa.slice(4).length
|
return Number(v).toFixed(num)
|
}else{
|
return v
|
}
|
}else{
|
return v
|
}
|
},
|
async getCurrentItem(){
|
let list = await this.getCurrentProduct(this.currentSample.id,0)
|
this.currentSample.insProduct = this.HaveJson(list)
|
},
|
saveVersion(){
|
if(this.currentTableState!=0&&this.currentTableState!=1){
|
this.$message.error('请选择版本')
|
return
|
}
|
this.versionLoading = true;
|
this.$axios.post(this.$api.insOrderPlan.chooseVersion, {
|
orderStateId: this.orderStateId,
|
version: this.currentTableState
|
}).then(res => {
|
this.versionLoading = false;
|
if(res.code==201){
|
return
|
}
|
this.versionDialogVisible = false
|
})
|
},
|
async goHistory(num){
|
if(this.num==1&&num==-1){
|
this.$message.error('当前是第一条记录')
|
return
|
}else if(this.num1==this.num&&num==1){
|
this.$message.error('当前是最后一条记录')
|
return
|
}
|
this.num = this.num + num
|
this.tableLoading = true
|
await this.handleChangeSample(this.currentSample)
|
this.currentNum++
|
this.tableLoading = false
|
},
|
lookFile(row){
|
this.currentFile = row;
|
if(row.type==1){
|
this.currentFile.url = this.javaApi+'/img/'+row.fileUrl
|
}else{
|
this.currentFile.url = this.javaApi+'/word/'+row.fileUrl
|
}
|
this.lookFileVisible = true
|
},
|
handleBack(){
|
try {
|
if(!this.isLook&&this.state==1&&this.tableLists.find(m=>m.templateId==this.currentTable).templateName.includes('电路试验')){
|
this.$confirm('请确认当前数据是否全部保存,是否返回?', '提示', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning'
|
}).then(() => {
|
this.$emit('goback')
|
})
|
}else{
|
this.$emit('goback')
|
}
|
} catch (error) {
|
this.$emit('goback')
|
}
|
},
|
selectInsProductTemplate(){
|
this.$axios.post(this.$api.insProductTemplate.chooseInsProductTemplate).then(res => {
|
if (res.code == 201) return
|
this.templates = res.data
|
})
|
},
|
selectInsProductTemplateById(e){
|
if(e){
|
this.$axios.post(this.$api.insProductTemplate.getInsProductTemplate + '?id=' + e).then(res => {
|
if (res.code == 201) return
|
let obj = JSON.parse(res.data.message)
|
if(this.currentTableState!=res.data.version){
|
this.$message.error('电调/非电调模板版本不一致,请重新选择')
|
this.template = null
|
return
|
}
|
// 当前模板中未包含所有项目
|
let state = this.currentSample.insProduct.every(item=>{
|
if(obj.allBandList&&obj.allBandList.length>0&&obj.allBandList[0].projectList&&obj.allBandList[0].projectList.length>0&&item.inspectionItemSubclass&&obj.allBandList[0].projectList.find(m=>m.inspectionItemSubclass==item.inspectionItemSubclass)){
|
return true
|
}else{
|
return false
|
}
|
})
|
if(!state){
|
this.template = null
|
this.$message.error('当前模板中未包含所有项目,请重新选择')
|
return
|
}
|
// 保存版本
|
// this.saveVersion()
|
// 如果模板的检验项多了,则删除多余的
|
obj.allBandList.forEach(item=>{
|
item.projectList.forEach((m,i)=>{
|
if(!this.currentSample.insProduct.find(n=>m.inspectionItemSubclass==n.inspectionItemSubclass)){
|
item.projectList.splice(i,1)
|
}
|
})
|
})
|
this.$refs.CircuitParameters.upTemplate(obj)
|
})
|
}
|
},
|
addTemplateDia(){
|
let obj = {
|
allBandList:this.$refs.CircuitParameters.allBandList,
|
intermodulationNum:this.$refs.CircuitParameters.intermodulationNum,
|
angleList:this.$refs.CircuitParameters.angleList,
|
}
|
if (this.templateName) {
|
this.templateLoading = true;
|
this.$axios.post(this.$api.insProductTemplate.addInsProductTemplate, {
|
name: this.templateName,
|
version:this.currentTableState,
|
message:JSON.stringify(obj)
|
}, {
|
headers: {
|
'Content-Type': 'application/json'
|
}
|
}).then(res => {
|
if (res.code == 201) return
|
this.templateLoading = false;
|
this.templateDia = false;
|
this.$message.success('保存成功')
|
this.selectInsProductTemplate()
|
this.templateName = ''
|
})
|
} else {
|
this.$message.error('请填写模板名称')
|
}
|
},
|
handleDelete(row){
|
this.$confirm('是否删除当前数据?', "警告", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning"
|
}).then(() => {
|
this.$axios.post(this.$api.insProductTemplate.delInsProductTemplate, {
|
id: row.id
|
}).then(res => {
|
if (res.code === 201) {
|
return
|
}
|
this.$message.success('删除成功')
|
this.selectInsProductTemplate()
|
}).catch(e => {
|
this.$message.error('删除失败')
|
})
|
}).catch(() => {})
|
}
|
}
|
}
|
</script>
|