| | |
| | | width: 100px; |
| | | text-align: center; |
| | | font-size: 14px; |
| | | word-wrap: break-word; |
| | | white-space: normal; |
| | | } |
| | | |
| | | .content { |
| | |
| | | |
| | | .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 */ |
| | | } |
| | | </style> |
| | | <style> |
| | |
| | | <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}`)"> |
| | | @change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`)" type="number"> |
| | | <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> |
| | |
| | | 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" |
| | | <!-- <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> |
| | | </el-select> --> |
| | | <template> |
| | | <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> |
| | |
| | | :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;`">{{n.v.v}}</span> |
| | | <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"> |
| | |
| | | v-if="currentFiberOptic" class="el-icon-caret-right table_caret" @click="caretOptic(1)"></i> |
| | | </div> |
| | | </template> |
| | | <span v-else :style="`font-family:${n.v.ff} !important;`">{{n.v.v}}</span> |
| | | <span v-else :style="`font-family:${n.v.ff} !important;`" v-html="getValue(n.v)" ></span> |
| | | </div> |
| | | </td> |
| | | </tr> |
| | |
| | | <script> |
| | | import ValueTable from '../../tool/value-table.vue' |
| | | import file from '../../../util/file' |
| | | import excelFunction from '../../../util/excelFountion' |
| | | export default { |
| | | props: ['sonLaboratory', 'orderId', 'state'], |
| | | components: { |
| | |
| | | this.componentData.entity.sonLaboratory = this.sonLaboratory; |
| | | this.id = this.orderId; |
| | | this.getUserInfo() |
| | | // excelFunction.compute('SUM(MAX(SUM(A1,B1,C1),2,3)*2-MIN(A1:D3),1,2)') |
| | | }, |
| | | mounted() { |
| | | this.getTypeDicts() |
| | |
| | | } else { |
| | | this.param[b.i].resValue = b |
| | | } */ |
| | | if (b.i !== undefined) { |
| | | if (b.i !== undefined&&!this.param[b.i].resValue) { |
| | | this.param[b.i].resValue = b |
| | | } |
| | | } |
| | | if (b.v.ps != undefined && b.v.ps.value === '结论') { |
| | | if (b.i !== undefined) { |
| | | if (b.i !== undefined&&!this.param[b.i].insResult) { |
| | | this.param[b.i].insResult = b |
| | | conclusionList.forEach((n, i) => { |
| | | if (n.r == b.r && n.c == b.c) { |
| | |
| | | } |
| | | }) |
| | | }) |
| | | if (item.methodName == '自定义方法' && item.v.ps != undefined && item.v.ps.value == '结论') { |
| | | if (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?this.currentSample.insProduct.find(m => m.id == item.i).ask.split('&'):null; |
| | | let res = Object.values(comValue)[0] |
| | |
| | | if(ask){ |
| | | comp = ask.map((m, i) => { |
| | | if (m.includes('=')) { |
| | | return res == m.split('=')[1] |
| | | let str = m.split('=')[1] |
| | | if(typeof res == 'string'&&typeof str == 'string'){ |
| | | return res.trim() == str.trim() |
| | | }else{ |
| | | return res == str |
| | | } |
| | | } else if (m.includes('≥')) { |
| | | return res >= m.split('≥')[1] |
| | | }else if (m.includes('≤')) { |
| | |
| | | } |
| | | }) |
| | | } |
| | | if(this.getInspectionValueType(item.i)==1){ |
| | | if (comp.every(m => m)) { |
| | | item.v.v = 1 |
| | | } else { |
| | | item.v.v = 0 |
| | | } |
| | | 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; |
| | | case 'MEDIAN': |
| | | let arr = [] |
| | | for (var a in comValue) { |
| | | arr.push(comValue[a]) |
| | | } |
| | | comResult = this.median(arr) |
| | | break; |
| | | case 'APS': |
| | | let arr0 = [] |
| | | for (var a in comValue) { |
| | | arr0.push(comValue[a]) |
| | | } |
| | | comResult = Math.abs(arr0[0]) |
| | | break; |
| | | // case 'MAX': |
| | | // let arr1 = [] |
| | | // for (var a in comValue) { |
| | | // arr1.push(eval(comValue[a])) |
| | | // } |
| | | // comResult = Math.max(...arr1) |
| | | // break; |
| | | // case 'MIN': |
| | | // let arr2 = [] |
| | | // for (var a in comValue) { |
| | | // arr2.push(eval(comValue[a])) |
| | | // } |
| | | // comResult = Math.median(...arr2) |
| | | // break; |
| | | default: |
| | | let comResult = '' |
| | | try { |
| | | if(this.getInspectionValueType(item.i)==1){ |
| | | comResult = excelFunction.compute(item.v.f.replace(/=/g, ' '),comValue) |
| | | }else{ |
| | | let valueList = []; |
| | | item.valueList.forEach(a => { |
| | | valueList.push({ |
| | |
| | | } |
| | | }) |
| | | } |
| | | let str = item.v.f.replace(/=/g, ' '); |
| | | let str = item.v.f.replace(/=/g, ' ') |
| | | valueList.forEach(b => { |
| | | str = str.replace(b.name, b.value) |
| | | }) |
| | | str = str.replaceAll('MAX', 'Math.max') |
| | | str = str.replaceAll('MIN', 'Math.min') |
| | | str = str.replaceAll(',', ',') |
| | | try { |
| | | if(this.getInspectionValueType(item.i)==1){ |
| | | comResult = eval(str) |
| | | }else{ |
| | | comResult = str |
| | | } |
| | | } catch (error) { |
| | | comResult = str |
| | | } |
| | | } catch (error) { |
| | | |
| | | } |
| | | break; |
| | | } |
| | | // comResult = excelFunction.compute(item.v.f.replace(/=/g, ' '),comValue); |
| | | // 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; |
| | | // case 'MEDIAN': |
| | | // let arr = [] |
| | | // for (var a in comValue) { |
| | | // arr.push(comValue[a]) |
| | | // } |
| | | // comResult = this.median(arr) |
| | | // break; |
| | | // case 'APS': |
| | | // let arr0 = [] |
| | | // for (var a in comValue) { |
| | | // arr0.push(comValue[a]) |
| | | // } |
| | | // comResult = Math.abs(arr0[0]) |
| | | // break; |
| | | // // case 'MAX': |
| | | // // let arr1 = [] |
| | | // // for (var a in comValue) { |
| | | // // arr1.push(eval(comValue[a])) |
| | | // // } |
| | | // // comResult = Math.max(...arr1) |
| | | // // break; |
| | | // // case 'MIN': |
| | | // // let arr2 = [] |
| | | // // for (var a in comValue) { |
| | | // // arr2.push(eval(comValue[a])) |
| | | // // } |
| | | // // comResult = Math.median(...arr2) |
| | | // // break; |
| | | // default: |
| | | // let valueList = []; |
| | | // item.valueList.forEach(a => { |
| | | // valueList.push({ |
| | | // name: `${this.comparisonList.find(e=>e.value==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) |
| | | // }) |
| | | // str = str.replaceAll('MAX', 'Math.max') |
| | | // str = str.replaceAll('MIN', 'Math.min') |
| | | // str = str.replaceAll(',', ',') |
| | | // try { |
| | | // if(this.getInspectionValueType(item.i)==1){ |
| | | // comResult = eval(str) |
| | | // }else{ |
| | | // comResult = str |
| | | // } |
| | | // } catch (error) { |
| | | |
| | | // } |
| | | // break; |
| | | // } |
| | | list.forEach(a => { |
| | | if (a[0].r == item.r && comResult != '') { |
| | | for (var b in a) { |
| | |
| | | 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('MAX') || item.v.f.includes('MIN')){ |
| | | item.methodName = '自定义方法' |
| | | let regex = /[=\+\-\*\%\/\^\s]/g |
| | | let mode = item.v.f.replace(regex, ' ').split(' '); |
| | | let that = this |
| | | if(item.v.f.includes('MAX')){ |
| | | item.v.f = Judgment(item.v.f, 'MAX') |
| | | } |
| | | if(item.v.f.includes('MIN')){ |
| | | item.v.f = Judgment(item.v.f, 'MIN') |
| | | } |
| | | function Judgment(f,type) { |
| | | let newF = f |
| | | let mode4 = mode.filter(m => m&&m.includes(type)) |
| | | mode4.forEach(m => { |
| | | let mode0 = m |
| | | if(mode0.includes(':')){ |
| | | let r0 = null; |
| | | let c0 = null; |
| | | let r1 = null; |
| | | let c1 = null; |
| | | let mode1 = mode0.split('(')[1].split(')')[0]; |
| | | let start = mode1.split(':')[0] |
| | | let end = mode1.split(':')[1] |
| | | c0 = that.comparisonList.find(j => j.label == start.split('')[0]).value |
| | | r0 = start.replace(/[a-zA-Z]/g, "") - 1 |
| | | c1 = that.comparisonList.find(j => j.label == end.split('')[0]).value |
| | | r1 = end.replace(/[a-zA-Z]/g, "") - 1 |
| | | let valueList0 = [] |
| | | for (let i = Number(r0); i <= Number(r1); i++) { |
| | | for (let u = Number(c0); u <= Number(c1); u++) { |
| | | valueList0.push({ |
| | | r: i, |
| | | c: u |
| | | }) |
| | | } |
| | | } |
| | | let valueList1 = [] |
| | | valueList0.forEach(v => { |
| | | let r = ''; |
| | | let c = ''; |
| | | r = v.r +1; |
| | | c = that.comparisonList.find(j => j.value == v.c).label |
| | | valueList1.push(c+r) |
| | | }) |
| | | let mode3 = type+'('+valueList1.join(',')+')' |
| | | newF = newF.replace(mode0, mode3) |
| | | valueList = [...valueList,...valueList0] |
| | | }else{ |
| | | let mode1 = mode0.replace(type, '').replace(/[=\+\-\*\%\(\)\/\^\s]/g, ''); |
| | | let modeList = mode1.split(','); |
| | | modeList.filter(m => m && !Number(m)).forEach(m => { |
| | | let r = m.replace(/[a-zA-Z]/g, "") - 1 |
| | | let c = that.comparisonList.find(j => j.label == m.split('')[0]).value |
| | | valueList.push({ |
| | | c, |
| | | r |
| | | }) |
| | | }) |
| | | } |
| | | }) |
| | | return newF |
| | | } |
| | | }else 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; |
| | | item.valueList = excelFunction.changeParameter(item.v.f); |
| | | return item; |
| | | }) |
| | | } |
| | |
| | | // 偶数位置的平均值 |
| | | return (sortedArr[half - 1] + sortedArr[half]) / 2; |
| | | } |
| | | }, |
| | | getValue(v){ |
| | | let str = v.v?v.v:(v.ct&&v.ct.s?v.ct.s.length>0&&v.ct.s[0].v:'').replaceAll('\n','<br/>') |
| | | return str |
| | | }, |
| | | getInspectionValueType(id) { |
| | | for (var a in this.currentSample.insProduct) { |
| | |
| | | }).catch(error => { |
| | | |
| | | }) |
| | | }, |
| | | /** |
| | | * 将数值v保留ct.fa中'##'后的指定小数位数,并返回格式化后的字符串。 |
| | | * |
| | | * @param v 要格式化的数值 |
| | | * @param ct 包含格式化配置的对象 |
| | | * @param ct.fa 格式化配置字符串,若包含'##'则按照其后的内容确定小数位数 |
| | | * @returns 格式化后的字符串或原始数值(若配置不符合要求) |
| | | */ |
| | | toFixed(v,ct){ |
| | | if(v&&ct&&ct.fa&&ct.fa.includes('##')){ |
| | | if(ct.fa.includes('.')){ |
| | | let num = ct.fa.slice(4).length |
| | | return Number(v).toFixed(num) |
| | | }else{ |
| | | return Number(v).toFixed(0) |
| | | } |
| | | }else{ |
| | | return v |
| | | } |
| | | } |
| | | } |
| | | } |