value
2024-06-23 c470661da7703335991b8f2a2bc40cf00d926eea
src/components/do/b1-inspect-order-plan/Inspection.vue
@@ -155,9 +155,12 @@
  }
  .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 {
@@ -308,10 +311,10 @@
                    <span :style="`font-family:${n.v.ff} !important;`">{{n.v.v}}</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>
@@ -356,9 +359,10 @@
      :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"
@@ -475,6 +479,7 @@
    },
    data() {
      return {
        fileAdd:false,
        sampleVisible: false,
        taskVisible: false,
        submitLoading: false,
@@ -520,6 +525,11 @@
          init:false,
          do: [
          {
                  id: 'handleDown',
                  font: '下载',
                  type: 'text',
                  method: 'handleDown'
               },{
                  id: 'delete',
                  font: '删除',
                  type: 'text',
@@ -527,12 +537,7 @@
            disabFun: (row, index) => {
                        return this.state!=1
                     }
               }, {
                  id: 'handleDown',
                  font: '下载',
                  type: 'text',
                  method: 'handleDown'
               },
               }
          ],
          isPage: false,
          linkEvent: {},
@@ -618,6 +623,7 @@
      this.getComparisonList()
      this.getAuthorizedPerson()
      this.scrollInit()
      this.getPower()
    },
    watch: {
      id(val) {
@@ -634,6 +640,10 @@
              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)
@@ -650,7 +660,6 @@
          })
          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;
@@ -681,6 +690,23 @@
      }
    },
    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)
@@ -1162,9 +1188,11 @@
            })
            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 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]
                  } else if (m.includes('≥')) {
@@ -1186,6 +1214,7 @@
                    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
@@ -1212,11 +1241,39 @@
                  }
                  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[a.c].label}${a.r+1}`,
                      name: `${this.comparisonList.find(e=>e.value==a.c).label}${a.r+1}`,
                      value: 0,
                    })
                  })
@@ -1231,18 +1288,17 @@
                  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 {
                  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;
              }
@@ -1324,10 +1380,10 @@
              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;
          }
        }
@@ -1338,7 +1394,70 @@
            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(':')) {
            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;
@@ -1361,7 +1480,7 @@
              }
            } else {
              valueList = []
              let regex = /[=\+\-\*\%\(\)\/\s]/g
              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
@@ -1376,6 +1495,20 @@
            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;
          }
      },
      getInspectionValueType(id) {
        for (var a in this.currentSample.insProduct) {
@@ -1418,20 +1551,34 @@
        }
      },
      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) {
@@ -1528,7 +1675,6 @@
          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,
@@ -1552,7 +1698,7 @@
                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('提示',{