<style scoped>
|
.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: 50px;
|
}
|
|
.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;
|
}
|
|
.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%;
|
}
|
|
.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;
|
}
|
</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;
|
}
|
|
.inspection .el-input-group__append {
|
padding: 0 10px;
|
color: #3A7BFA;
|
background-color: #fff;
|
}
|
|
.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;
|
}
|
</style>
|
<template>
|
<div v-loading="loading" class="inspection">
|
<el-row class="title">
|
<el-col :span="12" style="padding-left: 20px;">检验单详情</el-col>
|
<el-col :span="12" style="text-align: right;">
|
<el-button size="small" type="primary" @click="sampleVisible=true">样品切换</el-button>
|
<el-button size="small" type="primary" @click="taskVisible=true">任务切换</el-button>
|
<el-button size="small" type="primary" @click="addVerifyDia = true" v-show="state==1"
|
:loading="submitLoading">提交</el-button>
|
<!-- 复核 -->
|
<el-button size="medium" type="primary" @click="upInsReview(1)" :loading="reviewLoading"
|
v-show="state>1">通过</el-button>
|
<el-button size="medium" @click="upInsReview(0)" v-show="state>1">不通过</el-button>
|
<el-button size="small" @click="$emit('goback')">返回</el-button>
|
</el-col>
|
</el-row>
|
<div class="search">
|
<el-form :inline="true" :model="searchForm" class="form-inline" label-width="100px">
|
<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-input clearable v-model="currentSample.sampleCode" disabled size="small" placeholder="请输入"></el-input>
|
</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="下发时间:">
|
<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="currentSample.index">{{ `NO.${currentSample.index}` }}</el-tag>
|
</el-form-item>
|
</el-form>
|
</div>
|
<div class="center">
|
<div class="search">
|
<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>
|
</div>
|
<div class="center-box" id="nav">
|
<table border="1" class="tables" cellpadding="10" v-for="(item,index) in tableList" :key="index">
|
<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};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 && n.v.ps.value==='检验值' && state==1">
|
<el-input v-if="getInspectionValueType(n.i) == 1" class="table_input" 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}`)">
|
<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="saveInsContext()" />
|
<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;`"
|
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"
|
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-else>
|
<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 :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="设备" @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 :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">
|
<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 v-else :style="`font-family:${n.v.ff} !important;`">{{n.v.v}}</span>
|
</template>
|
<span v-else :style="`font-family:${n.v.ff} !important;`">{{n.v.v}}</span>
|
</div>
|
</td>
|
</tr>
|
</tbody>
|
</table>
|
</div>
|
</div>
|
<el-drawer title="样品切换" :visible.sync="sampleVisible" :size="500">
|
<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="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.selectInsOrderPlanList"
|
: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>
|
</div>
|
</template>
|
|
<script>
|
import {
|
set
|
} from 'shelljs';
|
import ValueTable from '../../tool/value-table.vue'
|
export default {
|
props: ['sonLaboratory', 'orderId', 'state'],
|
components: {
|
ValueTable,
|
},
|
data() {
|
return {
|
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: []
|
},
|
upIndex: 0,
|
insOrder: {},
|
sampleProduct: [],
|
typeList: [],
|
urgentList: [],
|
currentSample: {}, //当前样品信息
|
tableList: [],
|
loading: false,
|
ps: {},
|
param: {},
|
currentKey: 1,
|
comparisonList: [],
|
excelMethodList: [],
|
equipOptions: [],
|
userId: 0,
|
reviewLoading: false,
|
reviewDia: false,
|
noReason: '',
|
tableWidth: 1000,
|
currentTable: null,
|
tableLists: [],
|
widthList: [],
|
addVerifyDia: false,
|
verifyUser: null,
|
personList: [],
|
enumList: []
|
}
|
},
|
created() {
|
this.componentData.entity.sonLaboratory = this.sonLaboratory;
|
this.id = this.orderId;
|
this.getUserInfo()
|
},
|
mounted() {
|
this.getTypeDicts()
|
this.getInsStateDicts()
|
this.getComparisonList()
|
this.getAuthorizedPerson()
|
this.scrollInit()
|
},
|
watch: {
|
id(val) {
|
this.loading = true
|
this.$axios.post(this.$api.insOrderPlan.doInsOrder, {
|
id: val,
|
laboratory: this.sonLaboratory
|
}).then(res => {
|
this.insOrder = res.data.insOrder;
|
this.urgentList.forEach(m => {
|
if (m.value == this.insOrder.type) {
|
this.insOrder.typeName = m.label
|
}
|
})
|
this.sampleProduct = res.data.sampleProduct
|
this.currentSample = this.sampleProduct[0]
|
this.currentSample.insProduct.forEach(a => {
|
this.param[a.id] = {
|
insValue: [],
|
comValue: [],
|
resValue: null,
|
equipValue: [],
|
equipName: [],
|
insResult: null
|
}
|
})
|
if (this.currentSample.index == undefined) this.currentSample['index'] = 1
|
this.loading = false
|
// this.handleTableData()
|
this.getTableLists();
|
this.componentData.currentId = val;
|
this.currentKey = 1;
|
})
|
},
|
currentTable(val1, val0) {
|
if (val0 != null && val1 != val0) {
|
this.tableLists.forEach((m, i) => {
|
if (m.templateId == val1) {
|
this.tableList = null;
|
this.tableList = [(this.tableLists[i])];
|
this.handleTableData()
|
}
|
})
|
}
|
}
|
},
|
methods: {
|
handleChangeSample(row, column, event) {
|
this.currentSample = row;
|
this.param = {}
|
this.currentSample.insProduct.forEach(a => {
|
this.param[a.id] = {
|
insValue: [],
|
comValue: [],
|
resValue: null,
|
equipValue: [],
|
equipName: [],
|
insResult: null
|
}
|
})
|
// this.handleTableData()
|
this.getTableLists();
|
this.sampleVisible = false;
|
this.currentKey = row.index
|
},
|
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) {
|
mySet1.add(JSON.stringify({
|
template: m.template,
|
templateId: m.templateId
|
}))
|
}
|
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.handleTableData()
|
}
|
},
|
handleTableData() {
|
this.excelMethodList = []
|
this.widthList = this.tableList[0].style.columnlen;
|
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 = []
|
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
|
a.template.forEach(c => {
|
if (b.r === c.r) {
|
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
|
}
|
}
|
}
|
})
|
if (str != '') {
|
let count2 = 0
|
for (let i in this.currentSample.insProduct) {
|
if (this.currentSample.insProduct[i].templateId === a.templateId && this.currentSample
|
.insProduct[i].inspectionItem +
|
(this.currentSample.insProduct[i].inspectionItemSubclass == null ? '' : this.currentSample
|
.insProduct[i].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
|
}
|
}
|
})
|
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
|
}
|
}
|
}
|
})
|
let set2 = new Set()
|
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 && b.v.ps.value === '检验值') {
|
b.v.v = ''
|
b.u = ''
|
b.i && this.param[b.i].insValue.push(b)
|
}
|
if (b.v.ps != undefined && b.v.ps.value === '计算值') {
|
b.v.v = ''
|
b.i && this.param[b.i].comValue.push(b)
|
}
|
if (b.v.ps != undefined && b.v.ps.value === '设备编码') {
|
b.v.v = ''
|
b.i && this.param[b.i].equipValue.push(b)
|
}
|
if (b.v.ps != undefined && b.v.ps.value === '设备名称') {
|
b.v.v = ''
|
b.i && this.param[b.i].equipName.push(b)
|
}
|
if (b.v.ps != undefined && b.v.ps.value === '最终值') {
|
b.v.v = ''
|
/* if (b.i === undefined) {
|
for (var c in this.param) {
|
this.param[c].resValue = b
|
}
|
} else {
|
this.param[b.i].resValue = b
|
} */
|
if (b.i !== undefined) {
|
this.param[b.i].resValue = b
|
}
|
}
|
if (b.v.ps != undefined && b.v.ps.value === '结论') {
|
if (b.i !== undefined) {
|
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})`
|
}
|
})
|
}
|
}
|
set.add(b.r)
|
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(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 = comValue[i].v
|
}
|
} catch (e) {}
|
try {
|
let insValue = JSON.parse(a.insProductResult.insValue)
|
for (var i = 0; i < insValue.length; i++) {
|
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)
|
for (var i = 0; i < equipValue.length; i++) {
|
this.param[a.id].equipValue[i].v.v = equipValue[i].v
|
}
|
} catch (e) {}
|
try {
|
let equipName = JSON.parse(a.insProductResult.equipName)
|
for (var i = 0; i < equipName.length; i++) {
|
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].insResult.v.v = a.insResult
|
} catch (e) {}
|
})
|
this.handleExcelMethod()
|
},
|
changeInput(m, code) {
|
let str = code.split('-')
|
let r = str[1]
|
let c = str[2]
|
let id = str[0]
|
let pId = str[3]
|
var list = []
|
for (let a in this.tableList) {
|
if (this.tableList[a].templateId == id) {
|
list = this.tableList[a].arr
|
break
|
}
|
}
|
this.excelMethodList.forEach(item => {
|
if (item.valueList.find(m => m.r == r && m.c == c)) {
|
var comValue = {}
|
item.valueList.forEach(a => {
|
list.forEach(b => {
|
if (b[0].r == a.r) {
|
b.forEach(c => {
|
if (c.c == a.c) {
|
if (!isNaN(parseFloat(c.v.v))) {
|
var tableCode = ''
|
for (var d in this.comparisonList) {
|
if (c.c == this.comparisonList[d].value) {
|
tableCode = this.comparisonList[d].label
|
break
|
}
|
}
|
comValue[(tableCode + (c.r + 1))] = parseFloat(c.v.v)
|
}
|
}
|
})
|
}
|
})
|
})
|
if (item.methodName == '自定义方法' && item.v.ps != undefined && item.v.ps.value == '结论') {
|
if (this.currentSample.insProduct.find(m => m.id == item.i)) {
|
let ask = this.currentSample.insProduct.find(m => m.id == item.i).ask.split('&');
|
let res = Object.values(comValue)[0]
|
let comp = ask.map((m, i) => {
|
if (m.includes('=')) {
|
return res == m.split('=')[1]
|
}
|
if (m.includes('≥')) {
|
return res >= m.split('≥')[1]
|
}
|
if (m.includes('≤')) {
|
return res <= m.split('≤')[1]
|
}
|
if (m.includes('<')) {
|
return res < m.split('<')[1]
|
}
|
if (m.includes('>')) {
|
return res > m.split('>')[1]
|
}
|
})
|
if (comp.every(m => m)) {
|
item.v.v = 1
|
} else {
|
item.v.v = 0
|
}
|
this.saveInsContext()
|
}
|
} else {
|
let comResult = 0;
|
switch (item.methodName) {
|
case 'AVERAGE':
|
let num = 0
|
for (var a in comValue) {
|
num += comValue[a]
|
}
|
comResult = num / Object.keys(comValue).length
|
break;
|
case 'SUM':
|
let sum = 0
|
for (var a in comValue) {
|
sum += comValue[a]
|
}
|
comResult = sum
|
break;
|
default:
|
let valueList = [];
|
item.valueList.forEach(a => {
|
valueList.push({
|
name: `${this.comparisonList[a.c].label}${a.r+1}`,
|
value: 0,
|
})
|
})
|
for (var a in comValue) {
|
valueList.forEach(b => {
|
if (b.name == a) {
|
b.value = comValue[a]
|
}
|
})
|
}
|
let str = item.v.f.replace(/=/g, ' ');
|
valueList.forEach(b => {
|
str = str.replace(b.name, b.value)
|
})
|
if (item.v.f.includes('/') > -1) {
|
if (Object.getOwnPropertyNames(comValue).length == valueList.length) {
|
comResult = eval(str)
|
} else {
|
comResult = ''
|
}
|
} else {
|
comResult = eval(str)
|
}
|
break;
|
}
|
list.forEach(a => {
|
if (a[0].r == item.r && comResult != '') {
|
for (var b in a) {
|
if (a[b].c == item.c) {
|
let val = parseFloat(comResult.toFixed(3))
|
a[b].v.v = isNaN(val) ? '' : val
|
break
|
}
|
}
|
}
|
})
|
this.changeInput(comResult, `${id}-${item.r}-${item.c}-${pId}`) //改变最终值
|
}
|
}
|
})
|
this.getCurrentInsProduct(pId)
|
},
|
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);
|
})
|
}
|
this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
|
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);
|
})
|
}
|
this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
|
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);
|
})
|
}
|
this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
|
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);
|
})
|
}
|
this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m])
|
break;
|
case 'resValue':
|
this.tableList[0].lastValue = value.v.v
|
break;
|
case 'insResult':
|
this.tableList[0].insResult = value.v.v
|
break;
|
}
|
}
|
},
|
handleExcelMethod() {
|
if (this.excelMethodList.length > 0) {
|
this.excelMethodList.map(item => {
|
item.methodName = item.v.f.split('=').length > 1 && item.v.f.split('=')[1].split('(') && item.v.f.split(
|
'=')[1].split('(')[0] ? item.v.f.split('=')[1].split('(')[0] : '自定义方法';
|
let valueList = [];
|
if (item.v.f.includes(':')) {
|
valueList = [];
|
let r0 = null;
|
let c0 = null;
|
let r1 = null;
|
let c1 = null;
|
let mode = item.v.f.split('(')[1].split(')')[0];
|
let start = mode.split(':')[0]
|
let end = mode.split(':')[1]
|
c0 = this.comparisonList.find(j => j.label == start.split('')[0]).value
|
r0 = start.replace(/[a-zA-Z]/g, "") - 1
|
c1 = this.comparisonList.find(j => j.label == end.split('')[0]).value
|
r1 = end.replace(/[a-zA-Z]/g, "") - 1
|
for (let i = Number(r0); i <= Number(r1); i++) {
|
for (let u = Number(c0); u <= Number(c1); u++) {
|
valueList.push({
|
r: i,
|
c: u
|
})
|
}
|
}
|
} else {
|
valueList = []
|
let regex = /[=\+\-\*\%\(\)\/\s]/g
|
let mode = item.v.f.replace(regex, ' ').split(' ');
|
mode.filter(m => m && !Number(m)).forEach(m => {
|
let r = m.replace(/[a-zA-Z]/g, "") - 1
|
let c = this.comparisonList.find(j => j.label == m.split('')[0]).value
|
valueList.push({
|
c,
|
r
|
})
|
})
|
}
|
item.valueList = valueList;
|
return item;
|
})
|
}
|
},
|
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
|
},
|
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) {
|
try {
|
if (this.param[n.i].equipValue.v.v == null || this.param[n.i].equipValue.v.v == '') {
|
this.$message.error('请先选择采集的设备')
|
return
|
}
|
} catch (e) {
|
this.$message.error('找不到设备内容')
|
}
|
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
|
})
|
},
|
// 复核
|
upInsReview(e) {
|
if (e == 1) {
|
// 通过
|
this.reviewLoading = true;
|
this.$axios.post(this.$api.insOrderPlan.verifyPlan, {
|
orderId: this.orderId,
|
type: 1,
|
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('未输入不通过原因')
|
}
|
},
|
submit() {
|
if (this.verifyUser === null || this.verifyUser === '') {
|
this.$message.error("请指定复核人员")
|
return
|
}
|
this.addVerifyDia = false
|
this.submitLoading = true;
|
this.$axios.post(this.$api.insOrderPlan.submitPlan, {
|
orderId: this.orderId,
|
laboratory: this.sonLaboratory,
|
verifyUser: this.verifyUser
|
}).then(res => {
|
if (res.code === 200) {
|
this.$message.success("操作成功")
|
this.$emit('goback')
|
}
|
this.submitLoading = false;
|
}).catch(error => {
|
console.error(error)
|
this.submitLoading = false;
|
})
|
},
|
saveInsContext() {
|
this.$axios.post(this.$api.insOrderPlan.saveInsContext, {
|
param: JSON.stringify(this.param)
|
}).then(res => {
|
if (res.code == 201) {
|
this.$message.error('保存失败')
|
return
|
}
|
this.$message.success('已保存')
|
})
|
},
|
changeEquip(val, n) {
|
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.param[n.i].equipName[i1].v.v = this.equipOptions[i].label
|
}
|
}
|
}
|
}
|
this.saveInsContext()
|
},
|
getAuthorizedPerson() {
|
this.$axios.get(this.$api.user.getUserMenu).then(res => {
|
let data = []
|
res.data.forEach(a => {
|
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;
|
});
|
}
|
}
|
}
|
</script>
|