| | |
| | | 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> |
| | | .inspection .el-form-item__label { |
| | |
| | | } |
| | | |
| | | .inspection .el-input-group__append { |
| | | padding: 0 10px; |
| | | padding: 0 14px; |
| | | color: #3A7BFA; |
| | | background-color: #fff; |
| | | height: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .inspection .center-box .el-input__inner { |
| | |
| | | <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;"> |
| | | <i class="el-icon-caret-left table_caret" @click="caretSample(-1)" v-if="!currentFiberOpticTape&&!currentFiberOptic"></i> |
| | | <div :style="`font-family:${n.v.ff} !important;`">{{currentSample.sampleCode}}</div> |
| | | <i class="el-icon-caret-right table_caret" |
| | | <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> |
| | |
| | | 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> |
| | |
| | | :data="{ |
| | | orderId:id |
| | | }" |
| | | v-show="state==1" |
| | | v-show="state==1&&fileAdd" |
| | | :on-success="handleSuccessUp" :show-file-list="false" |
| | | accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' :headers="headers" :on-change="beforeUpload" |
| | | style="width: 80px !important;" |
| | | :on-error="onError" ref='upload'> |
| | | <el-button size="small" type="primary">附件上传</el-button></el-upload> |
| | | <ValueTable class="value-table" ref="fileList" :url="$api.insOrderPlan.getFileList" |
| | |
| | | <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: { |
| | |
| | | }, |
| | | data() { |
| | | return { |
| | | fileAdd:false, |
| | | sampleVisible: false, |
| | | taskVisible: false, |
| | | submitLoading: false, |
| | |
| | | init:false, |
| | | do: [ |
| | | { |
| | | id: 'handleDown', |
| | | font: '下载', |
| | | type: 'text', |
| | | method: 'handleDown' |
| | | },{ |
| | | id: 'delete', |
| | | font: '删除', |
| | | type: 'text', |
| | |
| | | disabFun: (row, index) => { |
| | | return this.state!=1 |
| | | } |
| | | }, { |
| | | id: 'handleDown', |
| | | font: '下载', |
| | | type: 'text', |
| | | method: 'handleDown' |
| | | }, |
| | | } |
| | | ], |
| | | isPage: false, |
| | | linkEvent: {}, |
| | |
| | | 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() |
| | |
| | | this.getComparisonList() |
| | | this.getAuthorizedPerson() |
| | | this.scrollInit() |
| | | this.getPower() |
| | | }, |
| | | watch: { |
| | | id(val) { |
| | |
| | | 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 list = await this.getCurrentProduct(this.currentSample.id,0) |
| | |
| | | }) |
| | | if (this.currentSample.index == undefined) this.currentSample['index'] = 1 |
| | | let bushing = this.currentSample.bushing |
| | | this.loading = false |
| | | // this.handleTableData() |
| | | this.getTableLists(); |
| | | this.componentData.currentId = val; |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | getPower(){ |
| | | let power = JSON.parse(sessionStorage.getItem('power')) |
| | | let fileDel = false |
| | | let fileAdd = false |
| | | for (var i = 0; i < power.length; i++) { |
| | | if (power[i].menuMethod == 'uploadFile') { |
| | | fileAdd = true |
| | | } |
| | | if (power[i].menuMethod == 'delfile') { |
| | | fileDel = true |
| | | } |
| | | } |
| | | if (!fileDel) { |
| | | this.componentData0.do.splice(1, 1) |
| | | } |
| | | this.fileAdd = fileAdd |
| | | }, |
| | | async getCurrentProduct(id,type){ |
| | | this.tableLoading = true; |
| | | let res = await this.$axios.post(this.$api.insOrderPlan.getInsProduct+'?id='+id+'&type='+type+'&laboratory='+this.sonLaboratory) |
| | |
| | | } 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.split('&'); |
| | | 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] |
| | | let comp = ask.map((m, i) => { |
| | | let comp = [] |
| | | 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('≤')) { |
| | |
| | | return res >= (k[0] - k[1]) && res <= (k[0] + k[1]) |
| | | } |
| | | }) |
| | | 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; |
| | | 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({ |
| | | name: `${this.comparisonList[a.c].label}${a.r+1}`, |
| | | name: `${this.comparisonList.find(e=>e.value==a.c).label}${a.r+1}`, |
| | | value: 0, |
| | | }) |
| | | }) |
| | |
| | | } |
| | | }) |
| | | } |
| | | let str = item.v.f.replace(/=/g, ' '); |
| | | let str = item.v.f.replace(/=/g, ' ') |
| | | valueList.forEach(b => { |
| | | str = str.replace(b.name, b.value) |
| | | }) |
| | | if (item.v.f.includes('/')) { |
| | | if (Object.getOwnPropertyNames(comValue).length == valueList.length) { |
| | | comResult = eval(str) |
| | | } else { |
| | | comResult = '' |
| | | } |
| | | } else { |
| | | if(this.getInspectionValueType(item.i)==1){ |
| | | comResult = eval(str) |
| | | }else{ |
| | | comResult = str |
| | | } |
| | | } |
| | | break; |
| | | comResult = str |
| | | } |
| | | } catch (error) { |
| | | |
| | | } |
| | | // 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) { |
| | |
| | | this.tableList[0].insProductResult[m] = JSON.stringify(this.tableList[0].insProductResult[m]) |
| | | break; |
| | | case 'resValue': |
| | | this.tableList[0].lastValue = value.v.v |
| | | this.tableList[0].lastValue = value?value.v.v:'' |
| | | break; |
| | | case 'insResult': |
| | | this.tableList[0].insResult = value.v.v |
| | | this.tableList[0].insResult = value?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; |
| | | item.valueList = excelFunction.changeParameter(item.v.f); |
| | | return item; |
| | | }) |
| | | } |
| | | }, |
| | | median(arr) { |
| | | // 对数组进行排序 |
| | | const sortedArr = arr.sort((a, b) => a - b); |
| | | // 计算数组长度的一半 |
| | | const half = Math.floor(sortedArr.length / 2); |
| | | // 如果数组长度为奇数,返回中间的元素;如果为偶数,返回中间两个元素的平均值 |
| | | if (sortedArr.length % 2) { |
| | | // 奇数位置的元素 |
| | | return sortedArr[half]; |
| | | } else { |
| | | // 偶数位置的平均值 |
| | | 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) { |
| | |
| | | } |
| | | }, |
| | | getSystemValue(n) { |
| | | let code = null |
| | | try { |
| | | if (this.param[n.i].equipValue.v.v == null || this.param[n.i].equipValue.v.v == '') { |
| | | this.$message.error('请先选择采集的设备') |
| | | return |
| | | } |
| | | 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('找不到设备内容') |
| | | } |
| | | 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) { |
| | |
| | | laboratory: this.sonLaboratory, |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | console.log(res.data) |
| | | if(!res.data||res.data.length==0){ |
| | | this.$axios.post(this.$api.insOrderPlan.submitPlan, { |
| | | orderId: this.orderId, |
| | |
| | | if(lastChar=='-'){ |
| | | res.data[i] = res.data[i].slice(0, -1); |
| | | } |
| | | newData.push(h('p', {style: 'font-size: 12px;'}, (Number(i)+1)+'、'+res.data[i])) |
| | | 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' },'以上项目不合格,确定提交?')) |
| | | this.$confirm('提示',{ |
| | |
| | | }).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 |
| | | } |
| | | } |
| | | } |
| | | } |