|
|
@@ -4,8 +4,8 @@
|
|
|
<el-row type="flex">
|
|
|
<el-col style="margin:0 0 5px 0">
|
|
|
<div class="button">
|
|
|
- <el-button v-if="!disabled" type="primary" size="mini" icon="ibps-icon-close" @click="computedResult">计算结果</el-button>
|
|
|
- <el-button v-else type="primary" size="mini" icon="ibps-icon-close" @click="disabled=false">编辑</el-button>
|
|
|
+ <el-button v-if="!disabled" type="primary" size="mini" icon="ibps-icon-calculator" @click="computedResult">计算结果</el-button>
|
|
|
+ <el-button v-else type="primary" size="mini" icon="ibps-icon-edit" @click="disabled=false">编辑</el-button>
|
|
|
<el-button type="success" size="mini" icon="ibps-icon-plus" @click="generateData">生成数据</el-button>
|
|
|
<el-button type="danger" size="mini" icon="ibps-icon-edit" @click="openDialog">配置样品</el-button>
|
|
|
</div>
|
|
|
@@ -21,19 +21,28 @@
|
|
|
<el-table-column label="样品编号" prop="ypbh" />
|
|
|
<el-table-column label="旧试剂测得结果" prop="jsjcdjg">
|
|
|
<template slot-scope="{row}">
|
|
|
- <el-input v-if="!disabled" v-model="row.jsjcdjg" :min="0" size="mini" placeholder="请输入" type="number" oninput="value=value.replace(/^0|[^0-9]/g,'')" />
|
|
|
+ <el-input v-if="!disabled" v-model="row.jsjcdjg" :min="0" size="mini" placeholder="请输入" type="number" />
|
|
|
<span v-else>{{ row.jsjcdjg|| '/' }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="新试剂测得结果" prop="xsjcdjg">
|
|
|
<template slot-scope="{row}">
|
|
|
- <el-input v-if="!disabled" v-model="row.xsjcdjg" :min="0" size="mini" placeholder="请输入" type="number" oninput="value=value.replace(/^0|[^0-9]/g,'')" />
|
|
|
+ <el-input v-if="!disabled" v-model="row.xsjcdjg" :min="0" size="mini" placeholder="请输入" type="number" />
|
|
|
<span v-else>{{ row.xsjcdjg|| '/' }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="偏倚" prop="pq" />
|
|
|
<el-table-column label="限定范围" prop="xdfw" />
|
|
|
- <el-table-column label="是否相符" prop="sfxf" />
|
|
|
+ <el-table-column label="是否相符" prop="sfxf">
|
|
|
+ <template slot-scope="{row}">
|
|
|
+ <el-radio-group v-model="row.sfxf" disabled>
|
|
|
+ <el-radio label="是">是</el-radio>
|
|
|
+ <el-radio label="否">否</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ <!-- <el-checkbox v-model="row.sfxf === '是'" disabled>是</el-checkbox>
|
|
|
+ <el-checkbox v-model="row.sfxf === '否'" disabled>否</el-checkbox> -->
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column label="符合率" prop="fhl" />
|
|
|
<el-table-column label="结论" prop="jl" />
|
|
|
</el-table>
|
|
|
@@ -50,7 +59,7 @@
|
|
|
>
|
|
|
<div v-for="(item, index) in dialogData" :key="index" class="ragent-dialog-content">
|
|
|
<span>样品编号{{ index+1 }}</span>
|
|
|
- <el-input v-model="item.number" oninput="value=value.replace(/^0|[^0-9]/g,'')" type="number" style="width: 30%;" />
|
|
|
+ <el-input v-model="item.number" :min="0" type="number" style="width: 30%;" />
|
|
|
<div>
|
|
|
<el-button type="text" @click="addRow">添加</el-button>
|
|
|
<el-button type="text" style="color:red;" @click="deleteRow(index)">删除</el-button>
|
|
|
@@ -73,10 +82,6 @@ export default {
|
|
|
readonly: {
|
|
|
type: Boolean,
|
|
|
default: false
|
|
|
- },
|
|
|
- isCul: {
|
|
|
- type: Boolean,
|
|
|
- default: true
|
|
|
}
|
|
|
},
|
|
|
data () {
|
|
|
@@ -94,34 +99,36 @@ export default {
|
|
|
validateFlag: false,
|
|
|
disabled: false,
|
|
|
ypData: [
|
|
|
- { pjName: 'A', range: '50%' },
|
|
|
- { pjName: 'B', range: '40%' },
|
|
|
- { pjName: 'C', range: '30%' }
|
|
|
+ // { jianCeXiangMu: 'A', xianDingFanWei: '50%', fhl: '80%' },
|
|
|
+ // { jianCeXiangMu: 'B', xianDingFanWei: '40%', fhl: '80%' },
|
|
|
+ // { jianCeXiangMu: 'C', xianDingFanWei: '30%', fhl: '80%' }
|
|
|
]
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
|
},
|
|
|
watch: {
|
|
|
- formData: {
|
|
|
+ 'formData.sjghyzjlbxmcszb': {
|
|
|
handler (val) {
|
|
|
-
|
|
|
+ this.ypData = []
|
|
|
+ val.forEach(item => {
|
|
|
+ this.ypData.push({ ...item, fhl: '80%' })
|
|
|
+ })
|
|
|
+ console.log(val, 'watch')
|
|
|
},
|
|
|
deep: true,
|
|
|
immediate: true
|
|
|
- },
|
|
|
- forms: {
|
|
|
- handler (val) {
|
|
|
- },
|
|
|
- deep: true
|
|
|
}
|
|
|
},
|
|
|
mounted () {
|
|
|
-
|
|
|
+ // console.log('mounted', this.formData)
|
|
|
},
|
|
|
methods: {
|
|
|
// 配置样品
|
|
|
openDialog () {
|
|
|
+ if (this.ypData.length <= 0) {
|
|
|
+ return this.$message.error('请先配置留样再测')
|
|
|
+ }
|
|
|
this.centerDialogVisible = true
|
|
|
if (this.copyDialogData.length > 0) {
|
|
|
this.dialogData = JSON.parse(JSON.stringify(this.copyDialogData))
|
|
|
@@ -155,6 +162,7 @@ export default {
|
|
|
this.$message.error('请先配置样品数据')
|
|
|
}
|
|
|
},
|
|
|
+ // 计算结果
|
|
|
computedResult () {
|
|
|
// computedFlag:true表示里面有空数据或填写不规范数据
|
|
|
let computedFlag = false
|
|
|
@@ -163,25 +171,35 @@ export default {
|
|
|
computedFlag = true
|
|
|
}
|
|
|
})
|
|
|
- if (!computedFlag) {
|
|
|
+ if (!computedFlag && this.reagentData.length > 0) {
|
|
|
this.reagentData.forEach(item => {
|
|
|
- item.pq = ((item.xsjcdjg - item.jsjcdjg) / item.jsjcdjg).toFixed(3) * 100 + '%'
|
|
|
- item.sfxf = Number(item.pq.replace('%', '')) < (item.xdfw.replace('%', '')) ? '是' : '否'
|
|
|
+ item.pq = this.deleteAccuracy((item.xsjcdjg - item.jsjcdjg) / item.jsjcdjg)
|
|
|
+ item.sfxf = Number(item.pq.replace('%', '')) < Number(item.xdfw.replace('%', '')) ? '是' : '否'
|
|
|
+ })
|
|
|
+ this.ypData.forEach(c => {
|
|
|
+ const count = this.reagentData.filter(item => item.jyxm === c.jianCeXiangMu && item.sfxf === '是').length
|
|
|
+ this.reagentData.forEach(item => {
|
|
|
+ if (item.jyxm === c.jianCeXiangMu) {
|
|
|
+ item.fhl = this.deleteAccuracy(count / this.copyDialogData.length)
|
|
|
+ item.jl = Number(item.fhl.replace('%', '')) > Number(c.fhl.replace('%', '')) ? '合格' : '不合格'
|
|
|
+ }
|
|
|
+ })
|
|
|
})
|
|
|
this.disabled = true
|
|
|
+ console.log(this.reagentData)
|
|
|
} else {
|
|
|
this.$message.error('试剂测得结果必须大于0且不能为空!')
|
|
|
}
|
|
|
},
|
|
|
initData () {
|
|
|
+ this.disabled = false
|
|
|
this.reagentData = []
|
|
|
this.ypData.forEach(item => {
|
|
|
this.copyDialogData.forEach(el => {
|
|
|
- this.reagentData.push({ jyxm: item.pjName, ypbh: el.number, jsjcdjg: '', xsjcdjg: '', pq: '', xdfw: item.range, sfxf: '', fhl: '', jl: '' })
|
|
|
+ this.reagentData.push({ jyxm: item.jianCeXiangMu, ypbh: el.number, jsjcdjg: '', xsjcdjg: '', pq: '', xdfw: item.xianDingFanWei, sfxf: '', fhl: '', jl: '' })
|
|
|
})
|
|
|
})
|
|
|
this.$refs.reagent.doLayout()
|
|
|
- console.log(this.reagentData)
|
|
|
},
|
|
|
spanMethod ({ row, column, rowIndex, columnIndex }) {
|
|
|
const rowspan = this.copyDialogData.length
|
|
|
@@ -218,12 +236,37 @@ export default {
|
|
|
}
|
|
|
})
|
|
|
if (this.validateFlag) {
|
|
|
- console.log(this.dialogData)
|
|
|
this.$message.warning('样品编号未填写完!')
|
|
|
} else {
|
|
|
this.centerDialogVisible = false
|
|
|
this.copyDialogData = JSON.parse(JSON.stringify(this.dialogData))
|
|
|
}
|
|
|
+ },
|
|
|
+ // 去除小数*100精度方法
|
|
|
+ deleteAccuracy (num) {
|
|
|
+ // 是否带小数点
|
|
|
+ if ((num.toString()).includes('.')) {
|
|
|
+ // 保留小数点后面3位
|
|
|
+ const numArry = num.toFixed(3).toString().split('.')
|
|
|
+ // 整数位是否大于0
|
|
|
+ if (numArry[0] > 0) {
|
|
|
+ return Number(numArry[0] + numArry[1].substring(0, 2) + '.' + numArry[1].substring(2, 3)) + '%'
|
|
|
+ } else {
|
|
|
+ // 小数位第一位是否大于0
|
|
|
+ if (numArry[1][0] > 0) {
|
|
|
+ return Number(numArry[1].substring(0, 2) + '.' + numArry[1].substring(2, 3)) + '%'
|
|
|
+ } else {
|
|
|
+ // 小数位第二位是否大于0
|
|
|
+ if (numArry[1][1] > 0) {
|
|
|
+ return Number(numArry[1].substring(1, 2) + '.' + numArry[1].substring(2, 3)) + '%'
|
|
|
+ } else {
|
|
|
+ return Number(0 + '.' + numArry[1].substring(2, 3)) + '%'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return num * 100 + '%'
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|